Pool de connexion ou source de données? Que dois-je mettre dans JNDI?
- T-elle plus de sens pour le pool de connexion à la JNDI niveau ou à la webapp? Par exemple, j'ai pu créer simplement javax.sql.Source de données comme ceci:
<Context antiJARLocking="true">
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/myDataSource" user="user" password="password" />
</Context>
et ensuite configurer la piscine au Printemps ainsi:
<bean id="myDataSource" class="com.mchange.v2.c3p0.DataSources"
factory-method="pooledDataSource">
<constructor-arg>
<jee:jndi-lookup jndi-name="java:comp/env/jdbc/myDataSource" />
</constructor-arg>
</bean>
Ou, j'ai pu configurer la piscine directement dans JNDI lui-même:
<Resource name="jdbc/myDataSource"
auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClassName="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost/myDataSource"
user="user" password="password"
minPoolSize="3"
maxPoolSize="15"
maxIdleTime="5000"
idleConnectionTestPeriod="300"
acquireIncrement="3" />
Laissant ce printemps:
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
Dans les deux cas, la myDataSource printemps bean serait un c3p0 de connexion commun de la source de données, mais lequel est le mieux? Je pense que le fait d'avoir de la piscine dans JNDI fait le plus de sens, mais l'inconvénient de cette est que vous devez pousser votre c3p0 lib dans le conteneur de servlet niveau qui pourrait provoquer des conflits avec les existants servlets si ils utilisent actuellement une version différente. Cependant, la placer dans JNDI signifie que vos applications n'avez pas à vous soucier de mise en commun à tous. Ce qui ne pense y'all?
source d'informationauteur Lucas
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de piscine de la source de données, obtenues à partir de JNDI, comme c'est déjà mis en commun 🙂
La seule différence entre le fait d'avoir un conteneur gestionnaire de pool de c. s. pool d'applications est que dans le 1er cas, vous avez la possibilité de surveiller la charge de travail sur la piscine en utilisant les interfaces standard (par exemple console JBoss). Puis administrateur de l'application serveur gère la décision sur l'augmentation de la taille du pool, si nécessaire. Il peut aussi passer des applications sur un autre serveur de base de données (par exemple migration de MySQL à Oracle). L'inconvénient est que vous avez besoin d'un peu plus d'efforts pour la configuration JNDI tester la source de données pour les tests unitaires (voir ici).
Et dans le 2ème cas, oui, vous avez à forfait, soit DBCP ou c3p0 plus le pilote JDBC avec vous application. Dans ce cas, il n'est pas si facile de recueillir les statistiques sur toutes les piscines de toutes les applications s'exécutant dans Tomcat. Aussi les migrations à la plus récente du pilote JDBC MySQL 4 à MySQL 5) ne peut être fait pour toutes les applications à la fois. Et les propriétés de la connexion filaire à votre application, même si vous utilisez un
.property
fichier (changer ainsi que les besoins de remontage et de redéploiement du projet). Peut-être que vous n'avez pas besoin de tout ça, comme vous l'avez seule application, un DB et pas de frais généraux de gestion.Plus de sujets sur ce sujet: