All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tomcat.dbcp.dbcp2.datasources.package-info Maven / Gradle / Ivy

There is a newer version: 11.0.1
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * 

* This package contains two DataSources: {@code PerUserPoolDataSource} and * {@code SharedPoolDataSource} which provide a database connection pool. * Below are a couple of usage examples. One shows deployment into a JNDI system. * The other is a simple example initializing the pool using standard Java code. *

*

JNDI

*

* Most * J2EE containers will provide some way of deploying resources into JNDI. The * method will vary among containers, but once the resource is available via * JNDI, the application can access the resource in a container independent * manner. The following example shows deployment into tomcat (catalina). *

*

In server.xml, the following would be added to the <Context> for your * webapp: *

*
 *  <Resource name="jdbc/bookstore" auth="Container"
 *             type="org.apache.tomcat.dbcp.dbcp2.datasources.PerUserPoolPoolDataSource"/>
 *   <ResourceParams name="jdbc/bookstore">
 *     <parameter>
 *       <name>factory</name>
 *       <value>org.apache.tomcat.dbcp.dbcp2.datasources.PerUserPoolDataSourceFactory</value>
 *     </parameter>
 *     <parameter>
 *       <name>dataSourceName</name><value>java:comp/env/jdbc/bookstoreCPDS</value>
 *     </parameter>
 *     <parameter>
 *       <name>defaultMaxTotal</name><value>30</value>
 *     </parameter>
 *   </ResourceParams>
 * 
*

* In web.xml. Note that elements must be given in the order of the dtd * described in the servlet specification: *

*
 * <resource-ref>
 *   <description>
 *     Resource reference to a factory for java.sql.Connection
 *     instances that may be used for talking to a particular
 *     database that is configured in the server.xml file.
 *   </description>
 *   <res-ref-name>
 *     jdbc/bookstore
 *   </res-ref-name>
 *   <res-type>
 *     org.apache.tomcat.dbcp.dbcp2.datasources.PerUserPoolDataSource
 *   </res-type>
 *   <res-auth>
 *     Container
 *   </res-auth>
 * </resource-ref>
 * 
*

* Apache Tomcat deploys all objects configured similarly to above within the * java:comp/env namespace. So the JNDI path given for * the dataSourceName parameter is valid for a * {@code ConnectionPoolDataSource} that is deployed as given in the * cpdsadapter example *

*

* The {@code DataSource} is now available to the application as shown * below: *

*
 *     Context ctx = new InitialContext();
 *     DataSource ds = (DataSource)
 *         ctx.lookup("java:comp/env/jdbc/bookstore");
 *     Connection con = null;
 *     try
 *     {
 *         con = ds.getConnection();
 *         ...
 *         use the connection
 *         ...
 *     }
 *     finally
 *     {
 *         if (con != null)
 *             con.close();
 *     }
 * 
*

* The reference to the {@code DataSource} could be maintained, for * multiple getConnection() requests. Or the {@code DataSource} can be * looked up in different parts of the application code. * {@code PerUserPoolDataSourceFactory} and * {@code SharedPoolDataSourceFactory} will maintain the state of the pool * between different lookups. This behavior may be different in other * implementations. *

*

Without JNDI

*

* Connection pooling is useful in applications regardless of whether they run * in a J2EE environment and a {@code DataSource} can be used within a * simpler environment. The example below shows SharedPoolDataSource using * DriverAdapterCPDS as the back end source, though any CPDS is applicable. *

*
 * public class Pool {
 *
 *     private static DataSource ds;
 *
 *     static {
 *         DriverAdapterCPDS cpds = new DriverAdapterCPDS();
 *         cpds.setDriver("org.gjt.mm.mysql.Driver");
 *         cpds.setUrl("jdbc:mysql://localhost:3306/bookstore");
 *         cpds.setUser("foo");
 *         cpds.setPassword(null);
 *
 *         SharedPoolDataSource tds = new SharedPoolDataSource();
 *         tds.setConnectionPoolDataSource(cpds);
 *         tds.setMaxTotal(10);
 *         tds.setMaxWaitMillis(50);
 *
 *         ds = tds;
 *     }
 *
 *     public static getConnection() {
 *         return ds.getConnection();
 *     }
 * }
 * 
*

* This class can then be used wherever a connection is needed: *

*
 *     Connection con = null;
 *     try {
 *         con = Pool.getConnection();
 *         ...
 *         use the connection
 *         ...
 *     } finally {
 *         if (con != null) {
 *             con.close();
 *         }
 *     }
 * 
*/ package org.apache.tomcat.dbcp.dbcp2.datasources;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy