`

Spring--RMI

 
阅读更多
使用Spring对RMI的支持,可以非常容易地构建你的分布式应用。在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。
下面通过一个例子,说明如何通过Spring集成RMI。
服务端发布服务
我们定义了服务接口,服务端实现该服务接口来完成其复杂的逻辑,客户端可以通过该接口调用服务端暴露的服务,如下所示:
[java] view plaincopy
package org.shirdrn.spring.remote.rmi; 
 
public interface AccountService { 
    int queryBalance(String mobileNo); 
    String shoopingPayment(String mobileNo, byte protocol); 


服务实现,示例如下所示:
[java] view plaincopy
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如下所示:
[xhtml] view plaincopy
<?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="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> 
 
    <bean id="accountService" class="org.shirdrn.spring.remote.rmi.MobileAccountServiceImpl" /> 
 
</beans> 

上面配置,指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为MobileAccountService,客户端通过该服务名称就能够进行调用。
下面启动服务端,发布服务,如下所示:
[java] view plaincopy
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如下所示:
[xhtml] view plaincopy
<?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="mobileAccountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> 
        <property name="serviceUrl" value="rmi://192.168.1.103:8080/MobileAccountService" /> 
        <property name="serviceInterface" 
            value="org.shirdrn.spring.remote.rmi.AccountService" /> 
    </bean> 
 
</beans> 

配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用。调用示例如下所示:
[java] view plaincopy
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); 
     
    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); 
        LOG.info(result); 
    } 
 


可见,实现远程访问变得非常容易。
分享到:
评论

相关推荐

    spring-2.5.x-3.0.x-rmi-compatibility

    spring rmi 2.5.x版本与3.0.x版本不兼容解决方案

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

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

    Spring-RMI.rar_spring rmi

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

    spring-security3.1.4 完整的jar包

    10. **spring-security-remoting-3.1.4.RELEASE.jar**:处理远程方法调用的安全性,如RMI、Hessian和 Burlap等远程调用协议的安全控制。 这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了...

    spring-framework-5-0-0-m3-zh_cn

    Spring Framework 是一种轻量级的解决方案,是构建你...明式事务管理,通过RMI或Web服务远程访问你的逻辑,以及用于持久存储数据的各种选项。 它提供了一个全功能的 MVC 框架,并使你能够将 AOP 透明地集成到你的软件中

    spring-rmi

    Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加方便。标题"spring-rmi"暗示我们将探讨Spring框架与RMI的整合。 Spring RMI的核心概念包括服务接口、远程实现和服务注册。首先,我们需要定义一个...

    springsecurity所有jar包

    9. **spring-security-remoting**:支持远程调用的安全控制,例如RMI和Hessian。 10. **spring-security-oauth**:虽然不在3.1.2版本内,但Spring Security通常与OAuth集成,提供开放授权功能,允许第三方应用安全...

    RMI-IIOP 基于SUN

    3. 集成文档:可能包含了如何将RMI与Spring框架整合的教程,指导开发者如何在Spring环境中使用RMI-IIOP实现服务的发布和消费。 4. 相关资料:可能包含了关于RMI、IIOP和CORBA的基础知识,以及相关的技术文章和研究,...

    spring2.5 -3.0 hibernate3.3 jar包说明

    支持远程调用功能,例如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker、JAX-RPC等。 10. **spring-support.jar** 提供了一些额外的功能支持,如缓存管理、定时任务、邮件服务等。 11. **spring-web.jar** ...

    spring-framework-reference 4.3.8.RELEASE

    Framework supports declarative transaction management, remote access to your logic through RMI or web services, and various options for persisting your data. It offers a full-featured MVC framework, ...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    13) spring-mock.jar需spring-core.jar,spring-beans.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jarspring2.0和spring2.5及以上版本的jar包区别Spring 2.5的Jar打包 在Spring 2.5中, Spring Web MVC...

    spring-framework-5.0 中文文档PDF

    Spring Framework 5.0是Spring大家族中的一个核心框架版本,它支持了Java 8及以上版本中的众多特性,比如Lambda表达式和函数式编程。Spring Framework 5.0的中文文档PDF是学习和参考该框架的重要资源,其内容涵盖了...

    spring-framework-4.3.23.RELEASE-dist.zip

    此外,Spring还提供了对消息传递(如JMS)、任务调度(如Quartz)、远程调用(如RMI、Hessian)等的支持,构建了一个全面的企业级应用开发平台。 总之,Spring Framework 4.3.23.RELEASE是一个强大且灵活的框架,其...

    spring-rmi-example:Spring rmi 示例,取自 code.google.com,因为 code.google.com 将停止使用

    spring-rmi-示例 项目是从 code.google.com/p/springrmiexample 导出的,我这边稍作修改 这个项目是如何在 Spring 的帮助下设置 RMI 服务器和客户端的示例。 该项目包含2个子项目: Spring RMI 示例服务器,即 Web...

    spring-framework-5.2.0+spring-security-5.3.1.pdf

    - **远程调用**:支持JMS、RMI、JCA、EJB等远程调用技术。 - **任务调度和缓存**:提供了任务调度和缓存抽象。 - **集成技术**:支持电子邮件、任务调度、Caching等集成技术。 - **编程语言支持**:支持Kotlin、...

    Spring RMI小例子

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

    spring-rpc-case

    标题“spring-rpc-case”指的是一个关于Spring RPC的案例研究,RPC(Remote Procedure Call)是远程过程调用,一种在分布式系统中实现客户端与服务器端通信的技术。Spring框架提供了Spring RPC支持,允许开发者构建...

    Spring RMI

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

    rmi与spring整合实例

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

    spring jar 包详解

    - **依赖关系**:依赖于 `spring-core.jar`、`spring-beans.jar`、`spring-aop.jar`、`spring-dao.jar`、`spring-jdbc.jar`、`spring-orm.jar`、`spring-web.jar` 和 `spring-webmvc.jar`。 ##### 7. spring-jdbc....

Global site tag (gtag.js) - Google Analytics