




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java分布式之RMI实例教程 网络通信原理前言最近的联通项目,下一阶段可能会涉及到和各省间的RMI接口,所以总结一下08年中国移动自动拨测系统用到的RMI技术,以备不时之需。同时也给广大初哥 提供一些学习资料,哈哈。前几年,一直忙于项目,没怎么做系统总结。以后计划写一些以前项目用过的Java分布式技术实例教程,如:RMI、 Socket、Mina、SNMP、SOAP、Web Service、Hessian、JMS等。希望和大家一起交流,分享经验,一起提高。RMI简介RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。看看jboss-remoting:基本原理要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于 传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场 景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常 都会提供一些更为贴近应用易用的应用层协议。主要步骤分为以下几个步骤:1. 创建远程接口及声明远程方法(RmiMonitorService.java)2. 实现远程接口及远程方法(继承UnicastRemoteObject)(RmiMonitorServiceImpl.java)3. 启动RMI注册服务,并注册远程对象(RmiServer.java)4. 客户端查找远程对象,并调用远程方法(MonitorClient.java)5. 运行实例业务场景在移动拨测系统管理端中要融合实时显示。简单点说就是设备出现告警时,要采用不同方式实时展示。如Web界面(Ajax)、GIS等。主要业务流程设计: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 。测试点ID(tsid)设备ID(devid)告警ID(warnid)告警类型(warntype)告警级别(warnlevel)代码实现废话少说,上代码,为了演示方便,经过整理,省去了很多get,set之类的东东还有业务的东西以及Spring相关的东西。Java代码RmiMonitorService.javapackage nbpt.ts.manager.message.service;import java.rmi.Remote;import java.rmi.RemoteException;/* Description: 实时显示RMI服务接口。* RMI接口必须扩展接口java.rmi.Remote* author Peter Wei* version 1.0 Feb 25, 2009*/public interface RmiMonitorService extends Remote /* 实时显示对外接口* param funindex* 功能号* param param* 键名列表,也就是实际传输的内容* return* throws RemoteException* 远程接口方法必须抛出java.rmi.RemoteException*/public int interactive(int funindex, String param) throws RemoteException;RmiMonitorServiceImpl.javapackage nbpt.ts.manager.message.service.impl;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;/ import nbpt.ts.manager.base.util.AppContext;import nbpt.ts.manager.message.service.RmiMonitorService;import nbpt.ts.manager.message.service.WarnService;/* Description: 实时显示RMI接口实现。* 实现RMI接口及远程方法(继承UnicastRemoteObject)* author Peter Wei* version 1.0 Feb 25, 2009*/public class RmiMonitorServiceImpl extends UnicastRemoteObject implementsRmiMonitorService private static final long serialVersionUID = -3771656108378649574L;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 result = 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 result;public WarnService getWarnService() return warnService;public void setWarnService(WarnService warnService) this.warnService = warnService;RmiServer.javapackage nbpt.ts.manager.message.service;import .MalformedURLException;import java.rmi.AlreadyBoundException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import nbpt.ts.manager.message.service.impl.RmiMonitorServiceImpl;/* Description: RMI服务端。* author Peter Wei* version 1.0 Feb 25, 2009*/public 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 + “/comm”, comm); catch (RemoteException e) System.out.println(“创建远程对象发生异常!” + e.toString();e.printStackTrace(); catch (AlreadyBoundException e) System.out.println(“发生重复绑定对象异常!” + e.toString();e.printStackTrace(); catch (MalformedURLException e) System.out.println(“发生URL畸形异常!” + e.toString();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初始化并启动RmiServer rmiServer = new RmiServer();System.out.println(“RMI服务初始化:”);rmiServer.init();MonitorClient.javapackage nbpt.ts.manager.message.service;import .MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;/* 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(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服务注册表中查找名称为RmiMonitorService的对象,并调用其上的方法monitorService = (RmiMonitorService) Naming.lookup(“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 MonitorClient();System.out.println(“发送告警信息:”);String msg = “tsid=1022&devid=10001027&warnid=102&warntype=01&warnlevel=1&warnmsg=设备出错,请检查。”;System.out.println(client.getValue(msg, “warnmsg”);eractive(1, msg);public String getValue(String content, String key) String value = “”;int begin = 0, end = 0;begin = content.indexOf(key + “=”);end = content.indexOf(“&”, begin);if (end = -1)end = content.length();value
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 缺铁性贫血病人的护理
- 露营酒店工作汇报
- 事业编申论课件
- 《范进中举》获奖课件
- 筛煤服务合同6篇
- 《羊肠小道》课件
- 《纪昌学箭》课件
- 竞价专员年终总结
- 护理不良事件相关知识培训
- 烟花爆竹企业负责人培训
- GB/T 18166-2025架空游览车类游乐设施通用技术条件
- 2025广西桂林理工大学南宁分校公开招聘教职人员控制数工作人员68人考试参考题库及答案解析
- 水库安全生产教育培训课件
- 红色知识竞赛试题及答案
- 2《学习成就梦想》(共21张) +公开课一等奖创新教案 统编版道德与法治七年级上册
- 西藏事业人员管理办法
- 企业生产管理与质量控制模板
- 语言哲学概况课件
- 2025年度培训课程保密协议书范本
- 2025年国企审计笔试题及答案
- 人教版数学三年级上册第五单元《 第02课时 求一个数是另一个数的几倍 》(听评课记录)
评论
0/150
提交评论