有关rmi的相关知识,本文并不涉及,只关心Spring如何简化RMI的开发
Spring利用代理,完成RMI服务端和客户端的开发,可以使任意POJO的方法进行暴露
服务接口:
package
ch16.SimpleRMI;
public interface HelloWorld ... {
public String getMessage();
}
public interface HelloWorld ... {
public String getMessage();
}
服务实现:
package
ch16.SimpleRMI;
public class HelloWorldImpl implements HelloWorld ... {
public String getMessage() ...{
return "hello world";
}
}
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 >
< 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 >
< 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...");
}
}
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());
}
}
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