[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