我有一个有点工作的Hibernate实例嵌入到我的OSGi上下文中。现在我也想拥有Envers。
从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,因为我们对它们进行了评估,但它们不能用于我们的用例。)
答案 0 :(得分:0)
我们也有这个问题。请尝试以下步骤。
不再需要在配置文件中设置监听器,请遵循hibernate osgi说明。
确保您的hibernate捆绑包,尤其是hibernate-envers,在实体捆绑之前启动。
确保您的persistence.xml文件包含有效条目,例如
<property name="hibernate.hbm2ddl.auto" value="update"/>
查找Hibernate DDL错误,例如可能干扰注册的“无法创建主键”
如果引用枚举,请在此处查看我的回答:Classloader Issues with Envers in OSGi
在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