关闭

Spring RMI学习

214人阅读 评论(0) 收藏 举报
分类:

传统的RMI发布服务需要经过很麻烦的步骤,但是在Spring中提供了RmiServiceExporter能够很简单的提供这种RMI服务。
RmiServiceExporter 将Bean包装在一个适配器类中,然后适配器类被绑定到RMI注册表中,并且将请求代理给服务类


RmiProxyFactoryBean生成一个代理对象,该对象代表客户端来负责与远程单RMI服务进行通信。


具体的流程,这里展示一个简单版本的
1,建立服务的接口类
2,实现接口类的具体服务类
3,服务端xml文件配置
4,主函数启动服务端

5,客户端xml配置
6,客户端主函数调用


1,建立服务端接口
<span style="font-size:18px;">/**
 * 服务接口
 * @author hl174
 * @version 2016年6月1日 下午2:47:53
 *
 */
public interface IHelloService {

   String sayHello(String name);
}
</span>



2,服务端接口实现类
public class IHelloServiceImpl implements IHelloService{

      @Override
      public String sayHello(String name) {
           System. out .println("Hello " + name );
              return "Hello " + name ;
     }

}


3,服务端文件配置
<? xml version= "1.0" encoding = "UTF-8"?>
< beans xmlns ="http://www.springframework.org/schema/beans"
  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p= "http://www.springframework.org/schema/p"
  xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >

< bean id= "helloService" class = "day0601.IHelloServiceImpl"  />

< bean class ="org.springframework.remoting.rmi.RmiServiceExporter"
      p:service-ref ="helloService"
      p:serviceName ="HelloService"
      p:serviceInterface ="day0601.IHelloService" /> <!-- 引用上面的Bean表明要发布一个RMI服务 -->    <!-- 给RMI服务命名 --> <!-- 服务实现的接口 -->
</ beans>

如果要改变注册服务端口号和主机
p:registerPort=""
p:registerHost=""

4,服务端启动
/**
 * RMI服务端
 * @author hl174
 * @version 2016年6月1日 下午2:50:38
 *
 */
public class RMIServer {
public static void main(String[] args) {
      new ClassPathXmlApplicationContext("/day0601/remote-server-context.xml" );
}
}


5,客户端配置
<? xml version= "1.0" encoding = "UTF-8"?>
< beans xmlns ="http://www.springframework.org/schema/beans"
  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p= "http://www.springframework.org/schema/p"
  xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >

  <bean id= "ClientHelloService" class ="org.springframework.remoting.rmi.RmiProxyFactoryBean"
     p:serviceUrl ="rmi://localhost/HelloService"
     p:serviceInterface ="day0601.IHelloService" />   <!-- 服务提供的接口 -->
</ beans>

6,启动客户端
/**
 * RMI客户端
 * @author hl174
 * @version 2016年6月1日 下午3:14:30
 *
 */
public class RMIClient {
public static void main(String[] args) {
     ApplicationContext ctx = new ClassPathXmlApplicationContext(
            "/day0601/remote-client-context.xml" );
    IHelloService helloService = (IHelloService) ctx
            .getBean( "ClientHelloService" );
    String result = helloService.sayHello( "雷爷" );
    System. out.println( "客户端:" +result );
}
}
则服务端的控制台如下:



客户端的控制台如下:


这样的话获取到HelloService的Bean后,可以调用其接口中的所有公共方法
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:84801次
    • 积分:1894
    • 等级:
    • 排名:千里之外
    • 原创:88篇
    • 转载:17篇
    • 译文:5篇
    • 评论:20条
    博客专栏