在JPA/Hibernate启动之前引导EJB3应用程序



我有一个EJB3项目(JAR的EAR封装,没有WAR),我正试图将Flyway(数据库迁移)集成到其中。

我尝试了几个选项来创建一个钩子,在Hibernate开始做它的事情(绑定到实体等)之前,我可以在那里运行代码;

  • 使用@StartUp注释。不幸的是,这会在JPA启动后运行
  • ServletContextListener/@WebListener。但当然,您需要一个WEB-INF/目录才能正常工作
  • 考虑过使用@DependsOn注释,看看我是否可以在Hibernate之前运行一个类,但无法实现
  • 目前我使用的是Hibernate 3.6,因此切换到Hibernate 4(从而获得Integrator API)并不是一个真正的选择

我还有其他选择吗?

我确实认为,如果您不想启动JPA,则需要使用具有非jta数据源的RESOURCE_LOCAL事务。

如果使用任何类型的JTA事务,JPA都会被急切地调用。

像这样,JPA只会在启动事务时被调用,但您需要手动控制它。

最新更新