您的位置:jsp学习站首页 >> JAVA类 >> JAVA基础 >> 漫谈EJB (2)

漫谈EJB (2) (6)

[ 来源:互网络 | 更新日期:2007-09-16 12:11:23 | 浏览次数:3146]
简介:1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。    remote method invocation决不简单,需要考虑几个问题:    marshalling和unmarshalling
;和toString 方法的正确远程语义(如果需要)。 


远程方法调用中的参数传递 

    传给远程对象的参数或源于它的返回值可以是任意可序列化的 Java 对象。这包括 Java 基本类型, 远程?Java 对象和实现 java.io.Serializable 接口的非远程 Java 对象。有关如何使类序列化的详细信息,参见 Java“对象序列化规范”。本地得不到的作为参数或返回值的类,可通过 RMI 系统进行动态下载。 

传递非远程对象 

    非远程对象将作为远程方法调用的参数传递或作为远程方法调用的结果返回时,是通过复制传递的;也就是使用 Java 对象序列化机制将该对象序列化。因此,在远程对象调用过程中,当非远程对象作为参数或返回值传递时,非远程对象的内容在调用远程对象之前将被复制。从远程方法调用返回非远程对象时,将在调用的虚拟机中创建新对象。 

传递远程对象 

    当将远程对象作为远程方法调用的参数或返回值传递时,远程对象的 stub 程序即被传递出去。作为参数传递的远程对象仅能实现远程接口。 

引用的完整性 

    如果一个对象的两个引用在单个远程方法调用中以参数形式(或返回值形式)从一个虚拟机传到另一个虚拟机中,并且它们在发送虚拟机中指向同一对象,则两个引用在接收虚拟机中将指向该对象的同一副本。进一步说就是:在单个远程方法调用中,RMI 系统将在作为调用参数或返回值传递的对象中保持引用的完整性。 

类注解 

    当对象在远程调用中被从一个虚拟机发送到另一个虚拟机中时,RMI 系统在调用流中用类的信息 (URL) 给类描述符加注解,以便该类能在接收器上加载。在远程方法调用期间,调用可随时下载类。 

参数传输 

    为将 RMI 调用的参数序列化到远程调用的目的文件里,需要将该参数写入作为java.io.ObjectOutputStream 类的子类的流中。ObjectOutputStream 子类将覆盖 replaceObject 方法,目的是用其相应的 stub 类取代每个远程对象。对象参数将通过 ObjectOutputStream 的 writeObject 方法写入流中。而ObjectOutputStream 则通过 writeObject 方法为每个写入流中的对象(包含所写对象所引用的对象)调用 replaceObject 方法。RMIObjectOutputStream子类的 replaceObject 方法返回下列值: 
如果传给 replaceObject 的对象是 java.rmi.Remote 的实例,则返回远程对象的 stub 程序。远程对象的 stub 程序通过对java.rmi.server.RemoteObject.toStub方法的调用而获得。如果传给 replaceObject 的对象不是 java.rmi.Remote 的实例,则只返回该对象。 

    RMI 的 ObjectOutputStream 子类也实现 annotateClass 方法,该方法用类的位置注解调用流以便能在接收器中下载该类。有关如何使用 annotateClass的详细信息,参见“动态类加载”一节。因为参数只写入一个 ObjectOutputStream,所以指向调用程序同一对象的引用将在接收器那里指向该对象的同一副本。在接收器上,参数将被单个ObjectInputStream 所读取。 

    用于写对
[1] [2] [3] [4] [5] [6] [7]
Tags:关键字:漫谈EJB (2)
责任编辑:glen