2010-07-24 25 views
3

Salutations, Je suis en train de développer une application Web qui nécessite la configuration d'une DataSource avec JNDI en utilisant Enterprise JDBC Classes.J'utilise le serveur NetBeans 6.9 Tomcat (6.0.26 app) avec mysql 5 Le problème est vraiment que je peux toujours voir les valeurs de la base de données d'une relation affichée dans ma page jsp alors que pendant l'initialisation tomcat il est écrit quelque chose comme ceci:JDBC, JNDI Problème avec tomcat 6.0.26

. .

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 

. .

Je les éléments suivants dans mon /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> 

Et ce qui suit dans mon /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" 

/> 

Mon code d'application ressemble :

   <% 
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();} 

%> 

Je suis juste curieux de savoir pourquoi ces exceptions sont lancées alors que la Applica la mise en œuvre est parfaitement exécutée!

Répondre

1

Try this ...

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(); 
} 

REMARQUE: Assurez-vous que vous mettez vos proches en enfin !!!

+0

merci pour la réponse, mais j'ai déjà essayé cela. Ça ne fait aucune différence. "NOTE: Assurez-vous de mettre votre fin dans un final !!!" Vous pouvez voir que je suis assez naïvement tester mon code en ce moment mais je vais essayer de coller aux "bonnes" pratiques au cours de cette phase à l'avenir. –