[英]Using Liquibase with OSGI and Hibernate
我想将一个Liquibase集成到我的项目中。 我的第一个想法是使用一个蓝图bean,它通过onInit方法启动Liquibase更新。 但是休眠状态存在问题,因为我们将“ hbm2ddl.auto”设置为“ validate”,并且在我的bean的onInit之前执行了验证。 (我们在META-INF中将容器管理的持久性与persistence.xml一起使用)。 因此,我的第二个尝试是使用BundleTracker,并且在清单中存在某些条目时,liquibase会执行db update。 它运行良好,但是如果数据库更新失败,我将强制执行该捆绑包。 但是我不知道如何从BundleTracker方法addBundle中做到这一点。 有什么方法可以防止从BundleTracker事件启动捆绑包?
我有另一个可能的想法,可以执行此操作来创建执行更新的附加捆绑包,而其他具有persistence.xml的捆绑包将依赖于此捆绑包。 但是我们有很多与persistence.xml捆绑在一起的东西,这就是为什么BundleTracker解决方案对我来说似乎更好的原因。
在几乎所有情况下,此类依赖项都应建模为服务。 启动/停止捆绑包听起来很容易,但随着时间的流逝,它会让您陷入可怕的可吸入泥潭。
一旦动态依赖项成为服务,OSGi中的所有部分(尤其是声明性服务)就使其在动态处理方面变得微不足道。 不仅在“快乐”的情况下,而且在很多方面,这些事情都可能导致错误。
因此,在您的情况下,您将创建一个LiquibaseHappy服务或其他东西,并且使用db的捆绑软件应依赖于它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.