2017-07-25 1 views
0

J'ai une instance de Hibernate dans mon contexte OSGi. Maintenant, je veux avoir Envers, aussi.Utiliser Envers dans OSGi

Les documentation états:

Au ORM 4.2, est entièrement pris en charge Envers.

Donc, c'est possible. Je ne suis pas sûr de comment. J'ai consciencieusement ajouté @Audited à l'une de mes entités, mais rien ne s'est passé.

J'ai essayé d'ajouter ces auditeurs à mon 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" /> 

Il ne fonctionne pas parce que les classes d'écoute n'existent plus (j'utilise Hibernate 5.1).

À part cela, il n'y a pas beaucoup de documentation.

Comment activer Envers dans OSGi?

(PS. On ne va pas utiliser Eclipse Gemini ou Apache Aries, parce que nous les avons évalués et ils ne travaillaient pas pour nos cas d'utilisation.)

+0

Quel environnement OSGi utilisez-vous? – Naros

+0

Celui de la plate-forme Eclipse actuelle. Alors ... Equinox avec une pincée de Felix. –

Répondre

0

Nous avons eu ce problème aussi. Essayez ces étapes.

  1. Listener plus besoin d'être définie dans le fichier de configuration, suivez les instructions de mise en veille prolongée OSGi.

  2. Assurez-vous que vos bundles Hibernate, en particulier hibernate-envers, commencent avant vos bundles d'entité.

  3. Assurez-vous que votre fichier persistence.xml contient une entrée valide comme

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

  1. Rechercher des erreurs Hibernate DDL, telles que « Can 't créer une clé primaire' qui pourrait interférer avec l'enregistrement

  2. En référence à enums, voir ma réponse ici: Classloader Issues with Envers in OSGi

  3. Placez un point d'arrêt dans EnversIntegrator.integrate pour vérifier qu'il n'est pas appelé.

0

retard à la fête, mais en jetant ce ici au cas où quelqu'un d'autre a besoin il:

Steven deux premiers points sont sur place. Le bootstrapping Hibernate semble assez différent dans OSGi que dans SE/EE terre. Nous avons de nombreux billets dans les améliorations de suivi JIRA, en particulier pour rendre les choses plus dynamiques et pour réduire la fragilité de la commande de démarrage (Steven est absolument correct que hibernate-core, hibernate-envers, etc doit être démarré en premier avant votre bundle).

Notre projet hibernate-demos a quelques quickstarts OSGi, qui comprennent tous la configuration d'Envers. Celui-ci est probablement plus de ce que vous cherchez: https://github.com/hibernate/hibernate-demos/tree/master/hibernate-orm/osgi/unmanaged-native

+0

Il m'est difficile de traduire l'exemple dans ma configuration. Pourriez-vous me lier le fichier qui a les positions de départ? Et peut-être que tout ce qui est pertinent pour démarrer les bundles en OSGi plaine? –