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(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...
**Spring RMI 深度解析** Spring框架作为Java企业级应用开发的首选,提供了丰富的功能,包括对远程方法调用(Remote Method Invocation,RMI)的支持。RMI是Java平台上的一个核心特性,允许在分布式环境中进行对象...
Spring Remote Method Invocation(RMI)是Java平台上的一个远程对象调用框架,它允许一个Java对象在一台机器上执行,并且被另一台机器上的客户端调用。在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring...
本文将深入探讨“Spring RMI(Remote Method Invocation)应用”,这是Spring框架中用于实现远程方法调用的功能,它使得分布式系统开发变得更加简单。 首先,RMI是Java平台上的一个核心特性,允许在不同JVM之间透明...
在IT行业中,Spring框架是Java开发中的一个基石,它提供了丰富的功能来简化应用程序的构建,包括远程过程调用(Remote Method Invocation,RMI)服务。本文将深入探讨"spring rmi 改造"这一主题,主要关注如何在原有...
Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象的方法。在本示例中,我们将探讨如何使用Spring RMI创建一个小的应用程序,这通常涉及到服务器端(服务...
为了避免业务逻辑重新开发,顾使用spring rmi,把所有的bean作为rmi服务暴漏出来,在客户端只需要把项目依赖过来就ok,或者把以前的接口导入过来。 参考文档:...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中调用远程服务变得更加便捷。在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何...
Spring RMI服务是一种在Java平台上实现远程方法调用(Remote Method Invocation, RMI)的技术,它允许分布式系统中的不同组件通过网络进行通信。在Spring框架的支持下,我们可以更方便地将服务发布为RMI服务,使得...
### Spring RMI 使用详解 #### 一、Spring RMI 概述 Spring RMI 是 Spring 框架中用于支持远程方法调用(Remote Method Invocation)的功能模块。通过 Spring RMI, 开发者能够更加简便地搭建和管理远程服务。传统上...
Spring RMI(Remote Method Invocation)是Spring框架对Java RMI技术的一种封装,使得在Spring环境中使用RMI变得更加简便。RMI是一种Java平台上的远程对象调用机制,它允许一个Java对象在不同的Java虚拟机之间调用另...
**Spring RMI 集成详解** 在Java开发中,远程方法调用(Remote Method Invocation,RMI)是一种用于在不同Java虚拟机之间进行对象交互的技术。Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加简单...
1.2 Spring的RMI支持:Spring通过`org.springframework.remoting.rmi.RmiServiceExporter`和`RmiProxyFactoryBean`简化了RMI的使用。`RmiServiceExporter`用于发布服务,而`RmiProxyFactoryBean`则用于创建RMI服务的...
在IT行业中,Spring框架与RMI(Remote Method Invocation,远程方法调用)的结合是构建分布式系统的一种常见方式。这个“spring和RMI分布式整合源码”可能包含了一个实际项目中如何将这两种技术融合的实例。现在,...
Spring RMI(Remote Method Invocation)简单应用主要涉及的是在Java中使用Spring框架来实现远程方法调用的技术。RMI是Java提供的一种分布式计算能力,它允许一个Java对象调用网络另一端的Java对象的方法,实现了...
Spring Remote Method Invocation (RMI) 是Spring框架提供的一种远程服务调用机制,它允许你在分布式环境中调用对象的方法,就像是在本地执行一样。这个技术基于Java的RMI系统,但通过Spring的抽象层,简化了配置和...
在Java项目中,Spring RMI(Remote Method Invocation)是一种整合远程方法调用功能与Spring框架的方式,它使得在分布式环境中管理对象和服务变得更加便捷。本文将深入探讨Spring RMI涉及的包,以及如何在项目中使用...
总的来说,"spring+rmi非本地实现"项目展示了如何利用Spring和RMI来构建分布式服务,提供了一种跨越网络调用的方法,增强了系统的可扩展性和解耦性。理解和掌握这部分知识对于开发分布式系统具有重要意义。