¿Tiene más sentido tener un grupo de conexiones en el nivel JNDI o en el nivel de aplicación web? Por ejemplo, podría crear al javax.sql.DataSource simplemente así:Grupo de conexiones o fuente de datos? ¿Qué debería poner en JNDI?
<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>
y luego configurar la piscina en la primavera de esta manera:
<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>
O, podría configurar la piscina directamente en sí mismo JNDI:
<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" />
Dejando esta primavera:
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
En ambos casos, el bean spring de myDataSource sería una fuente de datos combinada de conexión c3p0, pero ¿cuál es mejor? Estoy pensando que tener el grupo en JNDI tiene más sentido, pero la desventaja de eso es que debe empujar su biblioteca c3p0 al nivel de contenedor de servlet, lo que podría causar conflictos con los servlets existentes si actualmente usan una versión diferente. Sin embargo, ponerlo en JNDI significa que sus aplicaciones no tienen que preocuparse por la agrupación en absoluto. ¿Qué piensan ustedes?
Hacerlo como quieras, si puedes. Lo mejor es tenerlo todo en un lugar seguro, si es posible. – EJP