2017-08-30 9 views
0

Dans un projet d'entreprise client-serveur, j'utilise Hibernate avec Envers. Les développeurs clients veulent avoir une bibliothèque partagée qui contient toutes les entités afin qu'ils puissent les utiliser dans leur développement client sans inclure de dépendances côté serveur. Comme ces entités sont annotées avec l'annotation @Audited, la bibliothèque cliente contiendra la dépendance Envers qui est acceptable. Cependant, Envers lui-même contient toutes sortes de dépendances: hibernate-core, hibernate-jpa-api, javassist et bien d'autres encore.Puis-je utiliser l'annotation Audited d'Hibernate Envers sans inclure la totalité de la distribution Hibernate?

Existe-t-il un moyen d'inclure uniquement l'annotation dans ma bibliothèque sans inclure réellement tout le contenu côté serveur?

Répondre

0

Cela dépendrait finalement du contexte de client dans ce cas. En supposant que votre client utilise un protocole pour communiquer avec votre backend côté serveur, vous pouvez empaqueter les annotations org.hibernate.envers dans un artefact distinct que vous incluez dans votre déploiement client, comme je le pense avec les annotations JPA. Le seul soin dont vous devez tenir compte est que lorsque vous mettez à jour l'artefact hibernate-envers, vous devez reconditionner cet artefact spécial pour prendre en compte les modifications d'annotation.

Je sais que les utilisateurs ont demandé à pouvoir configurer Envers via des mappages XML. L'espoir et le but est d'essayer d'inclure cela dans la configuration orm.xml dans Hibernate 7.

0

Dans la solution finale, j'ai fini par inclure la dépendance "hibernate-envers" dans mon fichier pom.xml Maven. Sous la déclaration de dépendances j'utilise un tas de balises "exclues" afin d'exclure les dépendances qui ne sont critiques que lors de l'exécution d'Hibernate mais qui ne sont pas critiques quand on utilise seulement les annotations et peut-être les entités validantes. Grâce à cela, j'ai pu utiliser toutes les annotations d'Hibernate (pas seulement @Audited) tout en gardant l'empreinte relativement petite. J'ai commencé par l'approche de @Naros en premier (merci pour la suggestion) mais cela m'a conduit à inclure de plus en plus de dépendances de code source qui étaient requises par diverses annotations d'Hibernate. Bien sûr, cela dépend de ce que vous voulez réaliser, mais pour moi, la solution basée sur Maven a mieux fonctionné. Voici le POM qui fonctionne pour moi:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-envers</artifactId> 
     <version>5.2.7.Final</version> 
     <exclusions> 
      <exclusion> 
       <groupId>antlr</groupId> 
       <artifactId>antlr</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.javassist</groupId> 
       <artifactId>javassist</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.jboss</groupId> 
       <artifactId>jandex</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.apache.geronimo.specs</groupId> 
       <artifactId>geronimo-jta_1.1_spec</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.fasterxml</groupId> 
       <artifactId>classmate</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>dom4j</groupId> 
       <artifactId>dom4j</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.hibernate.common</groupId> 
       <artifactId> 
        hibernate-commons-annotations 
       </artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency>