`
yanghongxia9
  • 浏览: 115120 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring+rmi

    博客分类:
  • java
 
阅读更多
Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring提供对下面四种远程访问技术的支持:
远程方法调用(RMI)。通过使用RmiProxyFactoryBean和RmiServiceExporter,Spring支持传统的RMI(使用java.rmi.Remote interfaces 和 java.rmi.RemoteException)和通过RMI调用器(可以使用任何Java接口)的透明远程调用。

Spring的HTTP调用器。Spring提供一种特殊的远程调用策略支持任何Java接口(象RMI调用器一样),它允许Java序列化能够通过HTTP传送。对应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter。

Hessian。通过使用HessianProxyFactoryBean和HessianServiceExporter,你可以使用Caucho提供的轻量级基于HTTP的二进制协议透明地提供你的业务。

Burlap。Burlap是基于XML的,它可以完全代替Hessian。Spring提供的支持类有BurlapProxyFactoryBean和BurlapServiceExporter。

JAX RPC (TODO).

RMI是不能够穿越防火墙的,在网上也查了一些资料,但根据其提供的方法都没有成功,唉,功夫不负有心人,经过一番努力,还是把它实现了,其实这东西就是一层窗纸,捅破了也没有什么太难得,废话不说了,我们开始吧。(不好意思,还得再说一句废话:得益于罗士飞的那本spring教程代码)。

当然首先要把spring的相关依赖的jar包引入了。这里就不能描述了。

先写服务器段代码:
1. 定义接口 ILogPerson.java
package com.openv.spring;

public interface ILogPerson {
     public String getPersion(PersonVO personVO);
}

2. 定义POJO PersonVO.java
package com.openv.spring;

import java.io.Serializable;

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;
     }
}

注意:这里的PersonVO.java 必须继承Serializable 以实现序列化,不然会抱错,谨记!


3. 定义实现:LogPerson.java
package com.openv.spring;

public class LogPerson implements ILogPerson{

     public String getPersion(PersonVO personVO) {
         return personVO.getFirstname()+" @#@ "+personVO.getLastname(); 
     }
}

4. 定义spring的依赖注入的文件appcontextrmiserver.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean id="logPerson" class="com.openv.spring.LogPerson"/>

<bean id="logPersonService"
      class="org.springframework.remoting.rmi.RmiServiceExporter">
  <!-- RmiServiceExporter 对服务名没有特殊要求 -->
   <property name="serviceName">
    <value>LogPerson</value>
   </property>
   <property name="service">
    <ref bean="logPerson"/>
   </property>
   <property name="serviceInterface">
    <value>com.openv.spring.ILogPerson</value>
   </property>
  <!-- 避免与默认的RMI注册端口冲突,因此修改为1200 -->
   <property name="registryPort">
    <value>1200</value>
   </property>
</bean>

</beans>

5. 定义运行rmi服务的类: LogPersonRmiServer.java
package com.openv.spring;

import org.springframework.core.io.Resource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.beans.factory.BeanFactory;

import java.io.Serializable;

public class LogPersonRmiServer{
     public static void main(String[] args) {
         //初始化appcontextrmiserver.xml
         Resource sresource = new ClassPathResource("appcontextrmiserver.xml");
         BeanFactory sfactory = new XmlBeanFactory(sresource);

         //注册RMI
         sfactory.getBean("logPersonService");

     }
}

运行main函数,rmi服务就启动了。

下面写客户调用端的代码了。
大家从目录图中看一下,为了调试方便,我把服务端和客户端写在了一起。在实际的项目中,客户端的代码是不可能和服务器端在一起的,那样还叫什么远程调用呀,呵呵。在实际的项目中,我们应该把接口ILogPerson.java和POJO PersonVO.java 文件打成jar包给客户端引用即可,而实现是在服务器端完成。

下面我们可以在另外一台计算机(为了强调远程嘛,呵呵)上新建立一个客户端调用的工程。客户端很简单

1. 引入spring的依赖文件和 接口ILogPerson.java和POJO PersonVO.java 文件打成jar包

2. spring的依赖注入的文件 appcontextrmiclient.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="LogPerson"
   class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
   <property name="serviceUrl"><value>rmi://77.20.64.237:1200/LogPerson</value></property>
   <property name="serviceInterface"><value>com.openv.spring.ILogPerson</value></property>
</bean>
</beans>

3. 调用文件 LogPersonRmiClient.java
package com.openv.spring;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class LogPersonRmiClient {
     public static void main(String[] args) {
        //初始化appcontextrmiclient.xml
         Resource cresource = new ClassPathResource("appcontextrmiclient.xml");
         BeanFactory cfactory = new XmlBeanFactory(cresource);

        //实例化Person值对象
         PersonVO personVO = new PersonVO();
         personVO.setFirstname("Luo2");
         personVO.setLastname("Shifei");

        //获得RMI服务
         ILogPerson clientLog = (ILogPerson) cfactory.getBean("LogPerson");

        //调用RMI服务
         System.out.println("==>> " + clientLog.getPersion(personVO));
     }
}
客户端很简单的,呵呵。看看运行结果吧。

虽然简单,但是也有四五个文件,其实每个文件不是很复杂,只要耐着心思把其一个个写出来,就能成功,如果运行结果出来了,你对rmi的各种疑惑也就形如冰释了。我也搞了大半天才将其实现,愿能给参看的朋友一些提示。

经过spring的封装,rmi的复杂过程得到了很大的简化,基本变成了配置的过程,什么rmi手工注册和声成什么乱七八糟的文件都省略了。不过不能穿越防火墙,下面我们在介绍一种可以穿越防火墙的spring远程调用hissian。
分享到:
评论

相关推荐

    spring+rmi非本地实现

    在这个“spring+rmi非本地实现”的项目中,我们有两个主要部分:客户端(client)和服务端(rmiserver)。让我们深入探讨一下这两个部分以及它们如何协同工作。 1. **服务端(rmiserver)**: - **创建RMI接口**:...

    java Spring+RMI入门程序源代码

    Java Spring 框架与 Remote Method Invocation (RMI) 的结合使用是构建分布式应用程序的一种常见方式。本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个...

    java spring+rmi 的远程调用例子

    Java Spring与RMI(Remote Method Invocation)的整合是企业级应用中常见的远程服务交互方式。Spring框架提供了对RMI的支持,使得开发者能够方便地在分布式环境中进行服务的调用。这个压缩包文件“Spring+RMI”很...

    spring+rmi实现非本地部署

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而RMI(Remote Method Invocation)则是Java提供的一种远程方法调用机制,用于构建分布式应用程序。将Spring与RMI结合,可以实现非本地部署的服务,...

    基于Spring+hibernate+mysql+rmi+swing的登录Demo

    《构建基于Spring+Hibernate+MySQL+RMI+Swing的登录Demo详解》 在软件开发领域,集成多种技术来构建高效、稳定的应用是常见的实践。本项目“基于Spring+Hibernate+MySQL+RMI+Swing的登录Demo”就充分展示了这种技术...

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

    1.4.8 RMI(远程方法调用) 1.4.9 JMS(Java消息服务) 1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同) 1.4.12 JCA(Java连接器体系) 1.5 小结 第二章 MVC模式介绍 2.1 MVC模式概述 2.1.1 MVC模式...

    spring和RMI分布式整合源码

    具体到这个压缩包“springRMI”,我们可以推测它可能包含了以下几个部分: 1. **配置文件**:如`applicationContext.xml`,其中定义了Spring容器中的Bean,可能包括RMI服务的接口和实现。 2. **远程接口**:`.java`...

    CXF+RMI+HESSIAN

    【标题】"CXF+RMI+HESSIAN" 是一个关于使用Apache CXF实现Web服务,结合RMI(远程方法调用)和Hessian协议的技术组合。这种组合常用于分布式系统开发,允许不同应用程序之间高效地进行通信。 Apache CXF是一个开源...

    Spring-RMI.rar_spring rmi

    1.2 Spring的RMI支持:Spring通过`org.springframework.remoting.rmi.RmiServiceExporter`和`RmiProxyFactoryBean`简化了RMI的使用。`RmiServiceExporter`用于发布服务,而`RmiProxyFactoryBean`则用于创建RMI服务的...

    spring与rmi 整合实例 源码详解

    spring 与rmi 的整合 1.首先编写接口 interface : 这里的接口要继承Remote, 它是一个标识接口 2.编写实现类 3.编写main方法用于启动 service 4 配置spring文件 编写客户端测试类

    Struts+Spring+Hibernate+WebService集成架构.doc

    5. **持久层(Persistence)+ RMI**:持久层负责数据的持久化存储,RMI则用于远程方法调用,实现分布式系统间的通信。 #### 七、集成架构的实现 实现Struts+Spring+Hibernate+WebService的集成架构,关键在于各层...

    Spring RMI

    **Spring RMI 深度解析** Spring框架作为Java企业级应用开发的首选,提供了丰富的功能,包括对远程方法调用(Remote Method Invocation,RMI)的支持。RMI是Java平台上的一个核心特性,允许在分布式环境中进行对象...

    SpringRMI小例子

    在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...

    Spring RMI小例子

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...

    spring rmi 小例子

    6. **源码分析**:在提供的压缩包文件`SpringRMI`中,可能包含了上述所有步骤的代码示例。通过阅读这些源码,你可以深入理解Spring RMI的工作原理,包括服务暴露、注册、代理创建等。 7. **工具使用**:在开发过程...

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

    1.4.8 RMI(远程方法调用) 1.4.9 JMS(Java消息服务) 1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同) 1.4.12 JCA(Java连接器体系) 1.5 小结 第二章 MVC模式介绍 2.1 MVC模式概述 2.1.1 MVC模式...

    Spring-RMI (RMI调用, HTTP调用)

    Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...

    Jmail+ HttpInvoker+定时任务+Aop+Rmi+

    RMI的核心概念包括远程接口、远程对象和 stub/skeleton,开发者需要定义远程接口,实现远程对象,并通过RMI注册表暴露服务。RMI适合于需要高性能、低延迟的内部系统通信,例如在分布式系统中的节点间通信。 最后,...

    spring rmi 集成

    **Spring RMI 集成详解** 在Java开发中,远程方法调用(Remote Method Invocation,RMI)是一种用于在不同Java虚拟机之间进行对象交互的技术。Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加简单...

    rmi与spring整合实例

    在IT行业中,远程方法调用(Remote Method Invocation,RMI)和Spring框架是两个非常重要的概念,它们在分布式系统开发中发挥着关键作用。RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间...

Global site tag (gtag.js) - Google Analytics