【发布时间】:2017-04-01 08:02:59
【问题描述】:
我想将 Liquibase 集成到我的项目中。我的第一个想法是使用从 onInit 方法启动 Liquibase 更新的蓝图 bean。但是休眠存在问题,因为我们将“hbm2ddl.auto”设置为“验证”,并且验证是在我的 bean 的 onInit 之前执行的。 (我们在 META-INF 中使用带有 persistence.xml 的容器管理持久性)。所以我的第二次尝试是使用 BundleTracker,当清单中存在某些条目时,liquibase 会执行数据库更新。它运行良好,但我想强制如果数据库更新不成功,捆绑将不会启动。但我不知道如何从 BundleTracker 方法 addBundle 中做到这一点。有什么方法可以防止从 BundleTracker 事件启动捆绑包?
我有另一个可能的想法是创建一些执行更新的附加包,而其他带有 persistence.xml 的包将取决于这个包。但是我们有很多带有 persistence.xml 的捆绑包,这就是为什么 BundleTracker 的解决方案对我来说似乎更好。
【问题讨论】:
-
我真的坚持使用 liquibase osgi 和 hibernate 集成我看到你已经找到了一种方法,所以你能帮我吗?因为我想在我的持久性单元和我的数据库之间调用 liquibase 差异作为 osgi 包中的服务,但我不能这样做
-
我们正在通过 maven 插件进行 diff,但是我们有一个 osgi 包,它能够使用 liquibase 和纯数据源更新数据库。使用 hibernate 时,我们遇到了验证问题,因为它是在我们的 liquibase 更新之前执行的。我认为使用 BundleActivator 您可以在激活休眠之前执行更新,但我们选择了不同的解决方案。
标签: hibernate osgi liquibase blueprint-osgi