java rmi 实现起来非常麻烦,每个接口都要继承Remote 接口,实现这个接口的类还要继承 UnicastRemoteObject类,总之非常麻烦,关于java rmi的文章 http://damies.iteye.com/blog/51778。
Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度目前,Spring提供对下面四种远程访问技术的支持:
远程方法调用(RMI)。通过使用RmiProxyFactoryBean和RmiServiceExporter,Spring支持传统的RMI(使用java.rmi.Remote interfaces 和 java.rmi.RemoteException)和通过RMI调用器(可以使用任何Java接口)的透明远程调用。
Spring的HTTP调用器。Spring提供一种特殊的远程调用策略支持任何Java接口(象RMI调用器一样),它允许Java序列化能够通过HTTP传送。对应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter。
Hessian。通过使用HessianProxyFactoryBean和HessianServiceExporter,你可以使用Caucho提供的轻量级基于HTTP的二进制协议透明地提供你的业务。
Burlap。Burlap是基于XML的,它可以完全代替Hessian。Spring提供的支持类有BurlapProxyFactoryBean和BurlapServiceExporter。
JAX RPC (TODO).
这里主要讨论RMI的实现。
利用Spring来实现RMI,不用实现remote接口,也不用调用rmic编译stub和skeleton, 服务端可以定义org.springframework.remoting.rmi.RmiServiceExporter类完成RMI服务器实现. 客户端只要定义org.springframework.remoting.rmi.RmiProxyFactoryBean,告知rmi的url和接口。
这里需要Spring相关jar包,自行下载。
首先看服务端:
接口:IUserService.java
实现类:UserService.java
PO类:User.java
服务端spring的配置:
服务端启动代码:TestServer.java
运行出现:
说明服务端运行成功。
客户端:
你可以将服务端class打成jar包,放到客户端的classpath下,一遍客户端可以引用到服务端的接口,spring来生成相关的代理类。
这里我生成的为rmiserver.ar,用myeclipse自动打包的。
java类:DisplayUser.java
spring 配置文件:client.xml
要透过org.springframework.remoting.rmi.RmiProxyFactoryBean,并告知服务的URL、代理的接口即可,就好像在使用本地端管理的服务一样:
测试rmi客户端类:TestClient.java
运行:
在远程服务端console会出现:
----------------进入save-------------------
------年龄----------20-------------------
-------性别---------男-------------------
--------身高--------176.0-------------------
---------体重-------64.0-------------------
---------名字-------军爷-------------------
说明调用成功!!!
最后rmi还会有一些注意的问题及:http://yangwencan2002.iteye.com/blog/284249