我对Java特别陌生,因此我的问题可能是全部BS,但我面临着为现有Java应用程序创建Updater Wrapper(Java应用程序)的挑战,其中我无法理解..我面临的问题是,每次我们必须启动一个新jar时,我们不想启动第二个和第三个JVM,但步骤5)的终止被更新程序的线程阻止,它是从Updater.jar的Classloader开始的。
概念:
问题:有没有办法使用相同的虚拟机首先启动更新程序,然后从更新程序启动应用程序的新版本,还是应该继续使用单独的JVM?
java版本:1.7.0_05-icedtea OpenJDK 64位服务器VM(版本23.0-b21,混合模式)
答案 0 :(得分:0)
我认为使用单独的虚拟机和包装脚本执行此操作要简单得多。
您在第5步遇到的问题是,它需要应用程序“关闭”而不调用System.exit
并且不运行关闭挂钩:
此可能需要对您的应用程序代码库进行重大的重新设计。
即使你已经这样做了,你仍然会遇到这样的问题:旧的应用程序状态很可能通过使用旧的类加载器加载的对象“延迟”。摆脱这一点可能非常困难。如果你不这样做: