• 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>  
    高质量的代码就是对程序自己最好的注释。当你打算要添加注释时,问问自己,“我如何能改进编码以至于根本不需要添加注释?”改进你的代码,然后才是用注释使它更清楚。
  • 相关阅读:
    java传递String参数
    C++ string与int的互相转换
    java插入排序
    凸包Graham Scan算法实现
    求平面上N点最远两点和最近两点距离
    求最大公约数
    n个数连接得到最小或最大的多位整数(携程)
    Java快排
    背包问题
    二分查找离左边元素最近的(可以等于)
  • 原文地址:https://www.cnblogs.com/endy-blog/p/3625666.html
Copyright © 2020-2023  润新知