jetty 7.x 에서 JNDI Oracle Datasource 설정하기



먼저 Datasource 를 설정하기 위해 당연히 WEB-INF/lib 에 오라클 jdbc 드라이버 jar 파일이 들어가 있어야 된다.




JNDI 설정하기


1. WEB-INF/jetty-web.xml 파일 추가

jetty-web.xml

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
	<New class="org.eclipse.jetty.plus.jndi.Resource">
		<Arg></Arg>
		<Arg>JNDI 이름</Arg>
		<Arg>
			<New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
				<Set name="URL">jdbc:oracle:thin:@아이피:포트:디비이름</Set>
				<Set name="User">아이디</Set>
				<Set name="Password">비밀번호</Set>
			</New>
		</Arg>
	</New>
</Configure>



이것저것 찾아보니 요렇게 설정한 다음에 web.xml 파일에 <resource-ref> 부분을 추가해 주라고 하던데 테스트 해보니 굳이 추가 안해줘도 된다.



2. JSP 에서 쪽바로 되는지 테스트

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%
	Context ctx = new InitialContext();
	DataSource ds = (DataSource)ctx.lookup("JNDI 이름");
	// 이름을 myds 로 설정 했다면 ctx.lookup("myds"); 요렇게
	// 이름을 jdbc/myds 로 설정 했다면 ctx.lookup("jdbc/myds"); 요렇게 lookup 하면된다.
	
	Connection conn = ds.getConnection();
	ResultSet rs = conn.prepareStatement("select sysdate from dual").executeQuery();
	
	while( rs.next() ){
		out.print(rs.getString("sysdate"));
	}
%>




※ JNDI 트리 확인해 보기

package com.tistory.stove99;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;

public class JNDIUtil {
	public final static boolean INCREASE = true;
	public final static boolean DECREASE = false;

	private int level = 0;
	private Context context = null;

	public JNDIUtil() throws NamingException{
		context = new InitialContext();
	}
	
	public void print(){
		print("");
	}

	public void print(String name){
		try{
			print(context.list(name), name);
		}catch (NamingException e){}
	}

	private void print(NamingEnumeration pairs, String parent) throws NamingException{
		while (pairs.hasMoreElements()) {
 			NameClassPair pair = (NameClassPair)pairs.nextElement();
 			
 			print(pair);
 			
 			indent(JNDIUtil.INCREASE);
 			print((parent.length() == 0) ? pair.getName() : parent + "/" + pair.getName());
 			indent(JNDIUtil.DECREASE);
		}
	}

	private void print(NameClassPair entry){
		for (int i = 0; i < level; i++) {
			System.out.print(" ");
		}
		
		System.out.println("-->" + entry);
	}
	
	private void indent(boolean increase){
		if(increase) level += 4;
		else level -= 4;
	}
}


JSP 쪽에서 요 클래스를 땡겨다 실행해 보면 콘솔창에서 JNDI 구조를 확인해 볼 수 있다.

<%@page import="com.tistory.stove99.JNDIUtil"%>
<%
	new JNDIUtil().print();
%>