首页 > 代码库 > Spring配置RMI
Spring配置RMI
一、概述
传统的创建RMI服务,会涉及如下几个步骤:
1、编写远程服务接口,该接口必须继承 java.rmi.Remote 接口,方法必须抛出 java.rmi.RemoteException 异常;
2、编写远程接口实现类,该实现类必须继承 java.rmi.server.UnicastRemoteObject 类;
3、运行RMI编译器(rmic),创建客户端 stub 类和服务端 skeleton 类;
4、启动一个RMI注册表,以便驻留这些服务;
5、在RMI注册表中注册服务;
二、在Spring中配置RMI服务
1、服务接口
1 package com.cnblogs.javalouvre.service; 2 3 public interface GreetService { 4 5 String sayHello(String name); 6 7 }
2、服务实现类
1 package com.cnblogs.javalouvre.service; 2 3 public class GreetServiceImpl implements GreetService { 4 5 @Override 6 public String sayHello(String name) { 7 return "Hello " + name; 8 } 9 10 }
3、Spring文件配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> 6 7 <bean id="greetService" class="com.cnblogs.javalouvre.service.GreetServiceImpl" /> 8 9 <bean class="org.springframework.remoting.rmi.RmiServiceExporter"> 10 <property name="serviceName" value="GreetService" /> 11 <property name="service" ref="greetService" /> 12 <property name="serviceInterface" value="com.cnblogs.javalouvre.service.GreetService" /> 13 <property name="registryPort" value="1199"/> 14 </bean> 15 16 </beans>
4、启动服务
1 package com.cnblogs.javalouvre.server; 2 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4 5 public class Server { 6 7 public static void main(String[] args) { 8 new ClassPathXmlApplicationContext("applicationContext.xml"); 9 } 10 11 }
说明:如果使用传统的RMI来发布服务,在服务实现类中所有方法都得抛出 java.rmi.RemoteException 异常。但如果使用Spring的 org.springframework.remoting.rmi.RmiServiceExporter 将该类转化为 RMI 服务,那么实现将简单的多。 RmiServiceExporter 可以将任何一个 Spring 管理的Bean发布为一个 RMI 服务,默认情况下,RmiServiceExporter会尝试将一个RMI注册表绑定到本机的1099端口。如果在这个端口没有发现RMI注册表,RmiServiceExporter将重新启动一个注册表。如果希望将某个 RMI 注册表绑定到不同的端口或主机,可以通过 registryPort和registryHost属性指定。
三、装配RMI服务
1、接口同上
2、配置Spring
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> 6 7 <bean id="greetService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> 8 <property name="serviceUrl" value="rmi://10.108.1.138:1199/GreetService" /> 9 <property name="serviceInterface" value="com.cnblogs.javalouvre.service.GreetService" /> 10 </bean> 11 12 </beans>
3、客户端调用
1 package com.cnblogs.javalouvre.client; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import com.cnblogs.javalouvre.service.GreetService; 7 8 public class Client { 9 10 public static void main(String[] args) { 11 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 12 GreetService service = context.getBean("greetService", GreetService.class); 13 System.out.println(service.sayHello("Jobs")); 14 } 15 16 }
说明:Spring的 org.springframework.remoting.rmi.RmiProxyFactoryBean 是一个工厂Bean, 该Bean可以为RMI服务创建代理。