TOOL

[Eclipse] 이클립스 JNDI, DBCP 연동 방법(1)

보겸삼촌 2021. 1. 19. 22:56

이번 포스팅에서는 이클립스 환경에서 JNDI와 DBCP, DB 연동하는 방법에 대해 기술

 

# 방법

1. 사용자 요청

2. 요청은 Controller → Model로 전달

3. Model로 넘어간 요청은 JNDI에 등록된 Database 객체(Type:DataSource)를 검색

4. JNDI를 통해 찾은 객체로부터 커넥션을 획득

5. Database 작업이 끝난 뒤 커넥션 반납

# 구성

lib 폴더 – API 관련 jar 파일 설치 /WebContent/WEB-INF/lib

: tomcat-dbcp.jar, ojdbc6.jar

context.xml – DBCP 정보 설정 /Servers/context.xml

web.xml – JNDI 리소스 사용 설정 /WebContent/WEB-INF/lib/web.xml

 

 

# 태그 내용

- auth : 컨테이너를 자원 관리자로 기술

- name : JDBC이름, 변경 가능

- driverClassName : JDBC 드라이버

- type : 웹에서 이 리소스를 사용할 때 DataSource로 리턴됨

- url : jdbc:oracle:thin:@ip주소:포트번호:전역 데이터베이스 이름

- username : 접속계정

- password : 접속할 계정 비밀번호

- loginTimeout : 연결 끊어지는 시간

- maxActive : 최대 연결 가능한 Connection수 (기본 20개)

- maxIdle : Connection pool 유지를 위해 최대 대기 connection 숫자

- maxWait : 사용 가능한 커넥션이 없을 때 커넥션 회수를 기다리는 시간 (1000 = 1초)

- testOnBorrow : db에 test를 해볼 것인지

# context.xml에서 Resource 태그

예시)

<Resource 
	    auth="Container" 
	    driverClassName="oracle.jdbc.OracleDriver" 
	    maxidle="4" 
	    maxtotal="10" 
	    name="jdbc/이름" 
	    password="root" 
	    type="javax.sql.DataSource" 
	    url="jdbc:oracle:thin:@localhost:1521:orcl" 
	    username="lim“
/>

 

 

 

 

그 뒤, web.xml 파일에서 소스를 추가

<resource-ref>
	<description>Connection</description>
	<res-ref-name>jdbc/OracleDB</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
</resource-ref>

 

그 후, jsp에서 접속을 확인

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<%
    //내 db 접속에 사용할 conn 변수
    Connection conn = null;
    //오라클 드라이버 경로 설정
    String driver = "oracle.jdbc.driver.OracleDriver";
    //내 db의 계정 경로 설정
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    //접속 성공,실패 여부 사용시 쓰는 변수
    Boolean connect = false;
    
    //db 접속 코드는 반드시 try~catch문 안에 써줘야함
    try {
        //오라클 드라이버 접속
        Class.forName(driver);
        //내 db 접속
        conn = DriverManager.getConnection(url, "scott", "1234");
        //접속성공시 true 설정
        connect = true;
        //접속 끊기, 끊는 이유 : 항상 db가 연결되어 있으면 접속 오류 및 데이터 충돌이 일어나기 때문 
        conn.close();
    } catch (Exception e) {
        //접속 실패시 false 잡고 예외처리해줌
        connect = false;
        e.printStackTrace();
    }
%>
<%
if(connect==true){%>
    연결되었습니다.
<%}else{ %>
    연결에 실패하였습니다.
<%}%>