【问题标题】:Loading a class file immediately AFTER startup [duplicate]启动后立即加载类文件[重复]
【发布时间】:2010-03-17 18:57:36
【问题描述】:

我们在一个 ear 文件中部署了一些 war 文件。一些 war 文件有一个类,它以单例的形式缓存来自我们的 PLM 系统的静态数据。由于某些类需要几分钟才能加载,我们使用 web.xml 中的 load-on-startup 来提前加载它们。在我们尝试在生产服务器上重新部署应用程序之前,这一切都很好。 (WebLogic 10.3) 我们从 PLM API 中得到一个关于已加载 dll 的异常。我们的 PLM 供应商已确认这是一个问题,并声明他们不支持使用启动时加载。这也是我们一直在重新部署应用程序的开发箱的一个大问题。我们大多数人,当我们不使用缓存的应用程序之一时,将它们注释掉。显然,我们不能为生产服务器这样做。现在我们将 ear 转移到生产服务器,在控制台中部署它,等待它崩溃,关闭应用服务器实例,然后重新启动它。

我们需要想办法解决这个问题...

一个建议是创建一个 servlet,我们可以在服务器启动后调用它来加载各种缓存。虽然这会起作用,但我正在寻找更清洁的东西。一旦服务器启动然后触发方法,是否有检测方法?

谢谢。

【问题讨论】:

    标签: java web-applications web.xml


    【解决方案1】:

    我们在加载本机 DLL 的第三方 JDBC 驱动程序时遇到了类似的问题。重新部署应用程序时,驱动程序会崩溃,说 DLL 已加载。解决方案(如果可以这么说的话)是将驱动程序从部署移动到库中。这样,驱动程序对应用服务器来说是全局的,并且在重新部署应用时不需要重新加载。

    【讨论】:

      【解决方案2】:

      如果使用 servlet 容器生命周期侦听器,例如 ServletContextListener,会怎样?

      Example on how to use.

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

      我会尝试 Chris Nava 的建议。

      EDIT2:看起来tomcat 也有一些lifecycle listener(s) 可用。看起来文档很稀疏,但这可能会允许您在服务器启动时专门执行一次操作。

      EDIT3:是的,tomcat 生命周期侦听器是要走的路。 This link 很好地解释了如何设置。应该是相当直截了当的。如果您忽略有关将事务添加到 tomcat 的部分,那么它将非常彻底地讨论如何添加生命周期侦听器。

      【讨论】:

      • 看起来它应该可以工作....我会试一试。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多