问题标签 [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 投票
1 回答
3652 浏览

java - Java RMI 在租约到期后不关闭套接字

我启用 RMI 的应用程序似乎正在泄漏套接字。我有一个通过 RMI 提供服务的 Java 应用程序。它使用在 Linux 上运行的 Java SE 1.6 RMI 实现。我观察到的问题是,如果客户端使用注册表获取对我的远程对象的引用,然后突然断开连接(断电、拔掉电缆等),服务器会保持套接字打开。我希望 RMI 实现在客户端的租约到期后进行清理,但这并没有发生。在服务器上,unreferenced()当租约到期时调用我的远程对象的方法,但套接字在 netstat 中无限期地处于“ESTABLISHED”状态。

由于我们无法强制客户端执行任何特定行为,因此几天后,我们的 Linux 发行版中的打开文件描述符达到了默认限制 1024,导致服务器无法打开任何新的套接字或文件。我考虑过 TCP keepalives,但由于 RMI 正在抽象出网络层,所以在建立连接后我无法访问实际的服务器套接字。

有没有办法强制 RMI 层清理绑定到具有过期租约的客户端连接的套接字?

更新:我使用的解决方案类似于选择的答案,但使用了不同的方法。我使用了一个自定义套接字工厂,然后将 createServerSocket() 返回的 ServerSocket 实例包装在一个透明包装器中,该包装器传递所有方法,除了 accept()。在 accpet 方法中,keepalives 在套接字返回之前启用。

0 投票
1 回答
3711 浏览

java - 在 JBoss 中公开 RMI 服务器?

我需要从客户端前端访问 RMI 方法。由于不同的原因,我让 JBoss 在服务器端运行。这让我想到使用 JBoss 来公开 RMI 服务器方法。

我对 JBoss 有点陌生,所以我的问题是:需要哪些步骤才能使 RMI 服务器方法对客户端可见?

0 投票
2 回答
15545 浏览

java - 如何远程关闭 Java RMI 服务器

我有一个非常简单的 Java RMI 服务器,如下所示:

当我调用 exit 方法时, System.exit(1) 抛出以下异常:

我在这种方法中做错了什么?

0 投票
2 回答
321 浏览

java - 在 Java5 和 Java6 之间通过 RMI 进行通信时,我应该预料到会出现问题吗?

基本上,主题说明了一切:我们有几个组件在 Java 5 上运行,它们通过 RMI 相互通信。如果我们将其中一些迁移到 Java6,我们是否应该预料到会出现任何问题?通过移动,我的意思是编译它们-source/target 1.6并在 java6 vm 上运行。

0 投票
2 回答
1608 浏览

java - RMI 服务器获取旧 IP 地址

我看到一个奇怪的问题:

我有一台linux机器,在那台机器上安装了JDK1.6,有些业务进行了,几天后不得不更改机器的IP地址。现在几个月后......我正在尝试让一些spring应用程序工作......而且RMI服务器似乎从我的旧IP地址开始......

有人可以解释这个过程或阐明这里正在发生的事情,或者可能正在发生的事情。

0 投票
2 回答
1282 浏览

java - 如何自动将数据复制到新的 RMI 线程?

我正在调整一个小的 rmi 客户端-服务器应用程序。我写了几件事:

没什么特别的,但是...我已经将手放在一个新的 RMISecurityManager 中,它调用 JNI 方法并检查单独用户的权限:

在服务器类中,我正在这样做:

这个类似乎在服务器的主线程中工作。现在的问题是当我尝试连接到该服务器类并查找注册表时。我得到了那个例外:

恕我直言,这意味着(隐式)创建了一个线程并将 NativeRMISecurityManager 作为其默认 SecurityManager。

有人对此有什么建议吗?

0 投票
1 回答
10207 浏览

java - Java RMI 跟踪

是否有跟踪和记录 Java 应用程序的所有 RMI 活动的工具?

0 投票
7 回答
23629 浏览

java - 如何让 JMX 绑定到特定接口?

我目前正在使用com.sun.management.jmxremote.*属性启动我的 Java VM,以便我可以通过 JConsole 连接到它以进行管理和监视。不幸的是,它侦听机器上的所有接口(IP 地址)。

在我们的环境中,经常会出现在一台机器上同时运行多个 Java VM 的情况。虽然可以告诉 JMX 监听不同的 TCP 端口(使用com.sun.management.jmxremote.port),但最好让 JMX 使用标准 JMX 端口并绑定到特定的 IP 地址(而不是全部)。

这将使我们更容易确定我们通过 JConsole 连接到哪个 VM(因为每个 VM 有效地“拥有”自己的 IP 地址)。有没有人想出如何让 JMX 监听单个 IP 地址或主机名?

0 投票
2 回答
1250 浏览

java - RMI、EJB 和回调

客户端是否可以将 RMI 对象作为参数传递给 EJB,以便 EJB 可以回调客户端?

0 投票
2 回答
2070 浏览

java - 用 RMI 链接异常是个坏主意?

抛出 RemoteExceptions 时使用异常链接是不是一个坏主意?我们有一个 RMI 服务器,它执行以下操作:

我收到 UnmarshallException 是由我的客户端中的 ClassNotFoundException 引起的。从好的方面来说,事实证明 CustomException 本身是导出的。不幸的是,这个人内心深处的另一个异常没有被导出,这就是 ClassNotFoundException 进来的地方。我认为层次结构是这样的:

RemoteException -> CustomException -> SQLException -> NotExportedException

我看到的问题是,即使我们可以保证导出 CustomException,我们也不能保证任何较低级别的异常。

因此,我倾向于从不使用 RemoteExceptions 的异常链接。相反,我认为我可能应该在服务器端记录堆栈跟踪,并抛出一个普通的、普通的 RemoteException,没有“原因”异常链接到它。以前有人处理过这种情况吗?