Servlet5

Server에서 DB 정보 설정하기

context.xml


META-INF 하위에 Server에서 사용하는 DB의 정보를 담고 있는 파일이다.

DB system 다운을 방지하기 위해서는 Connection 개수를 조절해야 한다.

따라서 다음과 같은 방식으로 Connection 개수를 조절한다.

  1. 처음부터 Connection 객체 생성해서 대기상태로 유지
  2. client가 최대 개수까지 접속자들에 한해서 생성후 접속 해제하면 Connection 삭제가 아니라 Connection들만 저장된 별도의 메모리에 반환 새로운 Client는 재사용 개념
  3. Web Application Server와 DB Server 구분 단, Connection 개수 제한은 WAS의 설정 파일로 관리

그래서 나온 파일이 context.xml이다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<!-- oracle DB용어 -->
	<Resource name="jdbc/taye" auth="Container"
		type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
		url="jdbc:oracle:thin:@127.0.0.1:1521:xe" username=""
		password="" maxTotal="20" maxIdle="10" maxWaitMillis="-1" />
</Context>

DB에 대해 최대 Connection수, 최대 대기 Connection수, 최대 대기시간을 조절할 수 있다.


web.xml


WEB-INF/web.xml 하단에서 web project 자체의 설정을 담당하는 파일로 Deployment Description[DD]라고 명칭이 부여된다.

설정 정보들

  1. url에 file명 기술 없이도 자동 실행되는 intro 파일명 명시
index.html
  1. Connection Pool
    1. 개념은 모든 server에 동일하게 반영
    2. 단, 서버마다 설정 방식이 다름(벤더별 상이함)
    3. 적용 방식
      1. DB + 접속자 수 제어의 설정 정보 META-INF/context.xml
      2. 프로젝트 web.xml
      3. 자바소스에서 JNDI 라는 이름(스펙)으로 자원 활용하는 스펙 모든 소스에 통일한 표준화된 코드
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>step05_CP</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <resource-ref>
    <description>Oracle Datasource example</description>
    <res-ref-name>jdbc/taye</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>


참고


여기서 가장 중요한 것은 DB의 이름을 맞춰줘야 한다는 것이다.

<Resource name=”jdbc/taye”

jdbc/taye
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
			
//jdbc/taye라는 이름으로 매핑된 자원 활용하겠다는 의미
ds = (DataSource)envContext.lookup("jdbc/taye");

위처럼 이름을 동일하게 지정해줘야 제대로 동작을 한다.

Discussion and feedback