在OSGi中使用Envers

问题描述 投票:0回答:2

我有一个有点工作的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,因为我们对它们进行了评估,但它们并不适用于我们的用例。)

hibernate osgi hibernate-envers
2个回答
0
投票

我们也有这个问题。尝试这些步骤。

  1. 不再需要在配置文件中设置监听器,遵循hibernate osgi指令。
  2. 确保你的hibernate bundle,尤其是hibernate-envers,在你的实体捆绑之前启动。
  3. 确保您的persistence.xml文件包含有效的条目,例如

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

  1. 查找可能干扰注册的Hibernate DDL错误,例如“无法创建主键”
  2. 如果引用枚举,请参阅我的答案:Classloader Issues with Envers in OSGi
  3. 在EnversIntegrator.integrate中放置一个断点,以确保在不通过调用时调用它。

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

© www.soinside.com 2019 - 2024. All rights reserved.