在OSGi中使用Envers [英] Use Envers in OSGi

查看:102
本文介绍了在OSGi中使用Envers的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在OSGi上下文中嵌入了一些有效的Hibernate实例。现在我也想拥有Envers。



文档指出:


截至ORM 4.2 Envers完全支持。


所以这是可能的。我只是不知道如何。我尽职尽责地向我的一个实体添加了 @Audited ,但没有任何事情发生。



我试图将这些侦听器添加到我的 persistence.xml

 < property name =hibernate.ejb.event.post- insertvalue =org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener/> 
< property name =hibernate.ejb.event.post-updatevalue =org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener/>
< property name =hibernate.ejb.event.post-deletevalue =org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener/>
< property name =hibernate.ejb.event.pre-collection-updatevalue =org.hibernate.envers.event.AuditEventListener/>
< property name =hibernate.ejb.event.pre-collection-removevalue =org.hibernate.envers.event.AuditEventListener/>
< property name =hibernate.ejb.event.post-collection-recreatevalue =org.hibernate.envers.event.AuditEventListener/>

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



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



如何在OSGi中启用Envers?



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

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


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


  2. 确保您的hibernate包,特别是hibernate-envers,在实体包之前启动。确保你的persistence.xml文件包含一个有效的条目,例如

  3. =hibernate.hbm2ddl.autovalue =update/>


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

    2. 如果引用枚举,请参阅我的答案: OSGi中Envers的Classloader问题


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



    I have a somewhat working instance of Hibernate embedded into my OSGi context. Now I want to have Envers, too.

    The documentation states:

    As of ORM 4.2, Envers is fully supported.

    So it is possible. I'm just not sure how. I dutifully added @Audited to one of my entities, but nothing happened.

    I tried to add these listeners to my 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" />
    

    It does not work because the listener classes don't exist anymore (I'm using Hibernate 5.1).

    Other than that, there is no much documentation.

    How do I enable Envers in OSGi?

    (PS. We are not going to use Eclipse Gemini or Apache Aries, because we evaluated them and they did not work for our use cases.)

    解决方案

    We had this problem too. Try these steps.

    1. Listener no longer need to be set in the config file, follow the hibernate osgi instructions.

    2. Make sure your hibernate bundles, especially hibernate-envers, starts before your entity bundles.

    3. Make sure your persistence.xml file contains a valid entry such as

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

    1. Look for Hibernate DDL errors, such as "Can't create primary key" that might interfer with registration

    2. If referencing enums, see my answer here: Classloader Issues with Envers in OSGi

    3. Put a breakpoint in EnversIntegrator.integrate to see make sure it is called on not bailing out.

    这篇关于在OSGi中使用Envers的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆