2012-02-10 4 views
0

현재 연결 풀링을 처리하기 위해 별도의 DBConnectionManager 클래스를 사용하고 있지만 서블릿이 doGet()을 호출 할 때마다 동일한 풀을 호출하지 않았기 때문에 이것이 잘못된 방법이라는 것을 깨달았습니다. 수행됩니다.서블릿 용 JDBC 연결 풀링

  1. 누가 위와 같은 현상이 발생했는지 설명 할 수 있습니까?
  2. JNDI는 적절한 연결 풀링을 위해 Tomcat이있는 java 서블릿으로 이동하는 방법입니까?

2 개의 기사에 대한 링크가 있는데, 이것이 서블릿과의 연결 풀링을 구현하는 올바른 방법입니까?

http://onjava.com/onjava/2006/04/19/database-connection-pooling-with-tomcat.html

http://www.javaranch.com/journal/200601/JDBCConnectionPooling.html

그래서 같은 맥락에서 DB 관리자 개체를 저장 할 수 있나요 :

mtdb = (MTDbManager) context.getAttribute("MTDBMANAGER"); 
if (mtdb == null) { 
      System.out 
        .println("MTDbManager is null, reinitialize MTDbManager");    

      initMTDB(config); 
      context.setAttribute("MTDBMANAGER", mtdb); 
     } 

을 그리고 나는 mtdb.getInstance()의 getConnection() 호출합니다. 항상이 객체를 참조합니다.

감사합니다.

답변

4

일반적으로 응용 프로그램 서버에 연결 풀링을 남기는 것이 좋습니다. JNDI를 사용하여 데이터 소스를 찾은 다음 응용 프로그램 서버가 나머지를 처리하게하십시오. 따라서 응용 프로그램을 이식 가능하게 만들고 (다른 응용 프로그램 서버는 다른 풀링 메커니즘과 설정을 갖게 됨) 가장 효율적입니다.

+0

그냥 다른 질문을, JNDI 적절한 연결 풀링을합니까? 최대 연결 수를 5로 설정하면 6 번째 요청이 들어오고 JNDI는 다시 연결을 시도하기 전에 대기 시간 초과를 수행합니다. – Maurice

+2

JNDI 자체는 풀링을 수행하지 않으므로, ['javax.sql.DataSource'] (http://docs.oracle.com/javase/6/docs/api/javax/sql/DataSource.html) 개체를 찾습니다. 연결이 필요할 때 호출 할'getConnection()'메소드를 제공한다. 사용 가능한 연결이 없으면'getConnection() '에 대한 호출이 차단됩니다. N.B. 연결이 필요할 때마다 JNDI 데이터 소스를 조회 할 필요가 없으므로 데이터 소스에 대한 참조를 캐시하는 것이 일반적입니다. 희망이 도움이됩니다. – beny23