我有一个用Struts2和Spring编写的应用程序用于DI,我使用Tomcat 6作为容器。假设我在Tomcat上部署后将应用程序打包为 my-application.war ,我可以通过 http:// my-host / my-application 访问它。
当我删除.war文件时,Tomcat应该取消部署应用程序并根据here当我尝试http://my-host/my-application
我应该得到:
HTTP Status 404
但我得到了:
HTTP Status 503 - This application is not currently available
当我将应用程序重新部署到相同的上下文路径时,我得到一个奇怪的例外:
Unable to instantiate Action, [ActionClass], defined for '' in
namespace '/' Failed to convert value of type [MyClass] to required type
[MyClass] for property 'myClass': no matching editors or conversion strategy
found
其中 ActionClass 的属性 myClass 属于 MyClass ,由Spring注入,默认为单身。这很奇怪,因为两个对象的类型是相同的。我怀疑应用程序首先没有完全取消部署,因为当我重新启动Tomcat时,将重复该场景。如果找到可能原因,我将不胜感激。
答案 0 :(得分:2)
嗯,我想我找到了答案。正如我猜测的那样,问题在于取消部署不当。
似乎在不重新启动tomcat的情况下部署和取消部署应用程序是一项棘手的工作。部署应用程序时,Tomcat类加载器会加载应用程序中的类,一旦加载它们,似乎它们不会在取消部署时卸载。并且不断地部署和取消部署应用程序将导致严重的内存泄漏。这种情况对于单例尤其如此,因为JVM中的对象的剩余版本与新部署的类不匹配。因此我得到的错误。
每次重新部署任何应用程序时,安全路径似乎都在重新启动Tomcat 消息来源帮助我找到了这些信息: