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.指定服务的接口