0

这不是关于两个 JVM 相互通信,而是关于“加入”现有的正在运行的 JVM,防止创建额外的进程。

我们正在部署一个具有数据收集组件、GUI 操作员界面和数据记录组件(在 java 中)的控制系统。

数据记录组件和 GUI 都使用数据收集组件。通常不会有问题,它们都生活在同一个虚拟机中,并且可以通过事件或观察者模式获取更新。问题是数据记录器必须在机器启动时运行(linux),但 GUI 仅在用户登录时运行。如果创建了数据收集组件的两个实例(即在两个 JVM 中),则会导致我们的通讯出现问题监控超出了这个问题的范围,但我们只是说要求只能运行数据收集组件的一个实例。

有什么方法可以在现有的、正在运行的 VM 中实例化一个类?此类对象能否与 VM 中的活动对象进行交互?我想做的是将数据记录器作为守护进程运行,创建一个 JVM,然后当用户登录到操作系统时,在正在运行的 VM 中实例化 GUI 类。

4

1 回答 1

1

有什么方法可以在现有的、正在运行的 VM 中实例化一个类?

RMI、JMS、JMX、套接字、数据报。

此类对象能否与 VM 中的活动对象进行交互?

是的。

我想做的是将数据记录器作为守护进程运行,创建一个 JVM,然后当用户登录到操作系统时,在正在运行的 VM 中实例化 GUI 类。

操作系统可能会阻止您这样做,除非该进程在用户登录时运行。即一个用户无法在另一个用户使用的屏幕上显示 GUI。如果操作系统允许,则没有问题。

当然,您通常会运行两个 JVM,一个与另一个通信(解决任何安全问题),因为只有一个 JVM 几乎没有优势。

于 2012-11-21T17:41:03.997 回答