`
juji1010
  • 浏览: 115147 次
社区版块
存档分类
最新评论

Spring RMI 配置

 
阅读更多
1 RMI的概念

Java Remote Method Invocation (RMI) is Java's remote procedure call (RPC) mechanism. RMI allows you to write distributed objects using Java.

RMI调用的过程,我的理解大致如下:

  • 客户端和服务器端约定好要用于远程调用的方法的接口(包括方法名和输入输出参数)。
  • 服务器端将远程服务绑定到某个端口,进行TCP/IP监听(例如监听地址为rmi://127.0.0.1:1099)。
  • 客户端与服务器建立TCP/IP连接(当然事先要知道服务器端的监听地址),按照接口声明的方法发送数据(可序列化的Java对象)以及要调用的服务名、方法名等。
  • 服务器端将接收到的数据(字节流)反序列化,得到要调用的方法和参数信息;然后服务器端进行本地计算(方法调用)。
  • 服务器端将计算的结果(可序列化的Java对象)发送给客户端。
  • 客户端从接收到的返回数据(字节流)中进行反序列化,得到运算结果。
  • 客户端断开与服务器端的TCP/IP连接,远程调用结束。

2 Spring 配置

Spring --RMI远程方法调用

服务器端配置

(1)首先新建一个j2se项目,添加相关jar

commons-logging-1.1.1.jar ----- 打印日志

spring-2.5.6.SEC02.jar -----解决 异常:java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice

spring-aop-2.5.6.jar

spring-beans-2.5.6.SEC02.jar

spring-context-2.5.6.SEC02.jar

spring-context-support-2.5.6.SEC02.jar

spring-core-2.5.6.SEC02.jar

(2)新建一个接口如下:

public interface ILogPerson {

public String getPersion();

public void setPersion(String info);

}

(3)接口实现类:

public class LogPerson implements ILogPerson {

private String delegateinfo;

@Override

public String getPersion() {

return delegateinfo;

}

public void setPersion(String info) {

this.delegateinfo=info;

}

}

(4)添加Spring配置文件 appcontextrmiserver.xml(名字自定义)

<bean id="logPersonService" class="org.springframework.remoting.rmi.RmiServiceExporter">

<property name="serviceName">

<value>LogPerson</value>

</property>

<property name="serviceInterface">

<value>com.test.rmi.ILogPerson</value>

</property>

<property name="registryPort">

<value>1200</value>

</property>

</bean>

(5)注册服务(其实就是获取bean)

可以新建一个测试类,在main方法中获取bean信息

public static void main(String[] args) {

//BeanFactory factory=new XmlBeanFactory(new FileSystemResource("appcontextrmiserver.xml"));

//ApplicationContext context = new ClassPathXmlApplicationContext("appcontextrmiserver.xml");

Resource resource = new ClassPathResource("appcontextrmiserver.xml");

BeanFactory factory = new XmlBeanFactory(resource);

factory.getBean("logPersonService");

}

(6)执行main方法,如果看到一下信息 就表示注册成功!

服务器端注册成功::信息: Binding service 'LogPerson' to RMI registry: RegistryImpl[UnicastServerRef [liveRef: [endpoint:

[10.13.122.200:1200](local),objID:[0:0:0, 0]]]]

10.13.122.200 就是当前服务器的ip地址,1200是在xml中配置的注册端口号

客户端调用配置

(1)新建一个j2se项目

(2)将服务器端的接口和接口实现类打成jar文件(或者直接将服务器端接口和接口实现类直接拷到应用中),

添加到应用中,然后添加相关Spring的jar

(3)添加Spring配置

<bean id="LogPerson"class="org.springframework.remoting.rmi.RmiProxyFactoryBean">

<property name="serviceUrl">

<value>rmi://10.13.122.193:1200/LogPerson</value>

//对应服务器端IP地址和配置的端口号,LogPerson指服务器端配置的serviceName的value值

</property>

<property name="serviceInterface">

<value>com.test.rmi.ILogPerson</value>

//对应服务器端配置的"serviceInterface"的value值

</property>

</bean>

(4)添加测试类

public class LogPersonRmiClient {

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("appcontextrmiserver.xml");

ILogPerson clientLog = (ILogPerson)context.getBean("LogPerson");

clientLog.setPersion("RMI客户端调用!");

}

}

经常出现的异常:

(1)写一个rmi客户端程序,你可能会收到如标题这样的异常。这个问题其实是由rmi服务器端程序造成的。

客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作根据这个hostname来连接服务

器端。要想知道这个hostname具体是什么值可以在服务器端bash中打入指令:

hostname -i

如果返回的是127.0.0.1,那么你的客户端肯定会抛如标题的异常了。

解决这个问题有两个方式:

1 修改/etc/hosts

找到127.0.0.1 hostxxxxx这样的字样。把127.0.0.1改成真实的,可供其他机器连接的ip。

这样客户端就能得到真实的ip了

分享到:
评论

相关推荐

    spring rmi 多接口配置 调用

    spring rmi 多接口服务端配置 调用多接口客户端配置

    spring与rmi 整合实例 源码详解

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

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

    spring-rmi-示例 ...这个项目是如何在 Spring 的帮助下设置 RMI 服务器和客户端的示例。 该项目包含2个子项目: Spring RMI 示例服务器,即 Web 应用程序 ...服务器 Spring 配置如下: &lt; / bean &gt; &lt; pr

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

    上文我们利用Spring rmi实现了Spring的远程访问(Spring 实现远程访问详解——rmi),本文主要讲解利用HttpInvoke实现远程访问。 Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和...

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

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

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

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

    spring jar 包详解

    (2) spring-beans.jar 这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,...

    Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis

    Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis 包含Hessian配置说明、服务器Server Demo、客户端Client Demo.

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点实施 ...

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

    这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及...

    最新最全的spring开发包

    这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及...

    Spring 2.0 开发参考手册

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点...

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

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    Spring中文帮助文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    spring chm文档

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. 其它资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点...

    Spring API

    6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 ...

    Spring攻略(第二版 中文高清版).part1

    1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...

    spring in action英文版

    第一部分 Spring基础  第1章 开始Spring之旅  1.1 为什么使用Spring  1.1.1 J2EE开发者的一天  1.1.2 Spring的承诺  1.2 Spring是什么  1.3 开始Spring之旅  1.4 理解反向控制  1.4.1 依赖...

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

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    Spring攻略(第二版 中文高清版).part2

    1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用构造程序创建Bean 14 1.3.1 问题 14 1.3.2 解决方案 14 1.3.3 工作原理 14 1.4 解决构造程序歧义 17 ...

Global site tag (gtag.js) - Google Analytics