001: /*
002: * Copyright (C) 2004 Giuseppe MANNA
003: *
004: * This file is part of FreeReportBuilder
005: *
006: * FreeReportBuilder is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License
008: * as published by the Free Software Foundation; either version 2
009: * of the License, or (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
019: *
020: */
021:
022: package it.frb.admin;
023:
024: import it.frb.*;
025: import java.io.*;
026: import java.net.*;
027: import java.sql.*;
028: import java.util.*;
029: import javax.swing.*;
030:
031: public class ConnectionPool {
032:
033: private static Hashtable htConnPool = new Hashtable();
034: private static ConnDefinition connDef = null;
035: private static Connection conn = null;
036:
037: public static void setConnectionDefinition(ConnDefinition cd) {
038: connDef = cd;
039: }
040:
041: public static ConnDefinition getConnectionDefinition() {
042: return connDef;
043: }
044:
045: public static Connection getNewConnection(String sCatalog) {
046: try {
047: conn = DriverManager.getConnection(connDef.getURL(),
048: connDef.getUser(), connDef.getPassword());
049: } catch (Exception exc) {
050: JOptionPane.showMessageDialog(null, "connection problem: "
051: + exc.getMessage());
052: }
053:
054: return conn;
055: }
056:
057: public static void setConnection(String sCatalog,
058: Connection connnection) {
059: Connection conn = (Connection) ConnectionPool.htConnPool
060: .get((sCatalog == null) ? "null" : sCatalog);
061:
062: if (conn == null) {
063: ConnectionPool.htConnPool.put((sCatalog == null) ? "null"
064: : sCatalog, connnection);
065: }
066: }
067:
068: public static Connection getConnection(String sCatalog) {
069: Connection conn = (Connection) ConnectionPool.htConnPool
070: .get((sCatalog == null) ? "null" : sCatalog);
071: try {
072: if (conn == null) {
073: conn = DriverManager.getConnection(connDef.getURL(),
074: connDef.getUser(), connDef.getPassword());
075:
076: if (conn != null)
077: htConnPool.put((sCatalog == null) ? "null"
078: : sCatalog, conn);
079: } else if (conn.isClosed()) {
080: ConnectionPool.htConnPool
081: .remove((sCatalog == null) ? "null" : sCatalog);
082: conn = getConnection(sCatalog);
083: }
084: } catch (Exception exc) {
085: JOptionPane.showMessageDialog(null, exc.getMessage());
086: }
087:
088: return conn;
089: }
090:
091: public static void closeAllConnection() throws SQLException {
092: if (htConnPool != null && htConnPool.size() > 0) {
093: Enumeration enumConn = htConnPool.elements();
094: while (enumConn.hasMoreElements()) {
095: Connection conn = (Connection) enumConn.nextElement();
096: if (!conn.isClosed()) {
097: conn.close();
098: }
099: }
100: }
101: }
102:
103: public static boolean openConnection(String drv, String url,
104: String uid, String pwd) {
105: InfoDriverPane.InfoElement dinfo = new InfoDriverPane.InfoElement();
106: dinfo.driver = drv;
107:
108: InfoProfilePane.InfoElement pinfo = new InfoProfilePane.InfoElement(
109: dinfo);
110: pinfo.url = url;
111: pinfo.uid = uid;
112:
113: connDef.setURL(url);
114: connDef.setUser(uid);
115: connDef.setPassword(pwd);
116: connDef.setDriverName(drv);
117:
118: return openConnection(pinfo, pwd);
119: }
120:
121: private static boolean openConnection(
122: InfoProfilePane.InfoElement pinfo, String pwd) {
123: URLClassLoader loader = null;
124:
125: if (pinfo.dinfo.file != null
126: && !pinfo.dinfo.file.equals("$CLASSPATH")) {
127: File file = new File(pinfo.dinfo.file);
128: if (file.exists()) {
129: try {
130: loader = new URLClassLoader(new URL[] { file
131: .toURL() }, ClassLoader
132: .getSystemClassLoader());
133: } catch (MalformedURLException mue) {
134: mue.printStackTrace();
135: }
136: }
137: }
138:
139: return openConnection(loader, pinfo, pwd);
140: }
141:
142: private static boolean openConnection(ClassLoader l,
143: InfoProfilePane.InfoElement pinfo, String pwd) {
144: Connection connection = null;
145:
146: //closeConnection();
147: //this.pinfo = pinfo;
148:
149: try {
150: closeAllConnection();
151:
152: if (l == null) {
153: Class.forName(pinfo.dinfo.driver);
154: connection = DriverManager.getConnection(pinfo.url,
155: pinfo.uid, pwd);
156: } else {
157: Class c = Class.forName(pinfo.dinfo.driver, true, l);
158:
159: Properties info = new Properties();
160: if (pinfo.uid != null) {
161: info.put("user", pinfo.uid);
162: }
163: if (pwd != null) {
164: info.put("password", pwd);
165: }
166:
167: Driver d = (Driver) c.newInstance();
168: connection = d.connect(pinfo.url, info);
169: }
170:
171: //setConnection(connection.getCatalog(), connection);
172: setConnection(pinfo.name, connection);
173:
174: } catch (Exception e) {
175: JOptionPane.showMessageDialog(null, e.toString(),
176: "Exception", 0);
177: return false;
178: }
179:
180: return true;
181: }
182: }
|