2010-03-17 78 views
2

我们在ear文件中部署了一些war文件。一些war文件有一个类,它以单例形式从我们的PLM系统中缓存静态数据。由于某些类需要几分钟才能加载,因此我们使用web.xml中的load-on-startup来提前加载它们。在我们试图在生产服务器上重新部署应用程序之前,这一切都可以正常工作。 (WebLogic 10.3)我们从PLM API获得一个关于已经加载的dll的例外。我们的PLM供应商已确认这是一个问题,并表示他们不支持使用启动时加载。这也是我们开发箱中的一个重大问题,我们已经在重新部署应用程序。我们大多数人,当我们没有使用缓存的应用程序之一工作时,让他们注释掉。显然,我们不能为生产服务器做到这一点。现在,我们将耳朵传输到生产服务器,在控制台中部署它,等待它崩溃,关闭应用服务器实例,然后再次启动它。启动后立即加载类文件

我们需要找到解决的办法......

一个建议是建立一个servlet,我们可以在服务器启动将加载各种缓存后调用。虽然这将工作,我正在寻找更清洁的东西。无论如何,一旦服务器启动后检测,然后解除方法?

谢谢。

回答

1

如何使用servlet容器生命周期侦听器,如ServletContextListener

Example on how to use

编辑:对不起,重新读你的问题后,我不认为这会奏效。你想要的东西只会在每个服务器生命中加载一次,而不是应用程序生命。 ServletContextListener的方法将在每次部署应用程序时调用,就像启动时加载的servlet(它似乎您正在使用的那样)。我的建议会以不同的方式完成同样的事情。

我会尝试克里斯纳瓦的建议。

编辑2:它看起来像tomcat也有一些lifecycle listener(s)可用。它看起来像文档是稀疏的,但这可能会允许您在服务器启动时专门做一次。

编辑3:是的,一个tomcat生命周期监听器是要走的路。 This link很好地解释了如何设置一个。应该相当简单。如果你忽略了将事务添加到tomcat的部分,它会非常彻底地完成如何添加生命周期侦听器。

+0

看起来它应该工作....我会给它一个镜头。谢谢。 – Striker 2010-03-17 19:18:21

1

我们遇到了一个加载了本地DLL的第三方JDBC驱动程序的类似问题。当重新部署应用程序时,驱动程序会崩溃,说已经加载了DLL。解决方案(如果可以的话)是将驱动程序从deploy部署到lib中。通过这种方式,驱动程序对应用程序服务器是全局的,并且在重新部署应用程序时不需要重新加载。

相关问题