这不是关于两个 JVM 相互通信,而是关于“加入”现有的正在运行的 JVM,防止创建额外的进程。
我们正在部署一个具有数据收集组件、GUI 操作员界面和数据记录组件(在 java 中)的控制系统。
数据记录组件和 GUI 都使用数据收集组件。通常不会有问题,它们都生活在同一个虚拟机中,并且可以通过事件或观察者模式获取更新。问题是数据记录器必须在机器启动时运行(linux),但 GUI 仅在用户登录时运行。如果创建了数据收集组件的两个实例(即在两个 JVM 中),则会导致我们的通讯出现问题监控超出了这个问题的范围,但我们只是说要求只能运行数据收集组件的一个实例。
有什么方法可以在现有的、正在运行的 VM 中实例化一个类?此类对象能否与 VM 中的活动对象进行交互?我想做的是将数据记录器作为守护进程运行,创建一个 JVM,然后当用户登录到操作系统时,在正在运行的 VM 中实例化 GUI 类。