View Javadoc
1   package com.atlassian.activeobjects.internal;
2   
3   import com.atlassian.sal.api.transaction.TransactionCallback;
4   import net.java.ao.ActiveObjectsException;
5   import net.java.ao.EntityManager;
6   import net.java.ao.Transaction;
7   
8   import java.sql.SQLException;
9   
10  import static com.google.common.base.Preconditions.checkNotNull;
11  
12  /**
13   * Implementation of the {@link com.atlassian.activeobjects.internal.TransactionManager} that
14   * relies on Active Objects transaction mechanism.
15   */
16  final class EntityManagedTransactionManager extends AbstractLoggingTransactionManager {
17      private final EntityManager entityManager;
18  
19      EntityManagedTransactionManager(EntityManager entityManager) {
20          this.entityManager = checkNotNull(entityManager);
21      }
22  
23      <T> T inTransaction(final TransactionCallback<T> callback) {
24          try {
25              return new Transaction<T>(entityManager) {
26                  public T run() {
27                      return callback.doInTransaction();
28                  }
29              }.execute();
30          } catch (SQLException e) {
31              throw new ActiveObjectsException(e);
32          }
33      }
34  }