jetty 7.x 에서 JNDI Oracle Datasource 설정하기
쓸만한지식 2014. 2. 18. 16:35
먼저 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(); %>
'쓸만한지식' 카테고리의 다른 글
| Ubuntu GitLab 설치하기 with apache, mysql (0) | 2014.03.27 |
|---|---|
| Linux 서버에서 java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment 에러날때 (1) | 2014.03.18 |
| java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext; 에러날때 (0) | 2014.02.14 |
| Eclipse juno 툴바에 안드로이드 관련 버튼이 없을때 (2) | 2013.06.20 |
| Windows 8 에서 Android SDK Manager 및 AVD Manager 가 실행이 안될때 (5) | 2013.06.20 |


