<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Evolutionnext Latest JavaServerPages blog entries</title>
    <link>http://www.evolutionnext.com/blog/categories/JavaServerPages</link>
    <description>The latest blog entries for JavaServerPages from evolutionnext.com</description>
    <item>
      <title>org.apache.tomcat.dbcp.dbcp.SQLNestedException</title>
      <link>http://www.evolutionnext.com/blog/55.html</link>
      <description>&lt;p&gt;
I usually use Jboss and Tomcat combination. Once in a while I have to use Tomcat only, this is one of those times.  This exception has been occuring since 2004 it looks like.  But, since I rarely use Tomcat I am reporting it today. :)&lt;/p&gt;

&lt;p&gt;
I was trying to set up a JDBC DataSource using JNDI on tomcat and I receieved this &lt;a href="#NestedSQLException"&gt;SQLNestedException&lt;/a&gt;.  I decided to log the error and let you in on the possible fix. The big thing to note is that now you no longer have resource-params like you used to. You now have to set up your JNDI resources by attribute only. In other words, database resources have gone from:
&lt;/p&gt;

&lt;p&gt;&lt;b&gt;This:&lt;/b&gt;&lt;/p&gt;
&lt;pre&gt;
&amp;lt;Context ...&amp;gt;
  ...
  &amp;lt;Resource name="jdbc/EmployeeDB" auth="Container"
            type="javax.sql.DataSource"/&amp;gt;
  &amp;lt;ResourceParams name="jdbc/EmployeeDB"&amp;gt;
    &amp;lt;parameter&amp;gt;
      &amp;lt;name&amp;gt;username&amp;lt;/name&amp;gt;
      &amp;lt;value&amp;gt;dbusername&amp;lt;/value&amp;gt;
    &amp;lt;/parameter&amp;gt;
    &amp;lt;parameter&amp;gt;
      &amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;
      &amp;lt;value&amp;gt;dbpassword&amp;lt;/value&amp;gt;
    &amp;lt;/parameter&amp;gt;
    &amp;lt;parameter&amp;gt;
      &amp;lt;name&amp;gt;driverClassName&amp;lt;/name&amp;gt;
      &amp;lt;value&amp;gt;org.hsql.jdbcDriver&amp;lt;/value&amp;gt;
    &amp;lt;/parameter&amp;gt;
    &amp;lt;parameter&amp;gt;
      &amp;lt;name&amp;gt;url&amp;lt;/name&amp;gt;
      &amp;lt;value&amp;gt;jdbc:HypersonicSQL:database&amp;lt;/value&amp;gt;
    &amp;lt;/parameter&amp;gt;
    &amp;lt;parameter&amp;gt;
      &amp;lt;name&amp;gt;maxActive&amp;lt;/name&amp;gt;
      &amp;lt;value&amp;gt;8&amp;lt;/value&amp;gt;
    &amp;lt;/parameter&amp;gt;
    &amp;lt;parameter&amp;gt;
      &amp;lt;name&amp;gt;maxIdle&amp;lt;/name&amp;gt;
      &amp;lt;value&amp;gt;4&amp;lt;/value&amp;gt;
    &amp;lt;/parameter&amp;gt;
  &amp;lt;/ResourceParams&amp;gt;
  ...
&amp;lt;/Context&amp;gt;
&lt;/pre&gt;


&lt;p&gt;&lt;b&gt;To This:&lt;/b&gt;&lt;/p&gt;
&lt;pre&gt;
&amp;lt;Context ...&amp;gt;
  ...
  &amp;lt;Resource name="jdbc/EmployeeDB" auth="Container"
            type="javax.sql.DataSource" username="dbusername" password="dbpassword"
            driverClassName="org.hsql.jdbcDriver" url="jdbc:HypersonicSQL:database"
            maxActive="8" maxIdle="4"/&amp;gt;
  ...
&amp;lt;/Context&amp;gt;
&lt;/pre&gt;

&lt;p&gt;&lt;a name="NestedSQLException"&gt;Here is the stack trace that you may similarily have seen&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:388)
        at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:283)
        at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
        at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
        at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(DriverManager.java:243)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
        ... 36 more

&lt;/pre&gt;</description>
      <pubDate>Fri, 14 Oct 2005 04:04:48 GMT</pubDate>
      <guid>http://www.evolutionnext.com/blog/55.html</guid>
      <dc:date>2005-10-14T04:04:48Z</dc:date>
    </item>
  </channel>
</rss>

