001: /*
002: * $Id: DatabaseLink.java,v 1.4 2005/06/30 01:07:47 ahimanikya Exp $
003: * =======================================================================
004: * Copyright (c) 2004 Axion Development Team. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above
011: * copyright notice, this list of conditions and the following
012: * disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The names "Tigris", "Axion", nor the names of its contributors may
020: * not be used to endorse or promote products derived from this
021: * software without specific prior written permission.
022: *
023: * 4. Products derived from this software may not be called "Axion", nor
024: * may "Tigris" or "Axion" appear in their names without specific prior
025: * written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
028: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
029: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
030: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
031: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
032: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
033: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
034: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
035: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
036: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
037: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
038: * =======================================================================
039: */
040:
041: package org.axiondb;
042:
043: import java.sql.Connection;
044: import java.sql.DriverManager;
045: import java.sql.SQLException;
046: import java.util.Properties;
047:
048: /**
049: * A Database Link that holds connection spec for a external Database <code>
050: * CREATE DATABASE LINK
051: * <name>(DRIVER=' <driver class name, e.g., oracle.jdbc.OracleDriver>' URL='
052: * <DB-specific URL, e.g., jdbc:oracle:thin:@db1:1521:db1>' USERNAME=' <username>'
053: * PASSWORD=' <password>');
054: * </code>
055: *
056: * @version $Revision: 1.4 $ $Date: 2005/06/30 01:07:47 $
057: * @author Ahimanikya Satapathy
058: */
059: public class DatabaseLink {
060: /**
061: * Create an External Server
062: */
063: public DatabaseLink(String name, Properties spec) {
064: _name = name;
065: _connProvider = getExternalConnectionProvider();
066: _connSpec = spec;
067:
068: _driverClass = spec
069: .getProperty(ExternalConnectionProvider.PROP_DRIVERCLASS);
070: _jdbcUrl = spec
071: .getProperty(ExternalConnectionProvider.PROP_JDBCURL);
072: _userName = spec
073: .getProperty(ExternalConnectionProvider.PROP_USERNAME);
074: _password = spec
075: .getProperty(ExternalConnectionProvider.PROP_PASSWORD);
076:
077: _catalogName = spec
078: .getProperty(ExternalConnectionProvider.PROP_CATALOG);
079: _schemaName = spec
080: .getProperty(ExternalConnectionProvider.PROP_SCHEMA);
081:
082: if ((_connProvider == null)
083: && (_driverClass == null
084: || _driverClass.trim().length() == 0
085: || _jdbcUrl == null
086: || _jdbcUrl.trim().length() == 0
087: || _userName == null
088: || _userName.trim().length() == 0 || _password == null)) {
089: throw new IllegalArgumentException(
090: "Missing required connection properties.");
091: }
092: }
093:
094: private ExternalConnectionProvider getExternalConnectionProvider() {
095: Object connectionProvider = null;
096: String externalConnectionProvider = System
097: .getProperty(ExternalConnectionProvider.EXTERNAL_CONNECTION_PROVIDER_PROPERTY_NAME);
098:
099: if (externalConnectionProvider != null
100: && !externalConnectionProvider.trim().equals("")) {
101: try {
102: connectionProvider = Class.forName(
103: externalConnectionProvider).newInstance();
104: } catch (Exception e) {
105: // ignore for now
106: }
107: }
108: return (ExternalConnectionProvider) connectionProvider;
109: }
110:
111: public Connection getConnection() throws AxionException {
112: Connection conn = null;
113: try {
114: if (_connProvider == null) {
115: Class.forName(_driverClass);
116: conn = DriverManager.getConnection(_jdbcUrl, _userName,
117: _password);
118: } else {
119: conn = _connProvider.getConnection(_connSpec);
120: }
121: conn.setAutoCommit(false);
122: } catch (ClassNotFoundException e) {
123: throw new AxionException(
124: "Could not locate class for driver: "
125: + _driverClass);
126: } catch (SQLException e) {
127: throw new AxionException(
128: "Could not connect to database for URL: "
129: + _jdbcUrl, e);
130: }
131: return conn;
132: }
133:
134: /**
135: * Get the name of this database link.
136: */
137: public String getName() {
138: return _name;
139: }
140:
141: /**
142: * @return Returns the _catalogName.
143: */
144: public String getCatalogName() {
145: return _catalogName;
146: }
147:
148: /**
149: * @return Returns the _schemaName.
150: */
151: public String getSchemaName() {
152: return _schemaName;
153: }
154:
155: /**
156: * @return JDBC URL to use in connecting to the associated server
157: */
158: public String getJdbcUrl() {
159: return _jdbcUrl;
160: }
161:
162: /**
163: * @return user name to authenticate against in connecting to associated server
164: */
165: public String getUserName() {
166: return _userName;
167: }
168:
169: private String _name = null;
170: private String _driverClass = null;
171: private String _jdbcUrl;
172: private String _userName;
173: private String _password;
174: private String _catalogName;
175: private String _schemaName;
176: private Properties _connSpec;
177: private ExternalConnectionProvider _connProvider;
178:
179: }
|