Skip to content

Transaction Management

Holger Thurow edited this page Jan 10, 2020 · 7 revisions

To use transactions you have to initialize q2o with either q2o.initializeTxSimple(DataSource) or q2o.initializeTxCustom(DataSource, TransactionManager, UserTransaction). Then every single q2o operation is executed in a transaction. To enclose several operations in a transaction there are two ways:

      // 1)
      try {
         TransactionHelper.beginOrJoinTransaction();
         // Execute your operations here
         TransactionHelper.commit();
      }
      catch (Exception e) {
         TransactionHelper.rollback();
      }

      // 2)
     SqlClosure.sqlExecute(new SqlFunction<Void>() {
        @Override
        public Void execute(final Connection q2oManagedConnection) throws SQLException
        {
           // Execute your operations here
           return null;
        }
     });

After initializing q2o with q2o.initializeTxSimple(DataSource) you must use the DataSource that is returned from the method to retrieve connections.

In a Spring environment use Spring's TransactionTemplate and initialize q2o with q2o.initializeWithSpringTxSupport(DataSource).

Study the tests and hints in TransactionsTest.java too.

To use server managed transactions initialize q2o with q2o.initializeTxNone(DataSource). So every connection is in autocommit mode.