java Rmi 简单实例
1? RMI 简介
?? RMI ,远程方法调用(Remote Method Invocation) 是Enterprise javaBeans的支柱,是建立分布式java应用程序的方便途径。RMI 是非常容易使用的,但是它也是非常强大的。RMI是基于接口,RMI 构架记入一个重要的原理:定义接口定义即可的具体实现是分开的,也就是面向接口编程。
2 RMI 的主要步骤:
? (1) 创建远程接口及声明远程方法
? (2) 实现远程接口及远程方法? (需要继承UnicastRemoteObject类)
? (3) 启动RMI注解服务,并注册远程对象
? (4) 客服端查找远程对象,并调用远程方法
? (5) 运行测试
?3 简单例子
?
?服务端:
?
定义接口:
?
public interface RimMonitorService extends Remote {
?? ?public String interactive()throws RemoteException;
}
?
接口实现类
public class RimMonitorServerImpl extends UnicastRemoteObject implements RimMonitorService {
?
?
?/**
? *
? */
?private static final long serialVersionUID = 1L;
?
?@Override
?public String interactive(int index) throws RemoteException {
??
?????? switch(index){
?????? case 1:
?????????? return "成功的!";
?????? case 2:
????????? return "失败的!";
?????? }??
?????? return "";
?}
?
?public RimMonitorServerImpl() throws RemoteException {
??super();
?}
?
}
服务端注册:
?public class RmiServer {
?
?public String? ip="localhost";
?
?public int port=8889;
?
?public void init(){
??
??try {
???LocateRegistry.createRegistry(port);
???
???RimMonitorService rimMonitorService=new RimMonitorServerImpl();
???
???Naming.bind("//"+ip+":"+port+"/com", rimMonitorService);
???
??} catch (RemoteException e) {
???e.printStackTrace();
??} catch (MalformedURLException e) {
???e.printStackTrace();
??} catch (AlreadyBoundException e) {
???e.printStackTrace();
??}
?}
?
?
?public static void main(String[] args) {
??
??
??RmiServer server=new RmiServer();
??server.init();
??System.out.println("服务初始化成功!");
??
?}
?
客服端
?
接口定义
?
public interface RimMonitorService extends Remote {
?
?public String interactive(int index)throws RemoteException;
}
客服端调用?
?
public class RimClient {
?
?public String ip="localhost";
?
?public int port=8889;
?
?public RimMonitorService rimService;
?
?public String interactive(int funindex) throws RemoteException{
??rimService=getRimServer();
??if(rimService!=null)
???return rimService.interactive(funindex);
??return "";
?}
?
?public RimMonitorService getRimServer(){
??
??try {
???rimService=(RimMonitorService)Naming.lookup("rmi://"+ ip+":"+port+"/com");
??} catch (MalformedURLException e) {
???e.printStackTrace();
??} catch (RemoteException e) {
???e.printStackTrace();
??} catch (NotBoundException e) {
???e.printStackTrace();
??}
??return rimService;
?}
?
?public static void main(String[] args) {
??
??RimClient client=new RimClient();
??try {
???System.out.println(client.interactive(1));
???System.out.println(client.interactive(2));
??} catch (RemoteException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??
??
?}
}
?
在这里需要 注意的是:客服端调用 可能会出现
java.lang.ClassNotFoundException: xx.xx(no security manager: RMI class loader disabled)
?
这里的接口所在的包必须和服务器所在的包名一样,同时接口名称也必须一样,
?
----------------------承接java 项目
java web ,
java 中间件开发
电话 13534066735
QQ?? 239052343
