2011-10-07 4 views
12

JNDI 레벨 또는 webapp 레벨에서 연결 풀을 가져야하는 것이 더 합리적입니까?연결 풀 또는 데이터 소스? 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> 

을 다음 thusly 히 봄에 풀을 구성 : 예를 들어, 단순히는 javax.sql.DataSource 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> 

을 또는 내가 직접 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" /> 

떠나 올 봄 :

<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" /> 

두 경우 모두 myDataSource 스프링 빈은 c3p0 연결 풀링 된 데이터 소스이지만 어느 것이 더 낫습니까? 나는 JNDI에서 풀을 갖는 것이 가장 합리적이라고 생각하지만, 그 단점은 c3p0 라이브러리를 서블릿 컨테이너 레벨로 밀어 넣어 현재 다른 서블릿 버전을 사용하고 있다면 기존 서블릿과 충돌을 일으킬 수 있다는 것이다. 그러나 JNDI에두면 응용 프로그램에서 풀링에 대해 전혀 염려하지 않아도됩니다. 너 모두 어떻게 생각하니?

+0

을 수행 (각 응용 프로그램이 자신의 풀을 사용하기 시작하면 그 일이 무엇인가) 당신이 원한다면, 당신이 할 수 있다면. 가능한 경우 한 곳에서 모두 확인하는 것이 가장 좋습니다. – EJP

답변

23

당신은 이미 :) 풀 한, JNDI로부터 얻은 데이터 소스를 풀 필요가 없습니다

컨테이너 매니저 풀 v.s.을 가진 유일한 차이점 응용 프로그램 풀은 첫 번째 경우에 표준 인터페이스 (예 : JBoss 콘솔)를 사용하여 풀의 작업 부하를 모니터링 할 수있는 기능을 제공합니다. 그런 다음 응용 프로그램 서버의 관리자는 필요한 경우 풀 크기를 늘리는 결정을 관리합니다. 또한 애플리케이션을 다른 DB 서버 (예 : MySQL에서 Oracle 로의 마이그레이션 계획)로 전환 할 수 있습니다. 단점은 단위 테스트를 위해 JNDI 테스트 데이터 소스를 설정하는 데 약간의 노력이 필요하다는 것입니다 (here 참조).

그리고 두 번째 경우에는 DBCP 또는 c3p0과 JDBC 드라이버를 함께 패키징해야합니다. 이 경우 Tomcat에서 실행중인 모든 응용 프로그램에 대한 모든 풀에 대한 통계를 수집하는 것은 쉽지 않습니다. 또한 최신 JDBC 드라이버 (MySQL 4에서 MySQL 5로) 로의 마이그레이션은 모든 응용 프로그램에서 동시에 수행 할 수 없습니다. .property 파일을 사용하더라도 연결 속성은 응용 프로그램에 연결되므로 (프로젝트를 재구성하거나 다시 배포해야하는 경우) 아마도 애플리케이션, DB 및 관리 오버 헤드가 없기 때문에 모든 것을 필요로하지 않을 수도 있습니다. 이 주제에

더 많은 토픽 :

+5

또한 고려해야 할 Tomcat JDBC Pool (http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html)도 있습니다. – rit