/** * Alipay.com Inc. * Copyright (c) 2004-2012 All Rights Reserved. */ package com.alipay.zdal.datasource.resource.adapter.jdbc.local; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.transaction.xa.XAResource; import org.apache.log4j.Logger; import com.alipay.zdal.datasource.resource.JBossResourceException; import com.alipay.zdal.datasource.resource.ResourceException; import com.alipay.zdal.datasource.resource.adapter.jdbc.BaseWrapperManagedConnection; import com.alipay.zdal.datasource.resource.spi.LocalTransaction; /** * LocalManagedConnection * * @author ���� * @version $Id: LocalManagedConnection.java, v 0.1 2014-1-6 ����05:32:00 Exp $ */ public class LocalManagedConnection extends BaseWrapperManagedConnection implements LocalTransaction { private static final Logger logger = Logger.getLogger(LocalManagedConnection.class); /** * @param mcf * @param con * @param props * @param transactionIsolation * @param psCacheSize * @throws SQLException */ public LocalManagedConnection(final LocalManagedConnectionFactory mcf, final Connection con, final Properties props, final int transactionIsolation, final int psCacheSize) throws SQLException { super(mcf, con, props, transactionIsolation, psCacheSize); } public LocalTransaction getLocalTransaction() throws ResourceException { return this; } public XAResource getXAResource() throws ResourceException { throw new JBossResourceException("Local tx only!"); } /** * @see com.alipay.zdal.datasource.resource.spi.LocalTransaction#commit() */ public void commit() throws ResourceException { synchronized (stateLock) { if (inManagedTransaction) inManagedTransaction = false; } try { con.commit(); } catch (SQLException e) { checkException(e); } } /** * @see com.alipay.zdal.datasource.resource.spi.LocalTransaction#rollback() */ public void rollback() throws ResourceException { synchronized (stateLock) { if (inManagedTransaction) inManagedTransaction = false; } try { con.rollback(); } catch (SQLException e) { try { checkException(e); } catch (Exception e2) { logger.error(e2); } } } /** * @see com.alipay.zdal.datasource.resource.spi.LocalTransaction#begin() */ public void begin() throws ResourceException { synchronized (stateLock) { if (inManagedTransaction == false) { try { if (underlyingAutoCommit) { underlyingAutoCommit = false; con.setAutoCommit(false); } checkState(); inManagedTransaction = true; } catch (SQLException e) { checkException(e); } } else throw new JBossResourceException("Trying to begin a nested local tx"); } } Properties getProps() { return props; } }