基于Flex三种通讯方式的Java配置与整合_第1页
基于Flex三种通讯方式的Java配置与整合_第2页
基于Flex三种通讯方式的Java配置与整合_第3页
基于Flex三种通讯方式的Java配置与整合_第4页
基于Flex三种通讯方式的Java配置与整合_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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-( service)95.cxf 2.7.6(webservice)10三、具体配置方案与测试101.第一步我们先来配置SH(spring + hibernate)102.增flex-spring服务支持,是项目支持AMF通讯协议(FSH)273.增struts服务支持,是项目支持 通讯协议( service)304

2、.增cxf服务支持,是项目支持sopa通讯协议(webservice)35四、总结38一、 前言在项目开发过程中,很多时候需要给第三方提供一些接口来处理项目中的一下数据,然而在使用flex的AMF通信方式来配置我们的java web project的时候,我们就无法来处理这样的需求,所以这个时候我们可以合理的引入 service通讯方式和webservice通讯方式来弥补java服务端这一缺陷。下面我们提一下flex三种通讯方式:通讯方式通信协议数据交互格式优点缺点 Service常用的 协议XML数据格式通用,便于不同应用系统间交换数据1数据在发送前需要转换成XML格式,接收后要解析XML数

3、据。哪怕是只发送一个简单的的数字也要如此2在处理复杂数据类型如图片,对象的时候,非常不方便WebServiceSOAP协议XML同上同上RemoteObjectFlex自定义的高效二进制数据通讯协议:AMF任意(可以是数字,字符串,对象,图片等等)能够处理各种类型的数据类型,速度快需要专门的服务器端软件LCDS(FDS)或AmfPHP。LCDS(FDS)是收费的,价格不菲。其中也可使用免费版本(blazeds),但是有限制。(#)这里简单说明一下LCDS与blanzeds的区别。BlazeDS可以看成是LCDS的一个子集,而且是一个开源产品,在一般的项目中完全可以替代LCDS。(抱歉,adob

4、e官方的图片找不到了,所以找了有水印的) 代表此功能可用FeaturesBlazeDSLCDSData management ServicesClient-Server synchronizationConflict resolutionData pagingSQL adapterHibernate adapterDocument ServicesLiveCycle remotingRIA-to-PDF conversionEnterprise-Class Flex application servicesData access/remotingProxy serviceAutomated t

5、esting supportSoftware clusteringWeb tier compilerEnterprise IntegrationWSRP generationAjax data servicesFlex-Ajax bridgeRuntime configurationOpen adapter architectureJMS adapterServer-side component framework integrationColdFusion integrationOffline Application SupportOffline data cacheLocal messag

6、e 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 serviceYesYesMessagingServlet-based m

7、essaging 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 pagingNoYesLazy loading (on deman

8、d)NoYesConflict resolution and synchronizationNoYesSQL adapterNoYesHibernate adapterNoYes"Fiber-aware" assemblerNoYesOffline web applicationsNoYesDevelopment and deploymentSpring integration supportYesYesAdobe Flash® Builder modeling plug-inNoYesEnterprise supportNoYesRIA PDF generati

9、onNoYesWSRP 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 ( service)3) cxf 2.7.6(webservice

10、)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 s:/.adobe./cfusion/entitlement/index.cfm?e=lc_blazeds登录,下载blazeds,最新版本为4931。3. backpor

11、t-util-concurrent 3.1(AMF)这个在下载时请注意版本,这里下载backport-util-concurrent-Java60-3.1.zip,这个为jdk1.6下的jar文件。4. struts-( service)/download.cgi#struts2315配置过SSH的程序员都知道,在eclipse中使用软件自带的struts时,在项目中展现的形式是这样的形式,而不能直接加入到WEB-INF/lib文件夹下面。5. cxf 2.7.6(webservice)/download.html这

12、里使用cxf框架来对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服务。&l

13、t;!- spring 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-va

14、lue>classpath: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

15、-param><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-nam

16、e>hibernateFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>5) 配置applicationContext.xml文件,增加spring事务管理功能<beanid="dataSource"class="org.apache mons.dbcp.BasicDataSource"><propertyname="driverClassName"value=".micr

17、osoft.sqlserver.jdbc.SQLServerDriver"></property><propertyname="url"value="jdbc:sqlserver:/ip:port;databaseName=dbname"></property><propertyname="username"value="user"></property><propertyname="password"value=

18、"password"></property></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"><refbean="dataSource"/></property><propertyname="hiberna

19、teProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop></props></property></bean><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

20、<propertyname="sessionFactory"ref="sessionFactory"/></bean><beanid="transactionInterceptor"class="erceptor.TransactionInterceptor"><propertyname="transactionManager"ref="transactionManager&

21、quot;/><propertyname="transactionAttributes"><props><propkey="*">PROPAGATION_REQUIRED</prop><propkey="qry*">PROPAGATION_REQUIRED,readOnly</prop><propkey="query*">PROPAGATION_REQUIRED,readOnly</prop><propkey

22、="search*">PROPAGATION_REQUIRED,readOnly</prop><propkey="save*">PROPAGATION_REQUIRED</prop><propkey="update*">PROPAGATION_REQUIRED</prop><propkey="delete*">PROPAGATION_REQUIRED</prop></props></property>&

23、lt;/bean><beanid="beanNameAutoProxyCreator"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><propertyname="beanNames"><list><value>*Service</value></list></property><propertyname="intercept

24、orNames"><list><idreflocal="transactionInterceptor"/></list></property></bean>配置spring通过service层来管理数据库事务。其中,dataSource和sessionFactory由eclipse自动产生。6) 测试spring、hibernate配置是否成功a) 在数据库中新建表Person,包含id(int自增)、name(varchar(16)和age(int)三字段。b) 增加hibernate annot

25、ation配置方式类Person.javapackage .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", schema = "dbo"

26、;, catalog = "report")publicclass Person implements java.io.Serializable privatestaticfinallongserialVersionUID = 1L;/ Fieldsprivate Integer id;private String name;private Integer age;/ Constructors/* default constructor */public Person() /* full constructor */public Person(Integer id, Str

27、ing 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() returnthis.id;publicvoid setId(Integer id) this.id = id;Column(name = "nam

28、e", nullable = false, length = 16)public String getName() ;publicvoid setName(String name) = name;Column(name = "age", nullable = false)public Integer getAge() returnthis.age;publicvoid setAge(Integer age) this.age = age;注意:这里由于ID是自增类型所以需要增加GeneratedValue(stra

29、tegy = GenerationType.AUTO)的注解c) 建立DAO层java类PersonDAO.javapackage .dao;import java.util.List;import org.hibernate.Query;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import .bean.Person;SuppressWarnings("unchecked")publicclass PersonDAO extends HibernateDaoSupport p

30、ublicvoid 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 (RuntimeException e) throw e;d) 建立service层java类Person.jav

31、apackage .service;import java.util.List;import .bean.Person;import .dao.PersonDAO;publicclass PersonService private PersonDAO personDAO;publicvoid save(Person ps) try personDAO.saveOrUpdate(ps); catch (RuntimeException e) throw e;public List<Person> query() try returnpersonDAO.query(); catch (

32、RuntimeException e) throw e;public PersonDAO getPersonDAO() returnpersonDAO;publicvoid setPersonDAO(PersonDAO personDAO) this.personDAO = personDAO;e) 配置spring,增加上面几个类的服务支持<beanid="PersonService"class=".service.PersonService"><propertyname="personDAO"ref="

33、PersonDAO"></property></bean><beanid="PersonDAO"class=".dao.PersonDAO"><propertyname="sessionFactory"ref="sessionFactory"></property></bean>f) 编写测试类publicstaticvoid main(String args) ApplicationContext ac = new Class

34、PathXmlApplicationContext("applicationContext.xml");PersonService service = (PersonService) ac.getBean("PersonService");Person ps = new Person();ps.setName("name");ps.setAge(10);service.save(ps);List<Person> list = service.query();for (Person vo : list) System.out

35、.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测试成功,spring、hibernate整合(包含数据)没有问题。接下去,我增加flex与spring直接的通讯整合。2. 增flex-spr

36、ing服务支持,是项目支持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.xml和perties文件5) 修改services-config.xml文件删除<service />和&

37、lt; security />部分增加<services><default-channels><channelref="my-amf"/></default-channels></services>6) 增加flex-spring jar包将backport-util-concurrent.jar和org.springframework.flex-1.0.3.RELEASE.jar复制到项目的WEN-INF/lib文件夹下。7) 配置web.xml使项目支持flex-spring<!- flex spr

38、ing -><servlet><servlet-name>flex</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!- 默认读取WEN-INF/flex/services-config.xml文件 -><param-va

39、lue></param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>flex</servlet-name><url-pattern>/messagebroker/*</url-pattern></servlet-mapping>8) 配置spring文件使其支持flex remote修改beans头文件为<

40、beansxmlns="./schema/beans"xmlns:xsi="./2001/XMLSchema-instance"xmlns:p="./schema/p"xmlns:flex="./schema/flex"xsi:schemaLocation="./schema//schema/b

41、eans//schema//schema/flex/spring-flex-1.0.xsd">增加flex支持<!- flex -><flex:message-broker></flex:message-broker>7) 测试AMF通讯配置方式是否正确a) java web项目中增加dest类。PersonDest.javapackage .dest;import java.util.List;import .be

42、an.Person;import .service.PersonService;publicclass PersonDest private PersonService personService;public List<Person> query() returnpersonService.query();public String save(Person ps) personService.save(ps);return"success"public PersonService getPersonService() returnpersonService;p

43、ublicvoid setPersonService(PersonService personService) this.personService = personService;b) 在spring中配置PersonDest为flex RemoteObject对接类<beanid="PersonDest"class=".dest.PersonDest"><!- 标识为flex与服务对接的destination -><flex:remoting-destination></flex:remoting-desti

44、nation><propertyname="personService"ref="PersonService"></property></bean>c) 建立flex测试applicationPerson.aspackage .bean RemoteClass(alias=".bean.Person") publicclass Person / public var id:int;publicvar name:String;publicvar age:int;publicfunction Pe

45、rson() fsh_fb.mxml<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="ns.adobe./mxml/2009" xmlns:s="library:/ns.adobe./flex/spark" xmlns:mx="library:/ns.adobe./flex/mx" width="100%" height="100%"><fx:Scri

46、pt><!CDATAimport .bean.Person;import mx.controls.Alert;import mx.rpc.Responder;import mx.rpc.events.FaultEvent;import mx.rpc.events.ResultEvent;import mx.rpc. .mxml. Service;import mx.rpc.remoting.mxml.RemoteObject;privatefunction send():void var remote:RemoteObject = new RemoteObject();remote

47、.destination = "PersonDest"remote.endpoint = "/fsh/messagebroker/amf"remote.showBusyCursor = true;remote.addEventListener(ResultEvent.RESULT, function(rstEvt:ResultEvent):void testId.text = String(rstEvt.result););remote.addEventListener(FaultEvent.FAULT, function(fltEvt:FaultEve

48、nt):void Alert.show("Error: " + fltEvt.message.toString(););var ps:Person = new Person(); = "AAA"ps.age = 12;remote.save(user);></fx:Script><s:VGroup width="100%"><s:Button id="testBtn" label="发送" click="send()"/>

49、;<mx:FormItem label="返回结果:"><s:Label id="testId" text="aaa"/></mx:FormItem></s:VGroup></s:Application>d) 测试结果运行结果界面数据库3. 增struts服务支持,是项目支持 通讯协议( service)1) 解压下载的struts--all.zip文件。2) 解压struts-/apps/ struts2-blank.war文件。struts

50、2-blank项目是struts2的一个基础配置项目,接下来我们可以使用这个项目来参考配置我们的struts框架。3) 复制struts2-blank/WEB-INF/lib中的jar文件到我们项目的WEB-INF/lib文件夹中。4) 复制struts2-blank/WEB-INF/classes中的struts.xml文件到我们的src文件目录下。5) 配置web.xml使其支持struts服务<!- struts -><filter><filter-name>struts2</filter-name><filter-class>

51、org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.do</url-pattern></filter-mapping>6) 建立action类PersonAction.javapackage .dest;import java.io.Pri

52、ntWriter;import java.util.List;import javax.servlet. . ServletRequest;import javax.servlet. . ServletResponse;import org.apache.struts2.ServletActionContext;import .bean.Person;import .opensymphony.xwork2.ActionContext;import .opensymphony.xwork2.ActionSupport;import .service.PersonService;publiccla

53、ss PersonAction extends ActionSupport privatestaticfinallongserialVersionUID = 1L;private PersonService personService;private ServletRequest request;private ServletResponse response;public String save() System.out.println("action save");try setServlet();String name = request.getParameter(&

54、quot;name");int age = Integer.parseInt(request.getParameter("age");Person person = new Person();person.setName(name);person.setAge(age);personService.save(person);PrintWriter out = response.getWriter();out.print("<rtn>success</rtn>"); catch (Exception e) e.printS

55、tackTrace();return"success"public List<Person> query() throws Exception System.out.println("action query");List<Person> list = null;try setServlet();list = personService.query();PrintWriter out = response.getWriter();out.print("<rtn>" + list.size() + &

56、quot;</rtn>"); catch (Exception e) e.printStackTrace();return list;privatevoid setServlet() ActionContext ctx = ActionContext.getContext();request = ( ServletRequest) ctx.get(ServletActionContext. _REQUEST);response = ServletActionContext.getResponse();response.setContentType("text/x

57、ml");public PersonService getPersonService() returnpersonService;publicvoid setPersonService(PersonService personService) this.personService = personService;7) 配置对应的spring和struts文件spring<beanid="PersonAction"class=".dest.PersonAction"><propertyname="personServi

58、ce"ref="PersonService"></property></bean>struts<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-/Apache Software Foundation/DTD Struts Configuration 2.3/EN""/dtds/struts-2.3.dtd"><struts&g

59、t;<constantname="struts.enable.DynamicMethodInvocation"value="false"/><constantname="struts.devMode"value="true"/><constantname="struts.action.extension"value="action,do"/><constantname="struts.objectFactory"v

60、alue="spring"/><packagename="default"namespace="/"extends="struts-default"><actionname="save"class="PersonAction"method="save"></action><actionname="query"class="PersonAction"method=&quo

61、t;query"></action></package></struts>运行项目报错误信息:Cannot locate the chosen ObjectFactory implementation: sprinCannot locate the chosen ObjectFactory implementation: spring - unknown location缺少struts使用spring管理的jar包,从下载的struts2的lib文件夹中找到并添加struts2-spring-plugin-.jar到项目中。8) 测试 servi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论