KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > conn > DriverDataSource


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56
57 package org.objectstyle.cayenne.conn;
58
59 import java.io.PrintWriter JavaDoc;
60 import java.sql.Connection JavaDoc;
61 import java.sql.Driver JavaDoc;
62 import java.sql.DriverManager JavaDoc;
63 import java.sql.SQLException JavaDoc;
64 import java.util.Properties JavaDoc;
65
66 import javax.sql.DataSource JavaDoc;
67
68 /**
69  * A DataSource implementation wrapping a JDBC driver.
70  *
71  * @author Andrei Adamchik
72  */

73 public class DriverDataSource implements DataSource JavaDoc {
74
75     protected Driver JavaDoc driver;
76
77     protected String JavaDoc connectionUrl;
78     protected String JavaDoc userName;
79     protected String JavaDoc password;
80
81     protected ConnectionEventLoggingDelegate logger;
82
83     /**
84      * Creates a new DriverDataSource.
85      */

86     public DriverDataSource(String JavaDoc driverClassName, String JavaDoc connectionUrl)
87             throws SQLException JavaDoc {
88
89         this.connectionUrl = connectionUrl;
90
91         if (driverClassName != null) {
92             try {
93                 this.driver = (Driver JavaDoc) Class.forName(driverClassName).newInstance();
94             }
95             catch (Exception JavaDoc ex) {
96                 throw new SQLException JavaDoc("Can not load JDBC driver named '"
97                         + driverClassName
98                         + "': "
99                         + ex.getMessage());
100             }
101         }
102     }
103
104     /**
105      * Creates a new DriverDataSource wrapping a given Driver.
106      *
107      * @since 1.1
108      */

109     public DriverDataSource(Driver JavaDoc driver, String JavaDoc connectionUrl, String JavaDoc userName,
110             String JavaDoc password) {
111         this.driver = driver;
112         this.connectionUrl = connectionUrl;
113         this.userName = userName;
114         this.password = password;
115     }
116
117     /**
118      * Returns a new database connection, using preconfigured data to locate the database
119      * and obtain a connection.
120      */

121     public Connection JavaDoc getConnection() throws SQLException JavaDoc {
122         // login with internal credentials
123
return getConnection(userName, password);
124     }
125
126     /**
127      * Returns a new database connection using provided credentials to login to the
128      * database.
129      */

130     public Connection JavaDoc getConnection(String JavaDoc userName, String JavaDoc password) throws SQLException JavaDoc {
131         try {
132             if (logger != null) {
133                 logger.logConnect(connectionUrl, userName, password);
134             }
135
136             Connection JavaDoc c = null;
137
138             if (driver == null) {
139                 c = DriverManager.getConnection(connectionUrl, userName, password);
140             }
141             else {
142                 Properties JavaDoc connectProperties = new Properties JavaDoc();
143
144                 if (userName != null) {
145                     connectProperties.put("user", userName);
146                 }
147
148                 if (password != null) {
149                     connectProperties.put("password", password);
150                 }
151                 c = driver.connect(connectionUrl, connectProperties);
152             }
153             
154             // some drivers (Oracle) return null connections instead of throwing
155
// an exception... fix it here
156

157             if (c == null) {
158                 throw new SQLException JavaDoc("Can't establish connection: " + connectionUrl);
159             }
160
161             if (logger != null) {
162                 logger.logConnectSuccess();
163             }
164
165             return c;
166         }
167         catch (SQLException JavaDoc sqlex) {
168             if (logger != null) {
169                 logger.logConnectFailure(sqlex);
170             }
171
172             throw sqlex;
173         }
174     }
175
176     public int getLoginTimeout() throws SQLException JavaDoc {
177         return -1;
178     }
179
180     public void setLoginTimeout(int seconds) throws SQLException JavaDoc {
181         // noop
182
}
183
184     public PrintWriter JavaDoc getLogWriter() throws SQLException JavaDoc {
185         return DriverManager.getLogWriter();
186     }
187
188     public void setLogWriter(PrintWriter JavaDoc out) throws SQLException JavaDoc {
189         DriverManager.setLogWriter(out);
190     }
191
192     public ConnectionEventLoggingDelegate getLogger() {
193         return logger;
194     }
195
196     public void setLogger(ConnectionEventLoggingDelegate delegate) {
197         logger = delegate;
198     }
199 }
Popular Tags