java rmi 存根是什么_Java RMI – UnicastRemoteObject:UnicastRemoteObject.exportObject()和扩展UnicastRemoteObje...

我正在准备考试,我有一个问题,希望有人能回答我。

它关于RMI和远程对象。我不知道为什么这两个实现之间有很大的区别。一个是扩展UnicastRemoteObject,而另一个则以UnicastRemoteObject的形式导出该对象。

我没有真正的区别 – 顺便说一句,这只是一个很简单的例子:-)

接口:

public interface EchoI extends Remote {

public String echo() throws RemoteException

}

这是服务器代码(版本1):

public class EchoImpl extends UnicastRemoteObject implements EchoI {

public EchoImpl {

super();

}

public static void main (String[] args) {

try {

LocateRegistry.createRegistry(Registry.REGISTRY_PORT);

StoreHouse storehouseImpl = new StorehouseImpl();

Naming.rebind("//localhost/StoreHouse.SERVICE_NAME", storehouseImpl);

System.out.println("Server ready");

} catch (RemoteException e) {

e.printStackTrace();

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

public String echo() {

return "echo";

}

}

这将是版本2:

public class EchoImpl implements EchoI {

public static void main (String[] args) {

EchoI echoService = new EchoImpl();

EchoI stub = (EchoI) UnicastRemoteObject.exportObject(echoService, 0);

Registry registry = LocateRegistry.getRegistry();

registry.bind("echoService", stub);

...

}

}

我的问题是:这两者有什么区别?

在第一个版本中,注册表是明确创建的,此外,远程对象是在重新绑定内创建的。

我真的很好奇,为什么在第一个我需要自己创建注册表,但不需要显式导出对象,只需使用命名重新绑定。

该对象已经绑定到注册表之前,还是可以使用bind?如果对象以前没有被绑定,并且重新绑定是否出色,会发生什么?

在第二个版本中,注册表似乎已经被创建了?

为什么绑定到与绑定到注册表直接相同的命名?

如果你想让我包含任何更多的细节,请给我留言…

这就是我的想法:

>第一个类direclty实现接口UnicastRemoteObject,这意味着在运行时创建注册表,并将对象自动导出到RMI reg。

>因为对象已经绑定到注册表,必须重新绑定而不是正常的绑定

后者,明确地做了这一切

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值