众所周之的EJB机制是建立在Java的RMI的基础之上的,要想对EJB有深入的了解,必须掌握RMI的运行机制,在此,我说说我对RMI的一些理解,希望大家同意的和不同意的都站出来讲几句。
Rmi是Java平台上的RPC,但是由于其只支持Java,所以也就免去了程序员编写IDL(接口定义语言)之苦。对于Java与非Java程序之间的通信,可以使用RMI-IIOP.
创建RMI远程对象后,程序员就可以象调用本地对象那样去调用远程对象,其底层通信机制则完全由RMI实现,无须我们操心了。
通常,实现一个RMI系统有4个步骤:
1:定义一个remote interface.
2: 定义一个remote object implementation.
3: 定义客户端程序。
4:编译执行远程对象和客户端。
以下为代码示例
1:Remote接口 (注意:必须extends Remote,方法必须throws RemoteException)
public interface RMI_Add extends java.rmi.Remote {
public long add(long a, long b,long c)
throws java.rmi.RemoteException;
}
2: remote object implementation.(注意:1:extends UnicastRemoteObject 2:构造函数内必须调用UnicastRemoteObject的构造函数,也就是执行super())
3: 定义远程实现类,在此我把服务器的绑定一起在此类中实现,也可另外再写一个类,实现RMI绑定。(注意:一般都用Naming.rebind(),因为rebind()可以覆盖原有的服务名,省去不必要的麻烦。1099端口为默认,也可以不写)
inport java.rmi.Naming;
public class RMI_AddImpl extends java.rmi.server.UnicastRemoteObject implements RMI_Add {
public RMI_AddImpl() throws java.rmi.RemoteException {
super();
}
public long add(long a, long b,long c ) throws java.rmi.RemoteException {
return a + b+ c;
}
public static void main(String[] args) {
try {
RMI_Add d = new RMI_AddImpl();
Naming.rebind("rmi://10.7.3.168:1099/RMI_AddService", d);
} catch (Exception e) { }
}
}
4:编译以上class文件(Javac)
5: rmic编译服务器实现类,在此是RMI_AddImpl 。
6:rmigistry:运行RMI注册程序.
7: 运行客户端代码。