1 package com.atlassian.activeobjects.confluence.transaction;
2
3 import com.atlassian.activeobjects.spi.TransactionSynchronisationManager;
4 import com.atlassian.confluence.core.SynchronizationManager;
5 import org.springframework.transaction.support.TransactionSynchronization;
6 import org.springframework.transaction.support.TransactionSynchronizationAdapter;
7
8
9
10
11
12
13 public class ConfluenceAOSynchronisationManager implements TransactionSynchronisationManager {
14 private SynchronizationManager synchronisationManager;
15
16 public ConfluenceAOSynchronisationManager(SynchronizationManager synchManager) {
17 this.synchronisationManager = synchManager;
18 }
19
20 @Override
21 public boolean runOnRollBack(final Runnable callback) {
22 if (synchronisationManager.isTransactionActive()) {
23 synchronisationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
24 @Override
25 public void afterCompletion(int status) {
26 if (status == TransactionSynchronization.STATUS_ROLLED_BACK) {
27 callback.run();
28 }
29 }
30 });
31 return true;
32 } else {
33 return false;
34 }
35 }
36
37 @Override
38 public boolean runOnSuccessfulCommit(Runnable callback) {
39 if (synchronisationManager.isTransactionActive()) {
40 synchronisationManager.runOnSuccessfulCommit(callback);
41 return true;
42 } else {
43 return false;
44 }
45 }
46
47 @Override
48 public boolean isActiveSynchronisedTransaction() {
49 return synchronisationManager.isTransactionActive();
50 }
51 }