Spring整合RMI的原理

客户端的核心是RmiProxyFactoryBean,包含serviceURL属性和serviceInterface属性。

通过JRMP访问服务。JRMP JRMP:java remote method protocol,Java特有的,基于流的协议。


 

Spring整合使用RMI-HelloWorld例子_xml

服务端暴露远程服务

RmiServiceExporter把任何Spring管理的Bean输出成一个RMI服务。通过把Bean包装在一个适配器类中工作。适配器类被绑定到RMI注册表中,并且将请求代理给服务类。

Spring整合使用RMI-HelloWorld例子_spring_02

 

服务端程序:

1 IHelloWorld.java POJO的接口


1. public interface IHelloWorld {  
2. public String helloWorld();  
3.   
4. public String sayHelloToSomeBody(String someBodyName);  
5. }

 

2 HelloWorld.java POJO的实现


1. public class HelloWorld implements IHelloWorld {  
2.   
3. @Override  
4. public String helloWorld() {  
5. return "Hello World!";  
6.     }  
7.   
8. @Override  
9. public String sayHelloToSomeBody(String someBodyName) {  
10. return "Hello World!" + someBodyName;  
11.     }  
12.   
13. }

 

3 spring配置文件rmi_server_context.xml

1. <?xml version="1.0" encoding="UTF-8"?>  
2. <beans xmlns="http://www.springframework.org/schema/beans"  
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
4. xmlns:tx="http://www.springframework.org/schema/tx"  
5. xsi:schemaLocation="http://www.springframework.org/schema/beans  
6. http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
7. http://www.springframework.org/schema/aop  
8. http://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
9. http://www.springframework.org/schema/tx  
10. http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
11.   
12. <bean id="helloWorld" class="springapp.rmi.rmi.HelloWorld" />  
13.   
14. <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">  
15. <property name="service" ref="helloWorld" />  
16. <!-- 定义服务名 -->  
17. <property name="serviceName" value="hello" />  
18. <property name="serviceInterface" value="springapp.rmi.rmi.IHelloWorld" />  
19. <property name="registryPort" value="8088" />  
20. </bean>  
21.   
22. </beans>

4  服务端启动RMI的代码HelloHost.java

1. public class HelloHost {  
2. public static void main(String[] args) {  
3. new ClassPathXmlApplicationContext(  
4. "rmi_server_context.xml");  
5. "RMI服务伴随Spring的启动而启动了.....");  
6.     }  
7. }

 

 

客户端

1 配置文件rmi_client_context.xml


1. <?xml version="1.0" encoding="UTF-8"?>  
2. <beans xmlns="http://www.springframework.org/schema/beans"  
3. "http://www.w3.org/2001/XMLSchema-instance"  
4. "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
5. "helloWorld" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">  
6. "serviceUrl" value="rmi://10.87.40.141:8088/hello" />  
7. "serviceInterface" value="springapp.rmi.rmi.IHelloWorld" />  
8.     </bean>  
9. </beans>

2 客户端代码 HelloClient.java

1. public class HelloClient {  
2.   
3. public static void main(String[] args) throws RemoteException {  
4. new ClassPathXmlApplicationContext(  
5. "rmi_client_context.xml");  
6. "helloWorld");  
7.         System.out.println(hs.helloWorld());  
8. "Lavasoft"));  
9.     }  
10.