分布式对象技术ppt(实用资料)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

public static import java.
vo/i*d *ma远in(S程tring服[] ar务gs) {对象所必须实现的方法
r创eb建ind远("程He接llo口"*,及he所声llo明);有远程的方远法(程He调lloIn用terfa的ce. 方法,必须声明throws RemoteException
2. 采用RMI开发客户机/服务器应用程序步骤:
1. 定义远程接口 2. 实现这个远程接口 3. 生成stub(桩/客户代理)和skeleton(骨架/实体) 4. 编写使用远程对象的客户程序 5. 启动注册表并登记远程对象 6. 运行服务器和客户程序
2.1 构建服务器程序
创建一个远程接口时,必须遵守下列规则:
3. 启动RMI服务器
import java.rmi.*; import java.rmi.registry.*; /** * 启动RMI服务器,导出服务对象 * @author 王华东 */ public class StartRMIServer { /**启动方法*/ public static void main(String[] args) { int listerPort=9911; //设置RMI监听器在9911端口 String serverIP="localhost"; //监听的IP String serviceObjName="service"; //要导出的服务对象名字 try { LocateRegistry.createRegistry(listerPort); //设置RMI服务器监听端口 ImpService.setLog(System.out); //设置日志对象,打印到控制台 ImpService remoteObj = new ImpService(); //创建导出的对象, 绑定服务 Naming.rebind("rmi://"+serverIP+":"+listerPort+"/"+serviceObjName, remoteObj); System.out.println("RMI启动在"+serverIP+": "+listerPort+" 服务名为: "+serviceObjName); } catch (Exception e) { System.err.println("Server exception: " + e.toString()); e.printStackTrace(); } } }
分布式对象技术
RMI技术应用
1. RMI结构
RMI 实现结构可以分为三层:
1. Stub/Skeleton层
客户调用远程对象 方法
远程对象
2. 远程引用层
3. 传输层
Sub/Skeleton层实现传输数据的调度和 反调度机制。调度就是把数据或对象 转换成字节流,反调度则把字节流转 换成数据或对象。
4. 客户机代码
import java.rmi.*;
/** * RMI调用客户端 * @author 王华东 */ public class RmiClient { public static void main(String[] args) { int listerPort=9911;//设置RMI监听器在9911端口,1099是默认端口 String serverIP="localhost";//监听的IP String serviceObjName="service";//要导出的服务对象名字 try { //查找服务器上的服务对象 InterfaceService stub = (InterfaceService) Naming.lookup("rmi://"+serverIP+":"+listerPort+"/"+serviceObjName); for(int i=0;i<10;i++){ //调用对象的服务方法 Object response = stub.service("请说话....."+i); System.out.println("RMI服务器应答:" + response.toString()); Thread.sleep(1000); } } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace();
/** {
RMI 使用 JNDI 定位远程对象;
除应用程序本*身R有M关异I调常外用,远对程象接口接中的口每定个方义法都必须在自己的 生* @成asuttuhbo(r桩王/华客*东户@代a理u)和thskoelreto王n(骨华架/东实体)
try say());
*/
import java. public interface InterfaceService extends Remote {
import java. * */
RMI 实现结构可以分为三层:
转换成字节流O,b反j调ec度t则se把r字v节ic流e转(Object obj) throws RemoteException;
}
2. 实现远程接口
/** * RMI服务对象接口实现, 此对象将被RMI服务器导出做为远程服务对象 * @author 王华东 */ // 远程接口必须继承或它的子类 public class ImpService extends
implements InterfaceService { public ImpService() throws { super(); } /** * 客户端将要调用的方法示例 */ public Object service(Object obj) {
System.out.println("RMI客户机请求: "+obj); return System.currentTimeMillis()/1000 + ": " + obj.toString(); } }
Stub 远层引用层
Skeleton 远层引用层
远程引用层定义了RMI连接的调用语义
TCP
即如何调用远程对象的方法。Java远程
方法协议(Java 使用
Remote
Method
Protocol)
Java Remote
Messaging
Protocol
RMI结构图
TCP
传输层实现字节流的传输,一般采用TCP或UDP
public }
ImpService1().thro远ws程{ 接口必须为public

{
2. 远程接口必须继承
rebind("//192.
声明为实现类。
远程接口必须为public
System.
3. 除应用程序本身有关异常外,远程接口中的每个方法都必须在自己的
import java.
Naming. ImpService.
throws中声明
4. 作为参数或返回值传递的一个远程对象,必须声明为远程接口,不可 声明为实现类。
1. 定义远程接口(服务接口)
import java.rmi.Remote;
catch (Exception e)
toString()); import java.rmi.RemoteException;
相关文档
最新文档