[jboss-cvs] jbosside/hibernatetools/plugins/org.hibernate.eclipse/src/org/hibernate/console ...

Max Rydahl Andersen mandersen at jboss.com
Mon Feb 26 17:58:56 EST 2007


  User: mandersen
  Date: 07/02/26 17:58:56

  Modified:    hibernatetools/plugins/org.hibernate.eclipse/src/org/hibernate/console  
                        ConsoleConfiguration.java
  Added:       hibernatetools/plugins/org.hibernate.eclipse/src/org/hibernate/console  
                        FakeTransactionManagerLookup.java
  Log:
  handle overriding of transactionmanager lookup
  
  Revision  Changes    Path
  1.18      +8 -0      jbosside/hibernatetools/plugins/org.hibernate.eclipse/src/org/hibernate/console/ConsoleConfiguration.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ConsoleConfiguration.java
  ===================================================================
  RCS file: /cvsroot/jboss/jbosside/hibernatetools/plugins/org.hibernate.eclipse/src/org/hibernate/console/ConsoleConfiguration.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -b -r1.17 -r1.18
  --- ConsoleConfiguration.java	20 Feb 2007 13:09:43 -0000	1.17
  +++ ConsoleConfiguration.java	26 Feb 2007 22:58:56 -0000	1.18
  @@ -38,6 +38,7 @@
   import java.util.List;
   import java.util.Map;
   import java.util.Properties;
  +import java.util.Map.Entry;
   
   import org.dom4j.DocumentException;
   import org.dom4j.Node;
  @@ -141,6 +142,7 @@
   			throw new HibernateConsoleRuntimeException("Could not create JPA based Configuration",e);
   		}
   	}
  +	
   	private Configuration buildAnnotationConfiguration() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
   		Class clazz = ReflectHelper
   				.classForName( "org.hibernate.cfg.AnnotationConfiguration" );
  @@ -187,6 +189,12 @@
   
   					Properties properties = prefs.getProperties();
   					
  +					String str = properties.getProperty( "hibernate.transaction.manager_lookup_class" );
  +					if(str.trim().length()==0) {
  +						properties.setProperty( "hibernate.transaction.manager_lookup_class", "org.hibernate.console.FakeTransactionManagerLookup");
  +					}
  +					
  +										
   					if(localCfg==null) {
   						localCfg = buildConfiguration( properties, includeMappings );
   					} else {
  
  
  
  1.1      date: 2007/02/26 22:58:56;  author: mandersen;  state: Exp;jbosside/hibernatetools/plugins/org.hibernate.eclipse/src/org/hibernate/console/FakeTransactionManagerLookup.java
  
  Index: FakeTransactionManagerLookup.java
  ===================================================================
  package org.hibernate.console;
  
  import java.sql.Connection;
  import java.sql.SQLException;
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Properties;
  
  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.Synchronization;
  import javax.transaction.SystemException;
  import javax.transaction.Transaction;
  import javax.transaction.TransactionManager;
  import javax.transaction.xa.XAResource;
  
  import org.hibernate.HibernateException;
  import org.hibernate.connection.ConnectionProvider;
  import org.hibernate.connection.ConnectionProviderFactory;
  import org.hibernate.transaction.TransactionManagerLookup;
  
  public class FakeTransactionManagerLookup implements TransactionManagerLookup {
  
  	public TransactionManager getTransactionManager(Properties props)
  	throws HibernateException {
  		if ( FakeTransactionManager.INSTANCE == null ) {
  			FakeTransactionManager.INSTANCE = new FakeTransactionManager(props);
  		}
  		return FakeTransactionManager.INSTANCE;
  	}
  
  	public String getUserTransactionName() {
  		throw new UnsupportedOperationException();
  	}
  
  }
  
  class FakeTransactionManager implements TransactionManager {
  
  	public static FakeTransactionManager INSTANCE;
  
  	private FakeTransaction current;
  	ConnectionProvider connections;
  	
  	public FakeTransactionManager(Properties props) {
  		connections = ConnectionProviderFactory.newConnectionProvider();
  	}
  	
  	public void begin() throws NotSupportedException, SystemException {
  		current = new FakeTransaction(this);
  		current.begin();
  	}
  
  	public void commit() throws RollbackException, HeuristicMixedException,
  			HeuristicRollbackException, SecurityException,
  			IllegalStateException, SystemException {
  		current.commit();
  	}
  
  
  	public int getStatus() throws SystemException {
  		return current.getStatus();
  	}
  
  	public Transaction getTransaction() throws SystemException {
  		return current;
  	}
  
  	public void resume(Transaction tx) throws InvalidTransactionException,
  			IllegalStateException, SystemException {
  		current = (FakeTransaction) tx;
  	}
  
  	public void rollback() throws IllegalStateException, SecurityException,
  			SystemException {
  		current.rollback();
  
  	}
  
  	public void setRollbackOnly() throws IllegalStateException, SystemException {
  		current.setRollbackOnly();
  	}
  
  	public void setTransactionTimeout(int t) throws SystemException {
  	}
  	
  	public Transaction suspend() throws SystemException {
  		Transaction result = current;
  		current = null;
  		return result;
  	}
  
  	public FakeTransaction getCurrent() {
  		return current;
  	}
  	
  	void endCurrent(FakeTransaction tx) {
  		if (current==tx) current=null;
  	}
  
  }
  
  class FakeTransaction implements Transaction {
  	
  	int status;
  	private Connection connection;
  	List synchronizations = new ArrayList();
  	private FakeTransactionManager transactionManager;
  	
  	FakeTransaction(FakeTransactionManager transactionManager) {
  		status = Status.STATUS_NO_TRANSACTION;
  		this.transactionManager = transactionManager;
  	}
  	
  	public void begin() throws SystemException {
  		try {
  			connection = transactionManager.connections.getConnection();
  		}
  		catch (SQLException sqle) {
  			
  			sqle.printStackTrace();
  			throw new SystemException(sqle.toString());
  		}
  		status = Status.STATUS_ACTIVE;
  	}
  
  	public void commit() throws RollbackException, HeuristicMixedException,
  			HeuristicRollbackException, SecurityException,
  			IllegalStateException, SystemException {
  		
  		if (status == Status.STATUS_MARKED_ROLLBACK) {
  			rollback();
  		}
  		else {
  			status = Status.STATUS_PREPARING;
  			
  			for ( int i=0; i<synchronizations.size(); i++ ) {
  				Synchronization s = (Synchronization) synchronizations.get(i);
  				s.beforeCompletion();
  			}
  			
  			status = Status.STATUS_COMMITTING;
  			
  			try {
  				connection.commit();
  				connection.close();
  			}
  			catch (SQLException sqle) {
  				status = Status.STATUS_UNKNOWN;
  				throw new SystemException();
  			}
  			
  			status = Status.STATUS_COMMITTED;
  
  			for ( int i=0; i<synchronizations.size(); i++ ) {
  				Synchronization s = (Synchronization) synchronizations.get(i);
  				s.afterCompletion(status);
  			}
  			
  			//status = Status.STATUS_NO_TRANSACTION;
  			transactionManager.endCurrent(this);
  		}
  
  	}
  	
  	public boolean delistResource(XAResource arg0, int arg1)
  			throws IllegalStateException, SystemException {
  		// TODO Auto-generated method stub
  		return false;
  	}
  	
  	public boolean enlistResource(XAResource arg0) throws RollbackException,
  			IllegalStateException, SystemException {
  		// TODO Auto-generated method stub
  		return false;
  	}
  	
  	public int getStatus() throws SystemException {
  		return status;
  	}
  	
  	public void registerSynchronization(Synchronization sync)
  			throws RollbackException, IllegalStateException, SystemException {
  		synchronizations.add(sync);
  	}
  	
  	public void rollback() throws IllegalStateException, SystemException {
  
  		status = Status.STATUS_ROLLING_BACK;
  
  // Synch.beforeCompletion() should *not* be called for rollbacks
  //		for ( int i=0; i<synchronizations.size(); i++ ) {
  //			Synchronization s = (Synchronization) synchronizations.get(i);
  //			s.beforeCompletion();
  //		}
  		
  		status = Status.STATUS_ROLLEDBACK;
  		
  		try {
  			connection.rollback();
  			connection.close();
  		}
  		catch (SQLException sqle) {
  			status = Status.STATUS_UNKNOWN;
  			throw new SystemException();
  		}
  		
  		for ( int i=0; i<synchronizations.size(); i++ ) {
  			Synchronization s = (Synchronization) synchronizations.get(i);
  			s.afterCompletion(status);
  		}
  		
  		//status = Status.STATUS_NO_TRANSACTION;
  		transactionManager.endCurrent(this);
  	}
  	
  	public void setRollbackOnly() throws IllegalStateException, SystemException {
  		status = Status.STATUS_MARKED_ROLLBACK;
  	}
  
  	void setConnection(Connection connection) {
  		this.connection = connection;
  	}
  
  	public Connection getConnection() {
  		return connection;
  	}
  }
  
  
  



More information about the jboss-cvs-commits mailing list