我有一个EJB应用程序,它在Glassfish 3.1.2上使用JPA 2.0(提供者是EclipseLink)。当数据库关闭时,应用程序无法启动,甚至更多:无法部署。这是因为EclipseLink进行了一些初步验证。
有没有办法即使数据库关闭也可以部署和启动应用程序?
背景:在调用访问数据库的第一个业务功能之前,不可用的资源才会发挥作用。从应用程序启动到第一个业务函数调用,都有一个可以启动数据库的时间窗口。
更改glassfish-resources.xml
中connection-creation-retry-attempts
的{{1}}和connection-creation-retry-interval-in-seconds
<jdbc-connection-pool>
的默认值会有所帮助,但仍会在启动时检查数据库的可用性,而不是在第一次使用时。
ExceptionHandler
不是我想到的方式:当异常处理程序发挥作用时,EclipseLink已经启动了验证过程,因此尝试连接到数据库。我正在寻找的方法是推迟验证过程本身,直到第一次商务电话。
答案 0 :(得分:1)
@PersistanceUnit
注入点。 @PersistanceUnit
注入是在部署时处理的,没有什么可以做到的。如果您不希望EclipseLink在部署时进行验证,则需要处理自己的EntityManagerFactory
。
我建议创建一个应用程序上下文侦听器,它可以保存EntityManagerFactory
的副本,并在取消部署/重新部署时执行拆卸。在正常运行期间,您可以在需要之前不设置任何内容。这是我要遵循的基本模型:https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom
答案 1 :(得分:-1)
您可以使用EclipseLink ExceptionHandler来捕获错误。