Mejor enfoque para Java / Maven / JPA / Hibernate acumulación con soporte para múltiples proveedores de base de datos?

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

Pregunta

Tengo una aplicación empresarial que utiliza una sola base de datos, pero las necesidades de la aplicación al apoyo mysql , Oracle y SQL * servidor como opciones de instalación.

Para tratar de permanecen portátil que están utilizando APP anotaciones Hibernate como la implementación. También tenemos un ejemplo de banco de pruebas de cada base de datos de funcionamiento para el desarrollo.

La aplicación está construyendo muy bien en Maven y he jugado un poco con el Maven-Hibernate3-plugin y puede auto-generar DDL para un dialecto base de datos dada.

¿Cuál es la mejor manera de abordar esto de manera que los desarrolladores individuales pueden fácilmente prueba contra las tres bases de datos y nuestro servidor IC basada Hudson pueden construir cosas correctamente.

Más específicamente:

  1. pensé que el hbm2ddl gol en el acaba de generar un archivo de esquema, pero parece ser que se conecta a una base de datos en vivo y los intentos de crear el esquema . ¿Hay una manera de tener este acaba de crear el archivo de esquema para cada dialecto base de datos sin se conecta a una base de datos?

  2. Si el Hibernate3-maven-plugin de insiste en crear realmente el esquema de base de datos, ¿hay una manera de tener que soltar la base de datos y volver a crearlo antes de crear el esquema?

  3. Estoy pensando que cada desarrollador (y la máquina de construcción Hudson) deben tener su propia base de datos independiente en cada servidor de base de datos. Es esto normal?

  4. Los desarrolladores tienen que ejecutar Maven tres veces ... una vez para cada proveedor de base de datos? Si es así, ¿cómo puedo combinar los resultados en la construcción de la máquina?

  5. Hay un hbm2doc objetivo dentro de Hibernate3-maven-plugin. Parece una exageración para funcionar esto tres veces ... Tengo que creo que sería casi idéntica para cada base de datos.

¿Fue útil?

Solución

  

1) ¿Hay una manera de tener esto sólo crear el archivo de esquema para cada dialecto base de datos sin conexión a una base de datos?

Conjunto export a false. Algo como esto:

<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 el Hibernate3-maven-enchufe insiste en crear realmente el esquema de base de datos, ¿hay una manera de tener que soltar la base de datos y volver a crearlo antes de crear el esquema?

Consulte más arriba. Pero por si acaso, para este conjunto update 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) Pienso que cada desarrollador (y la máquina de construcción Hudson) deben tener su propia base de datos independiente en cada servidor de base de datos. Es esto normal?

Sí, y considero esto como una las mejores prácticas (ver utilizar una instancia de base de datos por desarrollador ).

  

4) ¿Los desarrolladores tienen que correr Maven tres veces ... una vez para cada proveedor de base de datos? Si es así, ¿cómo puedo combinar los resultados en la construcción de la máquina?

Sí, es muy probable y me gustaría utilizar perfiles para cada base de datos. En la máquina de construcción, me construir un proyecto de matriz .

  

5) Hay una meta hbm2doc dentro Hibernate3-maven-plugin. Parece una exageración para funcionar esto tres veces ... Tengo que creo que sería casi idéntica para cada base de datos.

No estoy acostumbrado a esta herramienta, pero supongo que podría haber alguna pequeña variación en la salida (por ejemplo, con la generación de la clave primaria). Me generar la documentación del esquema de base de datos para cada uno, pero a sólo el tiempo de liberación (ciertamente no hay necesidad de correr que en cada generación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top