CDI扩展的迁徙路线(CDI Extension for Flyway)

2019-06-25 13:45发布

我试图在我的应用程序运行的飞行用Hibernate是挂钩在我的JBoss AS 7.1之前。 我试图用@javax.ejb.Startup注解,但这被执行后,Hibernate的初始化和数据库方案被选中。

所以,据我了解,我们可以使用一个CDI扩展Hibernate的初始化之前鱼钩英寸 有没有说出来的箱子飞行用一些支持? 如果没有,有没有人尝试过这样做呢?

Answer 1:

好吧,我终于找到了如何做到这一点:我不得不使用Hibernate API集成。 这是整个代码,我不得不写:

public class FlywayIntegrator implements Integrator {

  @Override
  public void integrate(final Configuration configuration, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
    final Flyway flyway = new Flyway();

    flyway.setDataSource(....);
    flyway.migrate();
  }

  @Override
  public void integrate(final MetadataImplementor metadataImplementor, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
    //no-op
  }

  @Override
  public void disintegrate(final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
    //no-op
  }
}

如果有人有兴趣了解更多的细节,我创建这表明一个github上的项目: https://github.com/dobermai/Hibernate-Flyway-Integration



Answer 2:

CDI限定应用启动时执行其自己的生命周期/停止。 (你不应该已经知道了: 这是了解的基本机制的好地方。)

这个问题 - 我所知 - 是Hibernate的初始化过程不直接链接到CDI启动。 这意味着,我不知道,如果它的安全依赖于休眠与CDI“事件”之间的关系。 当然是有没有像CDI-事件HibernateInitialized

话虽如此,我想给它一个尝试:)你应该执行一个简单的扩展,在勾搭BeforeBeanDiscovery ,这是早,因为它得到。

这网上的介绍提供了有关不同CDI事件及其秩序的概述。 它在德国,很遗憾。



文章来源: CDI Extension for Flyway