View Javadoc

1   package com.imcode.db.commands;
2   
3   import com.imcode.db.DatabaseCommand;
4   import com.imcode.db.DatabaseConnection;
5   import com.imcode.db.DatabaseException;
6   import org.apache.commons.lang.UnhandledException;
7   
8   import java.sql.Connection;
9   import java.sql.SQLException;
10  
11  /***
12      An abstract DatabaseCommand that can be overridden to run something in an transaction. 
13  **/
14  public abstract class TransactionDatabaseCommand implements DatabaseCommand {
15  
16      public Object executeOn( DatabaseConnection dc ) throws DatabaseException {
17          try {
18              Connection connection = dc.getConnection() ;
19              try {
20                  connection.setAutoCommit( false );
21                  Object result = executeInTransaction( dc );
22                  connection.commit();
23                  return result;
24              } catch ( Throwable t ) {
25                  connection.rollback();
26                  if (t instanceof RuntimeException) {
27                      throw (RuntimeException)t ;
28                  } else {
29                      throw new UnhandledException( t ) ;
30                  }
31              } finally {
32                  connection.setAutoCommit( true );
33              }
34          } catch ( SQLException e ) {
35              throw DatabaseException.fromSQLException( null, e );
36          }
37      }
38  
39      public abstract Object executeInTransaction( DatabaseConnection connection ) throws DatabaseException;
40  
41  }