gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:59:25 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

EclipseLink 数据库验证在第一次使用时执行。但是,这第一次使用很可能是容器处理的 @PersistanceUnit 注入(inject)点。 @PersistanceUnit 注入(inject)是在部署时处理的,您无能为力。如果您不希望 EclipseLink 在部署时进行验证,则需要处理您自己的 EntityManagerFactory

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

关于java - Glassfish:在应用程序启动时静默忽略不可用的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com