데이터베이스와 연결된 커넥션
을 미리 만들어서
저장
해두고 있다가저장된 공간(pool)
에서 가져다 쓰고
반환
하는 기법.커넥션을 미리 만들어 두고 사용
하기 때문에사용자가 요청
할 경우 드라이버를 로드
하고, 커넥션 객체를 생성
해 연결하는 비효율적
인 작업을 하지 않아도 된다
.데이터베이스
부하를 줄일 수 있고
, 효율적으로 관리
할 수 있다.DBCP
에 이름
을 붙여 관리
할 수 있는 인터페이스
데이터 및 객체를 발견
하고참고
하기 위한 자바 API
DB connetion
을 위한 DB 연결 객체를 자바코드로 만들어왔는데,WAS 단
인 tomcat으로 옮기는 것
이다.naming
을 통해 이 connetion pool에
접근
하여 커넥션
을 넘겨받아야한다.
DB Pool
을 미리 Naming
시켜두는 방법 (DB 연결 방법 중 하나)WAS 의 데이터베이스 정보
에 JNDI를 설정
해 놓으면, 웹 어플리케이션
은 JNDI만 호출
하면 간단해진다.개발을 한 사람과 실제 서비스를 운영하는 사람은 다른 경우가 많기 때문에, 소스 레벨에서 설정되어 있는 것보다
WAS 에서 설정되어 있는 것을 선호
한다.
(자바소스코드로 되어있다면, 엔지니어가 배포 시 마다,
소스코드를 수정해야하기 때문 )
자바 서버 폴더에서, 프로젝트에 맞는 폴더 안에 있는 context.xml 파일에서 생성!
🗝️ WAS에 DB Connection 생성하기!
- context.xml
<Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource" driverClassName = "oracle.jdbc.driver.OracleDriver" url= "jdbc:oracle:thin:@localhost:1521:xe" username= "jsp" // DB ID password="jsp" // DB pw maxActive="20" // 동시 접속 가능한 Connection 수 maxIdle= "20" // 사용한 Connction을 사용 후 Pool에 반납 시 // 최대로 유지할 개수 -> maxActive와 동일! maxWait= "-1" // Connection pool에 연결가능한 Connection이 // 없을 때, 유저를 얼마나 기다리게 할 것인지 />
<resource-ref> <description>Connection</description> <res-ref-name>jdbc/oracle</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
🗝️ 라이브러리 추가하기
tomcat- dbcp 라이브러리 경로
<%@page import="javax.naming.InitialContext"%> <%@page import="java.util.Date"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.Connection"%> <%@page import="javax.sql.DataSource"%> <%@page import="javax.naming.directory.InitialDirContext"%> <%@page import="javax.naming.Context"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //dbcp를 이용하는 방법 Context context = new InitialContext(null); DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle"); Connection conn = dataSource.getConnection(); %> <%=conn %> </body> </html>
connection 정보 출력되면 연결 성공!
DB select문으로 날짜 출력해보기!
<%@page import="javax.naming.spi.DirStateFactory.Result"%> <%@page import="javax.naming.InitialContext"%> <%@page import="java.util.Date"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.Connection"%> <%@page import="javax.sql.DataSource"%> <%@page import="javax.naming.directory.InitialDirContext"%> <%@page import="javax.naming.Context"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //dbcp를 이용하는 방법 Context context = new InitialContext(null); DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle"); Connection conn = dataSource.getConnection(); String sql = "select sysdate from dual"; PreparedStatement pstm = conn.prepareStatement(sql); ResultSet rs = pstm.executeQuery(); Date date = null; if(rs.next()){ date = rs.getDate(1); } %> <%-- <%=conn %> --%> <%=date %> </body> </html>