`

利用spring实现RMI

阅读更多
RMI是实现将服务暴露给远程的一种手段,通过RMI可以实现应用的跨服务器,跨JVM的方法活对象的调用。
首先实现RMI服务器端
创建远程方法调用参数类
package com.spring.pojo;

import java.io.Serializable;

/**
* 该类主要用于RMI参数的传递
* @author zhy
*
*/
public class PersonVo implements Serializable {

private String firstName;

private String lastName;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}
}
然后创建远程访问接口,该接口用于导出远程服务
package com.spring.inter;

import com.spring.pojo.PersonVo;

/**
* 定义远程访问接口,供导出远程服务使用
* @author zhy
*
*/
public interface ILogPersion {

public Object getPersion(PersonVo persionVo);

}
接着创建远程接口实现,用于完成真正业务逻辑
package com.spring.inter.imp;

import com.spring.inter.ILogPersion;
import com.spring.pojo.PersonVo;

public class LogPersion implements ILogPersion {

public Object getPersion(PersonVo persionVo) {
return persionVo;
}
}
最后完成服务器端远程spring文件配置
  <!-- 配置远程服务开始 -->
   <bean id="logPerson" class="com.spring.inter.imp.LogPersion"/>
  
   <bean id="logPersionService" class="org.springframework.remoting.rmi.RmiServiceExporter">
   <!-- 指定serviceName,同客户端访问 -->
   <property name="serviceName">
   <value>LogPerson</value>
   </property>
   <!-- 注册真正的service实现到代理javaBean中 -->
   <property name="service">
   <ref bean="logPerson"/>
   </property>
   <!-- 指定服务实现的接口-->
   <property name="serviceInterface">
   <value>com.spring.inter.ILogPersion</value>
   </property>
  
   <!-- 避免与默认RMI端口冲突,修改端口 -->
   <property name="registryPort">
   <value>1200</value>
   </property>
   </bean>
总结服务器端:服务器端之所以不需要实现Remote接口等等,就是依赖于spring配置文件中的RmiServiceExporter,RmiServiceExporter将烦琐的RMI服务器端操作进行了封装。
开发spring RMI客户端
首先将服务器端的RMI 参数类和业务接口拷贝到调用应用中
即将PersonVo和ILogPersion拷贝过来

然后完成调用端spring文件的配置
<bean id="LogPerson" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceUrl">
   <value>rmi://localhost:1200/LogPerson</value>
   </property>
  
   <property name="serviceInterface">
   <value>com.spring.inter.ILogPersion</value>
   </property>
   </bean>

最后创建mian方法进行调用
public static void main(String[] args) {
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);

PersonVo vo = new PersonVo();
vo.setFirstName("z");
vo.setLastName("hy");

ILogPersion person = (ILogPersion)factory.getBean("LogPerson");
System.out.println( ((PersonVo)person.getPersion(vo)).getFirstName());
}

RMI的缺点:如果网络中存在防火墙,则RMI无能为力了,而且RMI要求必须是用java实现的。
分享到:
评论

相关推荐

    Spring 实现远程访问详解——httpinvoker

    上文我们利用Spring rmi实现了Spring的远程访问(Spring 实现远程访问详解——rmi),本文主要讲解利用HttpInvoke实现远程访问。 Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和...

    Spring 实现远程访问详解——jms和activemq

    前几章我们分别利用spring rmi、httpinvoker、httpclient、webservice技术实现不同服务器间的远程访问。本章我将通过spring jms和activemq实现单Web项目服务器间异步访问和多Web项目服务器间异步访问。 一. 简介 1. ...

    Spring 实现远程访问详解——httpclient

    上两章我们分别利用Spring rmi和httpinvoker实现的远程访问功能,具体见《》和《》。本章将通过apache httpclient实现远程访问。说得简单就是直接通过spring requestmapping即请求映射url访问远程服务。 1. 远程访问...

    Spring-Reference_zh_CN(Spring中文参考手册)

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 ...

    Spring 2.0 开发参考手册

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...

    Spring中文帮助文档

    3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...

    spring chm文档

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...

    Spring API

    3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的singleton 3.10. 以J2EE RAR文件的形式部署Spring ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...

    Spring整合Ecache

    9. 提供Hibernate的缓存实现 缺点: 1. 使用磁盘Cache的时候非常占用磁盘空间:这是因为DiskCache的算法简单,该算法简单也导致Cache的效率非常高。它只是对元素直接追加存储。因此搜索元素的时候非常的快。如果...

    java代理实现webservice接口拦截器功能

    本文根据java代理实现CXF拦截器异常时只能进入fault拦截器而不能继续向下执行的问题。 利用java代理让RMI具有拦截器的功能。

    《程序天下:J2EE整合详解与典型案例》光盘源码

    10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...

    Java思维导图xmind文件+导出图片

    RMI/Spring RMI Hession 传统RPC技术在大型分布式架构下面临的问题 分布式架构下的RPC解决方案 Zookeeper 分布式系统的基石 从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在disconf配置中心的应用 ...

    从Java走向Java+EE+.rar

    17.1 用Java RMI实现远程调用 250 17.2 利用JNDI定位资源 256 17.3 实例——分布式的HelloWorld 260 17.4 小结 264 第18章 Java消息服务 265 18.1 消息系统和JMS 265 18.1.1 JMS API 265 18.1.2 点对...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第6章 利用JMS实现企业消息处理 226 6.1 面向消息的架构和JMS概述 227 6.1.1 面向消息的应用架构 227 6.1.2 JMS的基础知识和优势 228 6.1.3 JMS的两个重要版本 229 6.2 PTP类型的JMS 230 6.2.1 配置PTP的JMS服务器 ...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public class ...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public ...

    J2EE面试题

    d) 远程接口实现了RMI的Remote接口 参考答案 16) 下列关于RMI远程接口定义正确的是 d a) public interface Demo {public long test() throws java.rmi.RemoteException;} b) Public interface Demo extends ...

Global site tag (gtag.js) - Google Analytics