RMI编程技术——概述
Java的RMI(Remote Method Invocation, 远程方法调用)允许运行在一个Java虚拟机上的对象调用动行在另一个Java虚拟机上的对象的方法。这两个Java虚拟机可以是运行在相同的机器上的不同进程里,也可以是通过TCP/IP连接的不同计算机上。
RMI的编程思想
对于客户机端,需要一些特定的代码来引用远程对象。而对于服务器端,必须定义类并实例化类的远程对象,服务器端的代码必须能够登记这些对象,并将他们的方法向客户机导出。
而客户端与服务器商都要实现一个接口,这个接口定义了可以远程调用的方法。
最后一点是,客户机可能将对象当做参数来传递,而远程对象上的方法可以返回一个对象。这点是靠Java对象序列化来实现的。
写到这里,情不自禁的想起了EJB,
看看Home接口,Home对象;远程接口,远程对象;EJB类与EJB对象。
*********************************************************
RMI的接口和类
stub与skeleton
Java RMI 编译器:rmic
RMI版的Hello World
使用RMI技术实现分布式数据库操作
**********************************************************
RMI的接口和类
java.rmi.Remote接口:
public interface Remote{}
在RMI中,远程接口必须满足下列条件
a. 必须至少直接或间接扩展java.rmi.Remote接口
b. 远程方法声明必须包括RemoteException异常。
c. 在远程方法声明中,作为参数或返回值声明的远程对象必须声明为远程接口。
java.rmi.RemoteException 类
抛出的可能的原因是:
a.通讯失败
b.参数或返回值传输或读取时失败
c.协议错误
java.rmi.server.RemoteObject类及其子类
java.rmi.registry.LocateRegistry类
用于获得对特定主机的引导远程对象注册服务程序的引用创建stub,或者创建能在特定端口接受调用的远程对象注册服务程序。
java.rmi.Naming类
此类提供了存储和获得对远程对象注册程序中的远程对象进行引用的方法。
java.rmi.server.RemoveServer类
是服务器实现类UnicastRemoteObject和activatable的通用超类,提供了支持各种各样远程引用主义的框架,RemoteServer类为其子类提供了创建和输出远程对象的抽象方法(使得他们能够被远程调用)。
java.rmi.server.UnicastRemoteObject类
创建和导出远程对象。
java.rmi.RMISecurityManager类
关于安全管理器的设置.注意不能用于applet,因为applet运行在浏览器安全管理器的保护下。
**************************************************************************************
stub与skeleton
远程对象的stub担当远程对象的客户本地代表或代理人的角色。
skeleton负责将调用分配给实际的远程对象实现。
Java RMI编译器:rmic
rmic编译器根据编译后的Java类名,为远程对象生成stub和skeleton。在rmic命令中所给的类必须是经java命令成功编译并经过完全包限定的类
rmic [options] package-qualified-class-name(s)
如rmic编译类文件RmiHelloRemoteObj
rmic RmiHelloRemoteObj
成功将生成
RmiHelloRemoteObj_Skel.class
RmiHelloRemoteObj_Stub.class
这些东西看了一堆,还不如看看代码实际体验一下::
***********************************************************************************
RMI版的HelloWorld