版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于Flex三种通讯方式的Java配置与整合2013年8月13日目录一、前言3二、基础信息准备61.spring-flex 1.0.3(AMF)72.blazeds(AMF)83.backport-util-concurrent 3.1(AMF)84.struts-(httpservice)95.cxf 2.7.6(webservice)10三、具体配置方案与测试101.第一步我们先来配置SH(spring + hibernate)102.增flex-spring服务支持,是项目支持AMF通讯协议(FSH)273.增struts服务支持,是项目支持http通讯协议(httpse
2、rvice)304.增cxf服务支持,是项目支持sopa通讯协议(webservice)35四、总结38一、 前言在项目开发过程中,很多时候需要给第三方提供一些接口来处理项目中的一下数据,然而在使用flex的AMF通信方式来配置我们的java web project的时候,我们就无法来处理这样的需求,所以这个时候我们可以合理的引入httpservice通讯方式和webservice通讯方式来弥补java服务端这一缺陷。下面我们提一下flex三种通讯方式:通讯方式通信协议数据交互格式优点缺点HttpService常用的http协议XML数据格式通用,便于不同应用系统间交换数据1数据在发送前需要转
3、换成XML格式,接收后要解析XML数据。哪怕是只发送一个简单的的数字也要如此2在处理复杂数据类型如图片,对象的时候,非常不方便WebServiceSOAP协议XML同上同上RemoteObjectFlex自定义的高效二进制数据通讯协议:AMF任意(可以是数字,字符串,对象,图片等等)能够处理各种类型的数据类型,速度快需要专门的服务器端软件LCDS(FDS)或AmfPHP。LCDS(FDS)是收费的,价格不菲。其中也可使用免费版本(blazeds),但是有限制。(#)这里简单说明一下LCDS与blanzeds的区别。BlazeDS可以看成是LCDS的一个子集,而且是一个开源产品,在一般的项目中完
4、全可以替代LCDS。(抱歉,adobe官方的图片找不到了,所以找了张有水印的) 代表此功能可用FeaturesBlazeDSLCDSData management ServicesClient-Server synchronizationConflict resolutionData pagingSQL adapterHibernate adapterDocument ServicesLiveCycle remotingRIA-to-PDF conversionEnterprise-Class Flex application servicesData access/remotingProxy
5、 serviceAutomated testing supportSoftware clusteringWeb tier compilerEnterprise IntegrationWSRP generationAjax data servicesFlex-Ajax bridgeRuntime configurationOpen adapter architectureJMS adapterServer-side component framework integrationColdFusion integrationOffline Application SupportOffline dat
6、a cacheLocal message queuingReal - Time DataPublish and Subscribe messagingReal -time data quality of serviceRTMP tunnelingFeaturesBlazeDSLiveCycle Data Services ES2RPC servicesJava remoting/Action Message Format (AMF)YesYesAjax client libraries to Java remotingYesYesWS/JSON proxy serviceYesYesMessa
7、gingServlet-based messaging services (hundreds of clients per CPU)YesYesJava NIO high-performance messaging (thousands of clients per CPU)NoYesReal Time Messaging Protocol (RTMP)NoYesData throttlingNoYesReliable communicationsNoYesData managementTransaction (batch processing)NoYesData pagingNoYesLaz
8、y loading (on demand)NoYesConflict resolution and synchronizationNoYesSQL adapterNoYesHibernate adapterNoYes"Fiber-aware" assemblerNoYesOffline web applicationsNoYesDevelopment and deploymentSpring integration supportYesYesAdobe Flash® Builder modeling plug-inNoYesEnterprise supportNo
9、YesRIA PDF generationNoYesWSRP portal integrationNoYesLoad/stress testing toolNoYesEdge serverNoYesEnterprise support plansNoYes这份是adobe公司给的对比二、 基础信息准备基础准备,在这里我们使用的IDE是myeclipse10.7.1(因为在使用jar包的时候使用的是myeclipse自带包)。JDK使用的是5基本配置与框架使用web层:1) spring-flex 1.0.3(AMF)2) struts (httpservice)3
10、) cxf 2.7.6(webservice)service层: 1) spring 3.1 使用myeclipse自带DAO层:1) hibernate 3.3 使用myeclipse自带下载jar包1. spring-flex 1.0.3(AMF)/download/community这里我们使用的是1.0.3这个版本。2. blazeds(AMF)adobe blazeds-bin-4931.zip登录,下载blazeds,最新版本为4931。3. backport-util-concurrent 3.1(A
11、MF)这个在下载时请注意版本,这里下载backport-util-concurrent-Java60-3.1.zip,这个为jdk1.6下的jar文件。4. struts-(httpservice)/download.cgi#struts2315配置过SSH的程序员都知道,在eclipse中使用软件自带的struts时,在项目中展现的形式是这样的形式,而不能直接加入到WEB-INF/lib文件夹下面。5. cxf 2.7.6(webservice)/download.html这里使用cxf框架
12、来对webservice中spring的整合。三、 具体配置方案与测试1. 第一步我们先来配置SH(spring + hibernate)1) 创建java web project2) 增加spring支持点击Next > 按钮下一步Finish3) 增加hibernate支持点击Next > 按钮 下一步点击Next > 按钮下一步点击Next > 按钮下一步这里配置数据库连接信息,点击Next > 按钮进入下一个步骤Finish 完成hibernate的配置4) 配置项目中的web.xml文件,使其支持spring、hibernate服务。<!- spr
13、ing configuration -><listener><display-name>spring</display-name><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>c
14、lasspath:applicationContext.xml</param-value></context-param><!- hibernate configuration -><filter><filter-name>hibernateFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class><init-param&g
15、t;<param-name>singleSession</param-name><param-value>true</param-value></init-param><init-param><param-name>flushMode</param-name><param-value>AUTO </param-value></init-param></filter><filter-mapping><filter-name>hib
16、ernateFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>5) 配置applicationContext.xml文件,增加spring事务管理功能<bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="com.microsoft.sqlser
17、ver.jdbc.SQLServerDriver"></property><property name="url"value="jdbc:sqlserver:/ip:port;databaseName=dbname"></property><property name="username" value="user"></property><property name="password" value="p
18、assword"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernate
19、Properties"><props><prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop></props></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
20、<property name="sessionFactory" ref="sessionFactory" /></bean><bean id="transactionInterceptor"class="erceptor.TransactionInterceptor"><property name="transactionManager" ref="transactionMa
21、nager" /><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop><prop key="qry*">PROPAGATION_REQUIRED,readOnly</prop><prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
22、<prop key="search*">PROPAGATION_REQUIRED,readOnly</prop><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="delete*">PROPAGATION_REQUIRED</prop></props><
23、;/property></bean><bean id="beanNameAutoProxyCreator"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>*Service</value></list></property><property na
24、me="interceptorNames"><list><idref local="transactionInterceptor" /></list></property></bean>配置spring通过service层来管理数据库事务。其中,dataSource和sessionFactory由eclipse自动产生。6) 测试spring、hibernate配置是否成功a) 在数据库中新建表Person,包含id(int自增)、name(varchar(16)和age(int)三字段。
25、b) 增加hibernate annotation配置方式类Person.javapackage com.bean;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;EntityTable(name = "person",
26、schema = "dbo", catalog = "report")public class Person implements java.io.Serializable private static final long serialVersionUID = 1L;/ Fieldsprivate Integer id;private String name;private Integer age;/ Constructors/* default constructor */public Person() /* full constructor */p
27、ublic Person(Integer id, String name, Integer age) this.id = id; = name;this.age = age;/ Property accessorsIdGeneratedValue(strategy = GenerationType.AUTO)Column(name = "id", unique = true, nullable = false)public Integer getId() return this.id;public void setId(Integer id) this.i
28、d = id;Column(name = "name", nullable = false, length = 16)public String getName() return ;public void setName(String name) = name;Column(name = "age", nullable = false)public Integer getAge() return this.age;public void setAge(Integer age) this.age = age;注意:这里
29、由于ID是自增类型所以需要增加GeneratedValue(strategy = GenerationType.AUTO)的注解c) 建立DAO层java类PersonDAO.javapackage com.dao;import java.util.List;import org.hibernate.Query;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.bean.Person;SuppressWarnings("unchecked")public clas
30、s PersonDAO extends HibernateDaoSupport public void saveOrUpdate(Person ps) try getHibernateTemplate().saveOrUpdate(ps); catch (RuntimeException e) throw e;public List<Person> query() try Query query = getSession().createQuery("from Person");return query.list(); catch (RuntimeExcepti
31、on e) throw e;d) 建立service层java类Person.javapackage com.service;import java.util.List;import com.bean.Person;import com.dao.PersonDAO;public class PersonService private PersonDAO personDAO;public void save(Person ps) try personDAO.saveOrUpdate(ps); catch (RuntimeException e) throw e;public List<Pe
32、rson> query() try return personDAO.query(); catch (RuntimeException e) throw e;public PersonDAO getPersonDAO() return personDAO;public void setPersonDAO(PersonDAO personDAO) this.personDAO = personDAO;e) 配置spring,增加上面几个类的服务支持<bean id="PersonService" class="com.service.PersonServ
33、ice"><property name="personDAO" ref="PersonDAO"></property></bean><bean id="PersonDAO" class="com.dao.PersonDAO"><property name="sessionFactory" ref="sessionFactory"></property></bean>f) 编写测
34、试类public static void main(String args) ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");PersonService service = (PersonService) ac.getBean("PersonService");Person ps = new Person();ps.setName("name");ps.setAge(10);service.save(ps);Lis
35、t<Person> list = service.query();for (Person vo : list) System.out.println(vo.getId() + "," + vo.getName() + "," + vo.getAge();报错误信息java.lang.NoClassDefFoundError: org/objectweb/asm/Type原因是缺少asm-3.3.jar包,可以从前面准备的struts-中获取,并服务在项目的WEB-INF/lib文件夹下。运行成功,控制台输出:1,name,10
36、测试成功,spring、hibernate整合(包含数据)没有问题。接下去,我增加flex与spring直接的通讯整合。2. 增flex-spring服务支持,是项目支持AMF通讯协议(FSH)1) 解压blazeds-bin-4931.zip中blazeds.war文件2) 复制./blazeds/WEB-INF/lib下的jar包到项目的WEB-INF/lib文件夹下3) 复制./blazeds/WEB-INF/flex下的jar包到项目的WEB-INF文件夹下4) 删除messaging-config.xml、proxy-config.xml、remoting-config
37、.xml和perties文件5) 修改services-config.xml文件删除<service />和< security />部分增加<services><default-channels><channel ref="my-amf" /></default-channels></services>6) 增加flex-spring jar包将backport-util-concurrent.jar和org.springframework.flex-1.0.3.RE
38、LEASE.jar复制到项目的WEN-INF/lib文件夹下。7) 配置web.xml使项目支持flex-spring<!- flex spring -><servlet><servlet-name>flex</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</par
39、am-name><!- 默认读取WEN-INF/flex/services-config.xml文件 -><param-value></param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>flex</servlet-name><url-pattern>/messagebroker/*</url-patt
40、ern></servlet-mapping>8) 配置spring文件使其支持flex remote修改beans头文件为<beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p"xmlns:flex="http:/www.springframew
41、/schema/flex"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/flex/schema/flex/spring-flex-1.0.xsd">增加flex支持<!- flex -><flex
42、:message-broker></flex:message-broker>7) 测试AMF通讯配置方式是否正确a) java web项目中增加dest类。PersonDest.javapackage com.dest;import java.util.List;import com.bean.Person;import com.service.PersonService;public class PersonDest private PersonService personService;public List<Person> query() return pe
43、rsonService.query();public String save(Person ps) personService.save(ps);return "success"public PersonService getPersonService() return personService;public void setPersonService(PersonService personService) this.personService = personService;b) 在spring中配置PersonDest为flex RemoteObject对接类<
44、;bean id="PersonDest" class="com.dest.PersonDest"><!- 标识为flex与服务对接的destination -><flex:remoting-destination></flex:remoting-destination><property name="personService" ref="PersonService"></property></bean>c) 建立flex测试appli
45、cationPerson.aspackage com.bean RemoteClass(alias="com.bean.Person") public class Person / public var id:int;public var name:String;public var age:int;public function Person() fsh_fb.mxml<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx=" xmlns
46、:s="library:/ xmlns:mx="library:/ width="100%" height="100%"><fx:Script><!CDATAimport com.bean.Person;import mx.controls.Alert;import mx.rpc.Responder;import mx.rpc.events.FaultEvent;import mx.rpc.events.ResultEvent;import mx.rpc.http.mxml.HTTPService;import
47、 mx.rpc.remoting.mxml.RemoteObject;private function send():void var remote:RemoteObject = new RemoteObject();remote.destination = "PersonDest"remote.endpoint = "/fsh/messagebroker/amf"remote.showBusyCursor = true;remote.addEventListener(ResultEvent.RESULT, function(rstEvt:ResultE
48、vent):void testId.text = String(rstEvt.result););remote.addEventListener(FaultEvent.FAULT, function(fltEvt:FaultEvent):void Alert.show("Error: " + fltEvt.message.toString(););var ps:Person = new Person(); = "AAA"ps.age = 12;remote.save(user);></fx:Script><s:VGr
49、oup width="100%"><s:Button id="testBtn" label="发送" click="send()"/><mx:FormItem label="返回结果:"><s:Label id="testId" text="aaa"/></mx:FormItem></s:VGroup></s:Application>d) 测试结果运行结果界面数据库3. 增str
50、uts服务支持,是项目支持http通讯协议(httpservice)1) 解压下载的struts--all.zip文件。2) 解压struts-/apps/ struts2-blank.war文件。struts2-blank项目是struts2的一个基础配置项目,接下来我们可以使用这个项目来参考配置我们的struts框架。3) 复制struts2-blank/WEB-INF/lib中的jar文件到我们项目的WEB-INF/lib文件夹中。4) 复制struts2-blank/WEB-INF/classes中的struts.xml文件到我们的src文件目录下。5)
51、 配置web.xml使其支持struts服务<!- struts -><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><ur
52、l-pattern>*.do</url-pattern></filter-mapping>6) 建立action类PersonAction.javapackage com.dest;import java.io.PrintWriter;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import
53、com.bean.Person;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.service.PersonService;public class PersonAction extends ActionSupport private static final long serialVersionUID = 1L;private PersonService personService;private HttpServletRequest re
54、quest;private HttpServletResponse response;public String save() System.out.println("action save");try setServlet();String name = request.getParameter("name");int age = Integer.parseInt(request.getParameter("age");Person person = new Person();person.setName(name);person.
55、setAge(age);personService.save(person);PrintWriter out = response.getWriter();out.print("<rtn>success</rtn>"); catch (Exception e) e.printStackTrace();return "success"public List<Person> query() throws Exception System.out.println("action query");List&
56、lt;Person> list = null;try setServlet();list = personService.query();PrintWriter out = response.getWriter();out.print("<rtn>" + list.size() + "</rtn>"); catch (Exception e) e.printStackTrace();return list;private void setServlet() ActionContext ctx = ActionContext.
57、getContext();request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);response = ServletActionContext.getResponse();response.setContentType("text/xml");public PersonService getPersonService() return personService;public void setPersonService(PersonService personService) th
58、is.personService = personService;7) 配置对应的spring和struts文件spring<bean id="PersonAction" class="com.dest.PersonAction"><property name="personService" ref="PersonService"></property></bean>struts<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-/Apache Software Foundation/DTD Struts Configuration 2.3/EN""/dtds/struts-2.3.dtd"><struts><constant name=&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/SDSF 070-2024黄河三角洲盐碱地低效防护林改造技术规程
- 金融分析师市场趋势研判与风险预警能力考评表
- 商品学基础知识及市场分析手册
- 网络平台产品经理KPI考核表
- 第26课 《我的“长生果”》教学设计 试讲稿 说课稿(统编版语文五年级上册新教材)
- 2026届腾冲县中考考前最后一卷数学试卷含解析
- 企业资源整合与信息共享活动方案
- 网络工程师性能调优与故障处理绩效评估表
- 零售行业店长店面经营与管理能力绩效衡量表
- 道路危险货物运输员岗前安全行为考核试卷含答案
- 2026年国能源招聘笔试真题及答案
- 河北省石家庄市第四十三中学2025-2026学年上学期期中考试九年级数学试题(含答案)
- 2026年新疆中考语文真题及答案解析
- 简析量子定位技术及应用前景
- 2026年中医内科医师高频面试题包含详细解答
- AQ3026-2026《化工企业设备检修作业安全规范》解读
- 2026年全国两会解读:基层治理能力提升
- 装配错装漏装考核制度
- 感染性心内膜炎课件
- 2025年绿色农业农业资源保护与利用研究报告
- 安全风险管控“六项机制”监理实施细则(水利工程)
评论
0/150
提交评论