ScarletLina 2014-05-12
使用Spring的RMI支持,你可以通过RMI基础设施透明的暴露你的服务。设置好Spring的RMI支持后,你会看到一个和远程EJB接口类似的配置,只是没有对安全上下文传递和远程事务传递的标准支持。当使用RMI调用器时,Spring对这些额外的调用上下文提供了钩子,你可以在此插入安全框架或者定制的安全证书。
1.使用RmiServiceExporter暴露服务
使用RmiServiceExporter,我们可以把AccountService对象的接口暴露成RMI对象。可以使用 RmiProxyFactoryBean 或者在传统RMI服务中使用普通RMI来访问该接口。RmiServiceExporter 显式地支持使用RMI调用器暴露任何非RMI的服务。当然,我们首先需要在Spring容器中设置我们的服务:
<bean id="accountService" class="example.AccountServiceImpl">
public class SimpleObject { private AccountService accountService; public void setAccountService(AccountService accountService) { this.accountService = accountService; } }
为了把服务连接到客户端上,我们将创建一个单独的Spring容器,包含这个简单对象和链接配置位的服务:
package com.ipi.rmi.test.service; public interface HelloWorld { public String helloWorld(); public String sayHelloToSomeBody(String someBodyName); }
2)HelloWorldImpl.java
package com.ipi.rmi.test.service.impl; import com.ipi.rmi.test.service.HelloWorld; public class HelloWorldImpl implements HelloWorld { @Override public String helloWorld() { return "Hello World!"; } @Override public String sayHelloToSomeBody(String someBodyName) { return "Hello World!" + someBodyName; } }
3)Spring配置文件
package com.ipi.rmi.test.server; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringRmiServer { public static void main(String[] args) { //初始化工作只能运行一次;运行多次的话,会启动多个服务 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("Spring rmi 测试程序服务已启动"); } }
服务器端程序如附件中的SpringRmiServer.rar
4 客户端配置与开发
1) 将服务端的接口进行打包(注:不需要实现类,只是客户端访问服务端的一个存根)
2) 配置spring
a.指定访问服务的地址
b.指定服务的接口