问题标签 [rmi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
17374 浏览

java - 如何确保 RMI 仅使用一组特定的端口?

在我们的应用程序中,我们以非常不同的方式使用 RMI 进行客户端-服务器通信:

  1. 将数据从服务器推送到客户端进行显示。
  2. 将控制信息从客户端发送到服务器。
  3. 来自从服务器返回到客户端的控制消息代码路径的回调(边栏注释 - 这是一些遗留代码的副作用,不是我们的长期意图)。

我们想要做的是确保我们所有与 RMI 相关的代码将仅使用已知的指定端口清单。这包括注册表端口(通常预期为 1099)、服务器端口和回调产生的任何端口。

这是我们已经知道的:

  1. LocateRegistry.getRegistry(1099) 或 Locate.createRegistry(1099) 将确保注册表正在侦听 1099。
  2. 使用带有端口参数的 UnicastRemoteObject 构造函数/exportObject 静态方法将指定服务器端口。

这篇Sun 论坛帖子也介绍了这些要点。

我们不知道的是:我们如何确保由回调产生的客户端连接回服务器只会连接到指定端口而不是默认连接到匿名端口?

编辑:添加了一个冗长的答案,总结了我的发现以及我们如何解决问题。希望这将帮助其他有类似问题的人。

第二次编辑:事实证明,在我的应用程序中,我创建和修改套接字工厂时似乎存在竞争条件。我曾希望允许用户在 Beanshell 脚本中覆盖我的默认设置。可悲的是,在工厂创建第一个套接字之后,我的脚本似乎正在显着运行。结果,我从一组默认值和用户设置中获得了混合端口。需要做更多的工作,这超出了这个问题的范围,但我想我会指出它是其他可能不得不在某些时候踏入这些水域的人的兴趣点......

0 投票
4 回答
4103 浏览

java - ArrayList 的 RMI 中不返回引用传递

我有一个 RMI 调用定义为:

该函数执行数据库查找并填充两个 ArrayList。调用函数一无所获。我相信这适用于 Vector 类型。

我是否需要使用 Vector,或者有没有办法在不打两个电话的情况下让它工作。我还有一些可能会使用的其他想法,比如返回一个键/值对,但我想知道我是否可以让它工作。

更新:
如果可以的话,我会接受到目前为止给出的所有答案。我不知道网络成本,因此重新编写函数以返回 LinkedHashMap 而不是两个 ArrayList 是有意义的。

0 投票
4 回答
12772 浏览

java - RMI 服务器:rmiregistry 或 LocateRegistry.createRegistry

对于服务器端的 RMI,我们需要启动rmiregistry程序,还是只调用LocateRegistry.createRegistry?如果两者都可以,有什么优点和缺点?

0 投票
9 回答
50534 浏览

web-services - RMI 与 Web 服务。Java2Java 远程处理的最佳选择是什么?

我是 Web 服务和 RMI 的新手,我想知道在不同的 Web 应用程序之间进行远程处理的更好方法是,当这些应用程序都用 Java 编写时,即不同的编程语言无关紧要(这将是WS的优势)。

一方面我猜想在使用 Web 服务时会有性能开销(有没有人有一些数字可以证明这一点?),另一方面,在我看来,Web 服务的耦合度要松散得多,可以用来实现一个更加面向服务的架构 (SOA)(这在 RMI 中是不可能的,对吧?)。

虽然这是一个相当笼统的问题,但您的意见是什么?

谢谢

0 投票
5 回答
2623 浏览

java - 如何初始化通过远程方法调用获取的 Hibernate 实体?

当调用远程服务(例如通过 RMI)从使用 Hibernate 的数据库中加载实体列表时,您如何管理它以初始化客户端需要的所有字段和引用?

示例:客户端调用远程方法来加载所有客户。对于每个客户,客户希望初始化对客户购买物品列表的引用。

我可以想象以下解决方案:

  1. 为每个特殊查询编写一个远程方法,初始化所需的字段(例如 Hibernate.initialize())并将域对象返回给客户端。

  2. 像 1. 但创建 DTO

  3. 将查询拆分为多个查询,例如一个用于客户,另一个用于客户的文章,并让客户管理结果

  4. remote 方法采用 DetachedCriteria,由客户端创建并由服务器执行

  5. 开发自定义“预加载模式”,即客户端明确指定要预加载哪些属性的方法。

0 投票
5 回答
4948 浏览

java - Web 服务和 RMI 在纯 Java 环境中的优缺点是什么?

在开发分布式应用程序时,都是由同一家公司用 Java 编写的,您会选择 Web Services 还是 RMI?在性能、松散耦合、易用性等方面的优缺点是什么……?有人会选择WS吗?你能用 RMI 构建一个面向服务的架构吗?

0 投票
2 回答
1669 浏览

java - Java RMI:客户端安全策略

这行得通。

这不起作用。有人可以向我解释为什么吗?

0 投票
5 回答
48686 浏览

java - Java RMI 教程 - AccessControlException:访问被拒绝(java.io.FilePermission

昨天我尝试开始使用 Java RMI。我找到了这个 sun 教程 ( http://java.sun.com/docs/books/tutorial/rmi/index.html ) 并从服务器实现开始。但是每次我启动 pogram(rmiregistry 正在运行)时,我都会得到一个带有以下 StackTrace 的 AccessControlException:

我的 server.policy 文件如下所示:

但我也试过这个......

...还有这个(以及其他几个:-():

但在每种情况下,结果都是一样的。是的,策略文件在路径中(当我将错误的语句写入策略文件时,我看到了解析异常)。我尝试了其他几个“/”和“\”星座,但没有效果。

我使用 Eclipse,我的 VM 参数是这样的:

已编译的 Remote-Interface 和接口实现类 (LoginImpl) 类位于此路径中:“C:/ProjX/server/serverProj/bin/usermanager/”。我将存根实例化并将其重新绑定到注册表的主要方法位于另一个包中,如下所示:

有人对我有什么建议吗?谢谢你的帮助。


所以问题是一样的(java.rmi.UnmarshalException 表明更改代码库不是我的 AccessControlException 的解决方案)。不:我不想购买插件“GB”;-)。

0 投票
1 回答
863 浏览

java - 我应该什么时候调用 Naming.unbind()?

我有一些通过 RMI 提供的代码。

如果我的程序异常终止,我将不会调用 Naming.unbind(),并且对该对象的引用可能会挂在 RMI 注册表中,随后对具有相同名称的 Naming.bind() 的调用将失败。

如何确保清除恶意引用?

0 投票
2 回答
6271 浏览

linux - 如何在 iptables 中打开一个端口以进行 RMI 访问

我正在尝试从我的 Java 应用程序连接到关闭了用于 RMI 的端口 8088 的开发服务器。我感谢有关如何打开该端口的任何帮助。