发表于: 2017-07-06 15:45:23

2 1123


今日完成

任务7的api接口实现进展卡住了,先做任务8,9分布式吧

使用spring对RMI的支持,可以非常容易地构建你的分布式应用。在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。

java rmi的实现

创建接口继承remote

  1. package rmi.java;  
  2.   
  3. import java.rmi.Remote;  
  4. import java.rmi.RemoteException;  
  5. /**   
  6.  * 定义远程接口,必须继承Remote接口,   
  7.  * 其中所有需要远程调用的方法都必须抛出RemoteException异常    
  8.  */   
  9. public interface IHello extends Remote {  
  10.       
  11.     public String sayHello(String name) throws RemoteException;     
  12.     public int sum(int a, int b)throws RemoteException;   
  13.   
  14.   

创建接口的实现类

  1. package rmi.java;  
  2.   
  3. import java.rmi.RemoteException;  
  4. import java.rmi.server.UnicastRemoteObject;  
  5.   
  6. public class HelloImpl extends UnicastRemoteObject implements IHello{  
  7.       
  8.     private static final long serialVersionUID = 1961558474342609777L;  
  9.       
  10.         public HelloImpl()throws RemoteException {  
  11.         super();  
  12.     }  
  13.   
  14.   
  15.     @Override  
  16.     public String sayHello(String name) {  
  17.         return "Hello, " + name;    
  18.     }  
  19.   
  20.   
  21.     @Override  
  22.     public int sum(int a, int b) {  
  23.           
  24.         return a+b;  
  25.     }  
  26.   
  27. }  

创建应用类,注册和启动服务端RMI,以被客户端调用

  1. package rmi.java;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import java.rmi.AlreadyBoundException;  
  5. import java.rmi.Naming;  
  6. import java.rmi.RemoteException;  
  7. import java.rmi.registry.LocateRegistry;  
  8.   
  9.   
  10. public class HelloServer {  
  11.     public static void main(String args[]) {  
  12.         try {  
  13.             //创建一个远程对象  
  14.             IHello rhello = new HelloImpl();      
  15.             //生成远程对象注册表Registry的实例,并指定端口为8888(默认端口是1099)  
  16.             LocateRegistry.createRegistry(8888);  
  17.   
  18.             //把远程对象注册到RMI注册服务器上,并命名为RHello  
  19.             //绑定的URL标准格式为:rmi://host:port/name(协议名可以省略,下面两种写法都可以)  
  20.             Naming.bind("rmi://127.0.0.1:8888/RHello", rhello);  
  21.           
  22.             System.out.println(">>INFO:远程IHello对象绑定成功!");  
  23.         } catch (RemoteException e) {  
  24.             System.out.println("创建远程对象发生异常!");  
  25.             e.printStackTrace();  
  26.         } catch (AlreadyBoundException e) {  
  27.             System.out.println("发生重复绑定对象异常!");  
  28.             e.printStackTrace();  
  29.         } catch (MalformedURLException e) {  
  30.             System.out.println("发生URL畸形异常!");  
  31.             e.printStackTrace();  
  32.         }  
  33.     }  
  34. }  


下面建立客户端

 因为客户端需要有服务端那边提供的接口,才可以访问,所以要将服务端的IHello接口完全拷贝(连同包)到客户端,当然为了方便,你在客户端工程中新建一个完全一样的接口也可以。实际运用中通常是要服务端接口打成jar包来提供的。


创建客户端调用类

  1. package rmi.java;  
  2.   
  3. import java.rmi.Naming;  
  4.   
  5.   
  6. public class HelloClient {  
  7.     public static void main(String args[]) {  
  8.         try {  
  9.             // 在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法  
  10.             IHello rhello = (IHello) Naming.lookup("rmi://127.0.0.1:8888/RHello");  
  11.             System.out.println(rhello.sayHello("world"));  
  12.             System.out.println(rhello.sum(454, 5457));  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  
  17. }  


收获

初步理解rmi的概念

困难

明日计划

整合spring 和rmi


返回列表 返回列表
评论

    分享到