正在学习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")]
大家已经很亲切吧,就不详细介绍了。
分享到:
相关推荐
- **错误处理和调试**:在前后端设置合适的异常处理机制,并使用Flex的LogCat或Java的日志框架辅助调试。 - **性能优化**:合理设计服务接口,避免不必要的网络通信,使用数据缓存策略等提高性能。 - **版本控制**:...
在整合过程中,需要配置 BlazeDS 或 GraniteDS 这样的AMF服务器,以便在Flex和Java之间建立通道。 2. **服务端配置**:在iBatis3中,需要配置SqlMapConfig.xml文件,定义数据源、事务管理器等。同时,要创建一个...
6. **测试与调试**:使用Flex Builder或类似工具进行调试,确保Flex客户端和Spring服务之间的通信正常,业务逻辑按预期执行。 在提供的链接中,作者可能详细介绍了以上步骤的实现过程,包括配置文件的设置、Flex...
5. **编写Flex代码**:在Flex工程中,使用MXML和ActionScript编写前端界面和业务逻辑。MXML用于定义组件布局,ActionScript负责交互逻辑。 6. **创建Java服务**:在Java Web工程中,开发后端服务,例如Servlet、...
Flex与Java的整合是开发富互联网应用程序(RIA)时常用的一种技术组合,它结合了Flex在用户界面设计上的优势和Java在服务器端处理的强大能力。本资料提供了完整的工程源码,便于开发者深入理解和实践Flex与Java的...
在"flex+jfreechart+others"的整合中,我们通常指的是将Flex前端的交互性和数据展示能力与JFreeChart后端的数据可视化功能相结合。这涉及到以下几个关键知识点: 1. **数据通信**:Flex应用通常通过AMF(Action ...
这个类应该继承自 GraniteDS提供的`org.graniteds.flex.server.RemoteObject`基类,或者使用注解`@RemotingDestination`。 ```java package com.example; @RemotingDestination public class MyServiceImpl ...
在"Flex整合Java环境搭建,配置"这个主题中,我们将深入探讨如何设置和配置开发环境,以便在Flex前端和Java后端之间建立通信。以下是详细的步骤和知识点: 1. **安装Flex SDK**:首先,你需要下载并安装Flex SDK,...
在本示例中,"FlexJavaSocket通信"可能是一个项目,演示了如何使用Flex客户端通过Socket协议与Java服务器进行实时、双向的数据交换。Socket通信是一种低级别的网络通信机制,允许应用程序之间直接建立TCP/IP连接,...
3. **Flex的数据绑定和远程服务调用**:展示如何在Flex应用中定义服务代理,调用Spring服务并处理返回的数据,以及如何使用Flex的绑定机制将数据实时显示在用户界面上。 4. **实例演示**:可能包含一个完整的案例,...
- **调用Java服务**:使用Flex SDK中的`RemoteObject`或`HTTPService`组件,通过BlazeDS连接到Java服务,实现数据的请求和响应。 - **部署与测试**:将Java项目部署到服务器,如Tomcat,然后在Flex Builder中运行...
总结来说,这篇博文可能深入探讨了如何使用Flex和Java结合创建一个富互联网应用,通过AMF协议进行高效的数据交换,并提供了源码示例和工具配置方法。如果要深入了解这个主题,可以从提供的博文链接中获取更多详细...
使用 BlazeDS 或 GraniteDS 等中间件,可以轻松建立Flex前端与Java后端之间的通信桥梁。 四、学习资源——FlexClass 在提供的压缩包中,“FlexClass”可能是包含一个或多个示例项目,这些项目展示了如何在Flex中...
Java和Flex ActionScript是两种广泛使用的编程语言,分别在服务器端和客户端展现强大功能。然而,在某些场景下,可能需要将Java代码转换为Flex ActionScript,以实现更加灵活和高效的前端展示。这时,GraniteDS...
标题提到的"spring3.0_struts2.1_hibernate3.3_Flex4整合登录"是一个典型的Java Web开发示例,它结合了Spring、Struts2、Hibernate和Flex这四款强大的框架,以实现一个登录功能。下面将详细介绍这些技术及其整合的...
Java开发者可以通过 BlazeDS 或 GraniteDS 等中间件将Java应用服务暴露给Flex客户端,实现数据的双向通信。 3. **跳转与传值**:在Flex应用中,导航通常是通过Navigator容器实现的,如Accordion或TabNavigator。...
标题中的“Flex移动开发第一次分享”表明这次的内容主要聚焦于使用Adobe Flex技术进行移动应用的开发。...参与者可能会从中了解到如何使用Flex这一工具进行源代码编写,以及如何有效地开发和部署移动应用。
5. **Desktop Development with Flex**:Adobe AIR(Adobe Integrated Runtime)允许开发者使用Flex创建桌面应用,这些应用可以在没有浏览器的情况下运行。AIR为Flex提供了本地操作系统级别的功能,如文件系统访问、...
这些格式可以被 Flex 的 XML 解析器和 JSON 库处理,也可以在 Java 侧使用 JAXB 或 JSON 库进行序列化和反序列化。 5. **事件驱动通信**: 使用 BlazeDS 或类似工具,可以实现 Flex 客户端和 Java 服务器之间的...
Flex是一种基于ActionScript和MXML的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。它由Adobe公司开发,允许开发者创建交互性强、视觉效果丰富的用户界面,尤其适用于Web应用。...