设计模式——代理模式(RMI初接触)
来源:互联网 发布:网络推广团队架构 编辑:程序博客网 时间:2024/06/15 20:39
在学习HeadFirst的代理模式时,第一次接触到RMI(Remote Method Ivcation)时发现自己的java基础有很大的不足,主要是在命令模式下运行java程序,以及相关的一些设置。
RMI提供客户辅助和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。
这里主要介绍利用RMI制作远程服务
分为五个步骤:
1.制作远程接口:远程接口定义出客户远程调用的方法。客户将用它作为服务的类类型。Stub(桩)和实际的服务都实现此接口。
详细过程:制作远程接口要求我们扩展一个记号接口Remote
public interface MyRemote extends Remote{
public String sayHello() throes RemoteException;
}
这里每次调用远程方法都是有风险的,所以要抛出可能存在的异常。并且我们要确定返回的变量属于原语或者可序列化(Serializable)
让一个类型可序列化很简单。只要让它继承Serializable类,如:
public interface State extends Serializable
2.制作远程的实现,这是做实际工作的类,为远程接口中的方法提供了真正的实现。这就是客户真正想调用的方法。
详细:远程 服务类必须实现远程接口,也就是客户将要调用的方法的接口
public class RemoteService extends UnicastRemoteObject implements MyRemote{
public String sayHello(){
return “hello java”;
}
}
extends UnicastRemoteObject:为了要成为远程服务对象,你的对象需要某些远程功能,最简单的方式是扩展java.rmi.server.UnicastRemoteObject,让超类帮你做这些事情
这时我们拥有了一个远程服务了,必须让他能够被客户端调用。先实例化服务,让后放进RMI registry中(先要确保RMI registry正在运行)
try{ MyRemote myRemote=new RemoteServer(); Naming.rebind("name",myRemote); }
我们使用Naming.rebind()方法注册服务,客户端使用Naming.lookup()获取远程服务Stub。
3.利用rmi产生的Stub和skeleton
产生Stub和skeleton,在命令行下执行语句(注意要到类文件存放的位置)
第一条红线是我的类文件的存放位置,第二条文件是包路径下的远程服务类文件,然后会在目录下自动生成一个文件(以_stub.class结尾) 如图:
这就是客户和服务的辅助类。不需要自己创建这些类,甚至连生成他们的代码都不用看。运行rmic工具时,这都会自动处理
4.启动RMI registry
5.开始远程服务
在客户端启动远程服务,首先取得远程的stub,用MyRmote myremote =Naming.lookup(“rmi://ip//name”)取得一个远程调用接口,替换ip和注册的名称name。然后可以用myRemote 调用方法(相当于调用远程的服务对象)
这里有三个要注意的地方:
1.启动远程服务之前一定要先启动rmiregistry,用Naming.rebind()注册服务时,rmiregistry 是必须启动的
2.远程接口方法返回的对象类型必须是可序列化的
3.要给客户提供stub类(要先运行rmic 服务类 这条语句自动生成_stub类,注意一定要到项目的bin文件目录下运行)
- 设计模式——代理模式(RMI初接触)
- 设计模式(11)--代理模式之RMI
- 设计模式—代理模式(四)
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式—代理模式
- 设计模式之——代理模式(静态代理)
- 设计模式之——代理模式(动态代理)
- 代理模式-rmi
- 设计模式——代理设计模式
- 设计模式——代理设计模式
- 关于memcache和memcached的一些理解
- 欢迎你,这里是我的小世界~
- 第三周—项目2 建设“顺序表”算法库
- 取随机数不重复问题
- 黑马程序员-------C语言----文件读写
- 设计模式——代理模式(RMI初接触)
- Extract Abends with ERROR OGG-01733 Oracle GoldenGate Capture
- java中的SecureRandom在linux中的实现
- SDWebImage的简单使用
- vlc 播放器的播放进度条的时间不刷新
- hdu 3336
- Struct 基本原理
- 斐波那契博弈(转)
- JavaVM和JNIEnv