`
2277259257
  • 浏览: 515295 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring与RMI集成实现远程访问

 
阅读更多

使用Spring对RMI的支持,可以非常容易地构建你的分布式应用。在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。

下面通过一个例子,说明如何通过Spring集成RMI。

 

 

服务端发布服务

我们定义了服务接口,服务端实现该服务接口来完成其复杂的逻辑,客户端可以通过该接口调用服务端暴露的服务,如下所示:

 

package org.shirdrn.spring.remote.rmi;  
  
public interface AccountService {  
    int queryBalance(String mobileNo);  
    String shoopingPayment(String mobileNo, byte protocol);  
} 

 服务实现,示例如下所示:

 

 

package org.shirdrn.spring.remote.rmi;  
  
import org.apache.log4j.Logger;  
  
public class MobileAccountServiceImpl implements AccountService {  
  
    private static final Logger LOG = Logger.getLogger(MobileAccountServiceImpl.class);  
    public int queryBalance(String mobileNo) {  
        if (mobileNo != null)  
            return 100;  
        return 0;  
    }  
  
    public String shoopingPayment(String mobileNo, byte protocol) {  
        StringBuffer sb = new StringBuffer().append("Your mobile number is \"").append(mobileNo).append("\" protocol type is \"").append(protocol).append("\".");    
        LOG.info("Message is: " + sb.toString());    
        return sb.toString();  
    }  
}  

 服务端发布服务,供客户端进行(远程方法)调用,Spring配置server.xml如下所示:

 

 

<?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-2.5.xsd">  
  
    <!-- 定义服务实现 -->
    <bean id="accountService" class="org.shirdrn.spring.remote.rmi.MobileAccountServiceImpl" />
    
    <!-- 使用RmiServiceExporter将服务对象的接口暴露成RMI对象 -->
    <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">    
        <property name="serviceName" value="MobileAccountService" />    
        <property name="service" ref="accountService" />    
        <property name="serviceInterface" value="org.shirdrn.spring.remote.rmi.AccountService" />    
        <property name="registryPort" value="8080" />    
        <property name="servicePort" value="8088" />    
    </bean> 
  
</beans> 

 上面配置,指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为MobileAccountService,客户端通过该服务名称就能够进行调用。

 

下面启动服务端,发布服务,如下所示:

 

package org.shirdrn.spring.remote.rmi;  
  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class RmiServer {  
  
    public static void main(String[] args) throws InterruptedException {  
        new ClassPathXmlApplicationContext("org/shirdrn/spring/remote/rmi/server.xml");  
          
        Object lock = new Object();  
        synchronized (lock) {  
            lock.wait();  
        }  
    }  
} 

 

 

 

 

客户端调用服务

客户端服务调用配置client.xml如下所示:

 

<?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-2.5.xsd">  
  
    <!-- 客户端使用RmiProxyFactoryBean连接远程暴露的服务 -->
    <bean id="mobileAccountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">  
        <property name="serviceUrl" value="rmi://localhost:8080/MobileAccountService" />  
        <property name="serviceInterface" value="org.shirdrn.spring.remote.rmi.AccountService" />  
    </bean>  
  
    <!-- 运用依赖注入装配 -->
    <bean class="org.shirdrn.spring.remote.rmi.RmiClient">
    	<property name="accountService" ref="mobileAccountService"/>
    </bean> 
  
</beans>

 配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用(服务调用)。调用示例如下所示:

 

 

package org.shirdrn.spring.remote.rmi;  
  
import org.apache.log4j.Logger;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
public class RmiClient {  
  
    private static final Logger LOG = Logger.getLogger(RmiClient.class);  
      
    /**
     * 容器通过依赖注入装配
     */
    private static AccountService accountService;
	
    public void setAccountService(AccountService accountService) {
	this.accountService = accountService;
    }



    public static void main(String[] args) {  
        ApplicationContext ctx = new ClassPathXmlApplicationContext("org/shirdrn/spring/remote/rmi/client.xml");  
        
        /**
         * 容器直接实例化
         */
//      AccountService accountService = (AccountService) ctx.getBean("mobileAccountService");  
        String result = accountService.shoopingPayment("13800138000", (byte) 5);  
        System.out.println(result);
        LOG.info(result);  
    }  
  
} 

 可见,实现远程访问变得非常容易

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

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

    Spring为各种远程访问技术提供集成工具类。Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 ...

    spring+rmi非本地实现

    当我们结合Spring与RMI时,可以构建分布式系统,使得服务可以在网络中的不同节点上运行并交互。 在这个“spring+rmi非本地实现”的项目中,我们有两个主要部分:客户端(client)和服务端(rmiserver)。让我们深入...

    java spring+rmi 的远程调用例子

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

    Spring-RMI.rar_spring rmi

    本文将详细讲解Spring与RMI的整合,以及如何通过"SpringRMIClient"和"SpringRMIServer"这两个示例文件实现跨项目的远程方法调用。 一、Spring整合RMI基础 1.1 RMI原理:RMI的核心在于Java的`java.rmi`包,它定义了...

    spring+rmi实现非本地部署

    将Spring与RMI结合,可以实现非本地部署的服务,使得客户端能够跨网络调用服务端的方法。以下是对这个主题的详细阐述: 首先,我们需要理解Spring框架的核心概念。Spring通过依赖注入(Dependency Injection,DI)...

    java Spring+RMI入门程序源代码

    远程接口定义了可供远程访问的方法,远程实现是这些方法的具体实现,RMI 运行时系统负责对象的注册、查找和调用。 3. **RMI 注册**:远程对象需要在 RMI 注册表中注册,以便其他客户端可以找到并调用它。通常,` ...

    如何在Spring框架中使用RMI技术.zip

    总结来说,Spring中的RMI集成提供了一种简单且灵活的方式来实现分布式系统中的跨JVM通信。通过学习这个压缩包中的示例,开发者不仅可以掌握RMI的基本原理,还能了解到Spring如何简化这个过程,从而在实际开发中更...

    Spring(RMI)实例

    将Spring与RMI结合使用,可以实现分布式服务的灵活构建。 首先,我们需要理解RMI的基本原理。RMI允许一个Java对象调用位于不同JVM中的另一个对象的方法。这涉及到三个主要步骤:导出远程对象、注册远程对象和调用...

    RMI SpringRMI API

    6. **连接现有/原有的系统**:RMI可以与现有的网络服务和系统集成。 7. **编写一次,到处运行**:Java的“Write Once, Run Anywhere”原则同样适用于RMI。 8. **分布式垃圾收集**:RMI支持在分布式环境中进行垃圾...

    java spring rmi

    - **依赖注入**:Spring的依赖注入可以轻松地将RMI服务与其他组件集成。 - **事务管理**:Spring的事务管理支持可以跨RMI调用进行事务控制。 4. **RMI与Spring AOP的结合**: Spring的面向切面编程(AOP)可以...

    spring RMI 实用分享

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中实现服务间的通信变得更加便捷。本文将深入探讨Spring RMI的实用知识,包括其基本原理、配置步骤...

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

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

    实现JMX的spring支持,拓展了RMI远程接口。

    JMX集成到spring中,并提供了一个rmi远程连接的配置文件

    基于Spring的远程访问与Web Service

    标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...

    Spring,RMI,thread,hibernate, webservice attachment

    例如,可能会讨论如何在 Spring 中配置和使用 Hibernate 进行持久化操作,或者如何通过 RMI 在不同进程中通信,以及如何利用线程来优化程序性能,还可能涉及到 Webservice 如何实现跨平台的系统交互。 `持久层设计...

    Java的Spring框架下RMI与quartz的调用方法

    **RMI在Spring中的配置与调用** RMI是Java提供的一种机制,允许一个Java对象调用位于不同JVM中的另一个Java对象的方法。在Spring框架中,我们可以利用其对RMI的支持轻松地创建和消费远程服务。 1. **定义RMI接口**...

    Flex、Spring、Hibernate 集成

    - 为了实现**Flex** 与**Spring** 的集成,可以采用**BlazeDS**。这是一种开源服务,使用AMF(Action Message Format)二进制协议构建了**Flex** 与**Java EE** 后端之间的通信桥梁。 - **BlazeDS** 支持**Flex** 对...

    rmi.rar_rmi

    RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个重要特性,它允许...不过,实际应用中,还应关注RMI与其他技术(如EJB、JMS、JNDI等)的集成,以及现代Java框架(如Spring)中对RMI的支持和扩展。

    java RMI技术讲解

    - **J2EE项目框架集成**:许多J2EE项目框架如Spring和EJB都封装了RMI技术,以便更方便地实现远程服务调用。 **Spring中实现RMI的步骤**: 1. **定义服务接口**:在服务器端定义一个服务接口,该接口通常包含了...

Global site tag (gtag.js) - Google Analytics