- 浏览: 340067 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
yueshang520:
太厉害了
Spring读取XML配置源码解析 -
levin_china:
jianyan163qq 写道好文章!我现在遇到一个调用的问题 ...
Java中Runtime.exec的一些事 -
wenlongsust:
exec可能存在注入漏洞,如何控制安全问题啊?
Java中Runtime.exec的一些事 -
RainWu:
...
设计模式感触之代理模式应用 -
ch_dj:
面向对象涉及原则:1.开闭原则2.少用继承,多用聚合3.针对 ...
设计模式感触之代理模式应用
1 远程代理的意义
远程代理为一个位于不同的地址空间的对象提供一个局域代表对象,这个不同的地址空间可以是在本机器中,也可以是在另一台机器中,远程代理还有个酷炫的名字:大使。
2 远程代理的结构
远程代理是代理模式的经典应用,类似客户端/服务器模式,是远程通信的一个缩影。示意图示如下:
3 代码示例:
我们需要对一家连锁店里的库存信息进行监控,以便准确的知道不同店的运行情况:
构建一个商店监视器,报告关于商店的位置和库存信息:
import java.rmi.RemoteException; public class StoreMonitor { RemoteStore store; public StoreMonitor(RemoteStore store) { this.store = store; } public void report() throws RemoteException { System.out.println("Store location: " + store.reportLocation()); System.out.println("Store count: " + store.reportCount()); } }
这里定义了一个RemoteStore,其实它是我们真实需要的一个代理:
import java.rmi.Remote; import java.rmi.RemoteException; public interface RemoteStore extends Remote { public String reportLocation() throws RemoteException; public int reportCount() throws RemoteException; }
RemoteStore接口的一个实现,能够用来完成远程服务调用:
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class DefaultRemoteStore extends UnicastRemoteObject implements RemoteStore { private static final long serialVersionUID = -6415918724751304895L; private int count; private String location; public DefaultRemoteStore(int count, String location) throws RemoteException { this.count = count; this.location = location; } @Override public String reportLocation() throws RemoteException { return location; } @Override public int reportCount() throws RemoteException { return count; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Remote location is: "); sb.append(location); sb.append("\n"); sb.append("Curret count is: "); sb.append(count); return sb.toString(); } }
下面是服务器端绑定的代码,即服务器那边将自己的信息注册以便能提供服务:
import java.rmi.Naming; public class StoreTestDriver { public static void main(String[] args) { DefaultRemoteStore store = null; int count; if (args.length < 2) { System.out.println("..."); System.exit(1); } try { count = Integer.parseInt(args[1]); store = new DefaultRemoteStore(count, args[0]); Naming.rebind("//" + args[0] + "/store", store); } catch (Exception e) { e.printStackTrace(); } } }
真实客户端的调用代码:
import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; public class MonitorTestDriver { public static void main(String[] args) throws MalformedURLException, RemoteException, NotBoundException { String[] locations = { "rmi://localhost/store" }; StoreMonitor[] monitor = new StoreMonitor[locations.length]; for (int i = 0; i < locations.length; i++) { RemoteStore reporter = (RemoteStore) Naming.lookup(locations[i]); monitor[i] = new StoreMonitor(reporter); System.out.println(monitor[i]); } for (int i = 0; i < monitor.length; i++) { monitor[i].report(); } } }
代码很简单,下面说一下运行:
首先需要编译远程的服务:
>>rmic DefaultRemoteStore
有一点需要注意的是,如果是src和bin分开存放的话,rmic是针对编译之后的class文件的,此处将产生DefaultRemoteStore _Stub.class文件。
服务注册:
>>rmiregistry
此处需要注意的是:DefaultRemoteStore和DefaultRemoteStore _Stub虽然在同一路径下,但是stub不会直接加载,而是由DefaultRemoteStore在向rmi注册时,要求rmiregistry去加载DefaultRemoteStore _Stub的,也就是说生成的stub是为rmiregistry所用的。因此在执行rmiregistry之前,需要设置classpath使的stub能被识别。最简单的方式是进入到stub所在的目录再执行rmiregistry,这里应用了classpath中的当前目录“.”.
服务端提供服务:
>>java StoreTestDriver localhost 100
类似的,还可以添加一些其他的。
监视:
>>java MonitorTestDriver
将能取得注册的信息。
RMI现在直接使用的不多,但作为J2EE几大核心技术之一,仍应用在很多框架中。
发表评论
-
Hadoop源码编译到eclipse
2013-12-31 11:13 1107将Hadoop源代码导入eclipse,是使用命令: ... -
警告:编码 EUC_CN 的不可映射字符
2013-04-01 15:49 3686使用javac编译时显示: 警告:编码 EUC_CN 的不 ... -
异常处理几则(javac异常与get请求中文乱码)
2013-03-31 18:36 12181 仅当显式请求注释处理时才接受类名称错误 好久没用ja ... -
Java内存管理知识(基础篇)
2013-01-20 16:02 1599第一部分 基础知识 1.1 内存模型 1.2 垃圾回 ... -
Java虚拟机之垃圾收集
2013-01-12 15:07 2986垃圾收集虽说不是JVM ... -
maven坐标查询
2012-12-10 23:11 3376使用maven时,一个经常用到的操作就是去 中央仓库查询相关库 ... -
Maven报错“未结束的字符串字面值” “需要为 class、interface 或 enum”等
2012-12-10 17:26 5956eclipse里面编译完全正常,mvn clean in ... -
String, StringBuilder和StringBuffer性能比较的正确写法
2012-11-22 22:54 2172关于String连接性能的分 ... -
No embedded stylesheet instruction for file:奇怪的错误
2012-11-17 08:14 1336008:09:43,395 INFO [main] Ma ... -
ZooKeeper源码分析之启动
2012-10-01 16:08 0Full thread dump Java HotSpo ... -
Java中Runtime.exec的一些事
2012-09-09 16:32 503000 预备知识 1 不正确的 ... -
Spring读取XML配置源码解析
2012-09-08 11:25 19064在Spring中,配置文件主要格式是XML,spring ... -
Spring注入非单例bean以及scope的作用范围
2012-08-30 08:18 31607一、 问题描述 在大部分情况下,容器中的b ... -
代码重构(一)
2012-08-26 10:55 0真实代码 /** 支付状态校验 * ... -
JAVA正则表达式
2012-08-22 23:04 0JAVA中的正则知识 1.2正则表达式入门 一 ... -
JAVA字节码学习一(初识)
2012-08-20 21:42 0public class MyClass { pub ... -
java类库中Arrays的排序算法探析(Object与泛型类型)
2012-03-10 21:16 1711在Arrays中关于基本类型如int,long,fl ... -
java类库中Arrays的排序算法探析(基础类型)
2012-03-06 23:32 2664java.util.Arrays中有非常方便的array转换为 ... -
Java中List与Array的转换
2012-02-28 18:42 1581在编码中,经常会用到两种存储结构之间的转换,而对 ... -
Java中的桥方法
2012-01-10 00:27 6178Java中的桥方法是合成方法(synthetic met ...
相关推荐
代理模式为其他对象提供一种代理以控制对这个对象的访问。它可以用于远程代理、虚拟代理、保护代理等,帮助我们实现更加灵活的系统架构。 观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有...
"月光滟影·滟澜山别样中秋感触之夜"策划案是一个典型的高端房地产活动,旨在通过精心设计的体验提升品牌影响力,促进销售。这个案例展示了如何结合传统节日——中秋节,打造出一个具有深刻印象的品牌活动。 1. **...
关于设计模式,我有很多感触,Gof 的书我不知看了多少遍,可总是不太明白,我几年 没有使用C++了,里面的例子,看着很不爽。板桥先生网上的例子很简单明了,但是经过一 段时间的学习,有点不尽兴的感觉。于是又看...
本篇文章将详细探讨一种工程机械换挡感触器的设计原理、功能、工作过程以及其在实际应用中的重要性。 一、设计原理 换挡感触器是一种传感器,用于检测和传递工程机械换挡时的信号。它基于电磁感应或光电效应等原理...
本文档聚焦于“一种具有双感触装置的触控屏”这一创新设计,旨在提升用户交互体验和设备功能的多样性。双感触装置的设计为触控屏带来了新的可能性,不仅增强了输入的精确度,也为多任务处理提供了更加灵活的方式。 ...
2. **医疗健康**:在医疗领域,感触电子织物可以制成智能病号服,实时监测患者的生命体征,如心率、血压等,为远程医疗和健康管理提供便利。 3. **环境监测**:环境友好型感触电子织物可以用于空气质量、污染水平的...
设计色彩,色彩应用,色彩心理学,便于艺术或设计类专业用的教学资料
在没有标签的情况下,我们可以从文件名“一种具有压感触控功能的显示装置.pdf”推测,这个文档很可能是详细的技术报告或专利描述,涵盖了压感触控显示装置的设计原理、工作方式、硬件结构、软件实现以及可能的优势和...
3. 节省空间:相比于物理按键,压感触控无需额外的机械结构,有助于设备设计的轻薄化。 4. 高度集成:压感触控技术可以与显示面板紧密集成,减少组件数量,降低成本。 显示装置中应用压感触控技术,例如智能手机、...
小学语文近义词感触近义词
2. **结构设计**:设计合适的结构以支持传感器层,通常包括透明导电层(如氧化铟锡,ITO)和支撑框架,确保传感器层在受到压力时能稳定工作,并且不会对显示效果产生影响。 3. **封装工艺**:将传感器层与其他显示...
flash 公益广告 看了非常有感触。。。
它是数据科学的一部分,旨在揭示隐藏的模式、关联和趋势,以便用于商业智能、预测和决策支持。 【逻辑回归】 逻辑回归是一种广泛应用于分类问题的统计学习方法。它的全称为Logistic Regression,简称LR。尽管名字中...
《苦难辉煌》读书感触.docx
- 容器设计用于容纳气溶胶产生材料,并可能由感触器结构界定。 - **充电设备特性**: - 具有控制电池充电的功能。 - 当进行充电操作时,电磁辐射强度同样受到严格控制。 - 充电设备在充电期间会执行切换操作,...
《情人》读书笔记感触_2.docx
《浮士德》读书心得感触五篇.docx
在我分享关于学习LabVIEW的一些感触之前,首先简要介绍一下我个人的学习历程。2007年,我进入了常熟理工学院,刚入学时对专业方向并没有清晰的认识,甚至在大二上学期沉迷于电子游戏,差点导致几门关键课程挂科。...
《穆斯林的葬礼》读书笔记心得感触.docx