Glassfish:在应用程序启动时静默忽略不可用的数据源

2024-03-23

我有一个 EJB 应用程序,它在 Glassfish 3.1.2 上使用 JPA 2.0(提供程序是 EclipseLink)。当数据库关闭时,应用程序无法启动,甚至无法部署。这是因为 EclipseLink 会进行一些初步验证。

有没有一种方法可以在数据库关闭的情况下部署并启动应用程序?

背景:在调用第一个访问数据库的业务功能之前,不可用的资源不会发挥作用。从应用程序启动到第一次业务功能调用,有一个可以启动数据库的时间窗口。

更改默认值glassfish-resources.xml对于属性connection-creation-retry-attempts and connection-creation-retry-interval-in-seconds of <jdbc-connection-pool>在某种程度上有帮助,但仍然在启动时而不是第一次使用时检查数据库可用性。

ExceptionHandler来自 EclipseLink 的方式不是我想要的:当异常处理程序发挥作用时,EclipseLink 已经开始验证过程,因此尝试连接到数据库。我正在寻找的方法是将验证过程本身推迟到第一个业务电话。


EclipseLink 数据库验证is首次使用时执行。然而,这第一次使用很可能是@PersistanceUnit由容器处理的注入点。@PersistanceUnit注入是在部署时处理的,您无法采取任何措施来捕获它。如果您不希望 EclipseLink 在部署时进行验证,您需要自行处理EntityManagerFactory.

我建议创建一个应用程序上下文侦听器,它可以保存您的应用程序上下文侦听器的副本EntityManagerFactory,并在取消部署/重新部署时执行拆卸。在正常运行期间,您只能在需要时才进行任何设置。这是我遵循的基本模型:https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Glassfish:在应用程序启动时静默忽略不可用的数据源 的相关文章

随机推荐