All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.avaje.ebeaninternal.server.transaction.DefaultTransactionThreadLocal Maven / Gradle / Ivy

/**
 * Copyright (C) 2006  Robin Bygrave
 * 
 * This file is part of Ebean.
 * 
 * Ebean is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *  
 * Ebean is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with Ebean; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA  
 */
package com.avaje.ebeaninternal.server.transaction;

import com.avaje.ebeaninternal.api.SpiTransaction;

/**
 * Used by EbeanMgr to store its Transactions in a ThreadLocal.
 * This way the transaction objects don't have to passed around.
 */
public final class DefaultTransactionThreadLocal {


    private static ThreadLocal local = new ThreadLocal() {
        protected synchronized TransactionMap initialValue() {
            return new TransactionMap();
        }
    };
    
    /**
     * Not allowed.
     */
    private DefaultTransactionThreadLocal() {
    }
    
    /**
     * Return the current TransactionState for a given serverName.
     * This is for the local thread of course.
     */
    private static TransactionMap.State getState(String serverName){
        return local.get().getState(serverName);
    }
    
    /**
     * Return the current Transaction for this serverName and Thread.
     */
    public static SpiTransaction get(String serverName) {
        return getState(serverName).transaction;
    }

    /**
     * Set a new Transaction for this serverName and Thread.
     */
    public static void set(String serverName, SpiTransaction trans) {
        getState(serverName).set(trans);
    }
    
    /**
     * Commit the current transaction.
     */
    public static void commit(String serverName) {
        getState(serverName).commit();
    }

    /**
     * Rollback the current transaction.
     */
    public static void rollback(String serverName) {
        getState(serverName).rollback();
    }

    /**
     * If the transaction has not been committed then roll it back.
     * 

* Designed to be put in a finally block instead of a rollback() * in each catch block. *


     * EbeanMgr.startTransaction();
     * try {
     *     //... perform some actions in a single transaction
     *     
     *     EbeanMgr.commitTransaction();
     *     
     * } finally {
     *     // ensure transaction ended.  If some error occurred then rollback() 
     *     EbeanMgr.endTransaction();
     * }
     * 
*

*/ public static void end(String serverName) { getState(serverName).end(); } /** * A mechanism to get the transaction out of the thread local by * replacing it with a 'proxy'. *

* Used for background fetching. Replaces the current transaction with a * 'dummy' transaction. The current transaction is given to the background * thread so it can continue the fetch. *

*/ public static void replace(String serverName, SpiTransaction trans) { getState(serverName).replace(trans); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy