read me.docx
- 文档编号:7782127
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:47.58KB
read me.docx
《read me.docx》由会员分享,可在线阅读,更多相关《read me.docx(13页珍藏版)》请在冰豆网上搜索。
readme
集成Flex,Spring,Hibernate构建应用程序
RIA(RichInternetApplication)——富Internet应用以其良好的客户体验得到越来越广泛的应用,银行,电信等领域已有诸多成功案例。
Adobe的Flex是最具有代表性的基于Flash的RIA技术。
通过对Flex以及当前流行的Spring、Hibernate的J2EE开源框架进行集成,使客户既能获得到一流的用户体验,又能获得J2EE应用的高稳定性,高可扩展性和可移植性。
从某种意义上来说,RIA是未来Web应用的发展方向。
作为本文的读者,您应该非常熟悉J2EE开发、Spring、Hibernate框架,并且对Flex、ActionScript有一定的了解。
通过这篇文章,您能清晰地了解由Flex、Spring、Hibernate集成的RIA应用框架的技术细节以及怎样使用该框架开发具体的应用。
Spring是一个轻量级的J2EE开源应用程序框架。
Spring的基于两大核心特性控制反转(InversionofControl,IOC)和面向方面编程(Aspect-OrientedProgramming,AOP)的插件式架构降低了应用组件之间的耦合性。
借助于XML配置文件,Spring容器可以轻松地帮助您管理应用组件以及它们之间的依赖性,同时Spring还提供事务管理框架、DAO支持、支持主流O/RMapping框架的集成、支持各种标准J2EE组件技术的集成(JavaMail/EJB/JMS/WebService等)、支持各种视图技术(Web视图和非Web视图)的集成。
Hibernate是Java平台上的一种成熟的、全功能的O/RMapping(对象/关系映射)开源框架。
Hibernate在分层的J2EE架构中位于数据持久化层,它封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑。
Hibernate使用O/RMapping将对象模型中的对象映射到基于SQL的关系数据模型中去,通过使用HQL(HiberanteQueryLanguage)实现Java对象的持久化,使得您可以应用面向对象的思维方式操纵数据库。
另外,HibernateO/RMapping还提供延迟加载、分布式缓存等高级特性,这样有利于缩短开发周期和降低开发成本。
关于示例程序
本文的样例程序是比较流行的在线宠物商店的应用场景,分为两个部分:
∙demo_client:
Flex项目,主要由Flex实现用户界面的生成和对用户动作的响应处理。
∙demo_central:
JavaWeb项目,主要由Spring实现业务逻辑、由Hibernate实现数据库的读写访问控制,以及由BlazeDS提供Flex访问的远程对象接口。
在本文中Spring、BlazeDS和Hibernate所依赖的Jar包均拷贝到demo_central项目的WebContent/WEB-INF/lib目录下部署到Tomcat上。
开发环境
1.Eclipse3.3.1.1
2.WebToolsPlatform(WTP)foreclipse
3.AdobeFlexBuilder3
4.Tomcatv6.0
5.MySQLv5.1
集成Flex和Spring
如何将Flex和Spring进行集成,使Flex前端能够与JavaEE后端进行通信?
Flex通过远程方法调用和实时通信技术实现异步通信,Flex的通信协议主要有三种:
HttpService、WebService和RemoteObject。
RomoteObject协议作为Flex提供的最快的通信方式,通过集成BlazeDS,利用AMF(ActionMessageFormat)二进制协议使得Flex前端能轻松与JavaEE后端进行数据交互,它是Flex集成Spring的首选通信协议。
BlazeDS
BlazeDS是AdobeLive-CycleService的免费开源版本,它使用AMF二进制协议通过AMF管道构建了Flex和Spring进行数据通信的桥梁。
BlazeDS可以实现Flex对Java对象的远程调用。
BlazeDS可以部署运行在大多数Web应用服务器上,如Tomcat、Websphere、JBoss以及Weblogic。
在本文中我们将BlazeDS部署在Tomcat上,BlazeDS所依赖的jar包如清单1所示:
清单1.BlazeDS依赖的Jar包
flex-messaging-common.jar
flex-messaging-core.jar
flex-messaging-opt.jar
flex-messaging-proxy.jar
flex-messaging-remoting.jar
backport-util-concurrent.jar
cfgatewayadapter.jar
commons-httpclient-3.0.1.jar
commons-codec-1.3.jar
commons-logging.jar
concurrent.jar
xalan.jar
在web.xml部署描述符文件中添加HttpFlexSession。
HttpFlexSession是BlazeDS的一个监听器,负责监听Flex远程调用请求。
清单2.定义HttpFlexSession
flex.messaging.HttpFlexSession
SBI和Spring
现在我们需要引入SpringBlazeDSIntegration(SBI)。
SBI项目是SpringSource发布的开源项目,
它是目前比较成熟的用于集成Flex和Spring的方法。
SBI和Spring所依赖的Jar包如清单3所示:
清单3.SBI和Spring依赖的Jar包
org.springframework.flex-1.0.0.M2.jar(SBI)
spring-beans.jar
spring-context.jar
spring-context-support.jar
spring-core.jar
spring-tx.jar
spring-webmvc.jar
spring.jar
MessageBroker是SBI的一个组件,它的职责是处理Flex远程调用请求。
MessageBroker由Spring容器进行管理而不是由BlazeDS。
在Web.xml中添加DispatcherServlet允许Spring自行管理MessageBroker。
清单4.DispatcherServlet配置
SpringMVCDispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/applicationContext.xml
1
接下来需要在BlazeDS的主配置文件services-config.xml中添加一个管道定义以支持DispatcherServlet对Flex请求的映射。
清单5.在services-config.xml中定义管道
"http:
//{server.name}:
{server.port}/{context.root}
/spring/messagebroker/amf"
class="flex.messaging.endpoints.AMFEndpoint"/>
在Spring的配置文件applicationContext.xml中,引入HandlerMapping通过MessageBrokerHandlerAdapter将所有的Servlet请求URL映射到由Spring容器管理的MessageBroker
,因此需要定义如下的两个Bean:
清单6.定义HandlerMapping实现Servlet请求映射
/*=springManagedMessageBroker
最后将定义MessageBrokerFactoryBean工厂Bean用于创建MessageBroker,并为您的ServiceBean提供绑定服务。
清单7.定义MessageBrokerFactoryBean
class="org.springframework.flex.
messaging.MessageBrokerFactoryBean"/>
在完成上述配置后,启动Tomcat将发布demo_central,然后在浏览器中输入http:
//localhost:
8080/demo_central/spring/messagebroker/amf并回车,浏览器就会显示一个空白的Web页面,这时我们就成功地对Flex和Spring进行了集成。
集成Spring和Hibernate
通过集成Spring和Hibernate3,您能在Spring容器的管理下通过O/RMapping进行面向对象的数据持久化。
在本文中我们使用MySQL数据库,Hibernate所需要的Jar包如清单8所示:
清单8.Hibernate依赖的Jar包
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
mysql-connector-java-5.0.8-bin.jar
首先定义Hibernate.properties创建Hibernate参数设置以及数据库连接信息。
清单9.Hibernate.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:
mysql:
//localhost/pet_store
jdbc.username=username
jdbc.password=password
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.transaction.factory_class=
org.hibernate.transaction.JDBCTransactionFactory
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
创建HibernateContext.xml配置文件,对Hibernate进行配置并将其纳入Spring容器的管理。
在这里我们使用基于Java5注解的Hibernate注解(HibernateAnnotations)实现对关系型数据库的映射,以代替传统的hbm.xml映射文件,这样不仅可以大大简化Hibernate映射配置,而且利用Java元数据可以提高程序的性能。
声明SessionFactory为AnnotationSessionFactoryBean将注解应用于Hibernate实体类中。
声明RequiredAnnotationBeanPostProcessor作为BeanPostProcessor的实现,它将强制Bean声明那些被Spring注解设置成Required的属性,否则将无法通过XML验证。
最后定义一个类型为HibernateTransactionManager的txManagerBean,并将它注入到的transaction-manager属性,这样就能够在SpringBean中应用Hibernate事务注解了。
HibernateContext.xml如清单10所示:
清单10.HibernateContext.xml
xmlns="http:
//www.springframework.org/schema/beans"
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xmlns:
tx="http:
//www.springframework.org/schema/tx"
xsi:
schemaLocation="http:
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans-2.0.xsd
http:
//www.springframework.org/schema/tx
http:
//www.springframework.org/schema/tx/spring-tx-2.0.xsd"
default-lazy-init="true">
class="org.springframework.beans.factory.
config.PropertyPlaceholderConfigurer">
WEB-INF/hibernate.properties
class="org.springframework.orm.hibernate3.
annotation.AnnotationSessionFactoryBean">
com.psdemo.core.domain.Client
com.psdemo.core.domain.Product
${hibernate.show_sql}
${hibernate.format_sql}
......
${jdbc.driverClassName}
${jdbc.url}
${jdbc.username}
${jdbc.password}
class="org.springframework.orm.
hibernate3.HibernateTransactionManager">
清单11.Hiberante实体类Client.java
packagecom.psdemo.core.domain;
importjava.io.Serializable;
importjavax.persistence.*;
@Entity
@Table(name="client")
publicclassClientimplementsSerializable{
privatestaticfinallongserialVersionUID=2L;
@Id
@Column(name="username")
privateStringusername;
@Column(name="password")
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
最后我们需要在web.xml部署描述符的contextConfigLocation参数中装入HibernateContext.xml配置文件。
这时我们就成功完成了Spring和Hibernate的集成,通过Spring容器管理Hibernate,Hibernate实现数据持久化的管理。
JavaEE服务器端
通过Spring对Flex以及Hibernate的集成,现在我们就可以在服务器端声明和定义业务逻辑对象和数据访问对象了。
在hibernateContext.xml定义数据访问对象DAO,注入SessionFactory。
清单12.在hibernateContext定义DAO
class="com.psdemo.core.dao.hibernate.ClientDaoImpl">
清单13.ClientDaoImpl.java
publicclassClientDaoImplextendsHibernateDaoSupport
implementsClientDao{
@Override
publicClientauthenticateUser(StringuserName,
Stringpassword){
String[]paramNames=newString[]{"userName","password"};
String[]values=newString[]{userName,password};
Listresults=this.getHibernateTemplate().
findByNamedParam("fromClientasc
wherec.username=:
userName
andc.password=:
password",
paramNames,values);
Iteratoriter=results.iterator();
if(iter.hasNext()){
return(Client)iter.next();
}else{
returnnull;
}
}
}
在applicationContext.xml中定义Service并开放其BlazeDS远程服务,注入DAO。
清单14.定义Service并开放其Flex远程服务
class="org.springframework.flex.messaging.
remoting.FlexRemotingServiceExporter">
ref="springManagedMessageBroker"/>
class="com.psdemo.core.services.ClientServiceImpl">
Flex客户端
Cairngorm
Cairngorm是Adobe设计的一个针对Flex开发者构建RIA应用的轻量级开源框架。
Cairngorm通过设计模式实现了MVC(Model-View-Controller)微型架构,使得开发人员可以交付具有可重用性、可维护性的中大型RIA应用。
在本文中我们使用Cairngorm2.2.1,为了引入Cairngorm,需要把它的库文件Cairngorm.swc拷贝到Flex项目的libs目录中。
图1.将cairngorm.swc添加到Flex项目库
Cairngorm是一个事件驱动的框架,其编程模型主要由以下几个组件构成:
值对象(ValueObject):
值对象是一个映射Spring实体类对象的ActionScript类对象,它将从Server端传输的数据提供给可视化的视图对象。
清单15.值对象ClientVO.as
packagecom.psdemo.client.model.vo
{
[Bindable]
[RemoteClass(alias="com.psdemo.core.domain.Client")]
publicclassClientVO
{
publicvarusername:
String;
publicvarpassword:
String;
}
}
前端控制器(FrontController):
前端控制器负责绑定由用户触发的事件,并将事件映射到相应的命令。
清单16.前端控制器PMainController.as
publicclassPMainControllerextendsFrontController
{
publicfunctionPmainController()
{
addCommand(AuthenticateUserEvent.EVENT_AUTH_USER,
AuthenticateUserCommand);
addCommand(GetProductsEvent.EVENT_GET_PRODUCTS,
GetProductsCommand);
}
}
业务代理(Businessdelegate):
利用Responder处理由服务器端返回的数据。
清单17.业务代理ClientDelegate.as
publicclassClientDelegate
{
privatevarresponder:
IResponder;
priv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- read me