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

Reply via email to