View Javadoc
1   /*
2    * $Source$
3    * $Revision$
4    *
5    * Copyright (C) 2000 David Warnock
6    * 
7    * Part of Melati (http://melati.org), a framework for the rapid
8    * development of clean, maintainable web applications.
9    *
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *
39   * Contact details for copyright holder:
40   *
41   *     David Warnock (david At sundayta.co.uk)
42   *     Sundayta Ltd
43   *     International House, 
44   *     174 Three Bridges Road, 
45   *     Crawley, 
46   *     West Sussex 
47   *     RH10 1LE, UK
48   *
49   */
50  
51  package org.melati.poem.dbms;
52  
53  import java.util.Hashtable;
54  
55  import org.melati.poem.AppBugPoemException;
56  
57  /**
58   * A factory class to create Dbms objects.
59   */
60  public final class DbmsFactory {
61  
62    private static final Hashtable<String, Dbms> dbmsObjects = new Hashtable<String, Dbms>();
63  
64    private DbmsFactory() {
65    }
66  
67    /**
68     * Return a Dbms object given its class name as a String.
69     * 
70     * @param dbmsClass
71     *          the name of the dbms class
72     * @return a cached or newly created Dmbs object
73     */
74    public static Dbms getDbms(String dbmsClass) {
75      synchronized (dbmsObjects) {
76        Dbms dbms = (Dbms)dbmsObjects.get(dbmsClass);
77        if (dbms != null) {
78          return dbms;
79        }
80  
81        try {
82          Object dbmsObject = Class.forName(dbmsClass).newInstance();
83  
84          if (!(dbmsObject instanceof Dbms)) {
85            throw new ClassCastException("The .class=" + dbmsClass
86                    + " entry named a class of type " + dbmsObject.getClass()
87                    + ", " + "which is not an org.melati.poem.dbms.Dbms");
88          }
89          dbms = (Dbms)dbmsObject;
90        } catch (Exception e) {
91          throw new AppBugPoemException("Problem instantiating class "
92                  + dbmsClass, e);
93        }
94        dbmsObjects.put(dbmsClass, dbms);
95        return dbms;
96      }
97    }
98  }