Spring整合Rmi总结

在Spring整合Rmi中:

服务端使用了org.springframework.remoting.rmi.RmiServiceExporter

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

客户端使用了org.springframework.remoting.rmi.RmiProxyFactoryBean

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

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

 

下面给出简单例子

服务端程序:

新建接口:

 

[java] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;">/** 
     2  * IRmiServer.java 
     3  * 版权所有(C) 2012  
     4  * 创建:cuiran 2012-08-08 11:12:40 
     5  */  
     6 package com.cayden.rmi;  
     7   
     8 /** 
     9  * TODO 
    10  * @author cuiran 
    11  * @version TODO 
    12  */  
    13 public interface IRmiServer {  
    14       
    15     public boolean test();  
    16   
    17 }  
    18 </span>  

     


再实现该接口的方法:

[java] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;">/** 
     2  * RmiServerImpl.java 
     3  * 版权所有(C) 2012  
     4  * 创建:cuiran 2012-08-08 11:13:24 
     5  */  
     6 package com.cayden.rmi.impl;  
     7   
     8 import com.cayden.rmi.IRmiServer;  
     9   
    10 /** 
    11  * TODO 
    12  * @author cuiran 
    13  * @version TODO 
    14  */  
    15 public class RmiServerImpl implements IRmiServer {  
    16   
    17     /* (non-Javadoc) 
    18      * @see com.cayden.rmi.IRmiServer#test() 
    19      */  
    20     @Override  
    21     public boolean test() {  
    22       
    23         System.out.println("调用了我--服务端 O(∩_∩)O哈!");  
    24           
    25         return true;  
    26     }  
    27   
    28 }  
    29 </span>  

     

在src下新建applicationContext.xml 配置文件

[html] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;"><?xml version="1.0" encoding="UTF-8"?>  
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.5//EN" "file:/usr/local/tomcat_report/lib/spring-beans-2.0.dtd">  
     3 <beans>  
     4       
     5         <!-- rmi -->  
     6     <bean id="rmiService" class="com.cayden.rmi.impl.RmiServerImpl">  
     7     </bean>  
     8   
     9     <bean id="remoteRmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">  
    10         <property name="serviceName">  
    11             <value>remoteService</value>  
    12         </property>  
    13         <property name="service" ref="rmiService" />  
    14         <property name="serviceInterface">  
    15             <value>com.cayden.rmi.IRmiServer</value>  
    16         </property>  
    17         <property name="registryPort">  
    18             <value>9400</value>  
    19         </property>  
    20         <property name="servicePort">  
    21             <value>9401</value>  
    22         </property>  
    23     </bean>  
    24 </beans></span>  

     


启动服务端的类【MainServer.java】

[java] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;">package com.cayden.rmi;  
     2   
     3 import org.springframework.context.ApplicationContext;  
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;  
     5 /** 
     6  * MainServer.java 
     7  * 版权所有(C) 2012  
     8  * 创建:cuiran 2012-08-08 11:44:07 
     9  */  
    10   
    11 /** 
    12  * TODO 
    13  * @author cuiran 
    14  * @version TODO 
    15  */  
    16 public class MainServer {  
    17   
    18     /** 
    19      * TODO 
    20      * @param args 
    21      */  
    22     public static void main(String[] args) {  
    23         // TODO Auto-generated method stub  
    24         System.out.println("rmi服务端启动");  
    25         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  
    26           
    27         System.out.println("rmi服务端启动完成。。。");  
    28     }  
    29   
    30 }  
    31 </span>  

     

 

客户端代码:

在客户端使用服务端的接口文件:

[java] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;">/** 
     2  * IRmiServer.java 
     3  * 版权所有(C) 2012  
     4  * 创建:cuiran 2012-08-08 11:12:40 
     5  */  
     6 package com.cayden.rmi;  
     7   
     8 /** 
     9  * TODO 
    10  * @author cuiran 
    11  * @version TODO 
    12  */  
    13 public interface IRmiServer {  
    14       
    15     public boolean test();  
    16   
    17 }  
    18 </span>  

     

然后在src下新建【applicationContext.xml】

[html] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;"><?xml version="1.0" encoding="UTF-8"?>  
     2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.5//EN" "file:/usr/local/tomcat_report/lib/spring-beans-2.0.dtd">  
     3 <beans>  
     4     <!-- rmi远程调用 -->  
     5     <bean id="testRmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">  
     6         <property name="serviceUrl">  
     7             <value>rmi://127.0.0.1:9400/remoteService</value>  
     8         </property>  
     9         <property name="serviceInterface">  
    10             <value>com.cayden.rmi.IRmiServer</value>  
    11         </property>  
    12     </bean>  
    13 </beans></span>  

     

最新新建客户端的测试类【TestRmi.java】

[java] view plaincopy
 
  1.  1 <span style="font-size:18px;color:#3333ff;">/** 
     2  * TestRmi.java 
     3  * 版权所有(C) 2012  
     4  * 创建:cuiran 2012-08-08 11:38:06 
     5  */  
     6 package com.cayden.rmi.client;  
     7   
     8 import org.springframework.context.ApplicationContext;  
     9 import org.springframework.context.support.ClassPathXmlApplicationContext;  
    10   
    11 import com.cayden.rmi.IRmiServer;  
    12   
    13 /** 
    14  * TODO 
    15  * @author cuiran 
    16  * @version TODO 
    17  */  
    18 public class TestRmi {  
    19     public static void main(String[] arg) {  
    20         System.out.println("rmi客户端开始调用");  
    21         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  
    22         IRmiServer rmi=(IRmiServer)ctx.getBean("testRmiService");  
    23         rmi.test();  
    24         System.out.println("rmi客户端调用结束");  
    25     }  
    26   
    27 }  
    28 </span>  

     

 

最后控制台输出

服务端:

[java] view plaincopy
 
  1. <span style="font-size:18px;color:#3333ff;">rmi服务端启动  
    log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).  
    log4j:WARN Please initialize the log4j system properly.  
    rmi服务端启动完成。。。  
    调用了我--服务端 O(∩_∩)O哈!  
    </span>  

     

客户端:

[java] view plaincopy
 
    1. <span style="font-size:18px;color:#3333ff;">rmi客户端开始调用  
      2012-8-8 11:46:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh  
      信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1c29ab2: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1c29ab2]; startup date [Wed Aug 08 11:46:51 CST 2012]; root of context hierarchy  
      2012-8-8 11:46:51 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions  
      信息: Loading XML bean definitions from class path resource [applicationContext.xml]  
      2012-8-8 11:46:51 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory  
      信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@1c29ab2]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1e0bc08  
      2012-8-8 11:46:51 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons  
      信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1e0bc08: defining beans [testRmiService]; root of factory hierarchy  
      rmi客户端调用结束  
      </span>  

       

posted @ 2014-03-26 15:11  endy_zhu  阅读(324)  评论(0编辑  收藏  举报