2

在书中,我读到当我们用 rmic 编译实现类时,它会创建两个对象:存根和骨架。但是当我编译服务器端实现类时,它只创建一个存根对象文件。代码是:

import java.rmi.*;
import java.rmi.server.*;

public class ServerImp extends UnicastRemoteObject implements testRmi
{
    ServerImp() throws RemoteException
    {
    }

    public void getText(String gt) throws RemoteException
    {
        System.out.println(gt);
    }
}

有人能告诉我什么时候创建骨架文件吗?

4

2 回答 2

3

从 rmic 1.2 开始,Java 不再生成骨架类。RMI 支持的新 JRMP 协议摆脱了对框架文件的使用。

远程对象的骨架是一个 JRMP 协议服务器端实体,它有一个方法可以将调用分派给实际的远程对象实现。

于 2013-08-17T16:13:13.777 回答
3

在 JDK 1.2(1998 年发布)中,骨架被通用的服务器端调度代码所取代。在 JDK 5(2004 年发布)中,静态生成的存根被动态代理取代。不再需要使用rmic生成存根来在 JRMP 上运行 RMI。(但请注意,这rmic对于使用 IIOP 仍然是必需的。)

我对 stackoverflow 上关于rmic、存根和骨架的问题数量感到震惊。人们一定在看非常古老的书籍和非常过时的网络教程。如果将链接发布到其中一些内容,以便可以联系作者以更新或删除过时的信息,这将很有帮助。

也许应该弃用旧的存根支持。这可能有助于避免混淆。


编辑:哦,我想也许我也应该回答这个问题。:-)

Edit2:删除了关于UnicastRemoteObject构造函数的错误陈述。

不再需要静态生成的骨架。在上面的代码中,您的远程对象扩展了UnicastRemoteObject. 构造对象时,将UnicastRemoteObject调用构造函数。这将对象连接到处理套接字侦听和远程方法分派的 RMI 内部基础结构。换句话说,它“导出”了对象。

于 2013-08-17T17:12:55.330 回答