34 votes

Différence entre la configuration de la source de données dans persistence.xml et dans les fichiers de configuration printaniers

J'ai vu (et terminé) la configuration de la source de données de deux manières (le code ci-dessous est juste pour une démonstration):

1) configuration à l'intérieur des unités de persistance, comme:

 <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) configuration dans les fichiers de configuration printaniers (tels que 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 question qui se pose est la suivante: y a-t-il des avantages et des inconvénients dans chaque sens, ou s'agit-il simplement d'une question de goût?

32voto

Leonel Points 8174

Cela fait une énorme différence si vous êtes dans un conteneur JavaEE.

Plus de la préférence personnelle, vous êtes beaucoup mieux si vous suivez la deuxième approche avec quelques modifications.

Dans le premier cas, vous êtes de la création de votre propre pool de connexion et ne bénéficient pas de la connexion existante piscine dans le conteneur. Ainsi, même si vous avez configuré votre conteneur à, disons, un max de 20 connexions simultanées à la base de données, vous ne pouvez pas garantir ce max de ce nouveau pool de connexion n'est pas retenue par votre configuration. Aussi, vous n'avez pas de profit à partir des outils de surveillance de votre conteneur offre vous.

Dans le second cas, vous êtes aussi de la création de votre propre pool de connexion, avec les mêmes inconvénients que ci-dessus. Cependant, vous pouvez isoler la définition de ce printemps, le haricot et les utilisent uniquement pour un test.

Votre meilleur pari est de rechercher le conteneur du pool de connexion via JNDI. Ensuite, vous êtes sûr à l'égard de la source de données de configuration du conteneur.

L'utiliser pour l'exécution des tests.

<!-- 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>

Utilisez cette option lorsque le déploiement d'un conteneur JavaEE

<!-- datasource.xml -->
<jee:jndi-lookup id="domainDataSource" jndi-lookup="jndi/MyDataSource" />
  • N'oubliez pas de définir le schéma JEE
  • Bien que Tomcat n'est pas un conteneur JavaEE, il n'gérer les sources de données via JNDI, de sorte que cette réponse s'applique toujours.

4voto

Jesse Webb Points 8015

Il est strictement une question de préférence personnelle.

Ma suggestion serait d'utiliser le Printemps de configuration si vous utilisez le Printemps déjà. Son but est d'injection de dépendance et de gestion pour le laisser faire son travail à l'égard de votre dépendance sur une base de données. Si, toutefois, vous n'êtes pas déjà le Printemps, coller avec la persistance de configuration considérant que cela permet de garder votre projet plus simple tout en encore fonctionnel. Je suggère cependant que tout projet qui a besoin d'Hibernate pour interagir avec une base de données est probablement assez grand pour tolérer l'aide de Printemps à l'intérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X