Approccio migliore per Java / Maven / JPA / Hibernate costruire con il supporto di più fornitore del database?

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

Domanda

Ho un'applicazione enterprise che utilizza un unico database, ma le esigenze di applicazione al supporto mysql , e SQL * Server oracle come opzioni di installazione.

Per cercare di rimangono portatile che stiamo utilizzando JPA annotazioni con Sospensione come l'implementazione. Abbiamo anche un esempio banco di prova di ogni database in esecuzione per lo sviluppo.

L'applicazione sta costruendo bene in Maven e ho giocato in giro con il Hibernate3-Maven-plugin e può auto-generare DDL per un determinato dialetto database.

Qual è il modo migliore per affrontare questo in modo che i singoli sviluppatori possono facilmente prova contro tutti e tre i database e il nostro server CI basato Hudson può costruire le cose per bene.

In particolare:

  1. ho pensato che il hbm2ddl gol nel sarebbe solo generare un file di schema, ma a quanto pare si connette a un database dal vivo e tentativi di creare lo schema . C'è un modo per avere questa basta creare il file di schema per ogni dialetto database di senza si collega a un database?

  2. Se il Hibernate3-Maven-plugin insiste sulla realtà la creazione dello schema del database, c'è un modo per farlo eliminare il database e ricrearlo prima di creare lo schema?

  3. Sto pensando che ogni sviluppatore (e la macchina di build Hudson) dovrebbero avere un proprio database separato su ogni server di database. E 'questo tipo?

  4. Gli sviluppatori avranno a correre Maven tre volte ... una volta per ogni fornitore di database? Se è così, come faccio a unire i risultati sul sistema di compilazione?

  5. C'è un hbm2doc obiettivo entro Hibernate3-Maven-plugin. Sembra eccessivo per eseguire questo tre volte ... io devo credere che sarebbe stato quasi identico per ogni database.

È stato utile?

Soluzione

  

1) C'è un modo per avere questo basta creare il file di schema per ogni dialetto database senza connessione a un database?

Set export a false. Qualcosa di simile a questo:

<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) Se la Hibernate3-Maven-plug insiste sulla realtà la creazione dello schema del database, c'è un modo per farlo eliminare il database e ricrearlo prima di creare lo schema?

Vedi sopra. Ma solo nel caso in cui, per questo update insieme a 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) Sto pensando che ogni sviluppatore (e la macchina di build Hudson) dovrebbero avere un proprio database separato su ogni server di database. E 'questo tipo?

Sì, e io considero questo come una delle migliori pratiche (vedi Utilizzare un'istanza di database per sviluppatore ).

  

4) Saranno gli sviluppatori devono eseguire Maven tre volte ... una volta per ogni fornitore di database? Se è così, come faccio a unire i risultati sul sistema di compilazione?

Sì, molto probabilmente e vorrei utilizzare i profili per ogni database. Sul sistema di compilazione, avrei costruire un progetto di matrice .

  

5) V'è un obiettivo hbm2doc entro Hibernate3-Maven-plugin. Sembra eccessivo per eseguire questo tre volte ... io devo credere che sarebbe stato quasi identico per ogni database.

Io non sono abituato a questo strumento, ma credo che ci potrebbe essere qualche piccola variazione in uscita (ad esempio con il primario di generazione delle chiavi). Vorrei generare la documentazione schema per ogni database ma solo il tempo di rilascio (certamente non c'è bisogno di correre che ad ogni generazione).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top