Meilleure approche pour Java / Maven / JPA / Hibernate compilé avec le support de plusieurs fournisseurs de base de données?

StackOverflow https://stackoverflow.com/questions/2832001

Question

J'ai une application d'entreprise qui utilise une base de données unique, mais les besoins de l'application à l'appui mysql , oracle et sql * serveur comme options d'installation.

Pour essayer de restent portables nous utilisons JPA annotations Mise en veille prolongée comme la mise en œuvre. Nous avons aussi une instance de banc d'essai de chaque base de données en cours d'exécution pour le développement.

L'application est construit bien dans Maven et je l'ai joué avec hibernate3-maven-plugin et peut générer automatiquement un dialecte DDL pour la base de données.

Quelle est la meilleure façon d'aborder ce afin que les développeurs individuels peuvent facilement tester contre les trois bases de données et notre serveur CI à base d'Hudson peut construire des choses correctement.

Plus précisément:

  1. Je pensais que le hbm2ddl but dans la serait tout simplement générer un fichier de schéma, mais apparemment il se connecte à une base de données en direct et tente de créer le schéma . Est-il possible d'avoir cette il suffit de créer le fichier de schéma pour chaque dialecte de base de données sans se connecter à une base de données?

  2. Si hibernate3-maven-plugin insiste sur la création en fait le schéma de base de données, est-il un moyen de le faire tomber la base de données et recréez avant de créer le schéma?

  3. Je pense que chaque développeur (et la machine de construction Hudson) devraient avoir leur propre base de données séparée sur chaque serveur de base de données. Est-ce typique?

  4. Les développeurs doivent exécuter Maven trois fois ... une fois pour chaque fournisseur de base de données? Si oui, comment puis-je fusionner les résultats sur la machine de construction?

  5. Il y a un hbm2doc objectif dans-plugin-hibernate3 Maven. Il semble exagéré de courir ce trois fois ... Je dois croire que ce serait presque identique pour chaque base de données.

Était-ce utile?

La solution

  

1) Est-il possible d'avoir ce juste créer le fichier de schéma pour chaque dialecte de base de données sans se connecter à une base de données?

Set export à false. Quelque chose comme ceci:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>false</export><!-- do not export to the database -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
</plugin>
  

2) Si la fiche hibernate3-maven insiste sur la création en fait le schéma de base de données, est-il un moyen de le faire tomber la base de données et recréez avant de créer le schéma?

Voir ci-dessus. Mais juste au cas où, pour cet ensemble update à true:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>true</export>
      <update>true</update><!-- update the schema -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derbyclient</artifactId>
      <version>10.5.3.0_1</version>
    </dependency>
  </dependencies>
</plugin>
  

3) Je pense que chaque développeur (et la machine de construction hudson) devraient avoir leur propre base de données séparée sur chaque serveur de base de données. Est-ce typique?

Oui, et je considère cela comme une des meilleures pratiques (voir Utiliser une instance de base de données par développeur ).

  

4) Est-ce que les développeurs doivent exécuter Maven trois fois ... une fois pour chaque fournisseur de base de données? Si oui, comment puis-je fusionner les résultats sur la machine de construction?

Oui, très probablement et j'utiliser des profils pour chaque base de données. Sur la machine de construction, je construire un projet de matrice .

  

5) Il y a un objectif hbm2doc au sein-plugin-hibernate3 Maven. Il semble exagéré de courir ce trois fois ... Je dois croire que ce serait presque identique pour chaque base de données.

Je ne suis pas habitué cet outil, mais je suppose qu'il pourrait y avoir peu de variation dans la production (par exemple avec la génération de clé primaire). Je générer la documentation de schéma pour chaque base de données, mais au moment de la libération seulement (il n'y a certainement pas besoin de courir qu'à chaque build).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top