Java分布式之RMI简介及实例_第1页
Java分布式之RMI简介及实例_第2页
Java分布式之RMI简介及实例_第3页
Java分布式之RMI简介及实例_第4页
Java分布式之RMI简介及实例_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java分布式之RMI简介及实例前言最近的联通项目,下一阶段可能会涉及到和各省间的RMI接口,所以总结一下08年中国移动自动拨测系统用到的RMI技术,以备不时之需。同时也给广大初哥提供一些学习资料,哈哈。前几年,一直忙于项目,没怎么做系统总结。以后计划写一些以前项目用过的Java分布式技术实例教程,如:RMI、Socket、Mina、SNMP、SOAP、Web Service、Hessian、JMS等。希望和大家一起交流,分享经验,一起提高。RMI简介RMI,远程方法调用(Remote Method Invocation是Enterprise JavaBeans的支柱,是建立分布式Java应用

2、程序的方便途径。RMI是非常容易使用的,但是它非常的强大。RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。看看jboss-remoting:基本原理要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用

3、的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。主要步骤分为以下几个步骤:1. 创建远程接口及声明远程方法(RmiMonitorService.java2. 实现远程接口及远程方法(继承UnicastRemoteObject(RmiMonitorServiceImpl.java3. 启动RMI注册服务,并注册远程对象(RmiServer.java4. 客户端查找远程对象,并调用远程方法(MonitorClient.java5. 运行实例业务场景在移动拨测系统管理端中要融合实时显示。简单点说就是设备出现告警时,要采用不同方式实时展示。如Web界面(Ajax、GIS等。主要业务流程设

4、计:1. 设备告警2. 调用RMI Client3. 调用RMI Server4. 调用业务处理接口5. 告警信息入库6. 实时显示(Ajax,Gis等技术技术设计接口函数函数名称:int interactive( int funindex, string param 参数说明:funindex 功能号,整型。1为设备告警param 交互参数,字符串型。返回:成功=1,失败=0。说明:param交互参数用键值对组成,每个键值对以“&”分割,如: Tsid=01&devid=002&warnid=102&warntype=01&warnlevel=1 。测

5、试点ID(tsid设备ID(devid告警ID(warnid告警类型(warntype告警级别(warnlevel代码实现废话少说,上代码,为了演示方便,经过整理,省去了很多get,set之类的东东还有业务的东西以及Spring相关的东西。Java代码RmiMonitorService.java/* Description: 实时显示RMI服务接口.* author Peter Wei* version 1.0 Feb 25, 2009*/public interface RmiMonitorService extends Remote /* 实时显示对外接口* param funindex*

6、 功能号* param param* 键名列表,也就是实际传输的内容* return* throws RemoteException*/public int interactive(int funindex, String param throws RemoteException; RmiMonitorServiceImpl.java/* Description: 实时显示RMI接口实现.* 实现RMI接口及远程方法(继承UnicastRemoteObject* author Peter Wei* version 1.0 Feb 25, 2009*/public class RmiMonito

7、rServiceImpl extends UnicastRemoteObject implements RmiMonitorService public static final int SUCCSS = 1;public static final int FAIL = 0;public WarnService warnService;/* 必须定义构造方法,因为要抛出RemoteException异常* throws RemoteException*/public RmiMonitorServiceImpl( throws RemoteException super(;public int

8、interactive(int funindex, String param throws RemoteException int result = FAIL;switch (funindex / 告警case (1: / warnService = (WarnService AppContext.getAppContext(.getBean(/ "warn.warnService"/ 实际应用是从Spring应用中获取告警Service,如上代码warnService = new WarnServiceImpl(;/ 网络告警的业务操作warnService.dealWa

9、rn(param;result = SUCCSS;break;case (2:/ do other bizbreak;/ .return result;public WarnService getWarnService( return warnService;public void setWarnService(WarnService warnService this.warnService = warnService;RmiServer.java/* Description: RMI服务端.* author Peter Wei* version 1.0 Feb 25, 2009*/publi

10、c class RmiServer public String ip = "localhost"public int port = 8889;/* 启动RMI注册服务,并注册远程对象.实际应用中是在Spring初始化并启动*/public void init( try LocateRegistry.createRegistry(port;/ 创建一个远程对象RmiMonitorService comm = new RmiMonitorServiceImpl(;Naming.bind("/" + ip + ":" + port + &q

11、uot;/comm", comm; catch (RemoteException e e.printStackTrace(; catch (AlreadyBoundException e e.printStackTrace(; catch (MalformedURLException e e.printStackTrace(;public String getIp( return ip;public void setIp(String ip this.ip = ip;public int getPort( return port;public void setPort(int por

12、t this.port = port;public static void main(String args / 实际应用中是在Spring初始化并启动RmiServer rmiServer = new RmiServer(;rmiServer.init(;MonitorClient.java/* Description: RMI客户端.* author Peter Wei* version 1.0 Feb 25, 2009*/public class MonitorClient public RmiMonitorService monitorService;public String ip

13、= "localhost"public int port = 8889;public int interactive(int funindex, String param int result = 0;try getMonitorService(.interactive(funindex, param;result = 1; catch (RemoteException e e.printStackTrace(;return result;public RmiMonitorService getMonitorService( try / 在RMI服务注册表中查找名称为Rmi

14、MonitorService的对象,并调用其上的方法monitorService = (RmiMonitorService Naming.lookup("rmi:/" + ip+ ":" + port + "/comm" catch (NotBoundException e e.printStackTrace(; catch (MalformedURLException e e.printStackTrace(; catch (RemoteException e e.printStackTrace(;return monitorSer

15、vice;public static void main(String args throws RemoteException MonitorClient client = new MonitorClient(;String msg = "tsid=1022&devid=10001027&warnid=102&warntype=01&warnlevel=1&warnmsg=设备出错,请检查."eractive(1, msg;public String getValue(String content, String

16、key String value = ""int begin = 0, end = 0;begin = content.indexOf(key + "="end = content.indexOf("&", begin;if (end = -1end = content.length(;value = content.substring(begin + key.length( + 1, end;return value;WarnService.java/* Description: 告警服务* author Peter Wei

17、* version 1.0 2010-8-22*/public interface WarnService /* 处理告警:告警来时的业务操作,实际操作是解析消息存库,然后界面Ajax定时刷新数据,获取实时告警展示* param message* return*/public int dealWarn(String message;WarnServiceImpl.java/* Description: 告警服务* author Peter Wei* version 1.0 2010-8-22*/public class WarnServiceImpl implements WarnServic

18、e public int dealWarn(String message / 告警处理方法/ return 1;RmiMonitorService.java/* Description: 实时显示RMI服务接口.* author Peter Wei* version 1.0 Feb 25, 2009*/public interface RmiMonitorService extends Remote /* 实时显示对外接口* param funindex* 功能号* param param* 键名列表,也就是实际传输的内容* return* throws RemoteException*/pu

19、blic int interactive(int funindex, String param throws RemoteException; RmiMonitorServiceImpl.java/* Description: 实时显示RMI接口实现.* 实现RMI接口及远程方法(继承UnicastRemoteObject* author Peter Wei* version 1.0 Feb 25, 2009*/public class RmiMonitorServiceImpl extends UnicastRemoteObject implements RmiMonitorService

20、public static final int SUCCSS = 1;public static final int FAIL = 0;public WarnService warnService;/* 必须定义构造方法,因为要抛出RemoteException异常* throws RemoteException*/public RmiMonitorServiceImpl( throws RemoteException super(;public int interactive(int funindex, String param throws RemoteException int resu

21、lt = FAIL;switch (funindex / 告警case (1: / warnService = (WarnService AppContext.getAppContext(.getBean(/ "warn.warnService"/ 实际应用是从Spring应用中获取告警Service,如上代码warnService = new WarnServiceImpl(;/ 网络告警的业务操作warnService.dealWarn(param;result = SUCCSS;break;case (2:/ do other bizbreak;/ .return r

22、esult;public WarnService getWarnService( return warnService;public void setWarnService(WarnService warnService this.warnService = warnService;RmiServer.java/* Description: RMI服务端.* author Peter Wei* version 1.0 Feb 25, 2009*/public class RmiServer public String ip = "localhost"public int p

23、ort = 8889;/* 启动RMI注册服务,并注册远程对象.实际应用中是在Spring初始化并启动*/public void init( try LocateRegistry.createRegistry(port;/ 创建一个远程对象RmiMonitorService comm = new RmiMonitorServiceImpl(;Naming.bind("/" + ip + ":" + port + "/comm", comm; catch (RemoteException e e.printStackTrace(; ca

24、tch (AlreadyBoundException e e.printStackTrace(; catch (MalformedURLException e e.printStackTrace(;public String getIp( return ip;public void setIp(String ip this.ip = ip;public int getPort( return port;public void setPort(int port this.port = port;public static void main(String args / 实际应用中是在Spring

25、初始化并启动RmiServer rmiServer = new RmiServer(;rmiServer.init(;MonitorClient.java/* Description: RMI客户端.* author Peter Wei* version 1.0 Feb 25, 2009*/public class MonitorClient public RmiMonitorService monitorService;public String ip = "localhost"public int port = 8889;public int interactive(i

26、nt funindex, String param int result = 0;try getMonitorService(.interactive(funindex, param;result = 1; catch (RemoteException e e.printStackTrace(;return result;public RmiMonitorService getMonitorService( try / 在RMI服务注册表中查找名称为RmiMonitorService的对象,并调用其上的方法monitorService = (RmiMonitorService Naming.l

27、ookup("rmi:/" + ip+ ":" + port + "/comm" catch (NotBoundException e e.printStackTrace(; catch (MalformedURLException e e.printStackTrace(; catch (RemoteException e e.printStackTrace(;return monitorService;public static void main(String args throws RemoteException MonitorClient client = new M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论