Ha senso avere un pool di connessioni a livello JNDI o a livello di webapp? Per esempio, ho potuto creare al semplice javax.sql.DataSource così:Pool di connessioni o origine dati? Quale dovrei inserire in 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>
e quindi configurare la piscina in primavera così:
<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>
Oppure, ho potuto configurare la piscina direttamente in JNDI per sé:
<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" />
Lasciando questa primavera:
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
In entrambi i casi, il bean spring myDataSource sarebbe un'origine dati pool di connessioni c3p0, ma quale è il migliore? Penso che avere il pool in JNDI abbia più senso, ma il lato negativo è che devi spingere la tua lib di c3p0 al livello del servlet container che potrebbe causare conflitti con i servlet esistenti se attualmente usano una versione diversa. Tuttavia, inserendolo in JNDI significa che le applicazioni non devono preoccuparsi del pooling. Cosa pensate?
Do it il modo in cui ti piace, se puoi. Meglio avere tutto in un posto sicuramente, se possibile. – EJP