Core Java学习笔记 RMI

Posted on 2009-07-15 21:51 eric_xu 阅读(225) 评论(0)  编辑  收藏 所属分类: Java

CORBASOAP都是完全独立于语言的。CORBA的接口定于语言是IDLSOAPWSDL

远程方法调用


存根:

1.       被使用的远程对象的标识符;

2.       被调用的方法的描述;

3.       编组后的参数。

服务端接受对象:

1.       反编组参数;

2.       定位要调用的对象;

3.       调用所需方法;

4.       捕获返回值或该调用产生的异常,并对它编组;

5.       将返回值编组,打包送给客户端存根。

远程对象的所有接口都必须继承Remote接口,java.rmi.remote。接口中的所有方法也必须抛出RemoteException异常。

基本的RMI


服务器类通常继承自java.rmi.server.RemoteServer类。RemoteServer是一个抽象类,仅仅定义了服务器对象与其远程存根之间通信的基本机制。UnicastRemoteServer是一个实体类,继承自RemoteServer

服务器程序使用自举注册服务来注册对象,然后客户端可以获取这些对象的存根。

// server

ProductImpl p1 = new ProductImpl("Blackwell Toaster");

Context namingContext = new InitialContext();//建立一个命名context来访问RMI注册表

namingContext.bind("rmi:toaster", p1);//rmi:toasterp1对象绑定。

// client

Product p = (Product) namingContext.lookup("rmi://yourserver.com/toaster");//返回url对应的远程对象。

默认情况下,服务器是localhost,端口为1099

可获得所有URL中带有rmi:的服务器对象的列表。

NamingEnumeration<NameClassPair> e = namingContext.list("rmi:");


只要实现Serializable接口的类都可以被复制。
远程对象是作为存根通过网络传递的,而非远程对象是通过复制。
 

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 37, comments - 5, trackbacks - 0, articles - 0

Copyright © eric_xu