Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Hibernate, Relational Persistence for Idiomatic Java
   *
   * Copyright (c) 2012, Red Hat Inc. 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 Inc.
   *
   * 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.testing.jta;
 
 import java.util.List;
 import java.util.Map;
 
A javax.sql.DataSource implementation intended for testing Hibernate/JTA interaction. In that limited scope we only ever have one single resource (the database connection) so we do not at all care about full-blown XA semantics. This class behaves accordingly. This class also assumes usage of and access to JBossTS/Arjuna.

Author(s):
Steve Ebersole
Jonathan Halliday
 
 	private static final String CONNECTION_KEY = "_database_connection";
 
 
 
 	public void configure(Map configurationValues) {
 		Properties connectionSettings = new Properties();
 		transferSetting.configurationValuesconnectionSettings );
 		transferSetting.configurationValuesconnectionSettings );
 		transferSetting.configurationValuesconnectionSettings );
 		transferSetting.configurationValuesconnectionSettings );
 		transferSetting.configurationValuesconnectionSettings );
 		Properties passThroughSettings = ConnectionProviderInitiator.getConnectionPropertiesconfigurationValues );
 		if ( passThroughSettings != null ) {
 			for ( String setting : passThroughSettings.stringPropertyNames() ) {
 				transferSetting. + '.' + settingconfigurationValuesconnectionSettings );
 			}
 		}
 		connectionSettings.setProperty."false" );
 
 		.configureconnectionSettings );
 	}
 
 	@SuppressWarnings("unchecked")
 	private static void transferSetting(String settingNameMap sourceMap target) {
 		Object value = source.getsettingName );
 		if ( value != null ) {
 			target.putsettingNamevalue );
 		}
 	}
 
 	public void stop() {
 	}
 
 	public Connection getConnection() throws SQLException {
 		Transaction currentTransaction = findCurrentTransaction();
 
 		try {
 			if ( currentTransaction == null ) {
				// this block handles non enlisted connections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
				.addconnection );
				return connection;
			}
			// this portion handles enlisted connections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
			Connection connection = (Connection) TestingJtaPlatformImpl.synchronizationRegistry().getResource(
			);
			if ( connection == null ) {
				connection = .getConnection();
				TestingJtaPlatformImpl.synchronizationRegistry().putResourceconnection );
				XAResourceWrapper xaResourceWrapper = new XAResourceWrapperthisconnection );
				currentTransaction.enlistResourcexaResourceWrapper );
			}
			return connection;
		}
		catch (SQLException e) {
			throw e;
		}
		catch (Exception e) {
			throw new SQLException(e);
		}
	}
	public void closeConnection(Connection connthrows SQLException {
		if ( conn == null ) {
			return;
		}
		if ( .containsconn ) ) {
		}
		else {
			// do nothing.  part of the enlistment contract here is that the XAResource wrapper
			// takes that responsibility.
		}
	}
	public boolean supportsAggressiveRelease() {
		return true;
	}
		try {
			return TestingJtaPlatformImpl.transactionManager().getTransaction();
		}
		catch (SystemException e) {
			throw new IllegalStateException"Could not locate current transaction" );
		}
	}
	public boolean isUnwrappableAs(Class unwrapType) {
		return .isUnwrappableAsunwrapType );
	}
	public <T> T unwrap(Class<T> unwrapType) {
		return .unwrapunwrapType );
	}
	private void delist(Connection connection) {
		// todo : verify the incoming connection is the currently enlisted one?
		TestingJtaPlatformImpl.synchronizationRegistry().putResourcenull );
		try {
			.closeConnectionconnection );
		}
		catch (SQLException e) {
			..println"!!!Error trying to close JDBC connection from delist callbacks!!!" );
		}
	}
	public static class XAResourceWrapper implements XAResource {
		private final Connection connection;
		private int transactionTimeout;
			this. = pool;
			this. = connection;
		}
		public int prepare(Xid xidthrows XAException {
			throw new RuntimeException("this should never be called");
		}
		public void commit(Xid xidboolean onePhasethrows XAException {
			if (!onePhase) {
				throw new IllegalArgumentException"must be one phase" );
			}
			try {
			}
			catch(SQLException e) {
				throw new XAExceptione.toString() );
			}
			finally {
				try {
				}
				catch (Exception ignore) {
				}
			}
		}
		public void rollback(Xid xidthrows XAException {
			try {
			}
			catch(SQLException e) {
				throw new XAExceptione.toString() );
			}
			finally {
				try {
				}
				catch (Exception ignore) {
				}
			}
		}
		public void end(Xid xidint ithrows XAException {
			// noop
		}
		public void start(Xid xidint ithrows XAException {
			// noop
		}
		public void forget(Xid xidthrows XAException {
			// noop
		}
		public int getTransactionTimeout() throws XAException {
		}
		public boolean setTransactionTimeout(int ithrows XAException {
			return true;
		}
		public boolean isSameRM(XAResource xaResourcethrows XAException {
			return xaResource != null && xaResource == this;
		}
		public Xid[] recover(int ithrows XAException {
			return new Xid[0];
		}
	}
New to GrepCode? Check out our FAQ X