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

📄 dualnodejtatransactionmanagerimpl.java

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 JAVA
字号:
/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2007, Red Hat Middleware LLC or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors.  All third-party contributions are * distributed under license by Red Hat Middleware LLC. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program 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 this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA  02110-1301  USA */package org.hibernate.test.cache.jbc2.functional.util;import java.util.Hashtable;import javax.transaction.HeuristicMixedException;import javax.transaction.HeuristicRollbackException;import javax.transaction.InvalidTransactionException;import javax.transaction.NotSupportedException;import javax.transaction.RollbackException;import javax.transaction.Status;import javax.transaction.SystemException;import javax.transaction.Transaction;import javax.transaction.TransactionManager;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Variant of SimpleJtaTransactionManagerImpl that doesn't use a VM-singleton, * but rather a set of impls keyed by a node id. * * @author Brian Stansberry */public class DualNodeJtaTransactionManagerImpl implements TransactionManager {        private static final Logger log = LoggerFactory.getLogger(DualNodeJtaTransactionManagerImpl.class);       private static final Hashtable INSTANCES = new Hashtable();    private ThreadLocal currentTransaction = new ThreadLocal();    private String nodeId;		public synchronized static DualNodeJtaTransactionManagerImpl getInstance(String nodeId) {	    DualNodeJtaTransactionManagerImpl tm = (DualNodeJtaTransactionManagerImpl) INSTANCES.get(nodeId);	    if (tm == null) {	        tm = new DualNodeJtaTransactionManagerImpl(nodeId);	        INSTANCES.put(nodeId, tm);	    }		return tm;	}		public synchronized static void cleanupTransactions() {	   for (java.util.Iterator it = INSTANCES.values().iterator(); it.hasNext();) {	       TransactionManager tm = (TransactionManager) it.next();	       try           {              tm.suspend();           }           catch (Exception e)           {              log.error("Exception cleaning up TransactionManager " + tm);           }	   }	}        public synchronized static void cleanupTransactionManagers() {               INSTANCES.clear();    }		private DualNodeJtaTransactionManagerImpl(String nodeId) {	    this.nodeId = nodeId;	}	public int getStatus() throws SystemException {	    Transaction tx = getCurrentTransaction();		return tx == null ? Status.STATUS_NO_TRANSACTION : tx.getStatus();	}	public Transaction getTransaction() throws SystemException {		return (Transaction) currentTransaction.get();	}	public DualNodeJtaTransactionImpl getCurrentTransaction() {		return (DualNodeJtaTransactionImpl) currentTransaction.get();	}	public void begin() throws NotSupportedException, SystemException {		currentTransaction.set(new DualNodeJtaTransactionImpl( this ));	}	public Transaction suspend() throws SystemException {       DualNodeJtaTransactionImpl suspended = getCurrentTransaction();	    log.trace(nodeId + ": Suspending " + suspended + " for thread " + Thread.currentThread().getName());		currentTransaction.set(null);		return suspended;	}	public void resume(Transaction transaction)			throws InvalidTransactionException, IllegalStateException, SystemException {		currentTransaction.set(( DualNodeJtaTransactionImpl ) transaction);		log.trace(nodeId + ": Resumed " + transaction + " for thread " + Thread.currentThread().getName());	}	public void commit()			throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException, SystemException {		Transaction tx = getCurrentTransaction();	    if ( tx == null ) {			throw new IllegalStateException( "no current transaction to commit" );		}	    tx.commit();	}	public void rollback() throws IllegalStateException, SecurityException, SystemException {	    Transaction tx = getCurrentTransaction();        if ( tx == null ) {			throw new IllegalStateException( "no current transaction" );		}        tx.rollback();	}	public void setRollbackOnly() throws IllegalStateException, SystemException {	    Transaction tx = getCurrentTransaction();        if ( tx == null ) {			throw new IllegalStateException( "no current transaction" );		}        tx.setRollbackOnly();	}	public void setTransactionTimeout(int i) throws SystemException {	}	void endCurrent(DualNodeJtaTransactionImpl transaction) {		if ( transaction == currentTransaction.get() ) {			currentTransaction.set(null);		}	}		public String toString() {	    StringBuffer sb = new StringBuffer(getClass().getName());	    sb.append("[nodeId=");	    sb.append(nodeId);	    sb.append("]");	    return sb.toString();	}}

⌨️ 快捷键说明

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