前段时间学习JMX,知道可以使用rmi连接器,就顺便看下rmi是什么东西,RMI 全称Remote Method Invocation-远程方法调用,实现远程对象之间的调用,下面原理图来自网络

服务器端定义接口和实现

public interface FFMMendService extends Remote {
Long doReSend(long rcvId) throws RemoteException;
} public class FFMMendServiceImpl extends UnicastRemoteObject implements FFMMendService {
//必须实现一个现实构造函数,并抛出RemoteException
protected FFMMendServiceImpl() throws RemoteException {
} }

继承自UnicastRemoteObject,客户端执行的是远程对象,否则,客户端是反序列化出的新对象,方法调用就与远程对象无关了

发布下

private static void publicRmi(Remote remote,int port) throws RemoteException, MalformedURLException {
LocateRegistry.createRegistry(port);
Naming.rebind(rmiUrl, remote); //rmiUrl=rmi://127.0.0.1:9797/robotservice
}

实例化FFMMendServiceImpl,发布在rmi://127.0.0.1:9797/robotservice地址上 

完了,so easy。。

客户端使用

FFMMendService remote = (FFMMendService)Naming.lookup("rmi://127.0.0.1:9797/robotservice");

就可以向本地对象一样调用 FFMMendServiceImpl了

如果和spring结合

服务器端配置

<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
  <property name="port" value="1099"/>
</bean>
<bean id="rmiServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<!– 调用Service –>
<property name="service" ref="ffmMendService" />
<!– value值是提供给客户端调用 –>
<property name="serviceName" value="robotservice" />
<!– service接口 –>
<property name="serviceInterface" value="mf.ffm.receiver.service.FFMMendService" />
<!– 注册端口 –>
<!--<property name="registryPort" value="9797" />-->
     <property name="registry" ref="registry"/>
</bean>

  

还可配置servicePort,此属性默认是0,由系统选择,是rmi服务的数据端口

客户端配置

<bean id="rmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://127.0.0.1:9797/robotservice" />
<!– service接口 –>
<property name="serviceInterface" value="mf.ffm.receiver.service.FFMMendService" />
  <property name="refreshStubOnConnectFailure" value="true"></property>
  <property name="lookupStubOnStartup" value="false"></property>
</bean> 

rmiService就是远程对象的一个代理了

  

注:客户端在使用时要有服务器端的相关接口定义,例如 interface FFMMendService

  

参考文章:

1. RMI 相关知识

2. Spring RMI注意问题

RMI学习的更多相关文章

  1. Java RMI学习与解读(一)

    Java RMI学习与解读(一) 写在前面 本文记录在心情美丽的一个晚上. 嗯.就是心情很美丽. 那为什么晚上还要学习呢? emm... 卷... 卷起来. 全文基本都是根据su18师傅和其他师傅的文 ...

  2. Java RMI学习与解读(二)

    Java RMI学习与解读(二) 写在前面 接上篇文章,这篇主要是跟着看下整个RMI过程中的源码并对其做简单的分析 RMI源码分析 还是先回顾下RMI流程: 创建远程对象接口(RemoteInterf ...

  3. Java RMI学习与解读(三)

    Java RMI学习与解读(三) 写在前面 接下来这篇就是最感兴趣的Attack RMI部分了. 前面也说过,RMI的通信过程会用到反序列化,那么针对于RMI的三个角色: Server/Regisrt ...

  4. Java学习之路-RMI学习

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...

  5. Java RMI学习

    网上资料: Java RMI Tutorial Dynamic code downloading using RMI RPC-维基:Remote procedure call implementing ...

  6. Java RMI 学习笔记

    概况 功能:提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务辅助对象形同的方法. 优点:客户不必写任何网络或I/O代码,调用远程方法就和运行在客户自己的本地JVM上对对象进行的正常方法一样. ...

  7. RMI反序列化学习

    RMI学习 1.RMI简介 RMI(Remote Method Invocation),远程方法调用方法,其实就是本地java虚拟机要调用其他java虚拟机的方法,两个虚拟机可以是运行在相同计算机上的 ...

  8. Java的RMI远程方法调用实现和应用

    最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一 ...

  9. [转]Java远程方法调用

    Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远 ...

随机推荐

  1. COS回应7大质疑

    Apple过于封闭,没啥朋友,这家伙应该比较高傲,曾和Intel,IBM and so on..一起玩过!Google过于开放,狐朋狗友,友人泛滥,殃及ecosystem,弊端已显,祸水将至.COS奉 ...

  2. Row Border in DataGrid 表格边框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 【转】Nginx系列(二)--模块化

    原博文出于: http://blog.csdn.net/liutengteng130/article/details/46700977  感谢! 高度模块化的设计设Nginx架构的基础.在Nginx中 ...

  4. nyoj 20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  5. string中c_str()、data()、copy(p,n)函数的用法

    标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str().data().copy(p,n). 1. c_str():生成一个const char*指针,指向以空 ...

  6. javascript操作Math对象的方法总结

    //数学函数--abs 返回数字的绝对值 var a; /*a = Math.abs(-12); alert(a); //12 //数学函数--acos 返回数的反余弦数 a = Math.acos( ...

  7. Android常用正则工具类

    此类提供日常开发中常用的正则验证函数,比如:邮箱.手机号.电话号码.身份证号码.日期.数字.小数.URL.IP地址等.使用Pattern对象的matches方法进行整个字符匹配,调用该方法相当于:   ...

  8. SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】

    定义 可以使用例程定义关键值或特性的复杂的转换规则. 例程是本地 ABAP 类,它们包括预定义的定义和实施范围.进站和出站参数的 TYPES及方法签名都存储在定义范围中.实际例程创建于实施范围中.使用 ...

  9. OpenscenGraph中控制swapbuffer的方法(用于多机大屏幕同步显示机制)

    **************************************************************************************************** ...

  10. sed常见使用方法总结

    编辑文本 sed -i '1i xyz' test.txt 在第一行之前 sed -i '1a xyz' test.txt 在第一行之后插入 sed -i '1c xyz' test.txt 把第一行 ...