Salve ragazzi,
mi è capitato questo strano problema e ho visto che su internet esistono migliaia di richieste quasi tutte senza una soluzione concreta.
Sto realizzando un'applicazione in jsf che interagisce con Mysql 5.0 e uso Eclipse con server Tomcat. Mentre vado a fare l'upload di un file (premetto che il tutto funzioanava egregiamente senza pool di connessioni, ora ho provato ad utilizzare il pool e JNDI,ma ho questo errore) utilizzando le DBCP relative al server Tomcat è:
L'errore mi manda completamente nel pallone e non so come risolverlo, nei forum ho trovato per ora solo mezze soluzioni,qualcuno sa aiutarmi?codice:GRAVE: #{MyBean.carica}: javax.faces.el.EvaluationException: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' javax.faces.FacesException: #{MyBean.carica}: javax.faces.el.EvaluationException: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78) at javax.faces.component.UICommand.broadcast(UICommand.java:312) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source) Caused by: javax.faces.el.EvaluationException: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:130) at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72) ... 34 more Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540) at giu.MyBean.carica(MyBean.java:185) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126) ... 35 more Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(Unknown Source) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773) ... 42 more
Vi posto parte del server.xml di Tomcat,cioè quella da me modificata secondo il JNDI Datasource How-To .La mia applicazione si chiama MicroArray e usa un database nomedb....Grazie mille
Il web.xml della mia applicazione ècodice:<Context docBase="SpectraWEB" path="/SpectraWEB" reloadable="true" source="org.eclipse.jst.j2ee.server:SpectraWEB"/><Context docBase="MicroArray" path="/MicroArray" reloadable="true" source="org.eclipse.jst.j2ee.server:MicroArray"/> <Resource name="jdbc/nomedb" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/nomedb"> <parameter> <name>username</name> <value>root</value> </parameter> <parameter> <name>password</name> <value>shevagol</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:apache:commons:dbcp:nomedb</value> </parameter> <parameter> <name>maxActive</name> <value>8</value> </parameter> <parameter> <name>maxIdle</name> <value>4</value> </parameter> </ResourceParams> <Context docBase="Bookstore" path="/Bookstore" reloadable="true" source="org.eclipse.jst.j2ee.server:Bookstore"/><Context docBase="Jsf-example2-1.0" path="/Jsf-example2-1.0" reloadable="true" source="org.eclipse.jst.j2ee.server:Jsf-example2-1.0"/></Host> </Engine> </Service> </Server>
codice:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <context-param> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <filter> <filter-name>ExtensionsFilter</filter-name> <filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class> <init-param> <param-name>uploadMaxFileSize</param-name> <param-value>100m</param-value> </init-param> <init-param> <param-name>uploadThresholdSize</param-name> <param-value>100k</param-value> </init-param> </filter> <filter-mapping> <filter-name>ExtensionsFilter</filter-name> <servlet-name>FacesServlet</servlet-name> </filter-mapping> <servlet> <servlet-name>FacesServlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>FacesServlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FacesServlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <resource-ref> <description>Resource reference to a factory for java.sql.Connection instances that may be used for talking to a particular database that is configured in the server.xml file.</description> <res-ref-name>jdbc/nomedb</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>
Il bean di interesse è MyBean e il metodo chiamato è carica(), le cui operazioni riguardanti il db sono
Grazie ancora...aiutando me aiuterete tantissime altre persone nella mia stessa situazione(così dicono i forum........)codice:Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource)envCtx.lookup("jdbc/nomedb"); Connection conn = ds.getConnection(); PreparedStatement pst = conn.prepareStatement("INSERT INTO tbl(Data) VALUES (?)"); // imposto i valori // pst.setInt(1,1); pst.setBytes(1, data); pst.executeUpdate(); pst.close(); conn.close();

