> Hi,
> I am trying to set-up Connection pooling for my web application,
> I have made the following modifications to my server.xml file.
>
> <!-- Example Server Configuration File -->
> <!-- Note that component elements are nested corresponding to their
> parent-child relationships with each other -->
>
> <!-- 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 port="8005" shutdown="SHUTDOWN" debug="0">
>
>
> <!-- Comment these entries out to disable JMX MBeans support -->
> <!-- You may also configure custom components (e.g. Valves/Realms)
> by
> including your own mbean-descriptor file(s), and setting the
> "descriptors" attribute to point to a ';' seperated list of
> paths
> (in the ClassLoader sense) of files to add to the default list.
> e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
> -->
> <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>
>
> <!--> Modified by Amar Lingala on 09/15/04 <-->
> <Resource name="jdbc/myoracle" auth="Container"
> type="javax.sql.DataSource"/>
>
> <ResourceParams name="jdbc/myoracle">
> <parameter>
> <name>factory</name>
>
> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
> </parameter>
> <parameter>
> <name>driverClassName</name>
> <value>oracle.jdbc.driver.OracleDriver</value>
> </parameter>
> <parameter>
> <name>url</name>
>
> <!--value>jdbc:oracle:thin:[EMAIL PROTECTED]:1521:mysid</value-->
>
> <value>jdbc:oracle:thin:@chd4.sbc.com:1521:ostl411</value>
> </parameter>
> <parameter>
> <name>username</name>
> <value>scott</value>
> </parameter>
> <parameter>
> <name>password</name>
> <value>tiger</value>
> </parameter>
> <parameter>
> <name>maxActive</name>
> <value>20</value>
> </parameter>
> <parameter>
> <name>maxIdle</name>
> <value>10</value>
> </parameter>
> <parameter>
> <name>maxWait</name>
> <value>-1</value>
> </parameter>
> </ResourceParams>
> <!-->End of Modification <-->
>
> </GlobalNamingResources>
>
> <!-- 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="Catalina">
>
> <!-- 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 (see the SSL
> Config
> HOWTO in the Tomcat 5 documentation bundle for more detailed
> instructions):
> * If your JDK version 1.3 or prior, download and install JSSE
> 1.0.2 or
> later, and put the JAR files into "$JAVA_HOME/jre/lib/ext".
> * Execute:
> %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
> (Windows)
> $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
> (Unix)
> with a password value of "changeit" for both the
> certificate and
> the keystore itself.
>
> 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 Coyote HTTP/1.1 Connector on port 8080 -->
> <Connector port="8080"
> maxThreads="150" minSpareThreads="25"
> maxSpareThreads="75"
> enableLookups="false" redirectPort="8443"
> acceptCount="100"
> debug="0" connectionTimeout="20000"
> disableUploadTimeout="true" />
> <!-- Note : To disable connection timeouts, set connectionTimeout
> value
> to 0 -->
>
> <!-- Note : To use gzip compression you could set the following
> properties :
>
> compression="on"
> compressionMinSize="2048"
> noCompressionUserAgents="gozilla, traviata"
> compressableMimeType="text/html,text/xml"
> -->
>
> <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
> <!--
> <Connector port="8443"
> maxThreads="150" minSpareThreads="25"
> maxSpareThreads="75"
> enableLookups="false" disableUploadTimeout="true"
> acceptCount="100" debug="0" scheme="https"
> secure="true"
> clientAuth="false" sslProtocol="TLS" />
> -->
>
> <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
> <Connector port="8009"
> enableLookups="false" redirectPort="8443" debug="0"
> protocol="AJP/1.3" />
>
> <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
> <!-- See proxy documentation for more information about using
> this. -->
> <!--
> <Connector port="8082"
> maxThreads="150" minSpareThreads="25"
> maxSpareThreads="75"
> enableLookups="false"
> acceptCount="100" debug="0" connectionTimeout="20000"
> proxyPort="80" disableUploadTimeout="true" />
> -->
>
> <!-- 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
> on to the appropriate Host (virtual host). -->
>
> <!-- You should set jvmRoute to support load-balancing via JK/JK2
> ie :
> <Engine name="Standalone" defaultHost="localhost" debug="0"
> jvmRoute="jvm1">
> -->
>
> <!-- Define the top level container in our container hierarchy -->
> <Engine name="Catalina" defaultHost="localhost" debug="0">
>
> <!-- 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.4
> 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
> element to enable it. -->
> <!--
> <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 -->
>
> <!-- This Realm uses the UserDatabase configured in the global
> JNDI
> resources under the key "UserDatabase". Any edits
> that are performed against this UserDatabase are
> immediately
> available for use by the Realm. -->
> <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
> debug="0" resourceName="UserDatabase"/>
>
> <!-- Comment out the old realm but leave here for now in case we
> need to go back quickly -->
> <!--
> <Realm className="org.apache.catalina.realm.MemoryRealm" />
> -->
>
> <!-- Replace the above Realm with one of the following to get a
> Realm
> stored in a database and accessed via JDBC -->
>
> <!--
> <Realm className="org.apache.catalina.realm.JDBCRealm"
> debug="99"
> driverName="org.gjt.mm.mysql.Driver"
> connectionURL="jdbc:mysql://localhost/authority"
> connectionName="test" connectionPassword="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"
> connectionName="scott" connectionPassword="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
> Note: XML Schema validation will not work with Xerces 2.2.
> -->
> <Host name="localhost" debug="0" appBase="webapps"
> unpackWARs="true" autoDeploy="true"
> xmlValidation="false" xmlNamespaceAware="false">
>
> <!-- Defines a cluster for this node,
> By defining this element, means that every manager will
> be changed.
> So when running a cluster, only make sure that you have
> webapps in there
> that need to be clustered and remove the other ones.
> A cluster has the following parameters:
>
> className = the fully qualified name of the cluster class
>
> name = a descriptive name for your cluster, can be
> anything
>
> debug = the debug level, higher means more output
>
> mcastAddr = the multicast address, has to be the same for
> all the nodes
>
> mcastPort = the multicast port, has to be the same for
> all the nodes
>
> mcastBindAddr = bind the multicast socket to a specific
> address
>
> mcastTTL = the multicast TTL if you want to limit your
> broadcast
>
> mcastSoTimeout = the multicast readtimeout
>
> mcastFrequency = the number of milliseconds in between
> sending a "I'm alive" heartbeat
>
> mcastDropTime = the number a milliseconds before a node
> is considered "dead" if no heartbeat is received
>
> tcpThreadCount = the number of threads to handle incoming
> replication requests, optimal would be the same amount of threads as
> nodes
>
> tcpListenAddress = the listen address (bind address) for
> TCP cluster request on this host,
> in case of multiple ethernet cards.
> auto means that address becomes
>
> InetAddress.getLocalHost().getHostAddress()
>
> tcpListenPort = the tcp listen port
>
> tcpSelectorTimeout = the timeout (ms) for the
> Selector.select() method in case the OS
> has a wakup bug in java.nio. Set to
> 0 for no timeout
>
> printToScreen = true means that managers will also print
> to std.out
>
> expireSessionsOnShutdown = true means that
>
> useDirtyFlag = true means that we only replicate a
> session after setAttribute,removeAttribute has been called.
> false means to replicate the session after
> each request.
> false means that replication would work
> for the following piece of code:
> <%
> HashMap map =
> (HashMap)session.getAttribute("map");
> map.put("key","value");
> %>
> replicationMode = can be either 'pooled', 'synchronous'
> or 'asynchronous'.
> * Pooled means that the replication
> happens using several sockets in a synchronous way. Ie, the data gets
> replicated, then the request return. This is the same as the
> 'synchronous' setting except it uses a pool of sockets, hence it is
> multithreaded. This is the fastest and safest configuration. To use
> this, also increase the nr of tcp threads that you have dealing with
> replication.
> * Synchronous means that the thread
> that executes the request, is also the
> thread the replicates the data to the
> other nodes, and will not return until all
> nodes have received the information.
> * Asynchronous means that there is a
> specific 'sender' thread for each cluster node,
> so the request thread will queue the
> replication request into a "smart" queue,
> and then return to the client.
> The "smart" queue is a queue where when
> a session is added to the queue, and the same session
> already exists in the queue from a
> previous request, that session will be replaced
> in the queue instead of replicating two
> requests. This almost never happens, unless there is a
> large network delay.
> -->
> <!--
> When configuring for clustering, you also add in a valve
> to catch all the requests
> coming in, at the end of the request, the session may or
> may not be replicated.
> A session is replicated if and only if all the conditions
> are met:
> 1. useDirtyFlag is true or setAttribute or removeAttribute
> has been called AND
> 2. a session exists (has been created)
> 3. the request is not trapped by the "filter" attribute
>
> The filter attribute is to filter out requests that could
> not modify the session,
> hence we don't replicate the session after the end of this
> request.
> The filter is negative, ie, anything you put in the
> filter, you mean to filter out,
> ie, no replication will be done on requests that match one
> of the filters.
> The filter attribute is delimited by ;, so you can't
> escape out ; even if you wanted to.
>
> filter=".*\.gif;.*\.js;" means that we will not replicate
> the session after requests with the URI
> ending with .gif and .js are intercepted.
>
> The deployer element can be used to deploy apps cluster
> wide.
> Currently the deployment only deploys/undeploys to working
> members in the cluster
> so no WARs are copied upons startup of a broken node.
> The deployer watches a directory (watchDir) for WAR files
> when watchEnabled="true"
> When a new war file is added the war gets deployed to the
> local instance,
> and then deployed to the other instances in the cluster.
> When a war file is deleted from the watchDir the war is
> undeployed locally
> and cluster wide
> -->
>
> <!--
> <Cluster
> className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
>
> managerClassName="org.apache.catalina.cluster.session.DeltaManager"
> expireSessionsOnShutdown="false"
> useDirtyFlag="true">
>
> <Membership
>
> className="org.apache.catalina.cluster.mcast.McastService"
> mcastAddr="228.0.0.4"
> mcastPort="45564"
> mcastFrequency="500"
> mcastDropTime="3000"/>
>
> <Receiver
>
> className="org.apache.catalina.cluster.tcp.ReplicationListener"
> tcpListenAddress="auto"
> tcpListenPort="4001"
> tcpSelectorTimeout="100"
> tcpThreadCount="6"/>
>
> <Sender
>
> className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
> replicationMode="pooled"/>
>
> <Valve
> className="org.apache.catalina.cluster.tcp.ReplicationValve"
>
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
>
> <Deployer
> className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
> tempDir="/tmp/war-temp/"
> deployDir="/tmp/war-deploy/"
> watchDir="/tmp/war-listen/"
> watchEnabled="false"/>
> </Cluster>
> -->
>
>
>
> <!-- 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
> in this virtual host. -->
> <!--
> <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" prefix="localhost_access_log."
> suffix=".txt"
> pattern="common" resolveHosts="false"/>
> -->
>
> <!-- 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
> directory.-->
> <Logger className="org.apache.catalina.logger.FileLogger"
> directory="logs" prefix="localhost_log."
> suffix=".txt"
> timestamp="true"/>
>
> </Host>
>
> </Engine>
>
> </Service>
>
> </Server>
>
> But whenever I try to access the database I get the following error.
>
>
> org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver
> of class '' for connect URL 'null'
> at
> org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSour
> ce.java:780)
> at
> org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.
> java:540)
> at
> com.sbc.ssbilling.database.DBConnectionImpl.makeDBConnection(DBConnect
> ionImpl.java:63)
> at
> com.sbc.ssbilling.calculation.action.CalculationsReportAction.execute(
> CalculationsReportAction.java:49)
> at
> org.apache.struts.action.RequestProcessor.processActionPerform(Request
> Processor.java:484)
> at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.jav
> a:274)
> at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482
> )
> at
> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> cationFilterChain.java:237)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lterChain.java:157)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> lve.java:214)
> at
> org.apache.catalina.core.StandardValveContext.invokeNext(StandardValve
> Context.java:104)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
> at
> org.apache.catalina.core.StandardContextValve.invokeInternal(StandardC
> ontextValve.java:198)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> lve.java:152)
> at
> org.apache.catalina.core.StandardValveContext.invokeNext(StandardValve
> Context.java:104)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> va:137)
> at
> org.apache.catalina.core.StandardValveContext.invokeNext(StandardValve
> Context.java:104)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> va:117)
> at
> org.apache.catalina.core.StandardValveContext.invokeNext(StandardValve
> Context.java:102)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValv
> e.java:109)
> at
> org.apache.catalina.core.StandardValveContext.invokeNext(StandardValve
> Context.java:104)
> at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java
> :520)
> at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
> at
> org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160
> )
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 799)
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> sConnection(Http11Protocol.java:705)
> at
> org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:
> 577)
> at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPo
> ol.java:683)
> at java.lang.Thread.run(Thread.java:534)
> Caused by: java.sql.SQLException: No suitable driver
> at java.sql.DriverManager.getDriver(DriverManager.java:243)
> at
> org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSour
> ce.java:773)
> ... 33 more
>
>
> Any help would be greatly appreciated.
>
>
> Thanks
> Amar
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]