环境:
jdk1.5
spring-framework-2.5.6.SEC01
所用的第三方包优先从Spring的lib包中获取,以获取最佳的兼容性。
所依赖的jar包:
一、服务端实现
第一服务接口,和以前不一样了,不用实现远程接口了。
package lavasoft.sturmi;
/**
* 定义一个远程接口
*
* @author leizhimin 2009-8-17 13:53:38
*/
public interface HelloService {
/**
* 简单的返回“Hello World!"字样
*
* @return 返回“Hello World!"字样
*/
public String helloWorld();
/**
* 一个简单的业务方法,根据传入的人名返回相应的问候语
*
* @param someBodyName 人名
* @return 返回相应的问候语
*/
public String sayHelloToSomeBody(String someBodyName);
}
/**
* 定义一个远程接口
*
* @author leizhimin 2009-8-17 13:53:38
*/
public interface HelloService {
/**
* 简单的返回“Hello World!"字样
*
* @return 返回“Hello World!"字样
*/
public String helloWorld();
/**
* 一个简单的业务方法,根据传入的人名返回相应的问候语
*
* @param someBodyName 人名
* @return 返回相应的问候语
*/
public String sayHelloToSomeBody(String someBodyName);
}
服务实现类
package lavasoft.sturmi;
/**
* 远程的接口的实现
*
* @author leizhimin 2009-8-17 13:54:38
*/
public class HelloServiceImpl implements HelloService {
public HelloServiceImpl() {
}
/**
* 简单的返回“Hello World!"字样
*
* @return 返回“Hello World!"字样
*/
public String helloWorld() {
return "Hello World!";
}
/**
* 一个简单的业务方法,根据传入的人名返回相应的问候语
*
* @param someBodyName 人名
* @return 返回相应的问候语
*/
public String sayHelloToSomeBody(String someBodyName) {
return "你好," + someBodyName + "!";
}
}
/**
* 远程的接口的实现
*
* @author leizhimin 2009-8-17 13:54:38
*/
public class HelloServiceImpl implements HelloService {
public HelloServiceImpl() {
}
/**
* 简单的返回“Hello World!"字样
*
* @return 返回“Hello World!"字样
*/
public String helloWorld() {
return "Hello World!";
}
/**
* 一个简单的业务方法,根据传入的人名返回相应的问候语
*
* @param someBodyName 人名
* @return 返回相应的问候语
*/
public String sayHelloToSomeBody(String someBodyName) {
return "你好," + someBodyName + "!";
}
}
Spring配置rmi服务
<?
xml
version
="1.0"
encoding
="UTF-8"
?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
< beans >
< bean id ="helloService" class ="lavasoft.sturmi.HelloServiceImpl" />
< bean id ="serviceExporter" class ="org.springframework.remoting.rmi.RmiServiceExporter" >
< property name ="service" ref ="helloService" />
<!-- 定义服务名 -->
< property name ="serviceName" value ="hello" />
< property name ="serviceInterface" value ="lavasoft.sturmi.HelloService" />
< property name ="registryPort" value ="8088" />
</ bean >
</ beans >
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
< beans >
< bean id ="helloService" class ="lavasoft.sturmi.HelloServiceImpl" />
< bean id ="serviceExporter" class ="org.springframework.remoting.rmi.RmiServiceExporter" >
< property name ="service" ref ="helloService" />
<!-- 定义服务名 -->
< property name ="serviceName" value ="hello" />
< property name ="serviceInterface" value ="lavasoft.sturmi.HelloService" />
< property name ="registryPort" value ="8088" />
</ bean >
</ beans >
服务端测试:
package lavasoft.sturmi;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 通过Spring发布RMI服务
*
* @author leizhimin 2009-8-17 14:22:06
*/
public class HelloHost {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationContext_rmi_server.xml");
System.out.println( "RMI服务伴随Spring的启动而启动了.....");
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 通过Spring发布RMI服务
*
* @author leizhimin 2009-8-17 14:22:06
*/
public class HelloHost {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationContext_rmi_server.xml");
System.out.println( "RMI服务伴随Spring的启动而启动了.....");
}
}
启动后如图所示:
二、客户端调用测试
客户端调用有两种方式,一种是使用Spring,一种不使用,这里仅介绍使用Spring的情况。
在Spring中配置客户端要调用服务:
<?
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 ="helloService" class ="org.springframework.remoting.rmi.RmiProxyFactoryBean" >
< property name ="serviceUrl" value ="rmi://192.168.14.117:8088/hello" />
< property name ="serviceInterface" value ="lavasoft.sturmi.HelloService" />
</ bean >
< bean id ="helloServiceClient" class ="lavasoft.sturmi.HelloClient" >
< property name ="helloService" ref ="helloService" />
</ 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 ="helloService" class ="org.springframework.remoting.rmi.RmiProxyFactoryBean" >
< property name ="serviceUrl" value ="rmi://192.168.14.117:8088/hello" />
< property name ="serviceInterface" value ="lavasoft.sturmi.HelloService" />
</ bean >
< bean id ="helloServiceClient" class ="lavasoft.sturmi.HelloClient" >
< property name ="helloService" ref ="helloService" />
</ bean >
</ beans >
客户端测试代码:
package lavasoft.sturmi;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.rmi.RemoteException;
/**
* 通过Spring来调用RMI服务
*
* @author leizhimin 2009-8-17 14:12:46
*/
public class HelloClient {
private HelloService helloService;
public static void main(String[] args) throws RemoteException {
ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationContext_rmi_client.xml");
HelloService hs = (HelloService) ctx.getBean( "helloService");
System.out.println(hs.helloWorld());
System.out.println(hs.sayHelloToSomeBody( "Lavasoft"));
}
public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.rmi.RemoteException;
/**
* 通过Spring来调用RMI服务
*
* @author leizhimin 2009-8-17 14:12:46
*/
public class HelloClient {
private HelloService helloService;
public static void main(String[] args) throws RemoteException {
ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationContext_rmi_client.xml");
HelloService hs = (HelloService) ctx.getBean( "helloService");
System.out.println(hs.helloWorld());
System.out.println(hs.sayHelloToSomeBody( "Lavasoft"));
}
public void setHelloService(HelloService helloService) {
this.helloService = helloService;
}
}
运行结果:
本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/192838,如需转载请自行联系原作者