Okay I am trying to use connection pooling for my project which uses Maven as a build tool. Now the JDBC Driver is listed as a maven dependency. Tomcat however cant find it when I try to do
ds.getConnection (ie. get a JDBC connection from a datasource). The error that I am getting is -: java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null' at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2065) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1939) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1412) at test.Test.doGet(Test.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2049) ... 27 more As you can see in the end it says that caused by "No suitable driver" My copy of context.xml is as follows-: <Context> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" removeAbandonedOnBorrow="true" timeBetweenEvictionRunsMillis="10000" minEvictableIdleTimeMillis="6000" removeAbandonedOnMaintenance="true" logAbandoned="true" username="sreyan" password="sreyan" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/practice"/> <Realm className="org.apache.catalina.realm.DataSourceRealm" dataSourceName="jdbc/TestDB" userTable="users" userNameCol="user_id" userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name"> <CredentialHandler className = "org.apache.catalina.realm.SecretKeyCredentialHandler" algorithm = "PBEWITHHMACSHA384ANDAES_256" iterations = "111111" saltLength = "20" /> </Realm> </Context> And my copy of web.xml is -: <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>HibTest</servlet-name> <display-name>HibTest</display-name> <description></description> <servlet-class>test.HibTest</servlet-class> </servlet> <servlet> <servlet-name>Test</servlet-name> <display-name>Test</display-name> <description></description> <servlet-class>test.Test</servlet-class> </servlet> <servlet-mapping> <servlet-name>HibTest</servlet-name> <url-pattern>/hib</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Test</servlet-name> <url-pattern>/Test</url-pattern> </servlet-mapping> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <security-constraint> <web-resource-collection> <web-resource-name>TECHERS</web-resource-name> <url-pattern>/protected/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>TEACHER</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/index.jsp</form-login-page> <form-error-page>/index.jsp?error=true</form-error-page> </form-login-config> </login-config> <security-role> <role-name>TEACHER</role-name> </security-role> </web-app> I have used the Maven webapp archetype for creating the project. How do I get Tomcat to load the driver at start up. Also I have put the JDBC Driver at $Catalina_Home/lib. But even this has no help. All my other projects that don't use Maven can use connection pooling perfectly with the above configurations. Where am I going wrong ? Where do you keep the <resource-ref> declaration ? After the servlet mappings ? Any help would be greatly appreciated. Regards Sreyan Chakravarty