精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Java>>JAVA编程>>网络编程>>RMI>>RMI规范--第三章(2)

主题:RMI规范--第三章(2)
发信人: daystream()
整理人: biubiu(2000-01-02 15:22:43), 站内信件
3.4 动态类加载
RMI 允许传入 RMI 调用中的参数、返回值和异常为任何可序列化对象。RMI 使


用对象序列化机制将数据从一个虚拟机传输到另一个虚拟机,同时用相应的位置


信息注释调用流,以便在接收端上加载类定义文件。

当解编远程方法调用的参数和返回值以使之成为接收虚拟机中的有效对象时,流


中所有类型的对象都需要类定义。解编进程将首先尝试通过本地类加载上下文(


当前线程的上下文类加载器)中的名称来解析类。RMI 也提供动态加载作为参数


和返回值传送的实际对象类型的类定义的手段(其中远程方法调用的参数和返回


值来自传送终点所指定的网络位置)。这包括远程 stub 类的动态下载 - 该类


对应于特定远程对象实现类(用于包含远程引用)及 RMI 调用中通过值传送的


任何其它类型,例如在解编端的类加载上下文中尚不可用的,声明参数类型的子


类。

要支持动态类加载,RMI 运行时应使用用于编组、解编 RMI 参数和返回值的编


组流的特定 java.io.ObjectOutputStream 和 java.io.ObjectInputStream
子类。这些子类覆盖了 ObjectOutputStream 的 annotateClass 方法和 
ObjectInputStream 的 resolveClass 方法,以便就何处定位包含对应于流中
类描述符的类定义的类文件交换信息。

对于每个写入 RMI 编组流的类描述符,annotateClass 方法将把类对象调用 
java.rmi.server.RMIClassLoader.getClassAnnotation 的结果添加到流中。
该结果可能为空,也可能是表示 codebase URL 路径(以空格分隔的 URL 列表)


的 String 对象。利用该 codebase URL 路径,远程终点可下载所给类的定义
文件。

对于从 RMI 编组流中读取的每个类描述符,resolveClass 方法将从流中读取
单个对象。如果该对象是 String(且 java.rmi.server.useCodebaseOnly 
属性不是 true),则 resolveClass 将返回调用 RMIClassLoader.loadClass 


的结果,并以所注解的 String 对象作为第一个参数,以类描述符中所需类名作


为第二个参数。否则,resolveClass 将返回调用 RMIClassLoader.loadClass 


的结果,并以所需的类名作为唯一参数。

有关 RMI 中类加载的详细信息,参见“RMIClassLoader 类”(5.6)一节。


--
※ 修改:.daystream 于 Dec 23 13:33:33 修改本文.[FROM: 202.96.191.124]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.191.124]

[关闭][返回]