- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在准备考试,我有一个问题希望这里有人能回答我。
它是关于 RMI 和远程对象的。我想知道为什么这两个实现之间有如此大的差异。一种是扩展 UnicastRemoteObject,另一种是将对象导出为 UnicastRemoteObject。
我真的不明白
接口(interface):
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)中创建的?
我真的很好奇,为什么一开始我需要自己创建注册表,但不需要显式导出对象,只需使用 Naming
重新绑定(bind)它。该对象之前是否已绑定(bind)到注册表,或者我可以改用 bind 吗?如果之前未绑定(bind)对象并且执行了重新绑定(bind),会发生什么情况?
在第二个版本中,注册表似乎已经创建。为什么绑定(bind)到命名与直接绑定(bind)到注册表相同?
这是我的想法:
最佳答案
这里有两个问题。
您可以扩展 UnicastRemoteObject
或调用 UnicastRemoteObject.exportObject()。
具体操作由您决定。第一个是简单和自动的;第二个意味着你可以扩展另一个类。
您可以使用外部 RMI 注册表或在您的服务器 JVM 中自行创建。同样,你做什么取决于你,这两种方式都有好处。
这两个问题没有交互。
如果您扩展 UnicastRemoteObject
,您还可以获得 hashCode()
和 equals()
的“远程语义”的好处方法,这样所有 stub 看起来都与导出它们的远程对象相同,但这在客户端没有实际用途,实际上仅用于支持 RMI 实现本身。
关于Java RMI - UnicastRemoteObject : what is the difference between UnicastRemoteObject. exportObject() 并扩展 UnicastRemoteObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194935/
不太明白是什么 UnicastRemoteObject.exportObject(this, 0); 是为了。是在rmi服务器上注册一个对象还是什么。希望有人能给我一些启发。 最佳答案 端口 0 意味
如果您想为 RMI 使用自定义套接字(例如使用 SSL),请在 UnicastRemoteObject.exportObject(4) 中您需要指定一个客户端套接字工厂以及一个服务器套接字工厂。但是对
问题: 当你UnicastRemoteObject.exportObject(instance)。该实例现在是否对所有客户公开可用。即使找到它的端口需要一些技巧。 情况是这样的: 我有一个 java
在研究这个问题时:Java: garbage collection for RMI target object?我看到第一次调用时触发了完整的 GC: UnicastRemoteObject.expo
这是我的应用程序在更改之前的代码: Static Map servStubs = Collections.synchronizedMap(new HashMap); public synchroni
我正在准备考试,我有一个问题希望这里有人能回答我。 它是关于 RMI 和远程对象的。我想知道为什么这两个实现之间有如此大的差异。一种是扩展 UnicastRemoteObject,另一种是将对象导出为
我是一名优秀的程序员,十分优秀!