Fixed: tomcat/postgres problem - Mailing list pgsql-jdbc

From Jason Dinger
Subject Fixed: tomcat/postgres problem
Date
Msg-id 019101c30070$c1dcb530$2b40ec18@jasonekj7yrm2i
Whole thread Raw
List pgsql-jdbc
I fixed my problem.  I'm posting my fix in case anyone else runs across this problem.
 
The problem was that I had the <ResourceParams> in the <GlobalNamingResources> section for a <Resource> I had declared in server.xml.  Meanwhile, the Ant install for Tomcat script was installing a <Resource> in the <Context> section based on info in the web.xml file.  In short, all I had to do is put the <ResourceParams> in the Context section created by ant install.
 
If you doubt the "driverClassName is required" error is accurate, you can run this test to see if the driverClassName is really loading.
 
 
import javax.naming.NamingEnumeration; 
import javax.naming.Binding;
import org.apache.naming.ResourceRef;
 
NamingEnumeration jdbcEnum = envCtx.listBindings("jdbc"); // envCtx is a Context
while (jdbcEnum.hasMore()) {
   Object jdbcObj = jdbcEnum.next();
   Binding bind = (Binding)jdbcObj;
   writer.println("<p/>***<p/>");
   writer.println("ClassName: " + bind.getClassName() + "<br/>");
   writer.println("Name: " + bind.getName() + "<br/>");
   ResourceRef recRef = (ResourceRef)bind.getObject();
   writer.println("Factory Class Name: " + recRef.getFactoryClassName() + "<br/>" + recRef.toString());
   writer.println("<p/>***<p/>");
  }
 
 
You should see something like this:
 

***

ClassName: org.apache.naming.ResourceRef
Name: MyDB
Factory Class Name: org.apache.naming.factory.ResourceFactory
ResourceRef[className=javax.sql.DataSource,factoryClassLocation=null,factoryClassName=org.apache.naming.factory.ResourceFactory,{type=description,content=Postgresql driver},{type=scope,content=Shareable},{type=auth,content=Container},{type=validationQuery,content=},{type=user,content=myname},{type=password,content=mypassword},{type=maxActive,content=4},{type=maxWait,content=5000},{type=url,content=jdbc:postgresql:mydb},{type=driverClassName,content=org.postgresql.Driver},{type=maxIdle,content=2}]

***- Jason

 
 

I'm trying to load the postgresql driver into tomcat using the server.xml file and web.xml file, but I keep getting the following error:
 
javax.naming.NamingException: DbcpDataSourceFactory: driverClassName is required
 
Here's part of my server.xml file:
 
    <Resource name="jdbc/MyDB" scope="Shareable" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/MyDB">
      <parameter>
        <name>validationQuery</name>
        <value></value>
      </parameter>
      <parameter>
        <name>user</name>
        <value>Jason</value>
      </parameter>
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>4</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:postgresql:mydb</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value> </value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>org.postgresql.Driver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>2</value>
      </parameter>
    </ResourceParams>
 
And here's part of my web.xml file
 
<resource-ref>
  <description>
    Postgresql driver
  </description>
  <res-ref-name>
    jdbc/MyDB
  </res-ref-name>
  <res-type>
    javax.sql.DataSource
  </res-type>
  <res-auth>
    Container
  </res-auth>
</resource-ref>
 
 
I know I can load the driver with Class.forName().  That works too.  But how do I get the driver loaded via the server.xml and web.xml files?  Any suggestions?
 
 
- Jake

pgsql-jdbc by date:

Previous
From: "iran"
Date:
Subject: Need solution to decode data from bytea field
Next
From: "Alexey Yudichev"
Date:
Subject: unterminated quoted string