- 浏览: 416187 次
- 性别:
- 来自: 济南
最新评论
-
nianshi:
slideDown就是show的滑动效果版本, slideUp ...
Jquery零碎代码收藏 -
nianshi:
以后编写JS代码,少写<div onclick=&quo ...
Jquery零碎代码收藏 -
nianshi:
获取匹配元素相对父元素的偏移var p = $("p ...
Jquery零碎代码收藏 -
nianshi:
获取匹配元素在当前窗口的相对偏移var p = $(" ...
Jquery零碎代码收藏 -
wuchu:
谢谢
Flex 读取XML配置文件总结
访问远程Java对象
为了实现对远程Java对象的访问,在服务器端,需要完成如下几个 步骤:
1. 创建LiveCycle Data Service Web应用;
2. 实现POJO Java类;
3. 在LiveCycle Data Service Web应用中部署POJO Java类;
4. 配置remote-config.xml文件,声明desination节点,指向POJO Java类。
在客户端应用中,需要实现:
1. 实例化RemoteObject对象,并设定destination等属性;
2. 调用远程Java对象的方法,并传递参数;
3. 注册RemoteObject对象的result和fault事件侦听器,实现侦听器方法以处理返回响应或者调用异常。
我 们已经在第17章的17.5.1节“创建服务器端 LiveCycle Data Service应用”(见第416页)中介绍过如何创建LiveCycle Data Service Web应用。因此,我们这里将从实现POJO Java类开始逐步实现访问远程Java对象。
19.2.1 服务器端:实现POJO Java类
使用POJO类作为远程Java对象
我们当然不会在一本Flex书籍中讲解如何编写POJO Java类。我们须要在这里解释一下可以作为远程Java对象的Java类。
只 有所谓的POJO类能够作为远程Java对象。 POJO(Plain Old Java Object)简称为简单Java对象,通常包含了一系列get和set方法。通常所说的POJO Java类就是纯的Java对象,不实现任何Java对象模型、协议及框架,例如不能实现EJB标准。严格地说,POJO类不能继承其他父类,不能实现接 口。LiveCycle Data Service要求,作为LiveCycle Data Service远程服务的远程Java对象,其构造器不能接受任何参数,也就是说必须为零参数构造器。这样,LiveCycle Data Service才能够构造POJO类实例。
然而,POJO类仍然可以作为后端业务逻辑服务的窗口,例如使用 POJO类访问JNDI,获取EJB服务等,以便进一步集成后端业务逻辑。
POJO Java类的公共方法提供了远程服务。需要注意的是,LiveCycle Data Service保留了一些方法名,因此POJO Java类不能使用这些方法名,我们称这些方法为“保留方法”。保留方法是RemoteObject类或其父类定义的方法。
保留方法包括:
· addHeader();
· addProperty();
· clearUsernamePassword();
· deleteHeader();
· hasOwnProperty();
· isPropertyEnumerable();
· isPrototypeOf();
· registerClass();
· setUsernamePassword();
· toLocaleString();
· toString();
· unwatch();
· valueOf();
· watch()。
此外,作为远程对象的POJO Java类也不能使用“_”作为远程服务方法名的起始字母。
19.2.2 服务器端:部署POJO Java类
在我们使用HTTPService组件和WebService组 件,通过HTTPProxyService服务访问远程HTTP服务和Web服务时,远程服务并不一定要部署在LiveCycle Data Service服务器上。
而调用远程Java对象,则与这种情况大不相同。提供远程服务的 Java类必须与Flex应用部署在同一LiveCycle Data Service的Web应用中。
部署POJO Java类的唯一目的就是当客户端RemoteObject组件向LiveCycle Data Service发出访问请求时,LiveCylce Data Service能够找到对应的Java类。
因 此,我们须要把POJO Java类部署到LiveCycle Data Service的类路径中。我们可以直接将POJO Java类文件(.class文件)按照类包结构部署到Web应用的WEB-INF\classes目录下,或者将POJO Java类打包为Jar包(.jar文件),部署在WEB-INF\lib目录中。
19.2.3 服务器端:配置remote-config.xml
原始remote-config.xml文件
lcds-root/webapps/ lcds目录中包含了空的remote-config.xml文件。我们先来看看原始的remote-config.xml文件。
请参考图19-2,该图展示了原始的remote- config.xml文件,并对主要节点做了注释。
图19-2 尚未配置目标的remote-config.xml
配置远程服务目标
在标 签<service></service>内,添加<destination>< /destination>标签来声明新的远程对象目标。
下面的代码显示了包含一个destination定义的 remote-config.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"
default="true"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
<destination id="shoppingCart">
<properties>
<source>com.mark.pojo.shoppingCart</source>
<scope>session</scope>
</properties>
</destination>
</service>
destination节点的source属性说明了远程对象 服务的目标,也就是远程Java对象。在设定source属性时,必须使用全路径java类名称来指向部署在LiveCycle Data Service类路径中的Java类。
desitnation节点的scrop属性的可选值为 application、session和request,指定了远程对象实例作用域。
如果作用域为request,那么服务器会为每一次请求都创建一个 远程Java对象实例,request是默认的作用域。
如 果作用域是session,服务器则为每一个会话创建一个共享的 远程Java对象实例。通常来说,连接服务器的每一个浏览器实例构成了一个会话。例如,如果我们启动Firefox来访问连接LiveCycle Data Service的Flex应用,启动的Firefox就是一个浏览器实例。在该Firefox浏览器中,如果打开其他标签页也访问同一Flex应用,那么 这些应用就处于同一会话中,共享同一远程对象实例。
如果作用域是application,那么服务器则为每一个 Flex应用创建一个远程的Java对象实例。
限制远程Java对象可访问方法
有 些时候,远程Java对象定义了许多公共方法,但是我们也许并不 希望这些方法都开放给Flex应用。在这种情况下,可以通过include-methods属性定义允许访问的方法列表,如果Flex应用试图访问该列表 外的方法就会导致异常,在客户端会调用fault事件。
include- methods属性位于destination节 点的<properties></properties>内。下面的设定只允许Flex客户端访问shoppingCart类的 purchaseItem和deleteItem方法。
<destination id="shoppingCart">
<properties>
<source>com.mark.pojo.shoppingCart</source>
<scope>session</scope>
<include-methods>
<method name="purchaseItem"/>
<method name="deleteItem"/>
</include-methods>
</properties>
</destination>
如 果你只想限制对某几个公共方法的远程访问,使 用<exclude-methods></exclude- methods>属性会更加方便。下面的配置设定了Flex客户端可以访问shoppingCart类中除了purchaseItem方法之外的其 他公共方法。
<destination id="shoppingCart">
<properties>
<source>com.mark.pojo.shoppingCart</source>
<scope>session</scope>
<exclude-methods>
<method name="purchaseItem"/>
</exclude-methods>
</properties>
</destination>
19.2.4 客户端:实例化RemoteObject组件对象
创建RemoteObject组件对象的MXML标签语法如下:
<mx:RemoteObject id=”remoteObj” destination=”shoppingCart”/>
id属性指定了RemoteObject组件实例名称,在接下来调 用该服务对象及处理远程服务响应时使用。destination属性指定了要连接的远程服务的目标,该值必须与服务器端remote- config.xml文件中配置的目标id属性相匹配。
我们也可以使用ActionScript代码来创建 RemoteObject对象:
var remoteObj:RemoteObject = new RemoteObject();
remoteObj.destination = "shoppingCart";
19.2.5 客户端:调用远程Java对象方法
使用RemoteObject组件最终访问的是远程Java对象公 开的公共方法。调用远程Java对象方法的最简单方式即直接调用方法名:
remoteObj.methodName(parm1,parm2,…);
在 MXML标签中,我们可以在用户事件中直接使用这种方式调用远程 服务。例如,如下代码实现了当用户点击“购物”按钮时,调用remoteObj.purchase(‘TV’)。(假定我们配置的远程Java对象开放了 公共方法purchase(String product))。
<mx:RemoteObject id="remoteObj" destination="shoppingCart"/>
<mx:Button label="购物" click="remoteObj.purchase(‘TV’)"/>
在 本章“服务器端:实现并部署POJO Java类”节中,我们介绍过,远程Java对象应该避免使用保留方法名。然而,如果由于不可避免的原因你不得不这样做,例如你的远程Java对象开发者 是个“disconnect”方法名的偏执狂,那么使用RemoteObject类的getOperation方法可以缓解你的尴尬。
public function getOperation(name:String):Operation
例如,远程Java对象开放了公共方法toString(),我们 可以通过如下代码创建Operation对象来调用该方法:
public var remoteObj:RemoteObject = new RemoteObject();
remoteObj.destination = "shoppingCart";
//创建代表toString方法的操作对象
public var oper:Operation = remoteObj.getOperation("toString");
//调用该方法
oper.send();
19.2.6 客户端:处理响应和异常
RemoteObject 使用异步方式调用远程Java对象。在调 用操作后,Flex应用并不停止执行其他操作来等待响应,而是允许用户继续交互,执行其他操作。当响应返回时,或者抛出异常时,系统调度result事件 或者fault事件来通知应用,以执行事件侦听器方法。也就是说,我们通过侦听RemoteObject组件的result和fault事件处理响应和异 常。这种方式与处理远程HTTP服务和Web服务响应的方式如出一辙。
当RemoteObject调用远程方法成功时,系统会调度 result事件。开发者可以使用result事件生成的mx.rpc.events.ResultEvent对象访问服务响应数据。
如下所示,我们为RemoteObject对象实例添加 result事件和fault事件侦听器,并声明侦听器方法。
……
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
//RemoteObject对象result事件侦听器方法
private function roRespondHandler(event:ResultEvent):void{
//处理远程服务响应
}
//RemoteObject对象fault事件侦听器方法
private function roErrorHandler(event:FaultEvent):void{
//处理远程服务调用异常
}
]]>
</mx:Script>
<!--实例化远程对象组件-->
<mx:RemoteObject id="remoteObj" destination="shoppingCart"
result="roRespondHandler(event)" fault="roErrorHandler(event)"/>
<!--调用远程对象组件-->
<mx:Button label="购物" click="remoteObj.purchase()"/>
……
我们可以采用ResultEvent.result属性或远程服务 组件的Operation.lastResult属性两种方式获取返回数据。
与处理Web服务返回对象类似,对于复杂类型的返回数据,例如数组 或自定义对象,默认情况下,Flex会将数组类型数据封装为mx.collection.ArrayCollection,将自定义对象类型封装为 mx.utils.ObjectProxy。
如果远程对象调用失败,系统会触发fault事件,开发者可以为该 事件定义侦听器方法,使用fault事件生成的mx.rpc.events.FaultEvent对象处理异常。具体方式可以参见第18章的18.1.6 节“处理异常”(见第425页)。
19.2.7 使用<mx:operation>处理多个方法
类似Web服务能够提供多个操作,远程Java对象也可以开放多个 公共方法,供RemoteObject组件调用。我们可以使用operation类或<mx:method>标签,为一个 RemoteObject组件调用多个远程方法。
使用这种方式还能够为处理不同方法的响应提供更多的选择,我们可以 为每一个方法定义专有的result和fault事件侦听器,而不是仅仅在RemoteObject组件对象上定义统一的侦听器。
假设我们定义了Java类shoppingCart,开放了公共方 法clearCart()、purchaseItem(String itemName,int quantity)、deleteItem(String itemName)等方法。
使用mx.rpc.remoting.Operation类
mx.rpc.remoting.Operation 类专门用于为 RemoteObject类指定远程对象的操作。Operation 是服务上的单个方法,可以通过在服务上调用同名函数,即RemoteObject.operationName()的方式,或者在服务上访问作为属性的 Operation 并调用 send() 方法来调用 Operation,比如RemoteObject.operation.send()。
使用<mx:method>标签
我们也可以使用<mx:method>标签为 RemoteObject组件定义多个方法。
<mx:method> 标签必须内嵌 在<mx:RemoteObject></mx:RemoteObject>标签对内,通过name属性指定匹配的远程Java 对象方法名称。开发者可以为每个method标签注册result和fault事件侦听器方法,来分别处理远程Java对象不同方法的响应或调用异常。
在<mx:method></mx:method> 标签对中,可以嵌入<mx:arguments>标签指定传递给远程方法的参数。Flex不要求使用与远程Java对象方法参数名称完全相同 的名字来定义<mx:arguments>标签。但是,当调用多参的远程方法时,必须保证<mx:arguments>标签指定 的参数顺序与远程方法中的参数顺序相匹配。
<!--实例化远程对象组件-->
<mx:RemoteObject id="remoteObj" destination="shoppingCart"
fault="roErrorHandler(event)">
<mx:method name="clearCart" result="clearROResultHandler(event);"/>
<mx:method name="deleteItem"
result="deleteROResultHandler(event);">
<mx:arguments>
<item>{comboItem.selectedItem.data}</item>
</mx:arguments>
</mx:method>
<!-—参数顺序必须与purchaseItem(String itemName,int quantity)方法相匹配-->
<mx:method name="purchaseItem"
result="purchaseROResultHandler(event);">
<mx:arguments>
<item>{comboItem.selectedItem.data}</item>
<qty>{txtQuantity.text}</qty>
</mx:arguments>
</mx:method>
</mx:RemoteObject>
由于我们已经在<mx:method>标签中定义了参 数,因此只须要使用无参数的send()方法实现调用。例如:
<!--调用远程Java对象purchaseItem方法 -->
<mx:Button label="购物" click="remoteObj.purchaseItem.send()"/>
发表评论
-
Flex小记录
2011-02-24 10:18 1287Flex读取XML: <mx:HTTPServic ... -
flex实现滑动显示隐藏效果
2010-12-30 15:30 1591鼠标划过的时候显示菜单栏 ,鼠标移开后隐藏菜单栏。比较常用 ... -
flex DataTimePicker时间控件
2010-12-27 11:54 1311两种DatatimePicker: 1.Datatim ... -
ActionScript 生成伪Guid
2010-12-24 09:52 1201在一个Flash制作的图片上传程序中(使用了FileRefer ... -
Flex中Image组件怎么才能非等比例拉伸图片
2010-12-23 15:49 1504Image组件怎么才能非等比例拉伸图片 设 ... -
Flex中Accordion用法
2010-12-23 11:45 3076<? xml version = & ... -
Flex(替代session过期)实现用户长时间不操作要求重新登录的处理
2010-12-23 11:08 1499flex(替代session过期)用户长时间不操作要求重新登录 ... -
ActionScript 3.0 Socket编程
2010-12-23 09:56 1167在使用ActionScript3.0进行编程 ... -
12个简单易用的flex函数
2010-12-21 10:10 11311.拷贝内容到剪贴板: ... -
Flex自定义控件——Pagebar分页控件
2010-12-20 09:41 5255开发时经常遇到用一个DataGrid分页显示 ... -
Flex资源,很全,很牛!
2010-12-20 09:30 14571、as3ebaylib http://code ... -
Flex 窗体 最大化、最小化实例
2010-12-20 09:28 2709---导入flexMdi.swc (http ... -
在Flex中复制文字到操作系统的剪贴板
2010-12-15 11:18 1232这个实例演示了怎么样使用System. ... -
Flex让Slider控件拖动时显示Tooltip
2010-12-14 16:10 1903格式化与自定义Slider中显示的Tooltip ... -
Flex给Alert加个Icon
2010-12-14 16:05 1278给Alert加个Icon 很简单只要先 Embed 一 ... -
在Flex中用Validator验证数字、字符串、Email、电话号码等
2010-12-14 09:54 4310mx.validators ... -
Flex中使用FileReference类下载文件
2010-12-14 09:47 1789下面的实例演示了Flex中的 File ... -
Flex使用ArrayCollection的filterFunction属性过滤DataGrid
2010-12-14 09:42 1793下面的实例演示了在Flex中怎样使用 ... -
Flex 树形控件(Tree )的使用
2010-12-13 16:24 3470一、树形控件的常用属性 1、dragMoveE ... -
FLEX3中应用CSS完全详解手册(下)
2010-12-13 11:40 877myTabs中的设置 cornerRadiusTab ...
相关推荐
7. **部署和测试**:配置完成后,需要将Flex应用程序部署到服务器,然后通过浏览器访问来测试远程对象的调用是否成功。Flex Builder或IntelliJ IDEA等IDE提供了内置的调试工具,可以帮助开发者追踪和调试远程调用。 ...
在Flex和Java的远程调用中,RemoteObject扮演了中间人的角色,它使得Flex客户端可以像调用本地对象一样调用Java服务器上的方法。 要实现Flex与Java的RemoteObject通信,首先需要在Flex客户端创建一个RemoteObject...
在与Flex3的集成中,可能需要设计一套数据访问接口,使Flex客户端能通过RemoteObject调用这些接口来读取、更新和删除数据。 在实际项目中,"MANAGER"可能是一个目录或者文件,它可能包含了项目的管理相关的代码或者...
- `<mx:RemoteObject id="fcjInstance" destination="fcj"/>`定义了远程对象,并通过`destination`属性指定了Java对象的ID,这里是`fcj`。 当Flex应用启动时,会调用`init()`函数,进而调用Java对象中的`getString...
标题中的“flex的远程对象调用”指的是在Adobe Flex应用程序中使用Remote Object(RO)服务进行远程通信的技术。Flex是一个开源的、基于ActionScript的框架,用于构建富互联网应用程序(RIA)。通过RO服务,Flex应用...
标题中的“flex远程对象调用”指的是Flex应用程序与服务器端应用进行通信的一种技术。Flex作为客户端的富互联网应用(RIA)框架,可以使用Remote Object(RO)服务来调用服务器上的业务逻辑,实现数据的交互。远程...
3. **创建Flex客户端**:在Flex项目中,引入RemoteObject组件,通过设置其`endpoint`属性来指定服务器地址和端口,以及服务名称。例如,`remoteObject.endpoint = "rtmp://localhost/oflaDemo/myService"`。 4. **...
根据描述,本项目可能涉及了这两种方法中的至少一种,以访问远程的Spring服务。 Spring是一个广泛使用的Java企业级应用框架,提供依赖注入(DI)、面向切面编程(AOP)等功能。在与Flex集成时,Spring通常作为服务...
使用 Flex 4.5 访问数据是构建动态应用程序的重要组成部分,它提供了多种技术来实现与后端服务的交互,如 HTTPService、WebService 和 RemoteObject 组件。 Flex 技术在数据访问方面提供了一种不同于传统基于 HTML ...
通过这种方式,Flex应用能够利用RemoteObject以面向对象的方式与Java服务端进行深度交互,实现数据库的读写操作。这种做法使得客户端与服务端的通信更加高效且易于维护,特别适合需要复杂业务逻辑的场景。然而,这也...
- 远程对象访问服务:选择BlazeDS - 勾选`使用WTP创建Java/Flex组合项目` - 目标运行时:选择Apache Tomcat 6.0 - BlazeDS WAR文件:指定BlazeDS的WAR文件路径 - 输出文件夹URL:设置为`...
1. 引入库:在Flex项目中,需要引入相关的库,如mx.rpc.soap和flex.data.services,以支持远程服务调用和数据访问。 2. 定义数据模型:在Flex中创建ActionScript类,这些类通常对应于数据库中的表结构,定义相应的...
1. **远程对象(RemoteObject)服务**:在Flex中,RemoteObject是用于与后端服务器进行通信的主要组件,它支持AMF(Action Message Format)协议,这是一种高效的数据交换格式,可以实现Java和Flex之间的快速数据...
这些文件分别用于定义消息传递、代理服务、远程对象调用以及服务配置。具体内容可以参考FlexConfig.rar文件。此外,还需要修改web.xml文件,添加相关配置项以启用BlazeDS服务。例如,设置`flex.class.path`、注册`...
4. **Flex客户端配置**:在Flex项目中,需要导入BlazeDS的库,然后通过Flex的RemoteObject或HTTPService组件来调用Java服务。 5. **数据交换**:BlazeDS的AMF协议可以将Java对象透明地转换为Flex可以理解的格式,...
接着,在Flex项目中,通过Flex的RemoteObject或HTTPService组件来调用Spring服务,实现客户端和服务器之间的通信。 总的来说,Flex与Spring的联合开发提供了前后端分离、高效通信的解决方案,适用于需要构建富用户...
通过以上步骤,你可以在Flex应用中利用Java对象有效地连接到SQL Server数据库,实现数据的动态交互。在实际开发中,还需要根据具体业务需求调整和扩展这些基础步骤。通过深入理解Flex、Java和数据库之间的协作机制,...
- BlazeDS允许Flex客户端通过RemoteObject调用Java服务端的方法,实现前后端的双向通信。 - BlazeDS可部署在多种Web应用服务器上,如Tomcat,提供AMF管道来连接Flex和Spring。 5. **集成Flex、Spring和Hibernate*...
在默认情况下,BlazeDS会为每个远程对象请求创建一个服务器端Java对象的实例,但这与Spring的依赖注入不兼容,因为Spring的bean是由其容器创建和管理的。因此,整合Spring和BlazeDS使得Flex可以直接使用由Spring管理...