2013-05-27 3 views
0

내 질문에 다음과 같은 경우 발생, 연결 풀을 사용하여 데이터베이스에 액세스 할 때마다 항상 서블릿에서 Init 메소드를 호출하여 연결을 검색해야합니다. 문제가있어, 나는이 페이지에서 몇 가지 질문을 검토하고있다.바람둥이에 연결 풀의 이상적인 구조

내 생각은 내 첫 번째 서블릿 init을 호출하고 Connection이 init 메소드를 호출 할 필요없이 내 데이터베이스를 변경하기 위해 세션을 보내지 만 나의 질문은 어디서 연결을 닫아야 하는가?

이 문제를 해결하기 위해 연결 풀의 이상적인 구조를 찾으려고했습니다.

내 init 메소드는 다음

public void init(ServletConfig config) throws ServletException { 
    Context ctx; 
    try { 
     ctx = new InitialContext(); 
     sourceDb = (DataSource) ctx.lookup("java:comp/env/jdbc/Practica5"); 

    } catch (NamingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

포함 그리고 난에 세션으로 이동 : 난 느낌 ... 세션에서 데이터베이스 연결이 어느 순간 귀찮은 것 공유

synchronized (sourceDb) { 
    con = sourceDb.getConnection(); 
} 
if (con == null) { 
    throw new ServletException("Problemas con la conexion"); 
} 
request.getSession().setAttribute("con",con); 

답변

0

실행 중 직렬화 문제가 발생할 수 있습니다.

세션 중에 단일 연결 개체를 사용하는 것이면 다음과 같습니다. 라 자세 히 우리가 연결 개체가

+0

그런 다음해야 할 데이터 소스를 통해 서블릿 사이에 유지되는 것을 보장하는이 경우 ...

를 풀에 연결 객체를 반환하고 다른 서블릿에서 다시 얻을 수 각각의 서블릿에 init 메소드를 두었습니까?, 그들을 구분하는 방법이 있을까요? –

+0

그 일을 할 필요가 없습니다 ... 하나의 init() 메소드에서 초기화하고 그 클래스를 먼저로드하도록하십시오 ... 작동합니다 ... –

+0

그러면 서블릿을 초기화 할 때 내 첫 번째로 다음 connecion을 사용할 수 있습니다 서블릿? –

관련 문제