转载:http://blogger.org.cn/blog/more.asp?name=lhwork&id=18181
RMI 是从 JDK 1.1 开始就出现的 API 功能,它让客户端在使用远程对象所提供的服务时,就如何使用本地对象一样,然而 RMI 在使用时必须一连串繁复的手续,像是服务介 面在定义时必须继承 java.rmi.Remote 接口、服务 Server 在实作时必须继承 java.rmi.UnicastRemoteObject 类 别、必须使用 rmic 产生 stub 与 skeleton 等等。透过org.springframework.remoting.rmi.RmiServiceExporter,Spring 简化了这些手续,来实际看看例子,了解Spring在RMI上的使用与简化,首先定义服务对象的接口:
可以看到服务对象的接口不用继承java.rmi.Remote界面,而在实作时也不用继承java.rmi.UnicastRemoteObject,例如:<o:p></o:p>
接下来在伺服端,您只要在Bean定义档中定义,让Spring管理、生成Bean,即可注册、启动RMI服务,例如:<o:p></o:p>
很简单,只要告诉org.springframework.remoting.rmi.RmiServiceExporter服务对象、名称与要代理的接口,之后Spring读取完定义文件并生成Bean实例后,RMI服务就会启动。
接下来看看客户端要如何实作,只要透过org.springframework.remoting.rmi.RmiProxyFactoryBean,并告知服务的URL、代理的接口即可,就好像在使用本地端管理的服务一样,例如Bean定义档可以如下撰写:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="someServiceProxy"
class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl">
<value>rmi://localhost/SomeService</value>
</property>
<property name="serviceInterface">
<value>onlyfun.caterpillar.ISomeService</value>
</property>
</bean>
</beans>
以下是个简单的客户端呼叫远程服务的例子:<o:p></o:p>