`
chen422520
  • 浏览: 26643 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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)

 

这里的接口所在的包必须和服务器所在的包名一样,同时接口名称也必须一样,

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics