`
打倒小日本
  • 浏览: 48119 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

用GraniteDS整合Flex和Seam

阅读更多
正在学习GraniteDS,但发现资料很少,官方文档讲的比较发散,也没个简单完全的整合示例。
经过N次尝试,总算是测试调通了,其实很简单,也不知道之前为啥费了这么大劲才搞定,这就是传说中的“难了不会,会了不难”吧。

当前常用的整合框架主要有三种:
BlazeDS
官方的免费版整合框架(收费版的是LCDS),简单易用。也很稳定,稳定到2010年3月份之后就再也没更新过,其实这也是官方框架的一贯风格,稳定压倒一切。再就是API太底层,对JAVA各个框架集成程度低,不符合俺的胃口。

Flamingo
Exadel的下属项目,由于与JBoss的特殊关系所以对Seam框架的集成比较深入,支持很多独有特性。也好久没更新了,一年前就说准备支持CDI,然后就没了下文,对这个项目很不放心。

GraniteDS
这个是俺最终的选择。对Seam Spring EJB3 POJO CDI Hibernate都有很深入的集成支持,更新的也很快。
内置了一个Tide框架用来对各个框架进行深入集成,语法与Seam极其相似[In] [Out] [Observer]借鉴的很彻底,Seam开发人员一定很亲切。

版本
1. Seam 2.2.2.Final
2. Flex 4.5
3. GraniteDS 2.2.1.GA
4. JBoss 5.1.0.GA

环境准备
1. 一个可用的Seam环境,此处使用的是EAR包(自行解决^_^)
2. 安装Flash Builder 4.5并创建一个可用的Flex项目(自行解决^_^)
3. 下载GraniteDS项目包
   地址:http://www.graniteds.org/confluence/display/DOWNLOAD/Download+Links
   下载GraniteDS Core Bundle (mandatory)

配置Java端
1. 将granite.jar、granite-seam21.jar、granite-hibernate.jar三个JAR包拷贝至/archive/xxx-ear.ear/lib/下
   这些JAR包可在刚刚下载的GraniteDS项目包的build目录下找到
   build目录下还有一个granite-seam.jar包,这个是用来集成Seam 2.0的。Seam 2.1/2.2版本需要的是granite-seam21.jar包。(命名真不科学...)
   * 另外项目中不要有BlazeDS的JAR包(也就是flex-messaging-xxx.jar),否则通信时会抛错,之前被这个问题困扰很久...

2. 在src目录下创建一个空白的文件,文件名为seam.properties

3. /WEB-INF/web.xml中新增
<!-- Flex GraniteDS -->
<listener>
	<listener-class>org.granite.config.GraniteConfigListener</listener-class>
</listener>

<filter>
	<filter-name>AMFMessageFilter</filter-name> 
	<filter-class>org.granite.messaging.webapp.AMFMessageFilter</filter-class> 
</filter>
<filter-mapping>
	<filter-name>AMFMessageFilter</filter-name>
	<url-pattern>/graniteamf/*</url-pattern>
</filter-mapping>

<servlet>
	<servlet-name>AMFMessageServlet</servlet-name>
	<servlet-class>org.granite.messaging.webapp.AMFMessageServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>AMFMessageServlet</servlet-name>
	<url-pattern>/graniteamf/*</url-pattern>
</servlet-mapping>

<servlet>
	<servlet-name>GravityServlet</servlet-name>
	<servlet-class>org.granite.gravity.jbossweb.GravityJBossWebServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>    
<servlet-mapping>
	<servlet-name>GravityServlet</servlet-name>
	<url-pattern>/gravityamf/*</url-pattern>
</servlet-mapping>

GraniteConfigListener必须在SeamListener之后定义。
GravityServlet是用来支持服务器推送功能,也就是comet技术,先配置上备用。

4. /WEB-INF/components.xml中新增
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://jboss.com/products/seam/components"
 xmlns:async="http://jboss.com/products/seam/async"
 xmlns:core="http://jboss.com/products/seam/core"
 xmlns:international="http://jboss.com/products/seam/international"
 xmlns:persistence="http://jboss.com/products/seam/persistence"
 xmlns:security="http://jboss.com/products/seam/security"
 xmlns:transaction="http://jboss.com/products/seam/transaction"
 xmlns:web="http://jboss.com/products/seam/web"
 xmlns:graniteds="http://www.graniteds.org/config"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation=
	"http://jboss.com/products/seam/core
		http://jboss.com/products/seam/core-2.2.xsd
 	 http://jboss.com/products/seam/transaction
		http://jboss.com/products/seam/transaction-2.2.xsd  
 	 http://jboss.com/products/seam/persistence
		http://jboss.com/products/seam/persistence-2.2.xsd  
 	 http://jboss.com/products/seam/web
		http://jboss.com/products/seam/web-2.2.xsd  
 	 http://jboss.com/products/seam/security
		http://jboss.com/products/seam/security-2.2.xsd  
 	 http://jboss.com/products/seam/async
		http://jboss.com/products/seam/async-2.2.xsd
 	 http://jboss.com/products/seam/international
		http://jboss.com/products/seam/international-2.2.xsd
 	 http://www.graniteds.org/config
		http://www.graniteds.org/public/dtd/2.2.0/granite-config-2.2.xsd">
	<core:init .../>
	...
	<!-- Flex GraniteDS -->
	<graniteds:flex-filter url-pattern="/graniteamf/*" tide="true"/>
</components>

10、27、28、31、32行为新增


5. 新建/WEB-INF/flex/services-config.xml文件,全部内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
	<services>
		<service id="granite-service" 
			class="flex.messaging.services.RemotingService" 
			messageTypes="flex.messaging.messages.RemotingMessage">
			<destination id="person">
				<channels>
					<channel ref="my-graniteamf"/>
				</channels>
				<properties>
					<factory>seamFactory</factory>
				</properties>
	        </destination>
	    </service>
	</services>
	
	<factories>
		<factory id="seamFactory" class="org.granite.seam.SeamServiceFactory" />
	</factories>
	
	<channels>
		<channel-definition id="my-graniteamf" class="mx.messaging.channels.AMFChannel">
			<endpoint
				uri="http://{server.name}:{server.port}/{context.root}/graniteamf/amf"
				class="flex.messaging.endpoints.AMFEndpoint"/>
		</channel-definition>
	</channels>
</services-config>


6. 新建/WEB-INF/granite/granite-config.xml文件,全部内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE granite-config PUBLIC "-//Granite Data Services//DTD granite-config internal//EN" "http://www.graniteds.org/public/dtd/2.2.0/granite-config.dtd">

<granite-config>
</granite-config>


7. 以上JAVA端配置就结束了,下面创建一个测试类
import org.granite.tide.annotations.TideEnabled;
import org.jboss.seam.annotations.Name;

@Name("test")
@TideEnabled
public class Test {
	public String hello(String name) {
		return name + " 你成功了";
	}
}

@TideEnabled指明这个组件可以被Tide调用(GraniteDS使用内部Tide框架来对Seam、Spring、EJB3、CDI等进行深度集成)

配置Flex端
1. 将granite.swc、granite-essentials.swc拷贝至Flex工程的/libs目录下
   这些swc包可在刚刚下载的GraniteDS项目包的build目录下找到
   GraniteDS 2.2只需要这两个swc包就可以了,里面已经包括了tide框架及对seam的扩展。
   (GraniteDS 1.1时有一个单独的tide.swc包,现在已经不需要了。)

2.创建Test.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"
			   preinitialize="Seam.getInstance().initApplication()">
	<fx:Declarations>
		
	</fx:Declarations>
	
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			
			import org.granite.tide.events.TideFaultEvent;
			import org.granite.tide.events.TideResultEvent;
			import org.granite.tide.seam.Seam;
			import org.granite.tide.service.DefaultServiceInitializer;
			
			private function helloResult(event:TideResultEvent):void {
				Alert.show(event.result.toString());
			}
			
			private function helloFault(event:TideFaultEvent):void {
				Alert.show(event.fault.toString());
			}
			
			Seam.getInstance().addComponentWithFactory("serviceInitializer", DefaultServiceInitializer, {contextRoot: ""});
			
			[In("test")]
			public var remoting:Object;
		]]>
	</fx:Script>
	
	<s:Button label="测试" click="remoting.hello('小伙', helloResult, helloFault);" />
</s:Application>

* preinitialize="Seam.getInstance().initApplication()"
  初始化seam环境,如果想用[In]等的功能,一定要提前初始化。
* Seam.getInstance().addComponentWithFactory("serviceInitializer", DefaultServiceInitializer, {contextRoot: ""});
  设置seam环境,{contextRoot: ""}参数表示"项目上下文目录"根据实际情况设置。
* [In("test")]
  大家已经很亲切吧,就不详细介绍了。
 
分享到:
评论
2 楼 ltian 2011-09-28  
非常棒,感谢你的奉献。不知道BlazeDS何时支持CDI?
1 楼 nforce_com 2011-07-22  
太给力了!多谢!能不能再写一篇关于用 BlazeDS整合Flex和Seam 的文章呢,很期待啊!毕竟BlazeDS 是Adobe官方的免费版,用的人更多些!

相关推荐

    flex java 项目整合.rar

    - **错误处理和调试**:在前后端设置合适的异常处理机制,并使用Flex的LogCat或Java的日志框架辅助调试。 - **性能优化**:合理设计服务接口,避免不必要的网络通信,使用数据缓存策略等提高性能。 - **版本控制**:...

    flex3和ibatis3的整合

    在整合过程中,需要配置 BlazeDS 或 GraniteDS 这样的AMF服务器,以便在Flex和Java之间建立通道。 2. **服务端配置**:在iBatis3中,需要配置SqlMapConfig.xml文件,定义数据源、事务管理器等。同时,要创建一个...

    flex整合spring的例子

    6. **测试与调试**:使用Flex Builder或类似工具进行调试,确保Flex客户端和Spring服务之间的通信正常,业务逻辑按预期执行。 在提供的链接中,作者可能详细介绍了以上步骤的实现过程,包括配置文件的设置、Flex...

    通过MyEclpise整合JAVA与FLEX进行通讯(通过将Flex工程加到Java web工程中)

    5. **编写Flex代码**:在Flex工程中,使用MXML和ActionScript编写前端界面和业务逻辑。MXML用于定义组件布局,ActionScript负责交互逻辑。 6. **创建Java服务**:在Java Web工程中,开发后端服务,例如Servlet、...

    Flex 整合java(附工程源码)

    Flex与Java的整合是开发富互联网应用程序(RIA)时常用的一种技术组合,它结合了Flex在用户界面设计上的优势和Java在服务器端处理的强大能力。本资料提供了完整的工程源码,便于开发者深入理解和实践Flex与Java的...

    flex+jfreechart+others 整合架包和配置

    在"flex+jfreechart+others"的整合中,我们通常指的是将Flex前端的交互性和数据展示能力与JFreeChart后端的数据可视化功能相结合。这涉及到以下几个关键知识点: 1. **数据通信**:Flex应用通常通过AMF(Action ...

    使用granite实现flex交互java

    这个类应该继承自 GraniteDS提供的`org.graniteds.flex.server.RemoteObject`基类,或者使用注解`@RemotingDestination`。 ```java package com.example; @RemotingDestination public class MyServiceImpl ...

    Flex_java.rar_flex

    在"Flex整合Java环境搭建,配置"这个主题中,我们将深入探讨如何设置和配置开发环境,以便在Flex前端和Java后端之间建立通信。以下是详细的步骤和知识点: 1. **安装Flex SDK**:首先,你需要下载并安装Flex SDK,...

    flex与java通信

    在本示例中,"FlexJavaSocket通信"可能是一个项目,演示了如何使用Flex客户端通过Socket协议与Java服务器进行实时、双向的数据交换。Socket通信是一种低级别的网络通信机制,允许应用程序之间直接建立TCP/IP连接,...

    Flex+spring+hibernate整合视频学习交流part_2

    3. **Flex的数据绑定和远程服务调用**:展示如何在Flex应用中定义服务代理,调用Spring服务并处理返回的数据,以及如何使用Flex的绑定机制将数据实时显示在用户界面上。 4. **实例演示**:可能包含一个完整的案例,...

    java flex入门实例

    - **调用Java服务**:使用Flex SDK中的`RemoteObject`或`HTTPService`组件,通过BlazeDS连接到Java服务,实现数据的请求和响应。 - **部署与测试**:将Java项目部署到服务器,如Tomcat,然后在Flex Builder中运行...

    flex连接java服务端

    总结来说,这篇博文可能深入探讨了如何使用Flex和Java结合创建一个富互联网应用,通过AMF协议进行高效的数据交换,并提供了源码示例和工具配置方法。如果要深入了解这个主题,可以从提供的博文链接中获取更多详细...

    Flex + Java 最佳实例(附工程)

    使用 BlazeDS 或 GraniteDS 等中间件,可以轻松建立Flex前端与Java后端之间的通信桥梁。 四、学习资源——FlexClass 在提供的压缩包中,“FlexClass”可能是包含一个或多个示例项目,这些项目展示了如何在Flex中...

    graniteds-dist-3.0.0.M1

    Java和Flex ActionScript是两种广泛使用的编程语言,分别在服务器端和客户端展现强大功能。然而,在某些场景下,可能需要将Java代码转换为Flex ActionScript,以实现更加灵活和高效的前端展示。这时,GraniteDS...

    spring3.0_struts2.1_hibernate3.3_Flex4整合登录

    标题提到的"spring3.0_struts2.1_hibernate3.3_Flex4整合登录"是一个典型的Java Web开发示例,它结合了Spring、Struts2、Hibernate和Flex这四款强大的框架,以实现一个登录功能。下面将详细介绍这些技术及其整合的...

    Flex中很多的帮助文档已经资料和一些常见问题的解决方案

    Java开发者可以通过 BlazeDS 或 GraniteDS 等中间件将Java应用服务暴露给Flex客户端,实现数据的双向通信。 3. **跳转与传值**:在Flex应用中,导航通常是通过Navigator容器实现的,如Accordion或TabNavigator。...

    Flex移动开发第一次分享

    标题中的“Flex移动开发第一次分享”表明这次的内容主要聚焦于使用Adobe Flex技术进行移动应用的开发。...参与者可能会从中了解到如何使用Flex这一工具进行源代码编写,以及如何有效地开发和部署移动应用。

    flex Demo

    5. **Desktop Development with Flex**:Adobe AIR(Adobe Integrated Runtime)允许开发者使用Flex创建桌面应用,这些应用可以在没有浏览器的情况下运行。AIR为Flex提供了本地操作系统级别的功能,如文件系统访问、...

    flex4集成java

    这些格式可以被 Flex 的 XML 解析器和 JSON 库处理,也可以在 Java 侧使用 JAXB 或 JSON 库进行序列化和反序列化。 5. **事件驱动通信**: 使用 BlazeDS 或类似工具,可以实现 Flex 客户端和 Java 服务器之间的...

    flex如何跟JAVA结合

    Flex是一种基于ActionScript和MXML的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。它由Adobe公司开发,允许开发者创建交互性强、视觉效果丰富的用户界面,尤其适用于Web应用。...

Global site tag (gtag.js) - Google Analytics