/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.oracle; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import oracle.jdbc.pool.OracleConnectionPoolDataSource; import org.geotools.data.jdbc.ConnectionPool; import org.geotools.data.jdbc.ConnectionPoolManager; import org.geotools.data.jdbc.datasource.DataSourceFinder; import org.geotools.data.jdbc.datasource.DataSourceUtil; /** * Provides javax.sql.DataSource wrapper around an OracleConnection object. * * @author Sean Geoghegan, Defence Science and Technology Organisation * @author $Author: seangeo $ * * @source $URL$ * @version $Id$ * @deprecated Use {@link DataSource}, {@link DataSourceUtil} and {@link DataSourceFinder} instead */ public class OracleConnectionFactory { /** The prefix of an Oracle JDBC url */ private static final String JDBC_PATH = "jdbc:oracle:thin:@"; /** The prefix of an Oracle OCI JDBC url */ private static final String OCI_PATH = "jdbc:oracle:oci:@"; /** Map that contains Connection Pool Data Sources */ private static Map dataSources = new HashMap(); /** The url to the DB */ private String dbUrl; /** The username to login with */ private String username = ""; /** The password to login with */ private String passwd = ""; /** * BDT ADDED 2004/08/02 This constructor sets up a connection factor for * OCI connection. The alias refers to values defined by Oracle Net * Configuration assitant and stored in * $ORACLE_HOME/network/admin/tnsnames.ora OCI connection require you to * install the oracle client software. The classes12.jar MUST be taken * from $ORACLE_HOME/jdbc/lib Creates a new OracleConnection object that * wraps a oracle.jdbc.driver.OracleConnection. * * @param alias The host to connect to. */ public OracleConnectionFactory(String alias) { dbUrl = OCI_PATH + alias; } /** * Creates a new OracleConnection object that wraps a * oracle.jdbc.driver.OracleConnection. * * @param host The host to connect to. * @param port The port number on the host * @param instance The instance name on the host */ public OracleConnectionFactory(String host, String port, String instance) { if( instance.startsWith("(") ) dbUrl = JDBC_PATH + instance; else if( instance.startsWith("/") ) dbUrl = JDBC_PATH + "//" + host + ":" + port + instance; else dbUrl = JDBC_PATH + host + ":" + port + ":" + instance; } /** * Creates the real OracleConnection. Logs in to the Oracle Database and * creates the OracleConnection object. * * @param user The user name. * @param pass The password * * @return The real OracleConnection object. * * @throws SQLException If an error occurs connecting to the DB. */ public ConnectionPool getConnectionPool(String user, String pass) throws SQLException { String poolKey = dbUrl + user + pass; OracleConnectionPoolDataSource poolDataSource = (OracleConnectionPoolDataSource) dataSources .get(poolKey); if (poolDataSource == null) { poolDataSource = new OracleConnectionPoolDataSource(); poolDataSource.setURL(dbUrl); poolDataSource.setUser(user); poolDataSource.setPassword(pass); dataSources.put(poolKey, poolDataSource); } ConnectionPoolManager manager = ConnectionPoolManager.getInstance(); ConnectionPool connectionPool = manager.getConnectionPool(poolDataSource); return connectionPool; } /** * Creates the real OracleConnection. Logs into the database using the * credentials provided by setLogin * * @return The oracle connection to the data base. * * @throws SQLException If an error occurs connecting to the DB. */ public ConnectionPool getConnectionPool() throws SQLException { return getConnectionPool(username, passwd); } /** * Sets the login credentials. * * @param user The username * @param pass The password */ public void setLogin(String user, String pass) { this.username = user; this.passwd = pass; } }