1   /* ====================================================================
2    * License: 
3    * 
4    * Redistribution and use in source and binary forms, with or without
5    * modification, are permitted provided that the following conditions
6    * are met:
7    *
8    * 1. Redistributions of source code must retain the above copyright
9    *    notice, this list of conditions and the following disclaimer.
10   *
11   * 2. Redistributions in binary form must reproduce the above copyright
12   *    notice, this list of conditions and the following disclaimer in
13   *    the documentation and/or other materials provided with the
14   *    distribution.
15   *
16   * 3. The end-user documentation included with the redistribution,
17   *    if any, must include the following acknowledgment:
18   *       "This product includes software developed by 
19   *        Robert Half International (http://www.rhi.com/)."
20   *    Alternately, this acknowledgment may appear in the software itself,
21   *    if and wherever such third-party acknowledgments normally appear.
22   *
23   * 4. The names "Parc", "RHI", and "Robert Half International" must
24   *    not be used to endorse or promote products derived from this
25   *    software without prior written permission. For written
26   *    permission, please contact pete.mckinstry@rhi.com.
27   *
28   * 5. Products derived from this software may not be called "PARC",
29   *    nor may "PARC" appear in their name, without prior written
30   *    permission of Robert Half International.
31   *
32   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
33   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
34   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
36   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
39   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
41   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
42   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43   * SUCH DAMAGE.
44   * ====================================================================
45   *
46   */
47  package com.rhi.architecture.db;
48  
49  import com.rhi.architecture.config.ConfigurationException;
50  import com.rhi.architecture.logging.LogUtil;
51  import com.rhi.architecture.logging.Logger;
52  
53  import java.sql.Connection;
54  import java.sql.PreparedStatement;
55  import java.sql.SQLException;
56  
57  import org.apache.commons.dbcp.ConnectionFactory;
58  
59  /***
60   * Wrapper/Decorator Factory which allows you to run an arbitrary 
61   * SQL statement after each connection is created. This can be 
62   * useful for calling "use schema ?" or or any number of other 
63   * connection intialization statements before passing the 
64   * connection back to the client.
65   * 
66   * @author Pete McKinstry
67   * @copyright 2002, Robert Half Int'l. All rights reserved.
68   * @version 1.0
69   */
70  public class InitializingConnectionFactory implements ConnectionFactory {
71  
72     private ConnectionFactory factory = null;
73     private String sql = null;
74  
75     private static Logger log;
76     /***
77      * Constructor - the Connection factory you wish to supplement. 
78       * (can be any type), and the SQL which you wish to run after
79       * each conncection. If the SQL String is null, nothing is done 
80       * & the connection is returned. 
81       * 
82      * @param factory
83      * @param sql
84      */
85     public InitializingConnectionFactory(
86        ConnectionFactory factory,
87        String sql) {
88        this.factory = factory;
89        this.sql = sql;
90  
91        try {
92           InitializingConnectionFactory.log = LogUtil.getLogger();
93        }
94        catch (ConfigurationException e) {
95           // ignore
96        }
97     }
98  
99     /***
100     * Create the connection using the provided connection factory. After
101     * the connection is created, call the intialization statement to 
102     * "prepare" the connection. Then return it. If a null or empty SQL
103     * string is passed, no statement is executed. 
104     * 
105     * @return Connection
106     * @see org.apache.commons.dbcp.ConnectionFactory#createConnection()
107     * @since 1.0
108     * @throws SQLException
109     */
110    public Connection createConnection() throws SQLException {
111       Connection conn;
112       try {
113          conn = factory.createConnection();
114          if (conn == null) {
115             throw new SQLException("createConnection() returns null");
116          }
117       }
118       catch (SQLException e) {
119          throw e;
120       }
121       PreparedStatement stmt = null;
122       try {
123          if ((conn != null) && (sql != null) && (sql.length() > 0)) {
124             stmt = conn.prepareStatement(sql);
125             stmt.executeUpdate();
126          }
127       }
128       catch (SQLException e) {
129          if (stmt != null) {
130             try {
131                stmt.close();
132             }
133             catch (SQLException stmtE) {
134                // ignore
135             }
136          }
137       }
138       return conn;
139    }
140 
141 }
This page was automatically generated by Maven