read me.docx

上传人:b****6 文档编号:7782127 上传时间:2023-01-26 格式:DOCX 页数:13 大小:47.58KB
下载 相关 举报
read me.docx_第1页
第1页 / 共13页
read me.docx_第2页
第2页 / 共13页
read me.docx_第3页
第3页 / 共13页
read me.docx_第4页
第4页 / 共13页
read me.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

read me.docx

《read me.docx》由会员分享,可在线阅读,更多相关《read me.docx(13页珍藏版)》请在冰豆网上搜索。

read me.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1