Tomcat DS

jinkyung·2021년 1월 21일
0

JSP

목록 보기
15/20

우리가 직접 data source 라이브러리를 가져와서 만드는 것이 아니라
톰캣에게 맡길 수 있다.
우리가 객체를 만들어주지 않아도 알아서 객체가 할당되고 해지되는 것을 처리한다.

servers/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
--><!-- The contents of this file will be loaded for each web application --><Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    
 <!--    톰캣, 데이터 소스좀 너가 관리해줘  -->
   <!--	JNDI
  	name : 이 Resource를 찾을 때 사용할 이름 
 	auth : 서버 컨테이너가 관리해라 
 	type : 사용할 자원(객체) 클래스
 	maxActive : 커넥션 최대 개수(기본값 : 8)
 	maxIdle : 미 사용시 유지되는 개수(기본값 : 8)
 	maxWait : 커넥션 요청시 기다리는 최대 밀리초, 넘어가면 예외 발생 
 				-1을 주면 커넥션 반납때까지 기다린다(기본값)
 	closeMethod : 톰캣 서버가 종료될 때 호출되는 메서드	
	 				자원 해제
	 				어플리케이션에서 직접 close하지 않아도 됨 (톰캣이 알아서 함)
	 				
-->
    <Resource name="jdbc/studydb"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="10"
    maxIdle="3"
    maxWait="10000"
    username="study"
    password="study"
    driverClassName="com.mysql.cj.jdbc.Driver"
    url="jdbc:mysql://localhost/studydb?serverTimezone=UTC"
    closeMethod="close">
    </Resource>
    
</Context>

web.xml
코드 추가

  <!-- tomcat 서버의 DataSource를 사용하기 위한 설정  -->
  <!-- DataSource 설정은 Servers/context.xml에 있음   -->
  <resource-ref>
  	<res-ref-name>jdbc/studydb</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

ContextLoaderListener

package spms.listeners;

import java.sql.Connection;
import java.sql.DriverManager;

import javax.naming.InitialContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

import spms.dao.MemberDao;
import spms.util.DBConnectionPool;

/*
JNDI
: WAS(tomcat)의 resource(할당했던 객체)에 대한 고유 이름 정의
어플리케이션에서 서버의 리소스를 접근할 때 사용하는 명령 규칙 

 * 1) java:comp/env				- 응용 프로그램 환경 항목
 * 2) java:comp/env/jdbc		- JDBC 데이터 소스
 * 3) java:comp/ejb				- EJB 컴포넌트
 * 4) java:comp/UserTransaction - UserTransaction 객체
 * 5) java:comp/env/mail		- JavaMail 연결 객체
 * 6) java:comp/env/url			- URL 정보
 * 7) java:comp/env/jms			- JMS 연결 객체
 
*/

public class ContextLoaderListener implements ServletContextListener {


	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		try {
			System.out.println("contextDestroyed");
			// 우리가 DataSource 객체를 해제하지 않아도 tomcat 서버가 알아서 해제한다.
			
		}catch(Exception e) {
			e.printStackTrace();
		}		

	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		try {
			System.out.println("contextInitialized");
			ServletContext sc = sce.getServletContext();
			
			
			//tomcat 서버가 자동으로 생성하고 해제하는 DataSource 객체를 찾아 가져온다.
			InitialContext initialContext = new InitialContext();
			DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/studydb");
			
			MemberDao memberDao = new MemberDao();
			memberDao.setDataSource(ds);	
			
			// conn객체 대신 memberDao객체를 공유
			sc.setAttribute("memberDao", memberDao);
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}

0개의 댓글