- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在学习 RMI。
我不太了解代码库的概念。我阅读的每篇论文都表明,调用 Remote 对象的客户端可以从代码库加载方法定义。现在的问题是:我不需要类路径中的描述/接口(interface)吗?如果我只在运行时知道它们,我如何调用远程对象的方法?这甚至无法编译。
我是否完全忽略了这里的要点?那么代码库的意义到底是什么?提供代码库似乎需要很多额外的工作和要求
谢谢
最佳答案
好吧,假设您只向客户提供接口(interface),并且实现将位于给定的代码库中。然后客户端向服务器请求发送一个给定的对象,客户端期望接收到一个实现了给定接口(interface)的对象,但是实际的实现对客户端来说是未知的,当它反序列化发送的对象的时候就是要去代码为实际传递的对象创建基础并下载相应的实现类。
这将使客户端变得非常瘦,并且您将非常容易地更新代码库中的类,而不必求助于更新每个客户端。
编辑
假设您有一个具有以下接口(interface)的 RMI 服务器
public interface MiddleEarth {
public List<Creature> getAllCreatures();
}
客户端将只有 MiddleEarth
和 Creature
的接口(interface),但类路径中没有任何实现。
Creature
的实现是 Elf
、Man
、Dwarf
和 类型的可序列化对象霍比特人
。这些实现位于您的代码库中,但不在您客户的类路径中。
当您要求 RMI 服务器向您发送中土世界所有生物的列表时,它会发送实现 Creature
的对象,即上面列出的任何类。
当客户端接收到序列化对象时,它必须查找类文件以便反序列化它们,但这些文件不在本地类路径中。此流中的每个对象都带有给定代码库的标记,可用于查找缺失的类。因此,客户端求助于代码库来查找这些类。在那里它将找到正在使用的实际生物类。
代码库双向工作,所以这意味着如果您向服务器发送一个Creature
(即一个Ent
),它会在代码库中寻找它
这意味着当客户端和服务器都需要发布新类型的生物时,他们所要做的就是更新代码库中的creaturesImpl.jar
,而不是服务器或客户端中的任何内容应用程序本身。
关于java - Java RMI 中的代码库到底有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465314/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!