2014-01-20 2 views
0

java servlet/jsp를 사용하여 빌드하고 있습니다. 데이터베이스 연결을 처리하는 클래스가 있지만 각 요청마다 각 인스턴스를 만들거나 모든 요청에 ​​대해 하나의 인스턴스를 만들어야하는지 알 수 없습니다.각 요청마다 새 인스턴스를 작성해야합니까?

시나리오 1 : 예를 들어 다음

class HandleDB { 
    public static HandleDB getInstance(); // singleton pattern 
    public void initConnection(); 
    public void releaseConnection(); 
} 

, 2

//at the beginning of a request: 
HandleDB.getInstance().initConnection(); 
// handle tasks 
// at the end of request 
HandleDB.getInstance().releaseConnection(); 

시나리오 :

class HandleDB { 
    public void initConnection(); 
    public void releaseConnection(); 
} 

//at the beginning of a request: 
HandleDB db = new HandleDB(); 
db.initConnection(); 
// handle tasks 
// at the end of request 
db.releaseConnection(); 
db = null; 
프라 사용해야 시나리오

ctice?

답변

1

시나리오 2로 이동하십시오. 시나리오 1의 문제는 모든인스턴스가 공유되며 스레드 안전 문제가 발생할 수 있다는 것입니다. 요청은 병렬로 실행될 수 있습니다. 표준은 스레드/요청 당 하나의 연결을 갖는 것입니다.

대부분의 웹 응용 프로그램은 각 요청에 대해 새 연결을 만들 필요가 없도록 C3P0 또는 Apache DBCP와 같은 연결 풀을 사용합니다. 요청 시작시 풀에서 연결을 가져 와서 요청이 끝나면 풀에 연결하므로 다른 요청은 나중에 다시 사용할 수 있습니다.

+0

예, 우리는 연결 풀에 Apache DBCP를 사용하며 귀하의 제안을 기다리고 있습니다. – ipkiss

0

사용 청취자 LINK

public class AppServletContextListener implements ServletContextListener{ 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
        /// Destroy DB Connection 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
        /// Create DB Connection 
    } 
} 
0

당신은 모든 당신이 해제해야합니다 작업 또는 무료로 DB 연결

을 마친 후에는 첫 번째 작업의 시작 부분에서 데이터베이스 연결을 만들어야합니다 작업의 배치가있는 경우 귀하의 시나리오 1이 적용 가능합니다.

관련 문제