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

📄 transaction.java

📁 torque服务器源代码
💻 JAVA
字号:
package org.apache.torque.util;/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and *    "Apache Turbine" must not be used to endorse or promote products *    derived from this software without prior written permission. For *    written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    "Apache Turbine", nor may "Apache" appear in their name, without *    prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */import java.sql.Connection;import java.sql.SQLException;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.torque.Torque;import org.apache.torque.TorqueException;/** * Refactored begin/commit/rollback transaction methods away from * the <code>BasePeer</code>. * * <p> * This can be used to handle cases where transaction support is optional. * The second parameter of beginOptionalTransaction will determine with a  * transaction is used or not.  * If a transaction is not used, the commit and rollback methods * do not have any effect. Instead it simply makes the logic easier to follow * by cutting down on the if statements based solely on whether a transaction * is needed or not. * * @author <a href="mailto:stephenh@chase3000.com">Stephen Haberman</a> * @version $Id: Transaction.java,v 1.9 2003/08/03 17:41:04 jmcnally Exp $ */public class Transaction{    /** The log. */    private static Log log = LogFactory.getLog(Transaction.class);    /**     * Begin a transaction.  This method will fallback gracefully to     * return a normal connection, if the database being accessed does     * not support transactions.     *     * @param dbName Name of database.     * @return The Connection for the transaction.     * @throws TorqueException Any exceptions caught during processing will be     *         rethrown wrapped into a TorqueException.     */    public static Connection begin(String dbName) throws TorqueException    {        return Transaction.beginOptional(dbName, true);    }    /**     * Begin a transaction.  This method will fallback gracefully to     * return a normal connection, if the database being accessed does     * not support transactions.     *     * @param dbName Name of database.     * @param useTransaction If false, a transaction won't be used.     * @return The Connection for the transaction.     * @throws TorqueException Any exceptions caught during processing will be     *         rethrown wrapped into a TorqueException.     */    public static Connection beginOptional(String dbName,                                           boolean useTransaction)        throws TorqueException    {        Connection con = Torque.getConnection(dbName);        try        {            if (con.getMetaData().supportsTransactions() && useTransaction)            {                con.setAutoCommit(false);            }        }        catch (SQLException e)        {            throw new TorqueException(e);        }        return con;    }    /**     * Commit a transaction.  This method takes care of releasing the     * connection after the commit.  In databases that do not support     * transactions, it only returns the connection.     *     * @param con The Connection for the transaction.     * @throws TorqueException Any exceptions caught during processing will be     *         rethrown wrapped into a TorqueException.     */    public static void commit(Connection con) throws TorqueException    {        if (con == null)        {            throw new NullPointerException("Connection object was null. "                    + "This could be due to a misconfiguration of the "                    + "DataSourceFactory. Check the logs and Torque.properties "                    + "to better determine the cause.");        }        try        {            if (con.getMetaData().supportsTransactions()                && con.getAutoCommit() == false)            {                con.commit();                con.setAutoCommit(true);            }        }        catch (SQLException e)        {            throw new TorqueException(e);        }        finally        {            Torque.closeConnection(con);        }    }    /**     * Roll back a transaction in databases that support transactions.     * It also releases the connection. In databases that do not support     * transactions, this method will log the attempt and release the     * connection.     *     * @param con The Connection for the transaction.     * @throws TorqueException Any exceptions caught during processing will be     *         rethrown wrapped into a TorqueException.     */    public static void rollback(Connection con) throws TorqueException    {        if (con == null)        {            throw new TorqueException("Connection object was null. "                    + "This could be due to a misconfiguration of the "                    + "DataSourceFactory. Check the logs and Torque.properties "                    + "to better determine the cause.");        }        else        {            try            {                if (con.getMetaData().supportsTransactions()                    && con.getAutoCommit() == false)                {                    con.rollback();                    con.setAutoCommit(true);                }            }            catch (SQLException e)            {                log.error("An attempt was made to rollback a transaction "                        + "but the database did not allow the operation to be "                        + "rolled back.", e);                throw new TorqueException(e);            }            finally            {                Torque.closeConnection(con);            }        }    }    /**     * Roll back a transaction without throwing errors if they occur.     * A null Connection argument is logged at the debug level and other     * errors are logged at warn level.     *      * @param con The Connection for the transaction.     * @see safeRollback     */    public static void safeRollback(Connection con)     {        if (con == null)         {            log.debug("called safeRollback with null argument");        }        else         {            try            {                Transaction.rollback(con);            }            catch (TorqueException e)            {                log.warn("An error occured during rollback.", e);            }        }       }}

⌨️ 快捷键说明

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