On Sat, 16 Mar 2002, Steven Elliott wrote:
> Date: Sat, 16 Mar 2002 17:46:01 +0000
> From: Steven Elliott <[EMAIL PROTECTED]>
> Reply-To: Tomcat Users List <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Subject: Managing Tomcat(4.0.x) JNDI JDBC pool resources - Craig?
>
> Apologies in advance if this has already been answered in another thread but
> my searches have turned up numerous references to JNDI & pooling & JDBC -
> etc. but only one post mentioned managing container (Tomcat) pool resources
> and that question went unanswered as far as I could tell. Nor did I find
> anything particullarly illuminating in the Tomcat documentation. At least I
> haven't found the
>
> After reading the JDBC2.0 stdext documentation it seems that the container
> does not use the driver's ConnectionPoolDataSource interface as a factory
> for PooledConnection objects but instead (at least what I can tell from
> Tomcat) uses its own pooling resource?
>
The container exposes a javax.sql.DataSource implementation to
applications. Internally, the factory is currently based on Tyrex
(http://tyrex.exolab.org) for 4.0.x, but has switched to the DBCP package
from Jakarta Commons (http://jakarta.apache.org/commons) in the nightly
builds.
> What I don't see provided for is any kind of management methods to set Min
> or Max Pool size, or setting the initial Pool size, etc. Nor do I see any
> default values? Although I can set parameters for the DataSource object
> supported by my driver (like dataBaseName, etc. I think) I don't see any way
> to get to the setter, getter methods supported by my driver's
> ConnectionPoolDataSource factory (beyond the methods declared in the javax
> API)?
>
Tyrex, and the DBCP pool, both do their own pool management of
java.sql.Connection instances provided by your driver, so they can be used
with any JDBC driver -- even those that do not support
ConnectionPoolDataSource themselves. The DBCP based pool does have
configuration management properties for pool size and so on.
> Is there any way to configure these parameters for Tomcat? If not is there
> any way to register a third party connection pool from within server.xml or
> will this have to be done in a separate package.
>
It should be possible to use the DBCP based pool even with Tomcat 4.0.x by
overriding the default JNDI factory for javax.sql.DataSource objects (I
haven't tested this, but in theory it should all work).
This requires the following steps:
* Download recent nightly builds of the Collections, Pool, and DBCP
packages from Jakarta Commons
(http://jakarta.apache.org/builds/jakarta-commons/nightly/) and put
the JAR files into $CATALINA_HOME/common/lib along with your JDBC
driver.
* Configure the "factory" parameter in the <ResourceParams> element
to set the JNDI ObjectFactory class for this resource:
<ResourceParams name="jdbc/EmployeeDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
... other configuration parameters ...
</ResourceParams>
* Configure the other parameter values of the <ResourceParams> element
from the list of supported properties below:
- driverClassName - Fully qualified Java class name of the JDBC driver
- maxActive - Maximum number of active connections at one time
- maxIdle - Maximum number of idle connections at one time
(if more are returned to the pool, they will be
closed to release database resources)
- maxWait - Number of milliseconds the pool will wait when there
are no available connections before causing
getConnection() to throw an exception
- password - Database password
- url - Connection URL (also accepts "driverName" for
backwards compatibility)
- user - Database username
- validationQuery - Optional SQL SELECT statement used to validate a
connection before returning it to the application
(must return at least one row). This is helpful
in catching stale connections because of timeouts
or recycling of the database without stopping
Tomcat.
Alternatively, you can use any other connection pool you like, if you
create your own javax.naming.spi.ObjectFactory implementation class (the
JNDI object factory interface) and registering its name with the "factory"
parameter. Documentation is in the JNDI Specification and the
corresponding Service Provider Interface document, at:
http://java.sun.com/products/jndi/docs.html
You can use the BasicDataSourceFactory class from the Commons DBCP package
as a model.
> Thanks for any ideas/help.
>
> Steven
>
Craig
--
To unsubscribe: <mailto:[EMAIL PROTECTED]>
For additional commands: <mailto:[EMAIL PROTECTED]>
Troubles with the list: <mailto:[EMAIL PROTECTED]>