2019独角兽企业重金招聘Python工程师标准>>>
Spring利用代理,完成RMI服务端和客户端的开发,可以使任意POJO的方法进行暴露
服务接口:
package ch16.SimpleRMI;
public interface HelloWorld {
public String getMessage();
}
服务实现:
package ch16.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="ch16.SimpleRMI.HelloWorldImpl"/>
</property>
<property name="serviceInterface">
<value>ch16.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="ch16.SimpleRMI.HelloWorld"></bean>
</property>
</bean>
<bean id="helloworldClient" class="ch16.SimpleRMI.HelloWorldClient">
<property name="helloworldService">
<ref local="helloworldService"/>
</property>
</bean>
</beans>
服务端测试代码:
运行后并没有立即退出,因为远程服务是运行在后台的,一直等待客户端的链接
package ch16.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 ch16.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("ch6/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,则使用随机端口。