如果在没有手动停止Tomcat服务的情况下运行JRE更新,Tomcat将在下次停止后不再启动。 根据JRE安装程序的请求重新启动后,最常发生这种情况。
重现错误
重新启动后logging日志
Tomcat 7 stdout
2012-04-03 12:25:02 Commons Daemon procrun stdout initialized 2012-04-03 12:42:25 Commons Daemon procrun stdout initialized Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
Tomcat7 stderr的最后一部分 (Java更新和重新启动之后的唯一一行)
2012-04-03 12:42:25 Commons Daemon procrun stderr initialized
我们已经观察到,这是一个长期运行(但不是Tomcat)的Java应用程序,它作为Windows服务运行。 我们使用Apache Commons Daemon中的“procrun”机制将其创build为Windows服务,这与Tomcat Windows服务的工作方式相同。
从其他报告的暗示中,Java更新过程似乎将文件移动/重命名为升级到新版本的一部分。 安装完成后,可能会有一两个重命名,而这些重命名应该在重新启动后发生。 但是,如果有一个长期运行的Java应用程序在更新发生的同时运行,那么该应用程序将会locking各种Java库和exe(如主jre.exe),并且Java更新失败。
其中一个症状是打开命令窗口并键入“java -version”。 如果你得到了java / lang / Object的noclassdeffound错误,那么JDK升级和长时间运行的Java应用程序的结合就会让你的JDK / JRE损坏。
我们发现了两个解决方法:(1)重新安装应用程序; (2)重新安装Java。 (1)通常适用于我们,因为我们有一个应用程序的安装程序,如果需要,它也将安装一个干净的Java版本。 有时甚至会失败,但是“jar-file'reach-stream-installer-izpack.jar'消息无法执行。 (IzPack是我们使用的自动化安装工具)。 在这种情况下,我们回到(2)。
两种解决方法都不是很好。 由Java提供的自动JDK更新工具打破了我们的应用程序,这是一个耻辱。
自从你原来的发帖以来,你有没有取得任何进展?