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

spring RMI 实用分享

阅读更多
   spring封装的RMI能方便的帮我们实现远程方法调用。在一些场景下,使用spring RMI能以较少的代码量实现功能需求。一般来讲,使用spring RMI建议分四步进行:
   一、编写服务契约实体和接口
   二、编写服务实现类
   三、通过spring发布服务
   四、通过spring配置client端

  
   一、编写服务契约实体和接口
   代码示例:
    实体类:
package example;

import java.io.Serializable;

public class User implements Serializable {

    private static final long serialVersionUID = 6219857853122278761L;

    private int id;

    private String username;

    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

    接口:
package example;

public interface HelloService {

    String getGreeting(String name);

    User getUserById(int id);
}

   注意事项:
   

        在创建契约实体时要实现Serializable接口(包括接口的参数和返回值)。
       

   二、编写服务实现类
    代码示例:
package example;

import org.springframework.stereotype.Component;

/**
 * @author Kevin
 *
 * @date 2014年10月14日 下午5:32:35
 */
@Component("helloServiceImpl")
public class HelloServiceImpl implements HelloService {

    @Override
    public String getGreeting(String name) {
        return "name=" + name;
    }

    @Override
    public User getUserById(int id) {
        return new User();
    }

}

    三、通过spring发布部署
    代码示例:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans    
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="example"/>
        
    <bean class="org.springframework.remoting.rmi.RmiServiceExporter">
    	<!-- 服务名称 -->
    	<property name="serviceName" value="helloService"/>
    	<!-- 服务实现类 -->
    	<property name="service" ref="helloServiceImpl"/>
    	<!-- 服务契约接口 -->
    	<property name="serviceInterface" value="example.HelloService"/>
    	<!-- 注册端口 -->
    	<property name="registryPort" value="1088"/>
    	<!-- 服务端口 -->
    	<property name="servicePort" value="1077"/>
    </bean>
</beans>

   注意事项:
  

       1、若RMI server和RMI client在同一台机器上,则servicePort可以不配置,spring的RMI实现会分配一个匿名端口;若RMI server和RMI client在不同的机器上,建议配置上servicePort,显示指定一个端口,Linux环境下请打开registryPort和servicePort的防火墙开关。
       2、若RMI server和RMI client在不同的机器上时,在启动RMI server的JAVA_OPTS中要加上"-Djava.rmi.server.hostname=HOST",这个HOST为对外提供服务的IP地址或者域名。
      

   四、通过spring配置client端
   代码示例:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans    
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd">
	
	<bean id="helloService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<!--服务请求地址-->
		<property name="serviceUrl" value="rmi://HOST:PORT/helloService"/>
		<!--服务契约接口-->
		<property name="serviceInterface" value="example.HelloService"/>
		<!--是否启动client时就寻找存根-->  
        <property name="lookupStubOnStartup" value="false"/>  
        <!--是否在连接RMI server失败时刷新存根-->  
        <property name="refreshStubOnConnectFailure" value="true"/>
	</bean>
</beans>

    注意事项:
   

        1、若RMI server和RMI client在同一台机器上serviceUrl中的HOST为localhost或本机IP地址
        2、若RMI server和RMI client在不同的机器上serviceUrl中的HOST为RMI server启动时JAVA_OPTS中-Djava.rmi.server.hostname指定的HOST。
        3、PORT保持与RMI server中的registryPort一致即可。
        4、lookupStubOnStartup 该配置项默认为true,表示启动RMI client时就要lookup 存根,这在RMI server和RMI client的启动顺序未知的情况下,极为有用,只要配置为false,就不会受server和client的启动顺序影响导致client无法启动
        5、refreshStubOnConnectFailure 该配置项默认为false,表示在连接server失败时不刷新存根,直接抛出异常,在实际应用中,将该配置设置而为true,就类似于打开了网络连接中的失败重连机制,在client连接server失败的时候,会自动刷新存根
       

    代码示例参见附件。
    更多使用过程中的异常会逐步整理更新,谢谢!
分享到:
评论

相关推荐

    Spring RMI小例子

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

    Spring RMI

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

    SpringRMI小例子

    Spring Remote Method Invocation(RMI)是Java平台上的一个远程对象调用框架,它允许一个Java对象在一台机器上执行,并且被另一台机器上的客户端调用。在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring...

    spring rmi应用

    本文将深入探讨“Spring RMI(Remote Method Invocation)应用”,这是Spring框架中用于实现远程方法调用的功能,它使得分布式系统开发变得更加简单。 首先,RMI是Java平台上的一个核心特性,允许在不同JVM之间透明...

    spring rmi 改造

    在IT行业中,Spring框架是Java开发中的一个基石,它提供了丰富的功能来简化应用程序的构建,包括远程过程调用(Remote Method Invocation,RMI)服务。本文将深入探讨"spring rmi 改造"这一主题,主要关注如何在原有...

    spring rmi 小例子

    Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象的方法。在本示例中,我们将探讨如何使用Spring RMI创建一个小的应用程序,这通常涉及到服务器端(服务...

    spring rmi使用心得

    为了避免业务逻辑重新开发,顾使用spring rmi,把所有的bean作为rmi服务暴漏出来,在客户端只需要把项目依赖过来就ok,或者把以前的接口导入过来。 参考文档:...

    spring RMI简单例子

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中调用远程服务变得更加便捷。在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何...

    spring RMI 服务(自动把service发布为RMI服务)

    Spring RMI服务是一种在Java平台上实现远程方法调用(Remote Method Invocation, RMI)的技术,它允许分布式系统中的不同组件通过网络进行通信。在Spring框架的支持下,我们可以更方便地将服务发布为RMI服务,使得...

    Spring Rmi使用文档

    ### Spring RMI 使用详解 #### 一、Spring RMI 概述 Spring RMI 是 Spring 框架中用于支持远程方法调用(Remote Method Invocation)的功能模块。通过 Spring RMI, 开发者能够更加简便地搭建和管理远程服务。传统上...

    spring rmi 源码

    Spring RMI(Remote Method Invocation)是Spring框架对Java RMI技术的一种封装,使得在Spring环境中使用RMI变得更加简便。RMI是一种Java平台上的远程对象调用机制,它允许一个Java对象在不同的Java虚拟机之间调用另...

    spring rmi 集成

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

    Spring-RMI.rar_spring rmi

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

    spring和RMI分布式整合源码

    在IT行业中,Spring框架与RMI(Remote Method Invocation,远程方法调用)的结合是构建分布式系统的一种常见方式。这个“spring和RMI分布式整合源码”可能包含了一个实际项目中如何将这两种技术融合的实例。现在,...

    spring rmi 简单应用

    Spring RMI(Remote Method Invocation)简单应用主要涉及的是在Java中使用Spring框架来实现远程方法调用的技术。RMI是Java提供的一种分布式计算能力,它允许一个Java对象调用网络另一端的Java对象的方法,实现了...

    springRMI接口实现

    Spring Remote Method Invocation (RMI) 是Spring框架提供的一种远程服务调用机制,它允许你在分布式环境中调用对象的方法,就像是在本地执行一样。这个技术基于Java的RMI系统,但通过Spring的抽象层,简化了配置和...

    java项目使用spring rmi所涉及到的包

    在Java项目中,Spring RMI(Remote Method Invocation)是一种整合远程方法调用功能与Spring框架的方式,它使得在分布式环境中管理对象和服务变得更加便捷。本文将深入探讨Spring RMI涉及的包,以及如何在项目中使用...

    spring+rmi非本地实现

    总的来说,"spring+rmi非本地实现"项目展示了如何利用Spring和RMI来构建分布式服务,提供了一种跨越网络调用的方法,增强了系统的可扩展性和解耦性。理解和掌握这部分知识对于开发分布式系统具有重要意义。

Global site tag (gtag.js) - Google Analytics