Avatar billede axe2 Nybegynder
02. oktober 2003 - 14:27 Der er 34 kommentarer og
1 løsning

Cannot load JDBC driver class 'null' database pooling

Har fulgt http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jndi-datasource-examples-howto.html slavisk gange flere.

Jeg inkludere min server.xml, web.xml, samt min test servlet. Alt går tilsyneladende godt med at så resoursen op med JNDI, i min test servlet, indtil jeg kalder datasource.getConnection(), så får jeg følgende fejl
Cannot load JDBC driver class 'null'

Server.xml
-------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Example Server Configuration File -->
<!-- Note that component elements are nested corresponding to their
-->
<!-- A "Server" is a singleton element that represents the entire JVM,
    which may contain one or more "Service" instances.  The Server
    listens for a shutdown command on the indicated port.
   
    Note:  A "Server" is not itself a "Container", so you may not
    define subcomponents such as "Valves" or "Loggers" at this level.
-->
<Server debug="0" name="Pivot" port="8005" shutdown="SHUTDOWN">


    <!-- A "Service" is a collection of one or more "Connectors" that share
        a single "Container" (and therefore the web applications visible
        within that Container).  Normally, that Container is an "Engine",
        but this is not required.
       
        Note:  A "Service" is not itself a "Container", so you may not
        define subcomponents such as "Valves" or "Loggers" at this level.
    -->

    <!-- Define the Tomcat Stand-Alone Service -->
    <Service name="Tomcat-Standalone">

        <!-- A "Connector" represents an endpoint by which requests are received
            and responses are returned.  Each Connector passes requests on to the
            associated "Container" (normally an Engine) for processing.
           
            By default, a non-SSL HTTP/1.1 Connector is established on port 8080.
            You can also enable an SSL HTTP/1.1 Connector on port 8443 by
            following the instructions below and uncommenting the second Connector
            entry.  SSL support requires the following steps:
            * Download and install JSSE 1.0.2 or later, and put the JAR files
            into "$JAVA_HOME/jre/lib/ext".
            * Edit "$JAVA_HOME/jre/lib/security/java.security" and add
            security.provider.2=com.sun.net.ssl.internal.ssl.Provider
            * Execute: keytool -genkey -alias tomcat -keyalg RSA
            with a password value of "changeit".
           
            By default, DNS lookups are enabled when a web application calls
            request.getRemoteHost().  This can have an adverse impact on
            performance, so you can disable it by setting the
            "enableLookups" attribute to "false".  When DNS lookups are disabled,
            request.getRemoteHost() will return the String version of the
            IP address of the remote client.
        -->

        <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
        <Connector acceptCount="10" className="org.apache.catalina.connector.http.HttpConnector" connectionTimeout="60000" debug="0" enableLookups="true" maxProcessors="75" minProcessors="5" port="8080" redirectPort="8443" />
        <!-- Note : To disable connection timeouts, set connectionTimeout value
        -->

        <!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
        <!--
            <Connector className="org.apache.catalina.connector.http.HttpConnector"
            port="8443" minProcessors="5" maxProcessors="75"
            enableLookups="true"
            acceptCount="10" debug="0" scheme="https" secure="true">
            <Factory className="org.apache.catalina.net.SSLServerSocketFactory"
            clientAuth="false" protocol="TLS"/>
            </Connector>
        -->

        <!-- Define a Proxied HTTP/1.1 Connector on port 8081 -->
        <!-- See proxy documentation for more information about using this. -->
        <!--
            <Connector className="org.apache.catalina.connector.http.HttpConnector"
            port="8081" minProcessors="5" maxProcessors="75"
            enableLookups="true"
            acceptCount="10" debug="0" connectionTimeout="60000"
            proxyPort="80"/>
        -->

        <!-- Define a non-SSL HTTP/1.0 Test Connector on port 8082 -->
        <!--
            <Connector className="org.apache.catalina.connector.http10.HttpConnector"
            port="8082" minProcessors="5" maxProcessors="75"
            enableLookups="true" redirectPort="8443"
            acceptCount="10" debug="0"/>
        -->

        <!-- An Engine represents the entry point (within Catalina) that processes
            every request.  The Engine implementation for Tomcat stand alone
            analyzes the HTTP headers included with the request, and passes them
        -->

        <!-- Define the top level container in our container hierarchy -->
        <Engine debug="0" defaultHost="localhost" name="Standalone">

            <!-- The request dumper valve dumps useful debugging information about
                the request headers and cookies that were received, and the response
                headers and cookies that were sent, for all requests received by
                this instance of Tomcat.  If you care only about requests to a
                particular virtual host, or a particular application, nest this
                element inside the corresponding <Host> or <Context> entry instead.
               
                For a similar mechanism that is portable to all Servlet 2.3
                containers, check out the "RequestDumperFilter" Filter in the
                example application (the source for this filter may be found in
                "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").
               
                Request dumping is disabled by default.  Uncomment the following
            -->
            <!--
                <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
            -->

            <!-- Global logger unless overridden at lower levels -->
            <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true" />

            <!-- Because this Realm is here, an instance will be shared globally -->

            <Realm className="org.apache.catalina.realm.MemoryRealm" />

            <!-- Replace the above Realm with one of the following to get a Realm
            -->

            <!--
                <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
                driverName="org.gjt.mm.mysql.Driver"
                connectionURL="jdbc:mysql://localhost/authority?user=test;password=test"
                userTable="users" userNameCol="user_name" userCredCol="user_pass"
                userRoleTable="user_roles" roleNameCol="role_name" />
            -->

            <!--
                <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
                driverName="oracle.jdbc.driver.OracleDriver"
                connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL?user=scott;password=tiger"
                userTable="users" userNameCol="user_name" userCredCol="user_pass"
                userRoleTable="user_roles" roleNameCol="role_name" />
            -->

            <!--
                <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
                driverName="sun.jdbc.odbc.JdbcOdbcDriver"
                connectionURL="jdbc:odbc:CATALINA"
                userTable="users" userNameCol="user_name" userCredCol="user_pass"
                userRoleTable="user_roles" roleNameCol="role_name" />
            -->

            <!-- Define the default virtual host -->
            <Host appBase="webapps" debug="0" name="localhost" unpackWARs="true">

                <!-- Normally, users must authenticate themselves to each web app
                    individually.  Uncomment the following entry if you would like
                    a user to be authenticated the first time they encounter a
                    resource protected by a security constraint, and then have that
                    user identity maintained across *all* web applications contained
                -->
                <!--
                    <Valve className="org.apache.catalina.authenticator.SingleSignOn"
                    debug="0"/>
                -->

                <!-- Access log processes all requests for this virtual host.  By
                    default, log files are created in the "logs" directory relative to
                    $CATALINA_HOME.  If you wish, you can specify a different
                    directory with the "directory" attribute.  Specify either a relative
                    (to $CATALINA_HOME) or absolute path to the desired directory.
                -->
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="common" prefix="localhost_access_log." suffix=".txt" />

                <!-- Logger shared by all Contexts related to this virtual host.  By
                    default (when using FileLogger), log files are created in the "logs"
                    directory relative to $CATALINA_HOME.  If you wish, you can specify
                    a different directory with the "directory" attribute.  Specify either a
                    relative (to $CATALINA_HOME) or absolute path to the desired
                -->
                <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />

                <!-- Define properties for each web application.  This is only needed
                    if you want to set non-default properties, or have web application
                    document roots in places other than the virtual host's appBase
                -->

                <!-- Tomcat Root Context -->
                <!--
                    <Context path="" docBase="ROOT" debug="0"/>
                -->

                <!-- Tomcat Examples Context -->
                <Context debug="0" docBase="examples" path="/examples" reloadable="true">
                    <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_examples_log." suffix=".txt" timestamp="true" />
                    <Ejb home="com.wombat.empl.EmployeeRecordHome" name="ejb/EmplRecord" remote="com.wombat.empl.EmployeeRecord" type="Entity" />
                    <!-- PersistentManager: Uncomment the section below to test Persistent
                        Sessions.
                       
                        saveOnRestart: If true, all active sessions will be saved
                        to the Store when Catalina is shutdown, regardless of
                        other settings. All Sessions found in the Store will be
                        loaded on startup. Sessions past their expiration are
                        ignored in both cases.
                        maxActiveSessions: If 0 or greater, having too many active
                        sessions will result in some being swapped out. minIdleSwap
                        limits this. -1 means unlimited sessions are allowed.
                        0 means sessions will almost always be swapped out after
                        use - this will be noticeably slow for your users.
                        minIdleSwap: Sessions must be idle for at least this long
                        (in seconds) before they will be swapped out due to
                        maxActiveSessions. This avoids thrashing when the site is
                        highly active. -1 or 0 means there is no minimum - sessions
                        can be swapped out at any time.
                        maxIdleSwap: Sessions will be swapped out if idle for this
                        long (in seconds). If minIdleSwap is higher, then it will
                        override this. This isn't exact: it is checked periodically.
                        -1 means sessions won't be swapped out for this reason,
                        although they may be swapped out for maxActiveSessions.
                        If set to >= 0, guarantees that all sessions found in the
                        Store will be loaded on startup.
                        maxIdleBackup: Sessions will be backed up (saved to the Store,
                        but left in active memory) if idle for this long (in seconds),
                        and all sessions found in the Store will be loaded on startup.
                        If set to -1 sessions will not be backed up, 0 means they
                        should be backed up shortly after being used.
                       
                        To clear sessions from the Store, set maxActiveSessions, maxIdleSwap,
                        and minIdleBackup all to -1, saveOnRestart to false, then restart
                        Catalina.
                    -->
                    <!--
                        <Manager className="org.apache.catalina.session.PersistentManager"
                        debug="0"
                        saveOnRestart="true"
                        maxActiveSessions="-1"
                        minIdleSwap="-1"
                        maxIdleSwap="-1"
                        maxIdleBackup="-1">
                        <Store className="org.apache.catalina.session.FileStore"/>
                        </Manager>
                    -->
                    <Environment name="maxExemptions" type="java.lang.Integer" value="15" />
                    <Parameter name="context.param.name" override="false" value="context.param.value" />
                    <Resource auth="SERVLET" name="jdbc/EmployeeAppDb" type="javax.sql.DataSource" />
                    <ResourceParams name="jdbc/TestDB">
                        <parameter>
                            <name>user</name>
                            <value>sa</value>
                        </parameter>
                        <parameter>
                            <name>password</name>
                            <value />
                        </parameter>
                        <parameter>
                            <name>driverClassName</name>
                            <value>org.hsql.jdbcDriver</value>
                        </parameter>
                        <parameter>
                            <name>driverName</name>
                            <value>jdbc:HypersonicSQL:database</value>
                        </parameter>
                    </ResourceParams>
                    <Resource auth="Container" name="mail/Session" type="javax.mail.Session" />
                    <ResourceParams name="mail/session">
                        <parameter>
                            <name>mail.smtp.host</name>
                            <value>localhost</value>
                        </parameter>
                    </ResourceParams>





                    <Context crossContext="true" debug="5" docBase="DBTest" path="/DBTest" reloadable="true">

                        <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_DBTest_log." suffix=".txt" timestamp="true" />

                        <Resource auth="Container" name="jdbc/TestDB" type="javax.sql.DataSource" />

                        <ResourceParams name="jdbc/TestDB">
                            <parameter>
                                <name>factory</name>
                                <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
                            </parameter>

                            <!-- Maximum number of dB connections in pool. Make sure you
                                configure your mysqld max_connections large enough to handle
                                all of your db connections. Set to 0 for no limit.
                            -->
                            <parameter>
                                <name>maxActive</name>
                                <value>100</value>
                            </parameter>

                            <!-- Maximum number of idle dB connections to retain in pool.
                                Set to 0 for no limit.
                            -->
                            <parameter>
                                <name>maxIdle</name>
                                <value>30</value>
                            </parameter>

                            <!-- Maximum time to wait for a dB connection to become available
                                in ms, in this example 10 seconds. An Exception is thrown if
                                this timeout is exceeded.  Set to -1 to wait indefinitely.
                            -->
                            <parameter>
                                <name>maxWait</name>
                                <value>10000</value>
                            </parameter>

                            <!-- MySQL dB username and password for dB connections  -->
                            <parameter>
                                <name>username</name>
                                <value>root</value>
                            </parameter>
                            <parameter>

                                <name>password</name>
                                <value></value>
                            </parameter>

                            <!-- Class name for mm.mysql JDBC driver -->
                            <parameter>
                                <name>driverClassName</name>
                                <value>org.gjt.mm.mysql.Driver</value>
                            </parameter>

                            <!-- The JDBC connection url for connecting to your MySQL dB.
                                The autoReconnect=true argument to the url makes sure that the
                                mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
                                connection.  mysqld by default closes idle connections after 8 hours.
                            -->
                            <parameter>
                                <name>url</name>
                                <value>jdbc:mysql://localhost:3306/pivotdb?autoReconnect=true</value>
                            </parameter>
                        </ResourceParams>
                    </Context>


                </Context>

                <Context docBase="C:\Documents and Settings\ole\Dokumenter\IBM\wsad\workspace\PoolTest\Web Content" path="/PoolTest" reloadable="true" source="com.ibm.etools.webtools.server:PoolTest" />
            </Host>

        </Engine>

    </Service>

    <!-- The MOD_WEBAPP connector is used to connect Apache 1.3 with Tomcat 4.0
        as its servlet container. Please read the README.txt file coming with
        the WebApp Module distribution on how to build it.
        (Or check out the "jakarta-tomcat-connectors/webapp" CVS repository)
       
        To configure the Apache side, you must ensure that you have the
        "ServerName" and "Port" directives defined in "httpd.conf".  Then,
        lines like these to the bottom of your "httpd.conf" file:
       
        LoadModule webapp_module libexec/mod_webapp.so
        WebAppConnection warpConnection warp localhost:8008
        WebAppDeploy examples warpConnection /examples/
       
        The next time you restart Apache (after restarting Tomcat, if needed)
        the connection will be established, and all applications you make
        visible via "WebAppDeploy" directives can be accessed through Apache.
    -->

    <!-- Define an Apache-Connector Service -->
    <Service name="Tomcat-Apache">

        <Connector acceptCount="10" className="org.apache.catalina.connector.warp.WarpConnector" debug="0" enableLookups="true" maxProcessors="75" minProcessors="5" port="8008" />

        <!-- Replace "localhost" with what your Apache "ServerName" is set to -->
        <Engine appBase="webapps" className="org.apache.catalina.connector.warp.WarpEngine" debug="0" name="Apache">

            <!-- Global logger unless overridden at lower levels -->
            <Logger className="org.apache.catalina.logger.FileLogger" prefix="apache_log." suffix=".txt" timestamp="true" />

            <!-- Because this Realm is here, an instance will be shared globally -->
            <Realm className="org.apache.catalina.realm.MemoryRealm" />

        </Engine>

    </Service>

</Server>
-------------------------------------------------------
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp">
    <display-name>PoolTest</display-name>
    <servlet>
        <servlet-name>Testdb</servlet-name>
        <display-name>Testdb</display-name>
        <servlet-class>test.Testdb</servlet-class>
    </servlet>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <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>

</web-app>
--------------------------------------------------
Servlet testklasse
-------------------------------------------------
package test;
import java.io.IOException;
import java.sql.Connection;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;


/**
* @version     1.0
* @author
*/
public class Testdb extends HttpServlet {

    /**
    * @see javax.servlet.GenericServlet#void ()
    */
    public void destroy() {

        super.destroy();

    }

    /**
    * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    */
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    try{
      Context init = new InitialContext();
      Context ctx = (Context) init.lookup("java:comp/env");
      if(ctx == null )
          throw new Exception("Boom - No Context");

      DataSource ds =
            (DataSource)ctx.lookup(
              "jdbc/TestDB");
              System.out.println("hurra");
              Connection con = ds.getConnection("root","");
    }
    catch(Exception e)  {
    System.err.println(e.getMessage());
    }

    }

    /**
    * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    */
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

        super.doPost(req, resp);

    }

    /**
    * @see javax.servlet.GenericServlet#void ()
    */
    public void init() throws ServletException {

        super.init();

    }

}
Hvad går galt, det skal nævnes at alle filer der skal bruger er installeret i commons/lib samt mysql driver ver 2
Avatar billede arne_v Ekspert
02. oktober 2003 - 15:04 #1
Prøv og put MySQL JDBC driver jar filen i server/lib !
Avatar billede axe2 Nybegynder
02. oktober 2003 - 15:09 #2
den vil bare ingenting stadig Cannot load JDBC driver class 'null'
Avatar billede arne_v Ekspert
02. oktober 2003 - 20:45 #3
<Resource auth="SERVLET" name="jdbc/EmployeeAppDb" type="javax.sql.DataSource" />
                    <ResourceParams name="jdbc/TestDB">

skal jdbc/EmployeeAppDb ikk evlre jdbc/TestDB ?
Avatar billede arne_v Ekspert
02. oktober 2003 - 20:47 #4
Og commons/lib er iøvrigt helt fint.
Avatar billede axe2 Nybegynder
02. oktober 2003 - 21:01 #5
<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>
er det den del af web.xml der er noget galt med arne, hvorfor skriver du <res-auth>Container</res-auth>
Avatar billede axe2 Nybegynder
02. oktober 2003 - 21:01 #6
om igen
hvorfor skriver du
Resource auth="SERVLET"
Avatar billede arne_v Ekspert
02. oktober 2003 - 21:06 #7
Det er et citat fra din server.xml !

Det skal vel være:

<Resource auth="Container" name="jdbc/TestDB" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/TestDB">

så !?
Avatar billede axe2 Nybegynder
02. oktober 2003 - 21:41 #8
Så er det rettet. og det hjalp ikke. Samme besked

Cannot create JDBC driver of class '' for connect URL 'null'

:=(
Avatar billede arne_v Ekspert
02. oktober 2003 - 21:47 #9
Ingen interessante fejl i log-filerne ?
Avatar billede axe2 Nybegynder
02. oktober 2003 - 21:50 #10
ikke af hvad jeg kan se
Avatar billede axe2 Nybegynder
02. oktober 2003 - 21:56 #11
du lige et printStackTrace()
Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:243)
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:743)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:518)
    at test.Testdb.doGet(Testdb.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:466)
    at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2416)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:577)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1040)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1151)
    at java.lang.Thread.run(Thread.java:536)
Avatar billede axe2 Nybegynder
02. oktober 2003 - 21:57 #12
Sådan som jeg kan se det kan den ikke få fat i driveren, selvom den ligger korrekt placeret
Avatar billede arne_v Ekspert
02. oktober 2003 - 22:01 #13
Jeg er (nu) overbevist om at det ikke er claspath til MySQL driveren
men derimod JNDI-navn -> driverclass & URL der fejler.
Avatar billede arne_v Ekspert
02. oktober 2003 - 22:03 #14
Spørgsmål:

Hvorfor angiver du brugernavn og password i getConnection ?

(du bruger jo container auth !)

Virker:

Connection con = ds.getConnection();

?
Avatar billede axe2 Nybegynder
02. oktober 2003 - 22:31 #15
Yep, det er en fejl, den er rettet, men feljen kom med. Du er måske på ved med en løsning :=)
Avatar billede arne_v Ekspert
02. oktober 2003 - 22:40 #16
Jeg forsøger ! Men det er ikke helt nemt !!

URL er http://localhost:8080/TestDB/Testdb ?
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:05 #17
Avatar billede arne_v Ekspert
02. oktober 2003 - 23:07 #18
Jeg mener den URL du kalder servlet med
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:11 #19
Avatar billede arne_v Ekspert
02. oktober 2003 - 23:14 #20
Ups.

Måske er der noget her.

Den URL siger at din web applikation er PoolTest !

<Context crossContext="true" debug="5" docBase="DBTest" path="/DBTest" reloadable="true">
...
<Resource auth="Container" name="jdbc/TestDB" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/TestDB">

definerer en datasource for en web applikation DBTest !
Avatar billede arne_v Ekspert
02. oktober 2003 - 23:14 #21
Prøv og ret til:

<Context crossContext="true" debug="5" docBase="PoolTest" path="/PoolTest" reloadable="true">
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:15 #22
Øhh, jeg er ret grøn, du gider ikke lige at fortælle mig på "dansk" hvordan jeg bærer mig ad :=)
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:16 #23
ok
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:19 #24
Arrrgghhhh
Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
Dammit, og ConnectionPooling er nærmest et must
Avatar billede arne_v Ekspert
02. oktober 2003 - 23:27 #25
Det er <Context crossContext="true" debug="5" docBase="PoolTest" path="/PoolTest" reloadable="true"> ?

URL http://localhost:8080/PoolTest/servlet/test.Testdb ?

(du bør iøvrigt kunne bruge http://localhost:8080/PoolTest/Testdb !)

Og du har genstartet serveren ?
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:33 #26
Hvorfor skal man være så specifik medhensyn til hvor jeg vil bruge dbpooling, når man ofte vil bruge den flere steder i aplikationen.
    test(pakkenavnet).Testdb den ligger i,
Og serveren bliver genstartet hver gang server.xml bliver ændret
Jeg kan ikke køre http://localhost:8080/PoolTest/Testdb
Avatar billede arne_v Ekspert
02. oktober 2003 - 23:36 #27
Hm.

Der er noget galt så.
Avatar billede arne_v Ekspert
02. oktober 2003 - 23:38 #28
Måske overskrives path PoolTest.

Du har:

<Context crossContext="true" debug="5" docBase="PoolTest" path="/PoolTest" reloadable="true">
...
</Context>
<Context docBase="C:\Documents and Settings\ole\Dokumenter\IBM\wsad\workspace\PoolTest\Web Content" path="/PoolTest" reloadable="true" source="com.ibm.etools.webtools.server:PoolTest" />

prøv og ændre det til:

<Context docBase="C:\Documents and Settings\ole\Dokumenter\IBM\wsad\workspace\PoolTest\Web Content" path="/PoolTest" reloadable="true" source="com.ibm.etools.webtools.server:PoolTest">
...
</Context>

[ingen slash i enden efter ændring]
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:46 #29
Cannot create JDBC driver of class '' for connect URL 'null'
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null', cause:
java.sql.SQLException: No suitable driver
Beklager :(
Avatar billede axe2 Nybegynder
02. oktober 2003 - 23:51 #30
ændringer er lavet
Avatar billede arne_v Ekspert
03. oktober 2003 - 00:37 #31
Hm.

Jeg prøvede lige at lave et eksempel.

Det virker.

C:\Jakarta\tomcat-4.1.24\webapps\pooltest>dir/s
Volume in drive C is ARNEPC2_C
Volume Serial Number is E09B-1D63

Directory of C:\Jakarta\tomcat-4.1.24\webapps\pooltest

03/10/2003  00:07      <DIR>          .
03/10/2003  00:07      <DIR>          ..
03/10/2003  00:12      <DIR>          WEB-INF
              0 File(s)              0 bytes

Directory of C:\Jakarta\tomcat-4.1.24\webapps\pooltest\WEB-INF

03/10/2003  00:12      <DIR>          .
03/10/2003  00:12      <DIR>          ..
03/10/2003  00:08      <DIR>          classes
03/10/2003  00:25                  674 web.xml
              1 File(s)            674 bytes

Directory of C:\Jakarta\tomcat-4.1.24\webapps\pooltest\WEB-INF\classes

03/10/2003  00:08      <DIR>          .
03/10/2003  00:08      <DIR>          ..
03/10/2003  00:08      <DIR>          test
              0 File(s)              0 bytes

Directory of C:\Jakarta\tomcat-4.1.24\webapps\pooltest\WEB-INF\classes\test

03/10/2003  00:08      <DIR>          .
03/10/2003  00:08      <DIR>          ..
03/10/2003  00:32                2,295 PoolTestServlet.class
03/10/2003  00:31                  888 PoolTestServlet.java
              2 File(s)          3,183 bytes

    Total Files Listed:
              3 File(s)          3,857 bytes
              11 Dir(s)  7,801,339,904 bytes free

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <servlet>
        <servlet-name>PoolTestServlet</servlet-name>
        <servlet-class>test.PoolTestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PoolTestServlet</servlet-name>
        <url-pattern>/PoolTestServlet</url-pattern>
    </servlet-mapping>
    <resource-ref>
        <res-ref-name>jdbc/TestMSAccess</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

package test;

import java.io.*;
import java.sql.*;

import javax.naming.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PoolTestServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        try {
            Context init = new InitialContext();
            Context ctx = (Context) init.lookup("java:comp/env");
            DataSource ds = (DataSource) ctx.lookup("jdbc/TestMSAccess");
            Connection con = ds.getConnection();
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
            while(rs.next()) {
                response.getOutputStream().println(rs.getInt("F1") + " " + rs.getString("F2"));
            }
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

http://localhost:8080/pooltest/PoolTestServlet

      <Context docBase="pooltest" path="/pooltest" reloadable="true">
            <Resource auth="Container" name="jdbc/TestMSAccess" type="javax.sql.DataSource" />
            <ResourceParams name="jdbc/TestMSAccess">
                <parameter>
                      <name>factory</name>
                      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
                </parameter>
                <parameter>
                      <name>maxActive</name>
                      <value>100</value>
                </parameter>
                <parameter>
                      <name>maxIdle</name>
                      <value>30</value>
                </parameter>
                <parameter>
                      <name>maxWait</name>
                      <value>10000</value>
                </parameter>
                <parameter>
                      <name>username</name>
                      <value></value>
                </parameter>
                <parameter>
                      <name>password</name>
                      <value></value>
                </parameter>
                <parameter>
                      <name>driverClassName</name>
                      <value>sun.jdbc.odbc.JdbcOdbcDriver</value>
                </parameter>
                <parameter>
                      <name>url</name>
                      <value>jdbc:odbc:TestMSAccess</value>
                </parameter>
            </ResourceParams>
          </Context>

[ovenstående fragment er indsat lige før </Host> !]
Avatar billede axe2 Nybegynder
03. oktober 2003 - 11:38 #32
Hej Arne tak for hjælpen igår, jeg vil prøve en anden løsning på problemet, der er vist andre der har/har haft samme problem.

http://forum.java.sun.com/thread.jsp?thread=267528&forum=48&message=1746688

VLH
Axe2
Avatar billede arne_v Ekspert
03. oktober 2003 - 11:53 #33
Ja - der er andre der har haft problemet, men også flere der har
fået løst det.

Det kan virke - og det skal virke !
Avatar billede axe2 Nybegynder
04. oktober 2003 - 16:00 #34
Ja det skal sikkert virke, men det gjorde det ikke for mig, heldigvis fandt jeg noget der hedder Turbine og det virker, skal du ha point !!, så jeg kan lukke
Avatar billede arne_v Ekspert
04. oktober 2003 - 16:03 #35
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester