c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * CDDL HEADER START
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * The contents of this file are subject to the terms of the
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * Common Development and Distribution License (the "License").
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * You may not use this file except in compliance with the License.
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * See LICENSE.txt included in this distribution for the specific
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * language governing permissions and limitations under the License.
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * When distributing Covered Code, include this CDDL HEADER in each
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * file and include the License file at LICENSE.txt.
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * If applicable, add the following below this CDDL HEADER, with the
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * fields enclosed by brackets "[]" replaced with your own identifying
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * information: Portions Copyright [yyyy] [name of copyright owner]
c1dbb9010d910ca33e270c316ae2b29087dd363eKnut Anders Hatlen * CDDL HEADER END
db50fcedc48aaf1639dd7d1f0fac5f7d68f5c4c2Lubos Kosco * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlenimport java.util.concurrent.ConcurrentLinkedQueue;
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * Class that manages the pool of database connections.
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen /** The JDBC URL to use when creating new connections. */
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen /** A list of connections not currently in use. */
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen private final ConcurrentLinkedQueue<ConnectionResource> connections =
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * Create a new {@code ConnectionManager} instance.
9bc0ea09c197c784eb8b68d07d8b8559374f955fKnut Anders Hatlen * @param driverClass the name of the JDBC driver class
9bc0ea09c197c784eb8b68d07d8b8559374f955fKnut Anders Hatlen * @param url the JDBC connection URL to the database
50203181d8c071cfd69cb197b5da0eda5c4d6372Jens Elkner * @throws ClassNotFoundException if the JDBC driver class cannot be found
9bc0ea09c197c784eb8b68d07d8b8559374f955fKnut Anders Hatlen public ConnectionManager(String driverClass, String url)
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * Open a new connection to the database.
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * @return a {@code Connection} object
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * @throws SQLException if a database error occurs
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen Connection openConnection() throws SQLException {
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * Get a {@code ConnectionResource} object from the pool, or create a
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * new one if the pool is empty. Callers should make sure that the object
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * is returned to the pool by calling
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * {@link #releaseConnection(ConnectionResource)} after they are finished
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * @return a {@code ConnectionResource} object
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * @throws SQLException if a database error occurs
d10fb4b3f871cf4d673fd0696ed9f81e7046f9c2Vladimir Kotal public synchronized ConnectionResource getConnectionResource() throws SQLException {
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen ConnectionResource cr = connections.poll();
567950de13c6cd5dd7403fce4cadf818c3b8668cKnut Anders Hatlen * Return a {@code ConnectionResource} back to the pool.
db50fcedc48aaf1639dd7d1f0fac5f7d68f5c4c2Lubos Kosco * @param cr connection resource object
db50fcedc48aaf1639dd7d1f0fac5f7d68f5c4c2Lubos Kosco * @throws SQLException if any error occurs