Bester Ansatz für Java / Maven / JPA / Hibernate Build mit mehreren Datenbankanbietern unterstützt?

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

Frage

Ich habe eine Enterprise-Anwendung, die eine einzelne Datenbank verwendet, aber die Anwendung benötigt, um Unterstützung mysql , Oracle und SQL * Server als Installationsoptionen.

Um zu versuchen, bleiben tragbar sind wir mit JPA Annotationen mit Hibernate als die Umsetzung. Wir haben auch ein Testbett Instanz von jeder Datenbank für die Entwicklung ausgeführt wird.

Die App baut schön in Maven , und ich habe mit dem Hibernate3-maven-plugin und kann automatisch generieren DDL für eine bestimmte Datenbank Dialekt rumgespielt.

Was ist der beste Weg, dies so zu nähern, dass einzelne Entwickler können leicht Test gegen alle drei Datenbanken und unsere Hudson basiert CI-Server kann richtig Dinge bauen.

Genauer gesagt:

  1. Ich dachte, die hbm2ddl Ziel in der erzeugen würde nur eine Schemadatei, aber anscheinend verbindet es mit einer Live-Datenbank und versucht, das Schema zu erstellen . Gibt es eine Möglichkeit, dies haben erstellen, die Schemadatei für jede Datenbank Dialekt ohne Verbindung mit einer Datenbank?

  2. Wenn Sie die Hibernate3-maven-plugin besteht auf tatsächlich das Datenbankschema erstellen, ist es eine Möglichkeit, die Datenbank löschen zu lassen und neu erstellen, bevor das Schema zu erstellen?

  3. Ich denke, dass jeder Entwickler (und die Maschine Hudson Build) sollten jeweils eine eigene Datenbank auf jedem Datenbankserver haben. Ist das typisch?

  4. Will Entwickler haben Maven dreimal laufen ... einmal für jede Datenbank-Anbieter? Wenn ja, in welcher Weise verschmelzen ich die Ergebnisse auf der Maschine zu bauen?

  5. Es gibt ein hbm2doc Ziel innerhalb Hibernate3-maven-plugin. Es scheint übertrieben dies dreimal zu laufen ... Ich muß glauben, dass es für jede Datenbank nahezu identisch sein würde.

War es hilfreich?

Lösung

  

1) Gibt es eine Möglichkeit, dies haben nur die Schemadatei für jede Datenbank Dialekt zu erstellen, ohne Verbindung zu einer Datenbank?

Set export zu false. So etwas wie folgt aus:

<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) Wenn der Hibernate3-maven-Stecker besteht auf tatsächlich das Datenbankschema erstellen, ist es eine Möglichkeit, die Datenbank löschen zu lassen und neu erstellen, bevor das Schema zu erstellen?

Siehe oben. Aber nur für den Fall, für diesen Satz update zu 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) Ich denke, dass jeder Entwickler (und der hudson Build-Rechner) jeweils eine eigene Datenbank auf jedem Datenbankserver haben sollte. Ist das typisch?

Ja, und ich halte dies als Best Practices (siehe Verwenden Sie eine Datenbankinstanz pro Entwickler ).

  

4) werden die Entwickler haben Maven dreimal laufen ... einmal für jede Datenbank-Anbieter? Wenn ja, in welcher Weise verschmelzen ich die Ergebnisse auf der Maschine zu bauen?

Ja, sehr wahrscheinlich, und ich würde Profile für jede Datenbank verwenden. Auf der Maschine zu bauen, würde ich eine Matrix Projekt erstellen .

  

5) Es ist ein hbm2doc Ziel innerhalb Hibernate3-maven-plugin. Es scheint übertrieben dies dreimal zu laufen ... Ich muß glauben, dass es für jede Datenbank nahezu identisch sein würde.

Ich bin nicht auf dieses Tool verwendet, aber ich denke, es könnte einige kleine Variation in der Ausgabe sein (beispielsweise mit dem Primärschlüsselerzeugung). Ich würde die Schema-Dokumentation für jede Datenbank erzeugen, aber nur bei Release-Zeit (es gibt sicherlich keine Notwendigkeit, bei jedem Build, dass laufen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top