之前介绍过如何发布RMI服务和调用RMI服务,其实在Spring中为我们提供了更为方便的调用方式。现在介绍下如何在Spring中集成RMI。
首先看下实例程序目录结构:
Spring中发布RMI服务(ZLv_RMIServerWithSpring):
(1) 定义接口MessageProvider及接口中供调用的方法(MessageProvider.java):
package org.thera.rmi.service;public interface MessageProvider { public String queryForMessage(String name);}
(2) 实现MessageProvider接口(MessageProviderImpl.java):
package org.thera.rmi.service;public class MessageProviderImpl implements MessageProvider { @Override public String queryForMessage(String name) { return "Hello, " + name; }}
做好了上述准备,下面我们就可以通过Spring中集成RMI,方便的发布RMI服务端
(3) Spring配置文件作如下配置(context.xml):
(4) 加载Spring容器,发布RMI服务(Main.java):
package org.thera.rmi.service.main;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class Main { public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/context.xml"); System.out.println("已成功发布RMI服务类"); }}
到这里,RMI的服务端已经发布成功,运行结果如下截图:
Spring中客户端调用RMI服务(ZLv_RMIClientWithSpring):
(1) 移植服务端服务接口文件MessageProvider.java;
(2) Spring配置文件做如下配置:
(3) 加载Spring容器,调用RMI服务端(Main.java):
package org.thera.rmi.service.main;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;import org.thera.rmi.service.MessageProvider;public class Main { public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/context.xml"); System.out.println("加载Spring容器,并初始化RMI客户端"); MessageProvider client = (MessageProvider)ctx.getBean("messageService"); String temp = client.queryForMessage("LvSantorini"); System.out.println("返回结果: " + temp); }}
运行Main.java,结果如下图:
--------------------------------------------------------------------------------我 只 是 一 条 分 隔 线-------------------------------------------------------------------------------------------------
到这里我们就已经介绍完Spring中集成RMI的发布和调用方式了,怎么样?相比原始方法简单了不少吧,接口文件如此简单,之前的实现java.rmi.Remote接口,每个方法还要抛出java.rmi.RemoteException都不需要写了。
最后,有什么问题大家可以及时给我留言,共同进步!