3. Tomcat 서버의 DataSource 사용하기 - wonjune/DatasourceServlet GitHub Wiki

###1. 톰캣서버 설정

  • context.xml 파일에 아래부분을 추가한다.
    <Resource name="jdbc/studydb" auth="Container" type="javax.sql.DataSource"
              maxActive="10" maxIdle="3" maxWait="10000" username="study"
              password="study" driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/studydb" closeMethod="close" />

###2. Resource 태그의 속성들

  • name : JNDI 이름. Context의 lookup()을 사용하여 자원을 찾을 때 사용. java:comp/env 디렉토리에서 찾을수 있음
  • auth : 자원관리의 주체. Application 또는 Container가 가능
  • type : 자원의 타입. 패키지 이름을 포함한 클래스 이름(fully-qualified java class name)
  • driverClassName : JDBC 드라이버 클래스의 이름. 패키지 이름 포함
  • url : DB 커넥션 URL
  • username : DB 사용자 이름
  • password : DB 사용자 암호
  • maxActive : DataSource로 부터 꺼낼 수 있는 커넥션의 최대 개수. 기본값은 8개
  • maxIdle : DataSource에서 유지될 수 있는 사용하지 않는 커넥션의 최대 개수. 최대 개수 초과시 반납되는 커넥션은 닫음. 기본값은 8개
  • maxWait : 발급한 커넥션 갯수가 최대값에 도달한 상태에서 다시 커넥션을 요청할 경우 커넥션을 준비하기 위해 기다리는 최대 밀리초. 최대 밀리초가 넘었는데도 반납되는 커넥션이 없으면 예외를 던진다. 기본값은 -1로서 커넥션 반납시까지 무제한 대기
  • closeMethod : 톰캣 서버가 종료될 때, 자원 해제를 위해서 호출하는 메서드. 매개변수가 없어야 함.

###3. 웹어플리케이션 설정

  • web.xml 파일에 아래와 부분을 추가한다.
 <resource-ref>
  	<res-ref-name>jdbc/studydb</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>
  • <res-ref-name>은 context.xml 에 선언한 자원의 이름(JNDI 이름)
  • <res-type>은 톰캣 서버에서 리턴하는 자원의 타입. context.xml 에 선언한 자원의 타입과 동일
  • <res-auth>은 톰캣 서버가 리턴하는 자원의 관리 주체

####별첨. JNDI(Java Naming and Directory Interface API)

  • 디렉토리 서비스에 접근하는데 필요한 API
  • 어플리케이션은 JNDI를 사용하여 서버의 자원(다른 시스템과의 연결을 제공하는 객체)을 찾을 수 있다
  • 자원을 서버에 등록할 때 고유한 JNDI 이름을 부여. 보통 사용자에게 친숙한 디렉토리 경로 형태이며, 예를 들어 JDBC 자원에 대한 JNDI 이름은 jdbc/mydb 형식으로 지어짐
  • Java EE 어플리케이션 서버에서 자원을 찾을 때 기본 JNDI
    • java:comp/env : 응용 프로그램 환경 항목
    • java:comp/env/jdbc : JDBC 소스
    • java:comp/ejb : ejb 콤포넌트
    • java:comp/UserTransaction : UserTransaction 객체
    • java:comp/env/mail : JavaMail 연결객체
    • java:comp/env/url : URL 정보
    • java:comp/env/jms : JMS 연결 객체

###3. DAO 설정

  • DAO 에서 DataSource 가져오는 부분을 아래와 같이 수정한다.
ServletContext sc = event.getServletContext();
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/studydb");

MemberDao dao = new MemberDao();
dao.setDataSource(ds);
  • InitialContext 의 lookup() 메서드를 이용하면 JNDI 이름으로 등록된 서버 자원을 찾을 수 있다
  • context.xml 파일에서 closeMethod="close" 속성을 지정해 놓았으므로 별도로 커넥션을 닫는 close()메서드는 호출할 필요가 없다.
⚠️ **GitHub.com Fallback** ⚠️