001: /**
002: * Copyright (C) 2001 Yasna.com. All rights reserved.
003: *
004: * ===================================================================
005: * The Apache Software License, Version 1.1
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by
022: * Yasna.com (http://www.yasna.com)."
023: * Alternately, this acknowledgment may appear in the software itself,
024: * if and wherever such third-party acknowledgments normally appear.
025: *
026: * 4. The names "Yazd" and "Yasna.com" must not be used to
027: * endorse or promote products derived from this software without
028: * prior written permission. For written permission, please
029: * contact yazd@yasna.com.
030: *
031: * 5. Products derived from this software may not be called "Yazd",
032: * nor may "Yazd" appear in their name, without prior written
033: * permission of Yasna.com.
034: *
035: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: *
049: * This software consists of voluntary contributions made by many
050: * individuals on behalf of Yasna.com. For more information
051: * on Yasna.com, please see <http://www.yasna.com>.
052: */
053:
054: /**
055: * Copyright (C) 2000 CoolServlets.com. All rights reserved.
056: *
057: * ===================================================================
058: * The Apache Software License, Version 1.1
059: *
060: * Redistribution and use in source and binary forms, with or without
061: * modification, are permitted provided that the following conditions
062: * are met:
063: *
064: * 1. Redistributions of source code must retain the above copyright
065: * notice, this list of conditions and the following disclaimer.
066: *
067: * 2. Redistributions in binary form must reproduce the above copyright
068: * notice, this list of conditions and the following disclaimer in
069: * the documentation and/or other materials provided with the
070: * distribution.
071: *
072: * 3. The end-user documentation included with the redistribution,
073: * if any, must include the following acknowledgment:
074: * "This product includes software developed by
075: * CoolServlets.com (http://www.coolservlets.com)."
076: * Alternately, this acknowledgment may appear in the software itself,
077: * if and wherever such third-party acknowledgments normally appear.
078: *
079: * 4. The names "Jive" and "CoolServlets.com" must not be used to
080: * endorse or promote products derived from this software without
081: * prior written permission. For written permission, please
082: * contact webmaster@coolservlets.com.
083: *
084: * 5. Products derived from this software may not be called "Jive",
085: * nor may "Jive" appear in their name, without prior written
086: * permission of CoolServlets.com.
087: *
088: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
089: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
090: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
091: * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
092: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
093: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
094: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
095: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
096: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
097: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
098: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
099: * SUCH DAMAGE.
100: * ====================================================================
101: *
102: * This software consists of voluntary contributions made by many
103: * individuals on behalf of CoolServlets.com. For more information
104: * on CoolServlets.com, please see <http://www.coolservlets.com>.
105: */package com.Yasna.forum.database;
106:
107: import java.sql.Connection;
108: import java.util.Enumeration;
109:
110: /**
111: * Abstract class that defines the connection provider framework. Other classes
112: * extend this abstract class to make connection to actual data sources.
113: */
114: public abstract class DbConnectionProvider {
115:
116: /** Dummy values. Override in subclasses. **/
117: private static final String NAME = "";
118: private static final String DESCRIPTION = "";
119: private static final String AUTHOR = "";
120: private static final int MAJOR_VERSION = 0;
121: private static final int MINOR_VERSION = 0;
122: private static final boolean POOLED = false;
123:
124: /**
125: * Returns the name of the connection provider.
126: *
127: * @return the name of the connection provider.
128: */
129: public String getName() {
130: return NAME;
131: }
132:
133: /**
134: * Returns a description of the connection provider.
135: *
136: * @return the description of the connection provider.
137: */
138: public String getDescription() {
139: return DESCRIPTION;
140: }
141:
142: /**
143: * Returns the author of the connection provider.
144: *
145: * @return the name of the author of this connection provider.
146: */
147: public String getAuthor() {
148: return AUTHOR;
149: }
150:
151: /**
152: * Returns the major version of the connection provider, i.e. 1.x.
153: *
154: * @return the major version number of the provider.
155: */
156: public int getMajorVersion() {
157: return MAJOR_VERSION;
158: }
159:
160: /**
161: * Returns the minor version of the connection provider, i.e. x.1.
162: *
163: * @return the minor version number of the provider.
164: */
165: public int getMinorVersion() {
166: return MINOR_VERSION;
167: }
168:
169: /**
170: * Returns true if this connection provider provides connections out
171: * of a connection pool. Implementing and using connection providers that
172: * are pooled is strongly recommended, as they greatly increase the speed
173: * of Yazd.
174: *
175: * @return true if the Connection objects returned by this provider are
176: * pooled.
177: */
178: public boolean isPooled() {
179: return POOLED;
180: }
181:
182: /**
183: * Returns a database connection. When a Yazd component is done with a
184: * connection, it will call the close method of that connection. Therefore,
185: * connection pools with special release methods are not directly
186: * supported by the connection provider infrastructure. Instead, connections
187: * from those pools should be wrapped such that calling the close method
188: * on the wrapper class will release the connection from the pool.
189: *
190: * @return a Connection object.
191: */
192: public abstract Connection getConnection();
193:
194: /**
195: * Starts the connection provider. For some connection providers, this
196: * will be a no-op. However, connection provider users should always call
197: * this method to make sure the connection provider is started.
198: */
199: protected abstract void start();
200:
201: /**
202: * This method should be called whenever properties have been changed so
203: * that the changes will take effect.
204: */
205: protected abstract void restart();
206:
207: /**
208: * Tells the connection provider to destroy itself. For many connection
209: * providers, this will essentially result in a no-op. However,
210: * connection provider users should always call this method when changing
211: * from one connection provider to another to ensure that there are no
212: * dangling database connections.
213: */
214: protected abstract void destroy();
215:
216: /**
217: * Returns the value of a property of the connection provider.
218: *
219: * @param name the name of the property.
220: * @return the value of the property.
221: */
222: public abstract String getProperty(String name);
223:
224: /**
225: * Returns the description of a property of the connection provider.
226: *
227: * @param name the name of the property.
228: * @return the description of the property.
229: */
230: public abstract String getPropertyDescription(String name);
231:
232: /**
233: * Returns an enumeration of the property names for the connection provider.
234: *
235: * @return an Enumeration of the property names.
236: */
237: public abstract Enumeration propertyNames();
238:
239: /**
240: * Sets a property of the connection provider. Each provider has a set number
241: * of properties that are determined by the author. Trying to set a non-
242: * existant property will result in an IllegalArgumentException.
243: *
244: * @param name the name of the property to set.
245: * @param value the new value for the property.
246: */
247: public abstract void setProperty(String name, String value);
248:
249: }
|