2

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

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

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

更改glassfish-resources.xml属性connection-creation-retry-attempts和属性的默认值以某种方式connection-creation-retry-interval-in-seconds提供<jdbc-connection-pool>帮助,但仍会在启动时检查数据库的可用性,而不是在首次使用时。

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

4

2 回答 2

1

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

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

于 2013-09-10T05:01:24.977 回答
-1

您也许可以使用 EclipseLink ExceptionHandler 来捕获错误。

于 2013-08-27T13:35:55.957 回答