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

时间:2013-08-26 13:44:25

标签: java glassfish jpa-2.0 eclipselink glassfish-3

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

有没有办法即使数据库关闭也可以部署和启动应用程序?

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

更改glassfish-resources.xmlconnection-creation-retry-attempts的{​​{1}}和connection-creation-retry-interval-in-seconds <jdbc-connection-pool>的默认值会有所帮助,但仍会在启动时检查数据库的可用性,而不是在第一次使用时。

来自EclipseLink的

ExceptionHandler不是我想到的方式:当异常处理程序发挥作用时,EclipseLink已经启动了验证过程,因此尝试连接到数据库。我正在寻找的方法是推迟验证过程本身,直到第一次商务电话。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

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