`

JAVA(spring/hibernate/blaseds)+Flex整合方案

    博客分类:
  • Flex
 
阅读更多

 

实现flex与java通信的方式通常有三种:http请求、web服务(web service)和RemoteObject(使用中间件

交互)。其中通过RemoteObject组件与java交互是最快速方便的,但是不同语言交互需要使用插件实现

AMF(Action Message Format)协议,关于java的flex插件我们通常使用开源免费的BlazeDS。

 

  • 项目准备

 

开发环境:eclipse和flash builder,如果eclipse安装了fb插件则更好了。

依赖框架:spring2.6、Hibernate3.3、blasds(下载地址:http://opensource.adobe.com/wiki/display/blazeds/Downloads)

关键jar包:spring-webmvc.jar、spring.jar、org.springframework.flex-1.0.3.RELEASE.jar、hibernate3.jar

 

 

 

  • 创建项目

 

eclipse新建一个dynamic web project

加入Hibernate、spring必备jar包至WEB-INF/lib目录下

解压blazeds.war文件,将blazeds\WEB-INF\lib目录下所有jar文件加入到项目WEB-INF/lib目录下

找到org.springframework.flex-1.0.3.RELEASE.jar(我在spring3中找到的)并加入到项目WEB-INF/lib目录下

将blazeds\WEB-INF下的flex文件夹拷贝到项目WEB-INF目录下

编写诸多dao、service代码,在此不再赘述。

 

我编写了一个名叫LoginServiceImpl的类,供flex调用:

 

public class LoginServiceImpl implements LoginService{
	
	private LoginInfoDao loginDao;
	
	public void setLoginDao(LoginInfoDao loginDao) {
		this.loginDao = loginDao;
	}
        
        @Override
	public long getLoginInfoTotalCounts() {
		return loginDao.getLoginInfoTotalCounts();
	}
}

 

 

编写spring配置文件,数据库连接池、事务管理、诸多IOC配置在此不再赘述。关键看如何让LoginServiceImpl允许flex调用,这里需要定义<flex>标签:

 

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:flex="http://www.springframework.org/schema/flex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/flex
       http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">
         
    <!-- 为了把请求路由给 MessageBroker,添加以下 tag-->
	<flex:message-broker />
	<bean id="loginServiceBean" class="com.bless.logininfo.service.impl.LoginServiceImpl">
		<!-- 指定当前bean被远程调用 -->
		<flex:remoting-destination />
		<property name="loginDao" ref="loginInfoDaoBean"></property>
	</bean>
</beans>

 

 

Flex调用java方法的大概原理是:flex向服务器发送调用请求,该请求路径是*/messagebroker/*的形式,所以spring需要截获请求路径,再根据请求信息调用指定方法,为了截获路径,所以需要使用spring mvc。

随后编写web.xml文件:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>ssh2model</display-name>
	<description>ssh2model Application</description>

	<!-- spring mvc -->
	<servlet>
		<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value></param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
		<url-pattern>/messagebroker/*</url-pattern>
	</servlet-mapping>

	<!-- 著名 Character Encoding filter -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

	<!-- spring IOC -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:com/bless/base/config/spring/springApplicationContext.xml,
			classpath:com/bless/*/config/spring/spring-*-*.xml
        </param-value>
	</context-param>

	<!-- blaseds监听器:用于获取服务器内置对象(request,application等) -->
	<listener>
		<listener-class>flex.messaging.HttpFlexSession</listener-class>
	</listener>

	<!--Spring ApplicationContext 载入 ,必须-->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Spring 刷新Introspector防止内存泄露 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>

	<!-- session超时定义,单位为分钟 -->
	<session-config>
		<session-timeout>20</session-timeout>
	</session-config>
	
	<!--添加远程支持,方便Flex映射Java类-->
	<servlet>
		<display-name>RDSDispatchServlet</display-name>
		<servlet-name>RDSDispatchServlet</servlet-name>
		<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
		<init-param>
			<param-name>useAppserverSecurity</param-name>
			<param-value>false</param-value>
		</init-param>
		<init-param>
			<param-name>messageBrokerId</param-name>
			<param-value>_messageBroker</param-value>
		</init-param>
		<load-on-startup>10</load-on-startup>
	</servlet>
	<servlet-mapping id="RDS_DISPATCH_MAPPING">
		<servlet-name>RDSDispatchServlet</servlet-name>
		<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
	</servlet-mapping>
</web-app>

 

 

最后找到WEB-INF/flex/services-config.xml文件,更改services标签内的配置,如下图所示:


以上spring+Hibernate+blaseds基本整合完成,将项目放在服务器中启动,第一次整合肯定会有问题,要么缺jar包要么配置有问题,耐心点一个个解决掉就行了,没事多问百度谷歌。

 

 

 

  • 创建Flex项目
java项目部署成功以后,即可开始创建flex项目:

①新建一个flex项目,指定“应用服务器类型”为J2EE的Blaseds


 
②第二步是关键,这里要指定你当前部署的java项目的部署路径,输入正确的信息,点击验证配置按钮,验证通过以后可以点击确定完成。


 

  • Flex调用Java测试
此时一个flex的j2ee项目已经创建好了,在默认包下找到一个*.mxml文件,在文件中写入测试代码:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
			   creationComplete="init(event)">
	
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.remoting.RemoteObject;
			
			protected function init(event:FlexEvent):void
			{
				var remote:RemoteObject = new RemoteObject();
				remote.destination = "loginServiceBean";
				remote.getLoginInfoTotalCounts();
				remote.addEventListener(ResultEvent.RESULT,function callback(event:ResultEvent):void{
					Alert.show(event.result.toString());
				});
			}
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:Button x="172" y="54" label="按钮"/>
</s:Application>
 
最后鼠标右键选择启动web应用程序查看运行结果。


 

 

分享到:
评论
8 楼 Fx_demon 2014-09-19  
org.springframework.flex-1.0.3.RELEASE.jar 这个包需要单独下载 的
7 楼 neusoft_jerry 2014-09-02  
neusoft_jerry 写道
org.springframework.flex-1.0.3.RELEASE.jar
lz,这个包是在blazeds-turnkey-4.0.1.21287.zip里面的,而不是spring3里的(至少spring-framework-3.0.5.RELEASE.zip这个包里是没有的)。

而且就连blazeds-bin-4.0.1.21287.zip里都没有这个包。
6 楼 neusoft_jerry 2014-09-02  
org.springframework.flex-1.0.3.RELEASE.jar
lz,这个包是在blazeds-turnkey-4.0.1.21287.zip里面的,而不是spring3里的(至少spring-framework-3.0.5.RELEASE.zip这个包里是没有的)。
5 楼 白糖_ 2012-07-24  
fmpoffice 写道
请问大师,我最近在学习flex。我看了很多网友写的源码,很小是用 servlet <display-name>RDSDispatchServlet</display-name> 方式!为什么呢?谢谢
        

这个方法是官方的简单例子,如果要深入研究,估计还会有更好的,或者可以自己写servlet
4 楼 fmpoffice 2012-07-23  
请问大师,我最近在学习flex。我看了很多网友写的源码,很小是用 servlet <display-name>RDSDispatchServlet</display-name> 方式!为什么呢?谢谢
        
3 楼 白糖_ 2012-07-11  
fmpoffice 写道
有源码麽?谢谢 
381395342@qq.com

很早前的了,已经没有了
2 楼 fmpoffice 2012-07-11  
有源码麽?谢谢 
381395342@qq.com
1 楼 johnson106 2012-03-09  
大师,按照这种方式试过了。

不过加上事务就有问题了。不知道什么原因嘞。

相关推荐

    FLEX+Java+BlaseDS 整合 OA系统

    在信息技术日新月异的今天,企业级应用系统的开发愈发复杂,而FLEX、Java、Hibernate、Spring和BlazeDS的整合则为企业级应用提供了高效、灵活的解决方案。本文将深入探讨如何利用这些技术构建一个完整的在线办公自动...

    Flex BlaseDS remoteObject 例子(这个是错的,大家不要下了,SORRY)

    一个用Flex调用JAVA方法的例子ffffffff

    blazeDS框架实现Flex与J2EE的通信教程

    在 `WEB-INF/flex/remoting-config.xml` 文件中,你需要配置远程服务的映射,以便 Flex 客户端能够调用。这个配置文件定义了 Flex 与 J2EE 之间通信的通道和服务,例如设置 `SimpleCustomerService` 类为可远程访问...

    arcgisserverFlex开发入门.pdf

    具体的部署过程和配置可以参考相关文档《flex 和 java 通讯配置 .pdf》以及《Blaseds.war包的下载和使用》。 **总结** ArcGIS Server 10 for Flex API 入门涉及到的步骤包括安装开发环境、创建Flex项目、加载地图...

    FLEX 页面跳转的实现

    在学习Flex的过程中,你可能会遇到Flex页面跳转的问题,本文和大家分享一下,页面在flex里面其实就是一个个的Canvas,vbox,hbox等等之类的东西,看到的不同页面的切换,就是这些元素一层层的堆积,或者替换,但是...

    CairngormStore flex 3 版

    LCDS和BlazeDS是Adobe提供的服务,它们支持Flex与Java后端进行实时数据交换,提供了丰富的数据推送和服务调用功能。 在实际应用中,CairngormStore通常会与Command模式结合使用,当接收到事件或消息时,Command对象...

Global site tag (gtag.js) - Google Analytics