在OSGi中使用Envers

时间:2017-07-25 10:02:13

标签: hibernate osgi hibernate-envers

我有一个有点工作的Hibernate实例嵌入到我的OSGi上下文中。现在我也想拥有Envers。

documentation州:

  

从ORM 4.2开始,完全支持Envers。

所以有可能。我只是不确定如何。我尽职尽责地将@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,因为我们对它们进行了评估,但它们不能用于我们的用例。)

2 个答案:

答案 0 :(得分:0)

我们也有这个问题。请尝试以下步骤。

  1. 不再需要在配置文件中设置监听器,请遵循hibernate osgi说明。

  2. 确保您的hibernate捆绑包,尤其是hibernate-envers,在实体捆绑之前启动。

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

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

    1. 查找Hibernate DDL错误,例如可能干扰注册的“无法创建主键”

    2. 如果引用枚举,请在此处查看我的回答:Classloader Issues with Envers in OSGi

    3. 在EnversIntegrator.integrate中放置一个断点,以确保在不通过救援时调用它。

答案 1 :(得分:0)

参加晚会,但是如果其他人需要的话,请把它放在这里:

史蒂文的前两点是现货。 Hibernate bootstrapping在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