Spring利用代理,完成RMI服务端和客户端的开发

来源:互联网 发布:网络直销流程 编辑:程序博客网 时间:2024/06/05 22:35
Spring利用代理,完成RMI服务端和客户端的开发,可以使任意POJO的方法进行暴露


服务接口:
package test.SimpleRMI;public interface HelloWorld {   public String getMessage();}



服务实现:
package test.SimpleRMI;public class HelloWorldImpl implements HelloWorld {    public String getMessage() {                return "hello world";    }}


服务端配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><bean id="helloWorldService" class="org.springframework.remoting.rmi.RmiServiceExporter">  <property name="serviceName">    <value>HelloWorld</value>  </property>  <property name="service">    <bean class="test.SimpleRMI.HelloWorldImpl"/>  </property>  <property name="serviceInterface">    <value>test.SimpleRMI.HelloWorld</value>  </property>  <property name="registryPort">    <value>9000</value>  </property>  <property name="servicePort">    <value>9001</value>  </property>  </bean></beans>

客户端配置文件:applicationContext-client.xml
<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><bean id="helloworldService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl">   <value>rmi://localhost:9000/HelloWorld</value> </property> <property name="serviceInterface">    <bean class="test.SimpleRMI.HelloWorld"></bean>  </property></bean><bean id="helloworldClient" class="test.SimpleRMI.HelloWorldClient">  <property name="helloworldService">    <ref local="helloworldService"/>  </property></bean></beans>


服务端测试代码:


运行后并没有立即退出,因为远程服务是运行在后台的,一直等待客户端的链接
package test.SimpleRMI;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {    /**     * @param args     */    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("ch16/SimpleRMI/applicationContext.xml");        System.out.println("host stated...");    }}


客户端:
package test.SimpleRMI;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class HelloWorldClient {    private HelloWorld helloworldService;    public HelloWorld getHelloworldService() {        return helloworldService;    }    public void setHelloworldService(HelloWorld helloworldService) {        this.helloworldService = helloworldService;    }    public static void main(String[] args) {        ApplicationContext context = new ClassPathXmlApplicationContext("test/SimpleRMI/applicationContext-client.xml");        HelloWorldClient helloWorldClient=(HelloWorldClient)context.getBean("helloworldClient");        helloWorldClient.run();    }    public void run(){        System.out.println(helloworldService.getMessage());    }}


运行后,可以看到后台打印出了,服务端输出的Hello World


---------------------------------------下面注释为qlp3643_1加-----------------------------------------------------


其中需要特别注别的是:
<property name="registryPort">    <value>9000</value>  </property>  <property name="servicePort">    <value>9001</value>  </property>


注册端口:registryPort   注册端口是RMI注册远程服务的端口。


服务端口:servicePort    RMI的通讯需要的传送数据的端口。如果没有设置servicePort,则使用随机端口。