我正在尝试实现自定义RMI激活方案,其中远程Activatable对象将托管在自定义EXE进程中,而不是标准Java.exe / Javaw.exe。
在RMI中,'Activatable'对象可以持久保存,恢复或按需启动。在“激活”对象向RMI注册表注册并首次请求后,RMID启动主机子进程(通常为java.exe / javaw.exe),通过子进程的stdin传递两条信息并询问子进程运行一个特殊隐藏类'sun.rmi.server.ActivationGroupInit'的main方法。这个类是bootstraps,其他所有东西都准备了创建和托管'Activatable'对象实例的过程。在客户端和服务器通过RMI进行通信之后。
我已经定义了一个简单的Win32 EXE项目,编写了一些JNI代码来启动这个EXE中的JVM并设法调用'sun.rmi'server.ActivationGroupInit'的主要方法。此类能够解析stdin并提取创建ActivationGroup所需的任何内容。
但是我遇到了一些问题,最终导致远程对象的激活失败(使用UnknownObjectException
),我正在对其进行故障排除。
在这一点上,我只是想退后一步,询问是否有人曾经尝试过,并且知道是否有任何我应该及早知道的问题?
谢谢, 兰吉特
答案 0 :(得分:0)
正如我们在Oracle论坛上无休止地讨论的那样,您不需要任何这些。只需复制java.exe或javaw.exe,或使用与java.exe完全相同的方式编写自己的包装器,使用它传递的所有参数来启动JVM。您无需担心激活系统在stdin等上发送的内容,现有的激活类将为您完成所有这些。