Có ý nghĩa hơn khi phải kết nối nhóm ở cấp JNDI hoặc ở cấp độ webapp? Ví dụ, tôi có thể tạo ra tại đơn giản javax.sql.DataSource thusly:Hồ bơi kết nối hoặc nguồn dữ liệu? Tôi nên đưa vào 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>
và sau đó cấu hình các hồ bơi trong mùa xuân thusly:
<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>
Hoặc, tôi có thể cấu hình các hồ bơi trực tiếp trong JNDI bản thân:
<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" />
Rời mùa xuân này:
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
Trong cả hai trường hợp, bean mùa xuân myDataSource sẽ là nguồn dữ liệu kết nối c3p0, nhưng cái nào tốt hơn? Tôi nghĩ rằng có hồ bơi trong JNDI làm cho ý nghĩa nhất, nhưng nhược điểm là bạn phải đẩy lib c3p0 của bạn để cấp container servlet mà có thể gây ra xung đột với servlet hiện tại nếu họ hiện đang sử dụng một phiên bản khác nhau. Tuy nhiên, đặt nó trong JNDI có nghĩa là các ứng dụng của bạn không phải lo lắng về việc gộp chung. Bạn nghĩ sao?
Do nó theo cách bạn thích, nếu bạn có thể. Tốt nhất để có tất cả ở một nơi chắc chắn, nếu có thể. – EJP