You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by ox...@comcast.net on 2004/09/23 04:06:12 UTC

Oracle Driver and JDBC-ODBC still refuses to load

I'm still having a driver loading problem. The error I get is "
:javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null', cause: No suitable driver
        at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)"
The tomcat version is 5.0.19. The OS is win2k. The Database is Oracle 9.2. Java Version is 1.4.1 
I have tried copying the classes12.zip and renaming to classes12.jar. Additionally I want to Oracle's web site and tried a couple of different JDBC drivers. All gave the same error. I also tried the Oracle driver for 1.4 as my JAVA_HOME is 1.4.1.02.
I have tried using the JDBC ODBC link driver I received the same error. But in this case I was not sure what jar file to copy to $CATALINA_HOME\common\lib. So I am a bit unsure how valid that is.
I have tried making an xml file in $CATALINA_HOME\conf\Catalina\localhost but that did not seem to do any good. 
To test the ODBC-JDBC and Oracle JDBC I setup a DefaultContext in server.xml. I would comment out one and just use the other. 
Here are the files let me know if you note anything.
server.xml
<Server port="8005" shutdown="SHUTDOWN" debug="0">
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
  <!-- Global JNDI resources -->
  <GlobalNamingResources>
    <!-- Test entry for demonstration purposes -->
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved">
    </Resource>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>
 
 <Service name="Catalina">
    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000" 
               disableUploadTimeout="true" />
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" />
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" debug="0" resourceName="UserDatabase"/>
<!--  
   <DefaultContext>
    <Resource name="jdbc/OracleDB" auth="Container" type="javax.sql.DataSource"/> 
    <ResourceParams name="jdbc/OracleDB">
     <parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>
     <parameter><name>maxWait</name><value>-1</value></parameter>
     <parameter><name>maxActive</name><value>20</value></parameter>
        <parameter><name>driverClassName</name><value>oracle.jdbc.driver.OracleDriver</value></parameter>
        <parameter><name>url</name><value>jdbc:oracle:thin:@192.168.1.101:1521:to1</value></parameter>
        <parameter><name>username</name><value>shankeyp</value></parameter>
     <parameter><name>password</name><value>zaq123</value></parameter>
     <parameter><name>maxIdle</name><value>10</value></parameter>
     <parameter><name>removeAbandoned</name><value>true</value></parameter>
        <parameter><name>removeAbandonedTimeout</name><value>60</value></parameter>
        <parameter><name>logAbandoned</name><value>true</value></parameter>
    </ResourceParams>
   </DefaultContext>
-->
   <DefaultContext>
    <Resource name="jdbcodbc/OracleDB" auth="Container" type="javax.sql.DataSource"/> 
    <ResourceParams name="jdbcodbc/OracleDB">
     <parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>
        <parameter><name>driverClassName</name><value>sun.jdbc.odbc.JdbcOdbcDriver</value></parameter>
        <parameter><name>url</name><value>jdbc:odbc:to1</value></parameter>
        <parameter><name>username</name><value>shankeyp</value></parameter>
     <parameter><name>password</name><value>zaq123</value></parameter>
    </ResourceParams>
   </DefaultContext>
      <Host name="localhost" debug="0" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="true" xmlNamespaceAware="false">
        <Logger className="org.apache.catalina.logger.FileLogger"
                 directory="logs"  prefix="localhost_log." suffix=".txt"
            timestamp="true"/>
 
      </Host>
    </Engine>
  </Service>
</Server>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
 <welcome-file>
            index.jsp
        </welcome-file>
 <welcome-file>
            index.html
        </welcome-file>
 <welcome-file>
            index.htm
        </welcome-file>
    </welcome-file-list>
    <resource-ref>
        <description>Oracle Datasource example</description>
        <res-ref-name>jdbc/OracleDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
     </resource-ref>
     <resource-ref>
        <description>Oracle Datasource example JDBC ODBC</description>
        <res-ref-name>jdbcodbc/OracleDB</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
     </resource-ref>
</web-app>
The bean I simply call from a JSP page.
package mybean;
import java.beans.*;
import java.io.Serializable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.*;
public class testDBConn extends Object implements Serializable {
        
    public String testJDBCDBConn() throws Exception {
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("jdbc/OracleDB");
        Connection conn = ds.getConnection();
        return "no error";
    }
    
    public String testODBCJDBCDBConn() throws Exception{
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("jdbcodbc/OracleDB");
        Connection conn = ds.getConnection();
        return "no error";
    }
       
}
Any ideas would really be helpfully.
A couple of questions as I am new to Tomcat.
What the context tag does is give a way to divide up the server on directory names?
For example htt://www.blah/test1/myjsp.jsp   would be in the context of /test1 right?
How can I see if Tomcat is looking in the jars provided by Oracle to see if it is even finding the JDBC driver?
I am not really following the line "Context envContext  = (Context)initContext.lookup("java:/comp/env");" where is it getting java:/comp/env from? I did change that just to see what would happen and received a could not find context error. Why does java:/comp/env work?
I seem to be getting the picture that the JDBC drivers I am tring to use are different than other JDBC driver in that they support connection pooling. Is this correct?
I did have a suggestion to put it in a relam but I'm not sure how to do that. I am willing to give it a try. Please give an example.
Thanks
Pete