前段时间学习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. lipo命令

    工作中,xcode工程遇到一个bug file was built for archive which is not the architecture being linked armv7 找了一些资 ...

  2. caldera

    Caldera International星期一宣布将公司名称变更为SCO Group,交易代码则改为SCOX,希望SCO可以在客户群当中建立更好的品牌认同. Caldera除了有自己的Linux版本 ...

  3. Java 容器相关知识全面总结

    Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...

  4. Tengine – Nginx衍生版

    Tengine是淘宝在Nginx基础上开发的一个衍生版.官方的简介说针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验. ...

  5. homework-07

    终于等到了一次难度相对比较小的问题,只要读完提问题就好,但又不得不说自己真的很菜,且不说C++掌握的不好,连英文也比较差,导致读的非常吃力,不过我还是坚持读完了四篇英文文章,大致意思是可以了解的,但是 ...

  6. 分享iOS最喜欢的技巧和提示

    转自:http://blog.csdn.net/biggercoffee/article/details/50394027 Objective-C 1.让Xcode的控制台支持LLDB类型的打印 这有 ...

  7. JSF 2 radio buttons example

    In JSF, "h:selectOneRadio" tag is used to render a set of HTML input element of type " ...

  8. AVCaptureSession 照相时获取 AVCaptureVideoPreviewLayer尺寸

    http://stackoverflow.com/questions/14153878/avcapturesession-preset-photo-and-avcapturevideopreviewl ...

  9. MD5验证工具:md5sum

    linux 下 shell命令 ,制作md5码 也用于软件的md5校验     MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest ...

  10. MPAndroidChart 的实现

    效果图: 代码实现: package com.jiahao.me; import java.util.ArrayList; import java.util.List; import android. ...