Rmi远程调用

来源:互联网 发布:帝国cms营销展示模板 编辑:程序博客网 时间:2024/05/16 07:19

不想再各种查一遍了,写个总结记录

编写被调用的程序

1.创建远程接口RemoteService,继承(extends)java.rmi.Remote,里面的抽象方法抛出java.rmi.RemoteException

2.创建实现类RemoteServiceImpl,继承java.rmi.server.UnicastRemoteObject,实现RemoteService

3.指定通信端口的类,本地调用可省略,远程调用需要指定

import java.rmi.server.*;import java.io.*;import java.net.*;public class RMISocket extends RMISocketFactory {public Socket createSocket(String host, int port) throws IOException{return new Socket(host,port);}public ServerSocket createServerSocket(int port) throws IOException {if (port==0) port = 'XXXX';return new ServerSocket(port);}}

XXXX为指定的通信端口号

4.注册程序的类Start.class,代码可直接写在main方法里:

try {
RMISocketFactory.setSocketFactory(new RMISocket());//本地调用可省略RemoteService service=new RemoteServiceImpl();Context namingContext=new InitialContext();namingContext.rebind("rmi://xxx.xx.x.xxx:1099/name", service);} catch (NamingException e) {e.printStackTrace();}
xxx.xx.x.xxx为ip地址,name为注册名称,可自定义,此方法也要抛出java.rmi.RemoteException
注册被调用的程序

打开cmd

1.切换到程序的bin目录下
2.rmic cn.aaa.bbb.RemoteServiceImpl,完成后会在bin目录下生成一个RemoteServiceImpl_Stub.class文件
3.在bin目录下创建mypolicy.policy,内容
grant {   
permission java.security.AllPermission "", "";   //"", ""的内容可根据需要自定义
};
4.start rmiregistry(linux下是rmiregistery)
5.java -Djava.security.policy=mypolicy -Djava.ext.dirs=..\lib cn.aaa.bbb.Start

..\lib是被调用程序需要引用的jar目录,没有就不用写

打包被调用的程序

1.eclipse里直接右键export-jar file,其他默认下一步即可

2.将生成的jar file用压缩软件打开,将RemoteServiceImpl_Stub.class文件添加到RemoteServiceImpl同一目录下

编写调用的程序

1.将打包好的jar file添加到程序目录,并build path

2.调用的代码

try{RemoteService service=(RemoteService)Naming.lookup("rmi://xxx.xx.x.xxx:1099/name");result=service.method(param);}catch(Exception e){e.printStackTrace();}
注:远程调用,被调用的服务器需要打开端口1099和XXXX


原创粉丝点击