在 OSGi 中使用 Envers

Use Envers in OSGi

我的 OSGi 上下文中嵌入了一个可以正常工作的 Hibernate 实例。现在我也想要恩弗斯

documentation 状态:

As of ORM 4.2, Envers is fully supported.

所以这是可能的。我只是不确定如何。我尽职尽责地将 @Audited 添加到我的实体之一,但什么也没发生。

我试图将这些听众添加到我的 persistence.xml:

 <property name="hibernate.ejb.event.post-insert" value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
 <property name="hibernate.ejb.event.post-update" value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
 <property name="hibernate.ejb.event.post-delete" value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
 <property name="hibernate.ejb.event.pre-collection-update" value="org.hibernate.envers.event.AuditEventListener" />
 <property name="hibernate.ejb.event.pre-collection-remove" value="org.hibernate.envers.event.AuditEventListener" />
 <property name="hibernate.ejb.event.post-collection-recreate" value="org.hibernate.envers.event.AuditEventListener" />

它不起作用,因为侦听器 类 不再存在(我正在使用 Hibernate 5.1)。

除此之外,没有太多的文档。

如何在 OSGi 中启用 Envers?

(PS。我们不打算使用 Eclipse Gemini 或 Apache Aries,因为我们对它们进行了评估,但它们不适用于我们的用例。)

我们也遇到过这个问题。试试这些步骤。

  1. 监听器不再需要在配置文件中设置,按照hibernate osgi指令。

  2. 确保你的休眠包,尤其是 hibernate-envers,在你的实体包之前启动。

  3. 确保您的 persistence.xml 文件包含有效条目,例如

<property name="hibernate.hbm2ddl.auto" value="update"/>

  1. 查找 Hibernate DDL 错误,例如可能会干扰注册的 "Can't create primary key"

  2. 如果引用枚举,请在此处查看我的回答:

  3. 在 EnversIntegrator.integrate 中放置一个断点,以确保在不退出时调用它。

聚会迟到了,但把它扔在这里以防其他人需要它:

史蒂文的前两分是正确的。 Hibernate 引导在 OSGi 中看起来与在 SE/EE 领域中完全不同。我们在 JIRA 跟踪增强方面有很多票,特别是为了使事情更加动态并减少启动顺序的脆弱性(Steven 绝对正确,hibernate-core、hibernate-envers 等 必须目前在您的捆绑包之前首先启动)。

我们的 hibernate-demos 项目有一些 OSGi 快速入门,所有这些都包括 Envers 设置。这一个可能是您正在寻找的更多内容:https://github.com/hibernate/hibernate-demos/tree/master/hibernate-orm/osgi/unmanaged-native