2010-07-24 2 views
3

안녕하십니까, Enterprise JDBC Classes를 사용하여 JNDI로 DataSource를 설정해야하는 webapp를 개발 중입니다. Netbeans 6.9 번들로 제공되는 tomcat (6.0.26 앱) 서버와 MySQL 5 .xx. 문제는 정말 내 jsp 페이지에 표시되는 관계에서 데이터베이스 값을 볼 수 있다는 것입니다. 반면 바람둥이 초기화 중에는 다음과 같은 내용이 표시됩니다.Tomcat 6.0.26의 JDBC, JNDI 문제점

. .

SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to javax.naming.Context 
     at org.apache.jsp.Hello_jsp._jspService(Hello_jsp.java:141) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) 
     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) 
     at java.lang.Thread.run(Thread.java:619) 
Jul 25, 2010 1:28:25 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextDestroyed() 
Jul 25, 2010 1:28:25 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextDestroyed() 
Jul 25, 2010 1:28:32 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextInitialized() 
Jul 25, 2010 1:28:32 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextInitialized() 
Jul 25, 2010 1:28:40 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
javax.naming.NameNotFoundException: Name nexusirm is not bound in this Context 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:770) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:140) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:781) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:140) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:781) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:140) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:781) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:153) 
     at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152) 
     at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at org.apache.jsp.Hello_jsp._jspService(Hello_jsp.java:141) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) 
     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) 
     at java.lang.Thread.run(Thread.java:619) 
Jul 25, 2010 1:29:50 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet jsp threw exception 
javax.naming.NameNotFoundException: Name jdbc is not bound in this Context 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:770) 
     at org.apache.naming.NamingContext.lookup(NamingContext.java:153) 
     at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152) 
     at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at org.apache.jsp.Hello_jsp._jspService(Hello_jsp.java:143) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
     at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) 
     at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
     at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) 
     at java.lang.Thread.run(Thread.java:619) 
Jul 25, 2010 1:30:10 AM org.apache.catalina.core.ApplicationContext log 

. .

나는 내 /WEB-INF/web.xml

<resource-ref> 
     <res-ref-name>jdbc/NexusIRM</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
     <res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

내부에 다음과 같은 한 그리고 내 /META-INF/context.xml에 다음

<Resource name="jdbc/NexusIRM" 
      auth="Container" 
      type="javax.sql.DataSource" 
      driverClassName="com.mysql.jdbc.Driver" 
      url="jdbc:mysql://localhost:3306/nexusirm" 
      username="root" 
      password="" 
      maxActive="20" 
      maxIdle="30" 
      maxWait="-1" 

/> 

내 응용 프로그램 코드처럼 보이는 :

   <% 
try{ 

Context initCtx = new InitialContext(); 

DataSource ds = (DataSource) 
    initCtx.lookup("java:comp/env/jdbc/NexusIRM"); 

Connection conn=ds.getConnection(); 

Statement stmt=conn.createStatement(); 
ResultSet rs=stmt.executeQuery("SELECT * FROM irm_gtresult"); 

if(rs.next()) 
    { 
    for(int i=1;i<9;i++){ 
out.write(rs.getString(i)); 
} 
} 
conn.close(); 
}catch(SQLException e) 
{out.write(e.getMessage()); 
e.printStackTrace();} 

%> 

나는이 예외가 덮은 동안 발생되는 이유는 그냥 궁금 법령이 완벽하게 실행되고 있습니다!

답변

1

이 시도 ...

Connection conn; 
try 
{ 
    // Obtain our environment naming context 
    Context initCtx = new InitialContext(); 
    Context envCtx = (Context) initCtx.lookup("java:comp/env"); 

    // Look up our data source 
    DataSource ds = (DataSource) 
     envCtx.lookup("jdbc/NexusIRM"); 

    // Allocate and use a connection from the pool 
    Connection conn = ds.getConnection(); 
    ... use this connection to access the database ... 
} 
finally 
{ 
    if(conn != null) 
     conn.close(); 
} 

참고 : 당신이 최종적에 가까운를 넣어 확인!

+0

응답 해 주셔서 감사하지만 이미 시도했습니다. 아무런 차이가 없습니다. "참고 : 마침내 가까이에 넣으십시오 !!!" 지금 당장은 내 코드를 순진하게 테스트하고 있지만 앞으로는이 단계에서 "좋은"방법을 고수하려고 노력할 것입니다. –