데이터베이스로의 요청이 필요할 때 연결을 재사용 할 수 있도록 관리되는 데이터베이스 연결 캐시
Connection 객체를 미리 생성해 Pool 에 넣어놓고 요청이 있을 때 이미 생성된 Connection 객체를 가져다 사용하고 사용이 완료된 객체는 연결을 해결하는 것이 아니라 풀에 반납하여 필요할 때 재사용할 수 있도록 함
<JNDI (Java Naming and Directory Interface)>
- JSP 프로그램시 WAS가 제공하는 서비스
- 자바 소프트웨어에서 객체나 데이터의 전체 경로를 몰라도 이름만으로 찾아 쓸 수 있는 디렉터리 서비스
WAS의 JNDI를 통한 커넥션 풀 사용 절차
1. WAS(톰캣) 시작 시 sever.xml 과 context.xml에 설정한 대로 커넥션 풀 생성
2. JSP 코드에서 JNDI 서버로부터 데이터 소스 객체 얻어옴
3. 데이터 소스로 부터 커넥션 객체 가져옴
4. DB작업 수행
5. 작업 종료 후 커넥션 객체 반환
<xml 설정>
1. server.xml 수정
톰캣에서 필요한 정보를 정의해둔 파일
파일 경로
C:\work\jspworkspace\apache-tomcat-9.0.69\conf
내용 추가
xe -> orcl 로 수정
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
type="javax.sql.DataSource"
initialSize="0"
minIdle="5"
maxTotal="20"
maxIdle="20"
maxWaitMillis="5000"
url="jdbc:oracle:thin:@localhost:1521:orcl"
name="dbcp_myoracle"
username="musthave"
password="1234" />
</GlobalNamingResources>
2. context.xml 수정
최하단 </context> 바로 위에
<ResourceLink global="dbcp_myoracle" name="dbcp_myoracle"
type="javax.sql.DataSource"/>
추가
server.xml 과 동일한name속성을 넣어서 server.xml에서 불러올 수 있게 설정
톰캣서버 삭제후 재연결
포트번호 다시 8081로 수정
<데이터소스 객체>
기본생성자)
1. 커넥션 풀(DataSource) 열기
public DBConnPool{
try{
Context initCtx = new InitialContext();
Context ctx = (Context)initCtx.lookup("java:/comp/env")'
DataSource source = (DataSource)ctx.lookup("dbcp_myoracle");
- Context : JNDI 에서 이름 과 실제 객체를 연결해주는 개념
- InitialContext 객체 생성 : 네이밍 서비스를 이용하기 위한 시작점. lookup()메서드로 원하는 객체를 찾을 수 있다
- "java:comp/env" : 현재 웹 어플리케이션의 루트 디렉토리
- "dbcp_myoracle" : 데이터 소스(커넥션 풀), context.xml파일에 추가한 <ResourceLink>의 name 속성
2. 연결
con = source.getConnecion();
3. 연결해제(반납)
con.close();