⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poolconnentry.java

📁 java 开发的邮件服务器平台。支持以下协议。 协议可以修改为自己的专门标识
💻 JAVA
字号:
/*********************************************************************** * Copyright (c) 2000-2004 The Apache Software Foundation.             * * All rights reserved.                                                * * ------------------------------------------------------------------- * * Licensed under the Apache License, Version 2.0 (the "License"); you * * may not use this file except in compliance with the License. You    * * may obtain a copy of the License at:                                * *                                                                     * *     http://www.apache.org/licenses/LICENSE-2.0                      * *                                                                     * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS,   * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or     * * implied.  See the License for the specific language governing       * * permissions and limitations under the License.                      * ***********************************************************************/package org.apache.james.util.mordred;import java.io.PrintWriter;import java.io.StringWriter;import java.sql.*;import java.util.Map;/** * An entry in a connection pool. * */public class PoolConnEntry implements java.sql.Connection{    private static final boolean DEEP_DEBUG = false;    // States for connections (in use, being tested, or active)    public final static int     AVAILABLE = 0;    public final static int     ACTIVE = 1;    private JdbcDataSource      container;    private Connection          connection;    private int                 status;    private long                lockTime;    private long                createDate;    private long                lastActivity;    private int                 id;    private java.lang.Throwable trace;    /**     * Insert the method's description here.     * Creation date: (8/24/99 11:43:45 AM)     * @param conn java.sql.Connection     */    public PoolConnEntry(JdbcDataSource container, Connection conn, int id) {        this.container = container;        this.connection = conn;        status = AVAILABLE;        createDate = System.currentTimeMillis();        lastActivity = System.currentTimeMillis();        this.id = id;    }    /**     * Locks an entry for anybody else using it     */    public synchronized boolean lock() throws SQLException {        if (DEEP_DEBUG) {            System.out.println("Trying to lock");        }        if (status != PoolConnEntry.AVAILABLE) {            return false;        }        if (DEEP_DEBUG) {            System.out.println("Available");        }        if (false) {            //There really is no sense in doing this...            //  maybe make it a conf option at some point, but really slows            //  down the pooling.            if (connection.isClosed()) {                throw new SQLException("Connection has been closed.");            }            if (DEEP_DEBUG) {                System.out.println("not closed");            }        }        status = PoolConnEntry.ACTIVE;        lockTime = System.currentTimeMillis();        lastActivity = lockTime;        trace = new Throwable();        clearWarnings();        if (DEEP_DEBUG) {            System.out.println("Returning");        }        return true;    }    /**     * Resets flags on an entry for reuse in the pool     */    public synchronized void unlock() {        lastActivity = System.currentTimeMillis();        trace = null;        status = AVAILABLE;    }    /**     * Simple method to log any warnings on an entry (connection), and     * then clear them.     * @throws java.sql.SQLException     */    public void clearWarnings() {        try {            SQLWarning currSQLWarning = connection.getWarnings();            while (currSQLWarning != null) {                StringBuffer logBuffer =                    new StringBuffer(256)                            .append("Warnings on connection ")                            .append(id)                            .append(currSQLWarning);                container.debug(logBuffer.toString());                currSQLWarning = currSQLWarning.getNextWarning();            }            connection.clearWarnings();        } catch (SQLException sqle) {            container.debug("Error while clearing exceptions on " + id);            // It will probably get killed by itself before too long if this failed        }    }    /**     * Insert the method's description here.     * Creation date: (8/24/99 11:43:19 AM)     * @return a long representing the time this entry was created     */    public long getCreateDate() {        return createDate;    }    /**     * Insert the method's description here.     * Creation date: (8/24/99 12:09:01 PM)     * @return int     */    public int getId() {        return id;    }    /**     * Insert the method's description here.     * Creation date: (8/24/99 11:43:19 AM)     * @return long     */    public long getLastActivity() {        return lastActivity;    }    /**     * Insert the method's description here.     * Creation date: (8/24/99 11:43:19 AM)     * @return long     */    public long getLockTime() {        return lockTime;    }    /**     * Insert the method's description here.     * Creation date: (8/24/99 11:43:19 AM)     * @return int     */    public int getStatus() {        return status;    }    /**     * Insert the method's description here.     * Creation date: (8/24/99 2:33:38 PM)     * @return java.lang.Throwable     */    public java.lang.Throwable getTrace() {        return trace;    }    /**     * Need to clean up the connection     */    protected void finalize() {        container.debug("Closing connection " + id);        try {            connection.close();        } catch (SQLException ex) {            StringBuffer warnBuffer =                new StringBuffer(64)                    .append("Cannot close connection ")                    .append(id)                    .append(" on finalize");            container.warn(warnBuffer.toString());        }        // Dump the stack trace of whoever created this connection        if (getTrace() != null) {            StringWriter sout = new StringWriter();            trace.printStackTrace(new PrintWriter(sout, true));            container.info(sout.toString());        }    }    public String getString() {        StringBuffer poolConnStringBuffer =            new StringBuffer(64)                    .append(getId())                    .append(": ")                    .append(connection.toString());        return poolConnStringBuffer.toString();    }    /*     * New approach now actually has this implement a connection, as a wrapper.     * All calls will be passed to underlying connection.     * Except when closed is called, which will instead cause the releaseConnection on     * the parent to be executed.     *     * These are the methods from java.sql.Connection     */    public void close() throws SQLException {        clearWarnings();        container.releaseConnection(this);    }    /**     * Returns whether this entry is closed.     *     * @return whether the underlying conntection is closed     */    public boolean isClosed() throws SQLException {        return connection.isClosed();    }    public final Statement createStatement() throws SQLException {        return connection.createStatement();    }    public final PreparedStatement prepareStatement(final String sql) throws SQLException {        return connection.prepareStatement(sql);    }    public final CallableStatement prepareCall(final String sql) throws SQLException {        return connection.prepareCall(sql);    }    public final String nativeSQL(final String sql) throws SQLException {        return connection.nativeSQL( sql );    }    public final void setAutoCommit(final boolean autoCommit) throws SQLException {        connection.setAutoCommit( autoCommit );    }    public final boolean getAutoCommit() throws SQLException {        return connection.getAutoCommit();    }    public final void commit() throws SQLException {        connection.commit();    }    public final void rollback() throws SQLException {        connection.rollback();    }    public final DatabaseMetaData getMetaData() throws SQLException {        return connection.getMetaData();    }    public final void setReadOnly( final boolean readOnly ) throws SQLException {        connection.setReadOnly( readOnly );    }    public final boolean isReadOnly() throws SQLException {        return connection.isReadOnly();    }    public final void setCatalog( final String catalog ) throws SQLException {        connection.setCatalog( catalog );    }    public final String getCatalog() throws SQLException {        return connection.getCatalog();    }    public final void setTransactionIsolation( final int level ) throws SQLException {        connection.setTransactionIsolation(level);    }    public final int getTransactionIsolation() throws SQLException {        return connection.getTransactionIsolation();    }    public final SQLWarning getWarnings() throws SQLException {        return connection.getWarnings();    }    public final Statement createStatement( final int resultSetType,                                            final int resultSetConcurrency )            throws SQLException {        return connection.createStatement(resultSetType, resultSetConcurrency);    }    public final PreparedStatement prepareStatement( final String sql,                                               final int resultSetType,                                               final int resultSetConcurrency )            throws SQLException {        return connection.prepareStatement( sql, resultSetType, resultSetConcurrency);    }    public final CallableStatement prepareCall( final String sql,                                          final int resultSetType,                                          final int resultSetConcurrency )            throws SQLException {        return connection.prepareCall( sql, resultSetType, resultSetConcurrency );    }    public final Map getTypeMap() throws SQLException {        return connection.getTypeMap();    }    public final void setTypeMap( final Map map ) throws SQLException {        connection.setTypeMap( map );    }    /* JDBC_3_ANT_KEY    public final void setHoldability(int holdability)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final int getHoldability()        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final java.sql.Savepoint setSavepoint()        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final java.sql.Savepoint setSavepoint(String savepoint)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final void rollback(java.sql.Savepoint savepoint)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final void releaseSavepoint(java.sql.Savepoint savepoint)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final Statement createStatement(int resulSetType,                                           int resultSetConcurrency,                                           int resultSetHoldability)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final PreparedStatement prepareStatement(String sql,                                        int resulSetType,                                        int resultSetConcurrency,                                        int resultSetHoldability)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final CallableStatement prepareCall(String sql,                                        int resulSetType,                                        int resultSetConcurrency,                                        int resultSetHoldability)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final PreparedStatement prepareStatement(String sql,                                        int autoGeneratedKeys)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final PreparedStatement prepareStatement(String sql,                                        int[] columnIndexes)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    public final PreparedStatement prepareStatement(String sql,                                        String[] columnNames)        throws SQLException    {        throw new SQLException("This is not a Jdbc 3.0 Compliant Connection");    }    JDBC_3_ANT_KEY */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -