001: /* JFox, the OpenSource J2EE Application Server
002: *
003: * Copyright (C) 2002 huihoo.org
004: * Distributable under GNU LGPL license
005: * See the GNU Lesser General Public License for more details.
006: */
007:
008: package org.huihoo.jfox.pool.connection;
009:
010: import java.sql.Connection;
011:
012: import org.huihoo.jfox.pool.ObjectPool;
013: import org.huihoo.jfox.pool.ObjectFactory;
014: import org.huihoo.jfox.pool.SimpleObjectPool;
015: import org.huihoo.jfox.pool.PoolableObject;
016: import org.huihoo.jfox.service.ComponentSupport;
017:
018: /**
019: * Get connections from this pool, all connections get from this pool can be recycled
020: * for resue.
021: * @author <a href="mailto:kelvin_wym@hotmail.com">Kelvin Wu</a>
022: */
023: public class SimpleConnectionPool extends ComponentSupport implements
024: SimpleConnectionPoolMBean, ConnectionPool {
025: // A generic object pool used by the connection pool.
026: private ObjectPool pool = null;
027: private ConnectionFactory factory = null;
028:
029: /**
030: * Default constructor
031: * @param dbDriver database driver class name.
032: * @param dbURL database url for connect to the database.
033: * @param user user name.
034: * @param password password
035: */
036: public SimpleConnectionPool(String dbDriver, String dbURL,
037: String user, String password) throws Exception {
038: factory = new ConnectionFactory(SimplePoolableConnection.class,
039: PoolableConnectionInvocationHandler.class);
040: factory.setDbDriver(dbDriver);
041: factory.setDbURL(dbURL);
042: factory.setUser(user);
043: factory.setPassword(password);
044: pool = new SimpleObjectPool(factory);
045: }
046:
047: /**
048: * Get the pooled connection that will be used by user.
049: * @return Connection that will be used by user
050: */
051: public Connection getConnection() throws Exception {
052: PoolableObject obj = pool.retrieveObject();
053: // 设置这个 PoolableConnection 所在的 pool, 以便在调用 connection.close 的时候,调用 pool.restore
054: ((PoolableConnection) obj).setPool(pool);
055: return (Connection) obj;
056: }
057:
058: protected void doInit() throws Exception {
059: pool.init();
060: }
061:
062: protected void doDestroy() throws Exception {
063: pool.destroy();
064: }
065:
066: public void clear() {
067: pool.clear();
068: }
069:
070: public ObjectFactory getObjectFactory() {
071: return pool.getObjectFactory();
072: }
073:
074: public String getObjectClass() {
075: return pool.getObjectClass();
076: }
077:
078: public int getWorking() {
079: return pool.getWorking();
080: }
081:
082: public int getRest() {
083: return pool.getRest();
084: }
085:
086: public void setDbURL(String dbUrl) {
087: pool.clear();
088: factory.setDbURL(dbUrl);
089: }
090:
091: public String getDbURL() {
092: return factory.getDbURL();
093: }
094:
095: public void setDbDriver(String driver) {
096: pool.clear();
097: factory.setDbDriver(driver);
098: }
099:
100: public String getDbDriver() {
101: return factory.getDbDriver();
102: }
103:
104: public void setUser(String user) {
105: pool.clear();
106: factory.setUser(user);
107: }
108:
109: public String getUser() {
110: return factory.getUser();
111: }
112:
113: public void setPassword(String password) {
114: pool.clear();
115: factory.setPassword(password);
116: }
117:
118: public String getPassword() {
119: return factory.getPassword();
120: }
121: }
|