I got a similar result with Tomcat 5.0.9 when, within server.xml, I
placed the <Resource> and <ResourceParams> elements inside a
<DefaultContext> element in <Host>.  I then referred to my named
resource in web.xml in a <resource-ref> element.  The advantage of this
method is simpler application distribution: it does not require a user
of your application to add <Context> and <ResourceLink> elements to his
or her server.xml.

Note that I was unable to achieve the same result by adding the
<Resource> and <ResourceParams> elements to <GlobalNamingResources> as
O'Reilly's, "Tomcat: The Definitive Guide", and other documents suggest.

By the way, I am also using SQL Server 2000 and Microsoft's JDBC driver.

Derek

-----Original Message-----
From: King,Daniel [mailto:[EMAIL PROTECTED] 
Sent: September 19, 2003 3:06 PM
To: Tomcat Users List
Subject: RE: SOLUTION!! -- Cannot load JDBC driver class 'null'


I see this come up a lot in this user list and others about Tomcat, so I
want to share this information.  Note that the solution described below
allows you to access a global data source from all Web Applications,
without putting the <Resource> or <ResourceParams> elements in each Web
Application <Context>.
 
For over a week,  I have been fighting the problem of configuring a data
source so that it can be accessed by multiple Web Applications.  I
finally got it to work with Tomcat 5.0.9, by following Paul's advise
from 9/12/03.  I had no luck with Tomcat versions 4.1.24 or 4.1.27.  To
make it work in Tomcat 5.0.9, I used the Tomcat Administration tool to
add the data source.  It puts the following two elements in the
<GlobalNamingResources> element:
 
1. <Resource>
2. <ResourceParams>
 
I am working SQLServer 2000, using Microsoft's JDBC driver (wonders
never cease):
 
  <GlobalNamingResources>
          <Resource auth="Container"
                    name="MyDataSource" 
                    scope="Shareable" 
                    type="javax.sql.DataSource"/>

          <ResourceParams name="MyDataSource">
 !-- etc. -->    
            <parameter>
              <name>password</name>
              <value>mypassword</value>
            </parameter>
            <parameter>
              <name>url</name>
 
<value>jdbc:microsoft:sqlserver://111.111.111.111:1433;database=mydb</va
lue>
            </parameter>
            <parameter>
              <name>driverClassName</name>
 
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
            </parameter>
<!-- etc. -->    
            <parameter>
              <name>username</name>
              <value>myusername</value>
            </parameter>
          </ResourceParams>

  </GlobalNamingResources>
 
Then I added a <Context> element for my Web Application-- it is the
first child of the <Host> element:
 
        <Context className="org.apache.catalina.core.StandardContext" 
                 cachingAllowed="true" 
 
charsetMapperClass="org.apache.catalina.util.CharsetMapper" 
                 cookies="true" 
                 crossContext="false" 
                 debug="0" 
                 displayName="Welcome to Tomcat" 
 
docBase="/usr/local/jakarta-tomcat-5.0.9/webapps/myWebApp" 
 
mapperClass="org.apache.catalina.core.StandardContextMapper" 
                 path="/myWebApp" 
                 privileged="false" 
                 reloadable="false" 
                 swallowOutput="false" 
                 useNaming="true" 
 
wrapperClass="org.apache.catalina.core.StandardWrapper">

          <ResourceLink name="MyDataSource" 
                        global="MyDataSource"
                        type="javax.sql.DataSource"/>

        </Context>
 
Note that it was NOT necessary to add a <resource-ref> element to the
web.xml for the Web Application.
  


        -----Original Message----- 
        From: SANTOS, DANIEL (SBCSI) [mailto:[EMAIL PROTECTED] 
        Sent: Fri 9/19/2003 11:20 AM 
        To: '[EMAIL PROTECTED]'; '[EMAIL PROTECTED]';
'[EMAIL PROTECTED]'; '[EMAIL PROTECTED]';
'[EMAIL PROTECTED]'; '[EMAIL PROTECTED]';
'[EMAIL PROTECTED]' 
        Cc: '[EMAIL PROTECTED]' 
        Subject: SOLUTION!! -- Cannot load JDBC driver class 'null'
        
        

        Using Sun JDK 1.4.1_02 on Win2k SP2 and Jakarta 4.1.27.
        
        The tutorial in the tomcat docs failed for me also with the
Cannot load JDBC
        driver class 'null'. I banged my head and had to get stitches
and an ice
        pack. After that I came back to the office and cleaned out my
server.xml and
        web.xml completely. Then I went to http://localhost:8080/admin
        <http://localhost:8080/admin> , browsed to the context that I am
writing my
        app in, the full path from the tree being "Tomcat Server/Service
        (Tomcat-Standalone)/Host
(localhost)/Context(/myapp)/Resources/Data
        Sources". I added the data source from there specifying the JNDI
name,
        driver class, URL, user and pass, etc. Then I did some tests
with a jsp to
        make sure it was really in my context (you may have to restart
tomcat, I
        did).
        
        Next I added the code back into my web.xml that is in the
tutorial....
        
                <resource-ref>
                        <description>DB Connection</description>
                        <res-ref-name>myData Source</res-ref-name>
                        <res-type>javax.sql.DataSource</res-type>
                        <res-auth>Container</res-auth>
                </resource-ref>
        
        And it works!!! I just have a new problem now of DBCP
borrowObject failed:
        String index out of range: -1, I suppose I'll figure that out
too...
        
        Good Luck and thanks to all who posted info on this,
        Daniel
        
        
        
        
---------------------------------------------------------------------
        To unsubscribe, e-mail:
[EMAIL PROTECTED]
        For additional commands, e-mail:
[EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to