沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          ConnectionPool.java:

          public interface ConnectionPool{
              Connection getConnection()
              
          throws test.res.ResourceNotAvailableException, SQLException;
              Connection getConnection(
          long timeout)
              
          throws test.res.ResourceTimeOutException, SQLException;
              
          void clear();
          }

          ConnectionHome.java:

          public interface ConnectionHome{
           
          void releaseConnection(Connection conn);
          }

          ConnectionPooling.java:

          public interface ConnectionPooling extends ConnectionHome{
              Connection getConnection()
              
          throws test.res.ResourceNotAvailableException, SQLException;
              
              Connection getConnection(
          long timeout)
              
          throws test.res.ResourceTimeOutException, SQLException;
              
          void clear();
              
          void releaseConnection(Connection conn);
          }
          ConnectionFactory.java:
          public interface ConnectionFactory{
           
          public Connection createConnection()throws SQLException;
          }

          PooledConnection.java: (for Connection in Java 1.1.8)

          public final class PooledConnection implements Connection{
              
          private interface ConnectionState{
                  ConnectionState close();
                  
          boolean isClosed();
                  Connection getOpenConnection()
                  
          throws SQLException;
              }

              
          private static class ClosedConnection implements ConnectionState{
                  
          public final ConnectionState close(){return this;}
                  
          public final Connection getOpenConnection()
                  
          throws SQLException{
                      
          throw new SQLException("Connection closed");
                  }

                  
          public final boolean isClosed(){return true;}
                  
          private ClosedConnection(){}
                  
          private static final ConnectionState _instance = new ClosedConnection();
                  
          static ConnectionState instance(Connection conn, ConnectionHome home){return _instance;}
              }

              
              
          private static class OpenConnection implements ConnectionState{
               
          private final ConnectionHome home;
                  
          private final Connection conn;
                  
          public final ConnectionState close(){
                          home.releaseConnection(conn);
                          
          return ClosedConnection.instance(conn, home);
                  }

                  
          public final Connection getOpenConnection()
                  
          {return conn;}
                  
          public final boolean isClosed(){return false;}
                  OpenConnection(Connection conn, ConnectionHome home)
          {
                   
          this.conn = conn; this.home = home;
                  }

                  
          static ConnectionState instance(Connection conn, ConnectionHome home){
                   
          return new OpenConnection(conn, home);
                  }

              }

              
          private ConnectionState state;
              
          public static Connection decorate(Connection conn, ConnectionHome home)
              
          throws SQLException{
               
          return new PooledConnection(conn, home);
              }

              
              
          private PooledConnection(Connection conn, ConnectionHome home)
              
          throws SQLException{
                  
          if(conn.isClosed()){
                      state 
          = ClosedConnection.instance(conn, home);
                  }

                  
          else{
                      state 
          = OpenConnection.instance(conn, home);
                  }

              }
                 
              
          public final boolean isClosed(){
                  
          return state.isClosed();
              }


              
          public final void close(){
                  state 
          = state.close();
              }

              
          protected void finalize(){
                close();
              }

              
          private final Connection getOpenConnection()
              
          throws SQLException
              
          {return state.getOpenConnection();}
              
          /*****then, delegate all the other methods****/
              
          public final Statement createStatement()
              
          throws SQLException{
                  
          return getOpenConnection().createStatement();
              }

             
              
          //.
              public final void clearWarnings()throws SQLException{
                  getOpenConnection().clearWarnings();
              }

                
           
              
          public final void commit()throws SQLException{
                  getOpenConnection().commit();
              }


              
          /*
              public final Statement createStatement(int resultSetType, 
                  int resultSetConcurrency)
              throws SQLException{
                  return getOpenConnection().createStatement(resultSetType, resultSetConcurrency);
              }
          */

              
              
          /*
              public final Statement createStatement(int resultSetType, 
                  int resultSetConcurrency, int resultSetHoldability)
              throws SQLException{
                  return getOpenConnection().createStatement(resultSetType, 
                      resultSetConcurrency, resultSetHoldability);
              }
          */

              
              
              
          public final boolean getAutoCommit()throws SQLException{
                  
          return getOpenConnection().getAutoCommit();
              }

              
          public final String getCatalog()throws SQLException{
                  
          return getOpenConnection().getCatalog();
              }

              
          /*
              public final int getHoldability()throws SQLException{
                  return getOpenConnection().getHoldability();
              }
          */

                
              
          public final DatabaseMetaData getMetaData()throws SQLException{
                  
          return getOpenConnection().getMetaData();
              }

              
          public final int getTransactionIsolation()throws SQLException{
                  
          return getOpenConnection().getTransactionIsolation();
              }

              
          /*
              public final Map getTypeMap()throws SQLException{
                  return getOpenConnection().getTypeMap();
              }
          */

              
          public final SQLWarning getWarnings()throws SQLException{
                  
          return getOpenConnection().getWarnings();
              }
           

              
          public final boolean isReadOnly()throws SQLException{
                  
          return getOpenConnection().isReadOnly();
              }

              
          public final String nativeSQL(String sql)throws SQLException{
                  
          return getOpenConnection().nativeSQL(sql);
              }

              
          public final CallableStatement prepareCall(String sql)throws SQLException{
                  
          return getOpenConnection().prepareCall(sql);
              }

              
          /*
              public final CallableStatement prepareCall(String sql, 
                  int resultSetType, int resultSetConcurrency)
              throws SQLException{
                  return getOpenConnection().prepareCall(sql, resultSetType, resultSetConcurrency);
              }
                
              public final CallableStatement prepareCall(String sql, 
                  int resultSetType, int resultSetConcurrency, int resultSetHoldability)
              throws SQLException{
                  return getOpenConnection().prepareCall(sql, resultSetType, 
                      resultSetConcurrency, resultSetHoldability);
              }
          */

                
              
          public final PreparedStatement prepareStatement(String sql)
              
          throws SQLException{
                  
          return getOpenConnection().prepareStatement(sql);
              }

              
          /*
              public final PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
              throws SQLException{
                  return getOpenConnection().prepareStatement(sql, autoGeneratedKeys);
              }

              public final PreparedStatement prepareStatement(String sql, int[] columnIndexes)
              throws SQLException{
                  return getOpenConnection().prepareStatement(sql, columnIndexes);
              }
              
              public final PreparedStatement prepareStatement(String sql, 
                  int resultSetType, int resultSetConcurrency)
              throws SQLException{
                  return getOpenConnection().prepareStatement(sql, 
                      resultSetType, resultSetConcurrency);
              }
                
              public final PreparedStatement prepareStatement(String sql, 
                  int resultSetType, int resultSetConcurrency, int resultSetHoldability)
              throws SQLException{
                  return getOpenConnection().prepareStatement(sql, 
                      resultSetType, resultSetConcurrency, resultSetHoldability);
              }
                
              public final PreparedStatement prepareStatement(String sql, 
                  String[] columnNames)
              throws SQLException{
                  return getOpenConnection().prepareStatement(sql, columnNames);
              }
                
              public final void releaseSavepoint(Savepoint savepoint)throws SQLException{
                  getOpenConnection().releaseSavepoint(savepoint);
              }
          */

              
          public final void rollback()throws SQLException{
                  getOpenConnection().rollback();
              }

              
          /*
              public final void rollback(Savepoint savepoint)
              throws SQLException{
                  getOpenConnection().rollback(savepoint);
              }
          */

                
              
          public final void setAutoCommit(boolean autoCommit)
              
          throws SQLException{
                  getOpenConnection().setAutoCommit(autoCommit);
              }

                
              
          public final void setCatalog(String catalog)
              
          throws SQLException{
                  getOpenConnection().setCatalog(catalog);
              }

              
          /* 
              public final void setHoldability(int holdability)
              throws SQLException{
                  getOpenConnection().setHoldability(holdability);
              }
          */
                   
              
          public final void setReadOnly(boolean readOnly)
              
          throws SQLException{
                  getOpenConnection().setReadOnly(readOnly);
              }

              
          /*
              public final Savepoint setSavepoint()throws SQLException{
                  return getOpenConnection().setSavepoint();
              }
                
              public final Savepoint setSavepoint(String name)
              throws SQLException{
                  return getOpenConnection().setSavepoint(name);
              }
          */

                
              
          public final void setTransactionIsolation(int level)
              
          throws SQLException{
                  getOpenConnection().setTransactionIsolation(level);
              }

              
          /*public final void setTypeMap(Map map)throws SQLException{
                  getOpenConnection().setTypeMap(map);
              }
          */


              
          /*************************************************************************************************/
              

          }

          ConnectionPooling2Pool.java:

          public class ConnectionPooling2Pool implements ConnectionPool{
              
          public final Connection getConnection()
              
          throws test.res.ResourceNotAvailableException, SQLException{
               
          return PooledConnection.decorate(pooling.getConnection(), pooling);
              }

              
          public final Connection getConnection(long timeout)
              
          throws test.res.ResourceTimeOutException, SQLException{
               
          return PooledConnection.decorate(pooling.getConnection(timeout), pooling);
              }

              
          public final void clear(){
               pooling.clear();
              }

              
          private final ConnectionPooling pooling;
              
          private ConnectionPooling2Pool(ConnectionPooling pooling){
               
          this.pooling = pooling;
              }

              
          public static ConnectionPool decorate(ConnectionPooling pooling){
               
          return new ConnectionPooling2Pool(pooling);
              }

          }

          ConnectionPoolingImpl.java: (a simple implementation of ConnectionMan)

          public class ConnectionPoolingImpl implements ConnectionPooling
          {
              
          private int client=0;
              
          private final Vector freeConn = new Vector();
              
          private final int maxConn;
              
          private final ConnectionFactory factory;

              
          static public ConnectionPooling instance(ConnectionFactory factory, int max){
               
          return new ConnectionPoolingImpl(factory, max);
              }

              
              
          private ConnectionPoolingImpl(ConnectionFactory factory, int max){
               
          this.factory = factory;
               
          this.maxConn = max;
              }


              
          public final synchronized void releaseConnection(Connection conn)
              
          {
                  freeConn.addElement(conn);
                  client
          --;
                  notify();
              }


              
          public final synchronized Connection getConnection()
              
          throws ResourceNotAvailableException, SQLException
              
          {
                  Connection conn 
          = null;
                  
          if(freeConn.size() > 0)
                  
          {
                      conn 
          = (Connection)freeConn.lastElement();
                      freeConn.removeElementAt(freeConn.size()
          -1);
                  }

                  
          else if(client < maxConn)
                  
          {
                      conn 
          = factory.createConnection();
                  }

                  
          if(conn != null)
                  
          {
                      client
          ++;
                      
          return conn;
                  }

                  
          else
                  
          {
                      
          throw new ResourceNotAvailableException();
                  }

              }


              
          public final synchronized Connection getConnection(long timeout)
              
          throws ResourceTimeOutException, SQLException
              
          {
                  
          for(long startTime = new java.util.Date().getTime();;)
                  
          {
                      
          try
                      
          {
                          
          return getConnection();
                      }

                      
          catch(ResourceNotAvailableException e1)
                      
          {
                          
          try
                          
          {
                              wait(timeout);
                          }

                          
          catch(InterruptedException e2)
                          
          {}
                          
          if((new java.util.Date().getTime() - startTime) >= timeout)
                          
          {
                              
          throw new ResourceTimeOutException();
                          }

                      }

                  }

              }



              
          public final synchronized int getfreeconn(){
                  
          return freeConn.size();
              }

              
          public final int getmaxConn(){
                  
          return maxConn;
              }

              
          public final synchronized int getclient(){
                  
          return client;
              }

              
          public final synchronized void setclient(){
                  client
          =0;
              }


              
          public final synchronized void clear(){
            closeAll();
                  freeConn.removeAllElements();
              }

              
          private final void closeAll(){
                  
          for(int i=0; i<freeConn.size();i++)
                  
          {
                      
          final Connection conn = (Connection)freeConn.elementAt(i);
                      
          try{
                          conn.close();
                      }

                      
          catch(SQLException sqlException){}
                  }

              }

              
          protected void finalize(){
               closeAll();
              }
              
          }

          ConnectionFactoryImpl.java:

          public class ConnectionFactoryImpl
          {
              
          private ConnectionFactoryImpl(){}
              
          static public ConnectionFactory instance(final String driver, final String url, 
               
          final String user, final String pwd)
              
          throws SQLException, ClassNotFoundException{
            
          final Class driverClass = Class.forName(driver);
            
          return new ConnectionFactory(){
             
          private final Class keeper = driverClass;
             
          public final Connection createConnection()
             
          throws SQLException{
              
          return DriverManager.getConnection(url,user,pwd);
             }

            }
          ;
              }

              
          static public ConnectionFactory instance(final String driver, final String url)
              
          throws SQLException, ClassNotFoundException{
            
          final Class driverClass = Class.forName(driver);
            
          return new ConnectionFactory(){
             
          private final Class keeper = driverClass;
             
          public final Connection createConnection()
             
          throws SQLException{
              
          return DriverManager.getConnection(url);
             }

            }
          ;
           }
            
          }

          TestConnectionPool.java:

          public class TestConnectionPool{
           
          public static void test(String driver, String url, String user, String pwd)
           
          throws java.sql.SQLException, test.res.ResourceNotAvailableException, test.res.ResourceTimeOutException, ClassNotFoundException{
            
          final ConnectionPool pool = ConnectionPooling2Pool.decorate(
             ConnectionPoolingImpl.instance(
              ConnectionFactoryImpl.instance(driver, url, user, pwd),
              
          1000)
             );
           }

          }


          ResourceNotAvailableException.java:

          public class ResourceNotAvailableException extends RuntimeException{
           
          public ResourceNotAvailableException(String msg){super(msg);}
           
          public ResourceNotAvailableException(){}
          }


          ResourceTimeOutException.java:

          public class ResourceTimeOutException extends Exception{
           
          public ResourceTimeOutException(String msg){super(msg);}
           
          public ResourceTimeOutException(){}
          }

           

           

          主站蜘蛛池模板: 湛江市| 汉中市| 稻城县| 大埔县| 惠来县| 贵定县| 四平市| 桂阳县| 石河子市| 朝阳区| 尚志市| 夏邑县| 武鸣县| 潮安县| 萨嘎县| 宁明县| 阿瓦提县| 精河县| 历史| 东乡族自治县| 施秉县| 鹰潭市| 龙胜| 临潭县| 蓬安县| 云和县| 义乌市| 宁安市| 宣武区| 衡山县| 民权县| 波密县| 逊克县| 吉首市| 化德县| 偃师市| 子长县| 宜兰县| 辉南县| 江都市| 新昌县|