1、Java远程接口:
继承JAVA类remote接口,该类允许使用RMI语法实现接口。
import java.rmi.*;
public interface SomeInterface extends Remote{
public String someMethod1() throws java.rmi,RemoteException;
public int someMethod2(float someparameter) throws java.rmi.RemoteException;
}
2、服务器端软件:
1)实现接口部分定义的每个远程方法。
2)向目录服务注册包含了实现的对象。
建议这2个类做为独立的类分别提供
3)远程接口实现
本例为:
import java.rmi.*;
import java.rmi.server.*;
public class SomeImpl extends UnicastRemoteObject implements SomeInterface{
public SomeImpl() throws RemoteException{super();}
public someMethod1() throws RemoteException {//code}
public someMethod2() throws RemoteException {//code}
}
A)单播RMI:SomeImpl继承UnicastRemoteObject类,使用java远程接口(本例中为SomeInterface),实现接口所有的方法。
B)组播RMI:SomeImpl改成继承MulticastRemoteObject类,使用java远程接口(本例中为SomeInterface),实现接口所有的方法。
4)stub和skeleton生成
A)为对象服务器和对象客房提供代理,分别为skeleton和stub。
B)使用rmic编译远程接口,生成stub和skeleton。
rmic 类名(本例为SomeImpl)
以上的类名是指继承UnicastRemoteObject类或MulticastRemoteObject类,使用java远程接口的类
C)编译成功生成2个代理文件,每个文件的名都以实现类的类名为前缀,本例为:SomeImpl_skel.class和SomeImpl_stub.class
3、对象服务器
初始化并输出远程接口实现对象。
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegisrty;
import java.net.*;
import java.io.*;
public class SomeServer{
public static void main(String args[]){
String portNum="1234",registryURL;
try{
SomeIpl exportedObj=new SomeImpl();//创建远程接口
startRegistry(1234);//启动注册对象服务
//以下输出该对象,在目录服务中注册该对象的引用。本例使用java sdk提供
//的rmiregistry注册该对象。每个RMI注册表维护一个输出对象列
//表,并提供查找这些对象的接口。注册表可以被运行在同一主机上的所有对象服务器共享。
registryURL="rmi://localhost:"+portNum+"/some";//要存储到注册表的对象引用
//格式为:rmi://<host name>:<port number>/<reference name>
Naming.rebind(registryURL,exportedObj);//在注册表存储引用,rebind将覆盖注册表
//中与给定引用名绑定的任何引用,如何不希望覆盖可以使用bind,
//(Naming用于从注册表获取或存储引用)
}
catch (Exception e){
System.out.println("Exception:"+e);
}
}
private static void startzRegistry(int RMIPortNum) throws RemoteException{
try{
Registry registry=LocateRegistry.getRegistry(RMIPortNum);
registry.list();
}
catch (RemoteException ex){
System.our.println("RMI registry cannot be located at port"+RmiPortNum);
Registry registry=LocateRegistry.createRegistry(RMIPortNum);
System.out.println("RMI registry created at port"+RMIPortNum);
}
}
}
}
基于Java远程接口RMI解析与实现
内容版权声明:除非注明,否则皆为本站原创文章。