Java RMI 中的代码库到底有什么意义?

2023-12-07

我目前正在学习 RMI。

我不太理解代码库的概念。我读到的每篇论文都表明,调用远程对象的客户端可以从代码库加载方法定义。 现在的问题是:我的类路径中是否不需要描述/接口?如果我只在运行时知道远程对象上的方法,我如何调用它们?这甚至无法编译。

我完全没有抓住要点吗?那么代码库到底有什么意义呢?提供代码库似乎有很多额外的工作和要求

thanks


好吧,假设您只向客户端提供接口,并且实现将位于给定的代码库中。然后客户端请求服务器发送一个给定的对象,客户端期望收到一个实现给定接口的对象,但是实际的实现对于客户端来说是未知的,当它反序列化发送的对象的时候就得去代码了基础并下载所传递的实际对象的相应实现类。

这将使客户端变得非常瘦,并且您将非常轻松地更新代码库中的类,而不必更新每个客户端。

EDIT

假设您有一个具有以下接口的 RMI 服务器

public interface MiddleEarth {
     public List<Creature> getAllCreatures();
}

客户端只有以下接口MiddleEarth and Creature,但类路径中没有任何实现。

其中的实施Creature是类型的可序列化对象Elf, Man, Dwarf and Hobbit。这些实现位于您的代码库中,但不在客户端的类路径中。

当您要求 RMI 服务器向您发送中土世界中所有生物的列表时,它将发送实现Creature,即上面列出的任何类。

当客户端收到序列化对象时,它必须查找类文件才能反序列化它们,但这些文件并不位于本地类路径中。该流中的每个对象都标有给定的代码库,可用于查找丢失的类。因此,客户端求助于代码库来查找这些类。在那里它将找到正在使用的实际生物类。

代码库双向工作,因此这意味着如果您向服务器发送Creature(即Ent)它也会在代码库中查找它。

这意味着当客户端和服务器都需要发布新类型的生物时,他们所要做的就是更新creaturesImpl.jar在代码库中,在服务器或客户端应用程序本身中没有任何内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java RMI 中的代码库到底有什么意义? 的相关文章

随机推荐

  • 如何根据 Javascript 中的属性组合两个不同大小的对象数组?

    我有两个长度不同但共享相似信息的对象数组 qrySearchLocID LocalLabID 123f SystemID 5000152 AppLabID 3 LocalLabID 12BC SystemID 5000384 AppLabI
  • 在 Docker 容器内使用 ldap

    我有 2 个 docker 容器 第一个 docker container 内部是我的 lamp 应用程序 其中包含 php 7 3 4 apache2 第二个里面是mysql数据库 我尝试连接第一个容器内的 LDAP 服务器 我继续进入
  • 复合 JTree 节点允许事件传递到下面的对象

    我正在尝试创建一个 JTree 其中一些节点是包含 JLabel 和 JButton 的复合对象 Node 代表 JLabel 显示的服务器和端口 JButton 将使用 Desktop API 打开默认浏览器并转到 URL 我已经阅读了以
  • 如何在 PHP 中减小图像大小而不损失质量 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在尝试开发一个基于图像的网站 我真的对更快的页面加载速度和最佳压缩实践的最佳图像类型感到困惑 请告诉我压缩图像大小的最佳方法 如果您希望使用编码本身来减少大小 您可以在 ph
  • 取消 UILocalNotification

    我的 UILocalNotification 有问题 我正在用我的方法安排通知 void sendNewNoteLocalReminder NSDate date alrt NSString title some code UILocalN
  • 在 JavaScript 中使用标签

    你能向我解释一下如何在与break交互的语句上使用标签 switch while do和for 请举例说明 通常 我看到它在突破到外循环 var i j dance for i 0 i lt 20 i for j 0 j lt 20 j c
  • 在 Pandas 中使用 read_csv 处理不需要的换行符

    我对从 SAP 导出的数据有疑问 有时您可以在发布文本中找到换行符 本来应该在一行中的内容却变成了两行 这会导致一个非常糟糕的数据框 最烦人的是 我无法让 pandas 意识到这个问题 它只是读取那些错误的行 即使列数小于标题 错误 dat
  • RAILS,捆绑安装返回 - 未定义符号:SSLv2_method [重复]

    这个问题在这里已经有答案了 可能的重复 未定义的符号 运行捆绑安装时的 SSLv2 method 我尝试 捆绑安装 我的 Rails 项目 但出现此错误 Fetching gem metadata from https rubygems o
  • 通用链接不适用于 WKWebView

    I have web view基于应用程序和公司中的其他本机应用程序 我们正在使用universal links在需要时将用户重定向到其他应用程序 其他应用程序仍然支持universal links 我可以通过按链接来运行它们Apple N
  • Rails 4 资产管道:来自 js 的 asset_path 中资产缺少指纹

    我正在部署一个 Rails 4 0 应用程序 其中包含 HTML 部分模板作为我们前端 JavaScript 框架的资产 尽管这些模板是资产管道的一部分并且已正确预编译 但当我调用asset path从我们的 js 文件中嵌入的 ruby
  • 在 Javascript 中,“d.setDate(d.getDate() + 1)”在时间更改的天数内给出错误答案

    我有以下代码 var d new Date 2016 03 27 console log d getDate d d setDate d getDate 1 console log d getDate d 这给出了错误的答案 27 Date
  • Parallel.Foreach 循环,与显式 throw 语句不一致的行为

    使用 Linqpad 创建了一个简单的程序 我在其中显式抛出异常Parallel Foreach循环 理想情况下应在调用者中捕获为Aggregate Exception 但是当我明确抛出异常时 它有时会随机跳过一些异常 我无法理解这种行为
  • 从 iPhone 上传视频文件到服务器

    我知道如何将图像上传到运行 PHP 的服务器 但我一直坚持上传视频 我用过这个建议上传我的视频文件 发帖方法都可以 我在服务器上得到的是一个0字节的文件 我的代码如下 void imagePickerController UIImagePi
  • Jupyter Notebook 中使用 cython 进行线路分析

    我正在尝试在 jupyter 笔记本中使用 liner profiler 库和 cython 函数 它只工作了一半 我得到的结果仅包含函数的第一行 没有分析结果 cython a cython linetrace True cython b
  • 在T-SQL中生成随机字符串[重复]

    这个问题在这里已经有答案了 可能的重复 使用 T SQL 生成随机字符串 我需要在触发器内生成一个带有字母和数字字符的随机字符串 该字符串的长度必须为 15 并且大写 有人有主意吗 这远非最佳解决方案 但它会按指定方式工作 select c
  • 从 PHP 内部进行 SFTP

    我正在构建一个 Web 应用程序 除了其他功能外 它还需要连接到 FTP 服务器来下载或上传文件 该应用程序是用 PHP 编写的 托管在 Linux 服务器上 我想知道是否也可以提供对 SFTP 服务器的支持 但在 Google 上快速搜索
  • 在 jQuery 中,当单选按钮都具有相同名称时,如何获取它们的值?

    这是我的代码 table tr td Sales Promotion td td td tr table
  • 通用列表属性的必需属性

    是否可以将 Required 属性放到 List 属性上 我绑定到 POST 上的通用列表 想知道如果属性中有 0 个项目 是否可以使 ModelState IsValid 失败 添加Required列表样式属性的属性并不能真正实现您想要的
  • 我尝试安装 React Native 并构建失败

    我尝试安装 React Native 但构建失败 为什么 Windows PowerShell 版权所有 C 微软公司 版权所有 尝试新的跨平台 PowerShellhttps aka ms pscore6 PS C Users stefa
  • Java RMI 中的代码库到底有什么意义?

    我目前正在学习 RMI 我不太理解代码库的概念 我读到的每篇论文都表明 调用远程对象的客户端可以从代码库加载方法定义 现在的问题是 我的类路径中是否不需要描述 接口 如果我只在运行时知道远程对象上的方法 我如何调用它们 这甚至无法编译 我完