在hibernate挂上我的JBoss AS7.1之前,我试着在我的应用程序中运行flyway。我尝试使用@javax.ejb.Startup
注释,但在初始化Hibernate并检查数据库方案后执行。
因此,据我所知,我们可以使用在Hibernate初始化之前挂接的CDI扩展。对于flyway,是否有一些开箱即用的支持?如果没有,以前有没有人尝试过这样做?
发布于 2012-07-19 17:57:21
好了,我终于知道该怎么做了:我必须使用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
发布于 2012-06-19 04:17:54
CDI定义了自己的生命周期,该生命周期在应用程序启动/停止时执行。(您不应该已经知道了吗:This是一个学习基本机制的好地方。)
据我所知,问题在于Hibernate初始化过程与CDI启动没有直接联系。这意味着我不确定依赖Hibernate和CDI“事件”之间的关系是否安全。当然没有什么比CDI-Event HibernateInitialized
更好的了。
话虽如此,我还是要试一试:)你应该实现一个简单的扩展,这个扩展挂接到BeforeBeanDiscovery
上,越早越好。
This online presentation概述了不同的CDI事件及其顺序。很不幸,是用德语写的。
https://stackoverflow.com/questions/11071821
复制相似问题