View Javadoc

1   /***
2    *  The contents of this file are subject to the Mozilla Public
3    *  License Version 1.1 (the "License"); you may not use this file
4    *  except in compliance with the License. You may obtain a copy of
5    *  the License at http://www.mozilla.org/MPL/
6    *
7    *  Software distributed under the License is distributed on an "AS
8    *  IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9    *  implied. See the License for the specific language governing
10   *  rights and limitations under the License.
11   *
12   *  The Original Code is pow2toolkit library.
13   *
14   *  The Initial Owner of the Original Code is
15   *  Power Of Two S.R.L. (www.pow2.com)
16   *
17   *  Portions created by Power Of Two S.R.L. are
18   *  Copyright (C) Power Of Two S.R.L.
19   *  All Rights Reserved.
20   *
21   * Contributor(s):
22   */
23  
24  package com.pow2.dao;
25  
26  
27  import java.sql.Connection;
28  import java.sql.SQLException;
29  
30  import org.apache.log4j.Category;
31  
32  
33  /***
34   *  ConnectionFactory class.
35   *  <br>
36   *  Provides SQL Connection objects using the
37   *  underlying ConnectionProvider instance.
38   *
39   * @author  Luca Fossato <fossato@pow2.com>
40   * @created  25 giugno 2002
41   */
42  public class ConnectionFactory
43  {
44    /*** Log4j category */
45    private Category cat = Category.getInstance(this.getClass());
46  
47    /*** an handle to the unique ConnectionFactory instance. */
48    private static ConnectionFactory instance = null;
49  
50    /*** default ConnectionProvider instance */
51    private ConnectionProvider provider = null;
52  
53  
54    /***
55     *   Constructor for the ConnectionFactory object
56     */
57    private ConnectionFactory()
58    {
59    }
60  
61  
62    /***
63     *  Get the unique instance of ConnectionFactory class.
64     *
65     * @return  the instance of ConnectionFactory class
66     */
67    public static synchronized ConnectionFactory instance()
68    {
69      if (instance == null)
70        instance = new ConnectionFactory();
71  
72      return instance;
73    }
74  
75  
76    /***
77     *  Set the ConnectionProvider object
78     *
79     * @param  prefs     the connection provider preferences object
80     * @throws Exception if any error occurs
81     */
82    public synchronized void setProvider(ConnectionProviderPrefs prefs)
83      throws Exception
84    {
85      String providerClass = prefs.getConnectionProviderClass();
86      provider = (ConnectionProvider)Class.forName(providerClass).newInstance();
87      provider.setPrefs(prefs);
88      provider.init();
89  
90      cat.info("::setProvider - ConnectionProvider [" + providerClass + "] successfully set and initialized");
91    }
92  
93  
94    /***
95     *  Get a connection object from the underlying ConnectionProvider object.
96     *
97     * @return  the connection object from the underlying ConnectionProvider object
98     * @throws  SQLException if any error occurs
99     */
100   public Connection getConnection() throws SQLException
101   {
102     return provider.getConnection();
103   }
104 
105 
106   /***
107    *  Get a "transactional" JDBC connection from the underlying default ConnectionProvider.
108    *
109    * @param  isolationLevel the isolation level to set the connection to
110    * @return  the new "transactional" connection object
111    *         from the underlying default ConnectionProvider
112    * @throws  SQLException if any error occurs
113    */
114   public Connection getConnection(int isolationLevel) throws SQLException
115   {
116     return provider.getConnection(isolationLevel);
117   }
118 }