<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沙漠中的魚

    欲上天堂,先下地獄
    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(){}
    }

     

     

    主站蜘蛛池模板: 亚洲阿v天堂在线| 成人免费无遮挡无码黄漫视频| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 无码乱人伦一区二区亚洲一| 亚洲精品你懂的在线观看| 久久久久国产亚洲AV麻豆| 高清在线亚洲精品国产二区| 又黄又爽的视频免费看| 午夜亚洲国产成人不卡在线| 免费一级做a爰片久久毛片潮喷| 国产hs免费高清在线观看| 免费v片在线观看品善网| 亚洲福利精品电影在线观看| 亚洲国产精品人人做人人爱| 亚洲国产91精品无码专区| 最新精品亚洲成a人在线观看| 亚洲国产精品福利片在线观看| 亚洲国产高清人在线| 亚洲噜噜噜噜噜影院在线播放| 亚洲卡一卡二卡乱码新区| 在线观看亚洲精品专区| 一级一看免费完整版毛片| 免费无码一区二区三区蜜桃| 69pao强力打造免费高清| 毛片免费在线观看网址| 免费中文字幕在线| 亚洲乱码一区二区三区在线观看| 久久亚洲精品成人av无码网站 | 日韩免费无码一区二区视频| 亚洲国产av无码精品| 久久精品国产亚洲| 亚洲www在线观看| 午夜亚洲国产精品福利| 你好老叔电影观看免费| 1000部国产成人免费视频| 国产精品免费看久久久无码| 亚洲精品你懂的在线观看| 亚洲宅男精品一区在线观看| 污污的视频在线免费观看| 一级毛片在线免费看| 免费黄色大片网站|