有关rmi的相关知识,本文并不涉及,只关心Spring如何简化RMI的开发
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
本文介绍如何使用Spring框架简化RMI开发过程。通过Spring提供的RmiServiceExporter和RmiProxyFactoryBean,可以轻松地将任意POJO转变为RMI服务,并在客户端调用这些服务。示例展示了服务接口定义、服务实现、服务端与客户端配置。
669

被折叠的 条评论
为什么被折叠?



