본문 바로가기
JSP/JSP & Servlet

커넥션풀 : java:comp/env

by avvin 2019. 5. 23.


http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html


The InitialContext is configured as a web application is initially deployed, and is made available to web application components (for read-only access). All configured entries and resources are placed in the java:comp/env portion of the *JNDI namespace


*JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 

발견(discover)하고 참고(lookup)하기 위한 자바 API


설정된 정보를 이름으로 획득하려면 자바의 네이밍 API를 사용해야 한다. 네이밍 패키지의 클래스를 가지고 이름으로 객체를 획득하는 것을 JNDI(Java Naming and Directory Interface)라고 한다.

- 서비스가 다른 서비스를 탐색할 때 유용하게 사용된다. (분산된 자원)

- 분산된 자원 끼리의 탐색을 원할하게 하기 위한 type casting 임. (DNS 도 이에 속함) 

- JNDI에 설정해 놓았다는것은 Context.xml에 리소스를 생성해놓은 것을 말한다.

cf.) 

이름을 이용해서 원하는 정보 혹은 자원(Connection)을 찾을 수 있는 서비스

javax.naming 서비스

initialContext 클래스



출처: https://devbox.tistory.com/entry/JSP-커넥션-풀-1 [장인개발자를 꿈꾸는 :: 기록하는 공간]


java:comp/env는 웹어플의 구성된 엔트리와 리소스들이 배치되어있는 부분.

그래서 이것에 접근을 하여 web.xml의 <resource-env-ref>에 설정한 jdbc/mysql과 매핑되는 리소스를 가져온다.


톰캣의 리소스 팩토리를 구성하기 위해 <Context>엘리먼트를 추가해야한다. 

(server.xml 코드 추가할때 서버를 구동하여 context에 프로젝트를 등록하고 리소스 추가하는 과정)


[출처] java:comp/env|작성자 GemStone


 

web.xml 파일 설정

Tomcat 공식사이트의 document에 따르면 context 추가 후 web.xml 에 resource-ref를 등록하라고 되어있지만 등록하지 않아도 룩업한다.

출처: https://codediver.tistory.com/40 [코드 다이버]


java : comp / env는 현재 Java EE 구성 요소 (webapp 또는 EJB)의 등록 정보를 찾을 수있는 JNDI 트리의 노드


1
2
3
<Context docBase="MemberMVC" path="/MemberMVC" reloadable="true" source="org.eclipse.jst.jee.server:MemberMVC">
      <Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" loginTimeout="10" maxWait="5000" name="jdbc/pool" password="123456" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:xe" username="system"/>
      </Context>
cs


* initialSize - 연결 풀이 최초 생성될 때 같이 이 숫자만큼 데이터베이스 연결을 미리 생성합니다. 기본값은 0입니다.


* maxActive - 동시에 사용할 수 있는 최대 연결의 갯수 입니다. 음수이면 제한이 없습니다. 기본값은 8 입니다. 이 갯수를 초과하여 요청이 들어오면 최대 maxWait 만큼 대기하고, 그래도 연결을 사용할 수 없을 때는 예외를 발생합니다.


* maxIdle - 풀에서 사용되지 않은 상태로 존재할 수 있는 최대 연결의 숫자 입니다. 음수이면 제한이 없습니다. 기본값은 8 입니다. maxActive가 10 이고, maxIdle이 8일 때 10개의 연결이 모두 사용되고 있는 상태를 가정해 봅니다. 연결이 사용을 마치고 하나씩 반환이 되면, maxIdle 숫자인 8개가 될때까지는 유휴 상태로 풀에 남겨집니다. 아홉번째 부터는 연결이 해제되어 제거 됩니다. 모두 반환된후에 풀에는 유휴상태인 8개의 연결이 남아 있습니다.


* minIdle - 풀에서 사용되지 않은 상태로 존재할 수 있는 최소 연결의 숫자 입니다. 기본 값은 0 입니다. 풀을 관리하는 쓰레드는 풀내의 유휴 연결의 최소 갯수를 이 값으로 유지합니다. 주로 발생하는 상황은 오류가 발생한 연결이나, 사용되지 않고 오래된 연결은 풀에서 제거됩니다. 이 경우 풀내의 연결의 갯수가 minIdle 이하로 떨어지면 새로 생성해서 minIdle 갯수에 맞추게 됩니다.


* maxWait - 풀에 사용 가능할 연결이 없을때 대기하는 최대 시간을 밀리초 단위로 나타냅니다. 이 대기시간후에도 사용 가능한 연결이 없으면 예외를 발생합니다. -1은 무한대기를 나타냅니다. 기본값은 -1입니다.



출처: https://codediver.tistory.com/40 [코드 다이버]





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package model;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class MemberDAO {
    
    Connection con;
    PreparedStatement pstmt;
    ResultSet rs;
    
    public void getCon() {
        
        try {
            Context initctx = new InitialContext();
            Context envctx = (Context)initctx.lookup("java.comp:env");
            DataSource ds = envctx.lookup("jdbc/pool");
            
            //InitialContext는 프로젝트에서 서버를 사용할 수 있도록 Context를 구성
            //web.xml에서 앤트리나 리소스 정보가 위치해있는 곳이 "java:comp/env"
            //Context의 lookup(참고)메서드로 "java:comp/env" 정보 읽어들임
            //읽어들인 정보를 envctx에 담고 서버를 사용하기위해 설정했던 이름인 jdbc/pool를 참고하여
//(jdbc/pool과 매핑되는 리소스를 가져옴)
            //DataSource객체에 담는다.
            //(생성된 Context객체에서 리소스 위치한 환경 참고, 커넥션풀 리소스의 이름 참고하여 데이터소스 객체에 담음 ) 
            //DataSource객체에서 getConnection하여 커넥션 객체에 담는다.
            
            //정리 : Context 객체로 리소스 위치와 리소스 이름을 참고하여 미리 설정해둔 타입(데이터소스)으로 커넥션 객체를 얻음
            
        }catch(Exception e) {
            
            e.printStackTrace();
        }
    }
 
}
 

cs



정리 : 

Context 객체로 리소스 위치와 리소스 이름을 참고하여 미리 설정해둔 타입(데이터소스)으로 커넥션 객체를 얻음

'JSP > JSP & Servlet ' 카테고리의 다른 글

MVC패턴 게시판  (0) 2019.05.23
ORA-00001: unique constraint (SYSTEM.MEMBER_PK) violated  (0) 2019.05.23
MVC 파라미터 - 회원가입  (0) 2019.05.22
서블릿 활용 2 - 파라미터 사용  (0) 2019.05.22
서블릿 활용 1  (0) 2019.05.22