java - persistencia - persistence.xml jpa mysql example
Diferencia entre la configuraciĆ³n del origen de datos en persistence.xml y en los archivos de configuraciĆ³n de primavera (2)
Es estrictamente preferencia personal.
Mi sugerencia sería usar la configuración de Spring si ya está usando Spring. Su propósito es la inyección y administración de la dependencia, así que deja que haga su trabajo con respecto a tu dependencia en una base de datos. Sin embargo, si todavía no está usando Spring, siga con la configuración de persistencia, ya que esto mantendrá su proyecto más simple mientras aún funciona. Sin embargo, sugeriré que cualquier proyecto que necesite Hibernate para interactuar con una base de datos probablemente sea lo suficientemente grande como para permitir el uso de Spring dentro.
He visto (y he hecho) la configuración de la fuente de datos de dos maneras (el siguiente código es solo para demostración):
1) configuración dentro de las unidades de persistencia, como:
<persistence-unit name="LocalDB" transaction-type="RESOURCE_LOCAL">
<class>domain.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.c3p0.min_size" value="5"/>
....
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
2) configuración dentro de los archivos de configuración de primavera (como applicationContext.xml):
<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="JiraManager"/>
<property name="dataSource" ref="domainDataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false"/>
<property name="showSql" value="false"/>
<property name="databasePlatform" value="${hibernate.dialect}"/>
</bean>
</property>
</bean>
<bean id="domainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${datasource.url}" />
<property name="user" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
<property name="initialPoolSize" value="5"/>
<property name="minPoolSize" value="5"/>
.....
</bean>
La pregunta es: ¿hay ventajas y desventajas de cada manera, o es solo una cuestión de gusto?
Hace una gran diferencia si estás en un contenedor JavaEE.
Más que preferencias personales, estás mucho mejor si sigues el segundo enfoque con algunas modificaciones.
En el primer caso, está creando su propio grupo de conexiones y no obtiene beneficios del grupo de conexiones existente en el contenedor. Por lo tanto, incluso si configuró su contenedor para, digamos, un máximo de 20 conexiones simultáneas a la base de datos, no puede garantizar este máximo ya que su nueva conexión no está restringida por su configuración. Además, no obtiene ganancias de las herramientas de monitoreo que su contenedor le brinda .
En el segundo caso, también está creando su propio grupo de conexiones , con las mismas desventajas que arriba. Sin embargo, puede aislar la definición de este bean de primavera y solo utilizarlo en las ejecuciones de prueba.
Su mejor opción es buscar el grupo de conexiones del contenedor a través de JNDI . Entonces, asegúrese de respetar las configuraciones de origen de datos del contenedor.
Use esto para ejecutar pruebas.
<!-- datasource-test.xml -->
<bean id="domainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${datasource.url}" />
<property name="user" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
<property name="initialPoolSize" value="5"/>
<property name="minPoolSize" value="5"/>
.....
</bean>
Úselo cuando se implementa en un contenedor JavaEE
<!-- datasource.xml -->
<jee:jndi-lookup id="domainDataSource" jndi-lookup="jndi/MyDataSource" />
- Recuerde establecer el esquema JEE
- Aunque Tomcat no es un contenedor completo de JavaEE, sí gestiona las fuentes de datos a través de JNDI, por lo que esta respuesta sigue siendo válida.