From 479ac38537723e3a57de40b05650d4e0d0342238 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Thu, 4 Aug 2016 23:17:57 +1200 Subject: [PATCH] #807 - Deprecate TransactionEventListener ... migrate to TransactionCallback --- .../com/avaje/ebean/config/ServerConfig.java | 31 ---------- .../ebean/event/TransactionEventListener.java | 18 ------ .../TransactionEventListenerAdapter.java | 18 ------ .../server/core/DefaultContainer.java | 1 - .../server/core/InternalConfiguration.java | 6 +- .../server/core/bootup/BootupClasses.java | 30 --------- .../AutoCommitTransactionManager.java | 7 +-- .../ExplicitTransactionManager.java | 7 +-- .../transaction/TransactionManager.java | 20 +----- .../event/MyTestTransactionEventListener.java | 43 ------------- .../basic/event/TestTransactionEvent.java | 62 ------------------- 11 files changed, 11 insertions(+), 232 deletions(-) delete mode 100644 src/main/java/com/avaje/ebean/event/TransactionEventListener.java delete mode 100644 src/main/java/com/avaje/ebean/event/TransactionEventListenerAdapter.java delete mode 100644 src/test/java/com/avaje/tests/basic/event/MyTestTransactionEventListener.java delete mode 100644 src/test/java/com/avaje/tests/basic/event/TestTransactionEvent.java diff --git a/src/main/java/com/avaje/ebean/config/ServerConfig.java b/src/main/java/com/avaje/ebean/config/ServerConfig.java index 0db26cc5a..9dd0d05bb 100644 --- a/src/main/java/com/avaje/ebean/config/ServerConfig.java +++ b/src/main/java/com/avaje/ebean/config/ServerConfig.java @@ -14,7 +14,6 @@ import com.avaje.ebean.event.BeanPostLoad; import com.avaje.ebean.event.BeanQueryAdapter; import com.avaje.ebean.event.BulkTableEventListener; import com.avaje.ebean.event.ServerConfigStartup; -import com.avaje.ebean.event.TransactionEventListener; import com.avaje.ebean.event.changelog.ChangeLogListener; import com.avaje.ebean.event.changelog.ChangeLogPrepare; import com.avaje.ebean.event.changelog.ChangeLogRegister; @@ -331,7 +330,6 @@ public class ServerConfig { private List queryAdapters = new ArrayList(); private List bulkTableEventListeners = new ArrayList(); private List configStartupListeners = new ArrayList(); - private List transactionEventListeners = new ArrayList(); /** * By default inserts are included in the change log. @@ -2052,35 +2050,6 @@ public class ServerConfig { this.persistControllers = persistControllers; } - /** - * Register a TransactionEventListener instance - *

- * Note alternatively you can use {@link #setTransactionEventListeners(List)} - * to set all the TransactionEventListener instances. - *

- */ - public void add(TransactionEventListener listener) { - transactionEventListeners.add(listener); - } - - /** - * Return the TransactionEventListener instances. - */ - public List getTransactionEventListeners() { - return transactionEventListeners; - } - - /** - * Register all the TransactionEventListener instances. - *

- * Note alternatively you can use {@link #add(TransactionEventListener)} to - * add TransactionEventListener instances one at a time. - *

- */ - public void setTransactionEventListeners(List transactionEventListeners) { - this.transactionEventListeners = transactionEventListeners; - } - /** * Register a BeanPersistListener instance. *

diff --git a/src/main/java/com/avaje/ebean/event/TransactionEventListener.java b/src/main/java/com/avaje/ebean/event/TransactionEventListener.java deleted file mode 100644 index fb9ab50c7..000000000 --- a/src/main/java/com/avaje/ebean/event/TransactionEventListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.avaje.ebean.event; - -import com.avaje.ebean.Transaction; - -/** - * Used to get notified about commit or rollback of a transaction - */ -public interface TransactionEventListener { - /** - * Called after the transaction has been committed - */ - void postTransactionCommit(Transaction tx); - - /** - * Called after the transaction has been rolled back - */ - void postTransactionRollback(Transaction tx, Throwable cause); -} diff --git a/src/main/java/com/avaje/ebean/event/TransactionEventListenerAdapter.java b/src/main/java/com/avaje/ebean/event/TransactionEventListenerAdapter.java deleted file mode 100644 index 376dfdfbe..000000000 --- a/src/main/java/com/avaje/ebean/event/TransactionEventListenerAdapter.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.avaje.ebean.event; - -import com.avaje.ebean.Transaction; - -/** - * A no operation implementation of TransactionEventListener. Objects extending - * this need to only override the methods they want to. - */ -public abstract class TransactionEventListenerAdapter implements TransactionEventListener { - - public void postTransactionCommit(Transaction tx) { - // do nothing by default - } - - public void postTransactionRollback(Transaction tx, Throwable cause) { - // do nothing by default - } -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java index 210fde590..0f25e5cc7 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java @@ -195,7 +195,6 @@ public class DefaultContainer implements SpiContainer { bootup.addPersistControllers(serverConfig.getPersistControllers()); bootup.addPostLoaders(serverConfig.getPostLoaders()); bootup.addFindControllers(serverConfig.getFindControllers()); - bootup.addTransactionEventListeners(serverConfig.getTransactionEventListeners()); bootup.addPersistListeners(serverConfig.getPersistListeners()); bootup.addQueryAdapters(serverConfig.getQueryAdapters()); bootup.addServerConfigStartup(serverConfig.getServerConfigStartupListeners()); diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java b/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java index 219acce17..caf82e185 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java @@ -340,14 +340,14 @@ public class InternalConfiguration { boolean localL2 = cacheManager.isLocalL2Caching(); if (serverConfig.isExplicitTransactionBeginMode()) { - return new ExplicitTransactionManager(localL2, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, beanDescriptorManager, this.getBootupClasses()); + return new ExplicitTransactionManager(localL2, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, beanDescriptorManager); } if (isAutoCommitMode()) { - return new AutoCommitTransactionManager(localL2, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, beanDescriptorManager, this.getBootupClasses()); + return new AutoCommitTransactionManager(localL2, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, beanDescriptorManager); } - return new TransactionManager(localL2, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, beanDescriptorManager, this.getBootupClasses()); + return new TransactionManager(localL2, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, beanDescriptorManager); } /** diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/bootup/BootupClasses.java b/src/main/java/com/avaje/ebeaninternal/server/core/bootup/BootupClasses.java index 2413c6caa..d846536d8 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/bootup/BootupClasses.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/bootup/BootupClasses.java @@ -10,7 +10,6 @@ import com.avaje.ebean.event.BeanPersistListener; import com.avaje.ebean.event.BeanPostLoad; import com.avaje.ebean.event.BeanQueryAdapter; import com.avaje.ebean.event.ServerConfigStartup; -import com.avaje.ebean.event.TransactionEventListener; import com.avaje.ebean.event.changelog.ChangeLogListener; import com.avaje.ebean.event.changelog.ChangeLogPrepare; import com.avaje.ebean.event.changelog.ChangeLogRegister; @@ -54,8 +53,6 @@ public class BootupClasses implements ClassFilter { private final List> beanPostLoadList = new ArrayList>(); - private final List> transactionEventListenerList = new ArrayList>(); - private final List> beanFindControllerList = new ArrayList>(); private final List> beanQueryAdapterList = new ArrayList>(); @@ -70,7 +67,6 @@ public class BootupClasses implements ClassFilter { private final List beanPostLoadInstances = new ArrayList(); private final List persistListenerInstances = new ArrayList(); private final List queryAdapterInstances = new ArrayList(); - private final List transactionEventListenerInstances = new ArrayList(); private Class changeLogPrepareClass; private Class changeLogListenerClass; @@ -181,19 +177,6 @@ public class BootupClasses implements ClassFilter { } } - /** - * Add TransactionEventListeners instances. - */ - public void addTransactionEventListeners(List transactionEventListeners) { - if (transactionEventListeners != null) { - for (TransactionEventListener c : transactionEventListeners) { - this.transactionEventListenerInstances.add(c); - // don't automatically instantiate - this.transactionEventListenerList.remove(c.getClass()); - } - } - } - public void addPersistListeners(List listenerInstances) { if (listenerInstances != null) { for (BeanPersistListener l : listenerInstances) { @@ -351,14 +334,6 @@ public class BootupClasses implements ClassFilter { return idGeneratorInstances; } - public List getTransactionEventListeners() { - // add class registered TransactionEventListener to the already created instances - for (Class cls : transactionEventListenerList) { - createAdd(cls, transactionEventListenerInstances); - } - return transactionEventListenerInstances; - } - /** * Return the list of Embeddable classes. */ @@ -440,11 +415,6 @@ public class BootupClasses implements ClassFilter { interesting = true; } - if (TransactionEventListener.class.isAssignableFrom(cls)) { - transactionEventListenerList.add(cls); - interesting = true; - } - if (ScalarType.class.isAssignableFrom(cls)) { scalarTypeList.add(cls); interesting = true; diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/AutoCommitTransactionManager.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/AutoCommitTransactionManager.java index af04c6ad5..c2c40ebe4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/transaction/AutoCommitTransactionManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/AutoCommitTransactionManager.java @@ -3,10 +3,9 @@ package com.avaje.ebeaninternal.server.transaction; import com.avaje.ebean.BackgroundExecutor; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebeaninternal.api.SpiTransaction; -import com.avaje.ebeanservice.docstore.api.DocStoreUpdateProcessor; import com.avaje.ebeaninternal.server.cluster.ClusterManager; -import com.avaje.ebeaninternal.server.core.bootup.BootupClasses; import com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager; +import com.avaje.ebeanservice.docstore.api.DocStoreUpdateProcessor; import java.sql.Connection; @@ -18,9 +17,9 @@ import java.sql.Connection; public class AutoCommitTransactionManager extends TransactionManager { public AutoCommitTransactionManager(boolean localL2Caching, ServerConfig serverConfig, ClusterManager clusterManager, BackgroundExecutor backgroundExecutor, - DocStoreUpdateProcessor indexUpdateProcessor, BeanDescriptorManager descMgr, BootupClasses bootupClasses) { + DocStoreUpdateProcessor indexUpdateProcessor, BeanDescriptorManager descMgr) { - super(localL2Caching, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, descMgr, bootupClasses); + super(localL2Caching, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, descMgr); } /** diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java index 1a6134703..70b4ee7b1 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/ExplicitTransactionManager.java @@ -4,10 +4,9 @@ import com.avaje.ebean.BackgroundExecutor; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebeaninternal.api.SpiTransaction; -import com.avaje.ebeanservice.docstore.api.DocStoreUpdateProcessor; import com.avaje.ebeaninternal.server.cluster.ClusterManager; -import com.avaje.ebeaninternal.server.core.bootup.BootupClasses; import com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager; +import com.avaje.ebeanservice.docstore.api.DocStoreUpdateProcessor; import javax.sql.DataSource; import java.sql.Connection; @@ -18,9 +17,9 @@ import java.sql.Connection; public class ExplicitTransactionManager extends TransactionManager { public ExplicitTransactionManager(boolean localL2Caching, ServerConfig serverConfig, ClusterManager clusterManager, BackgroundExecutor backgroundExecutor, - DocStoreUpdateProcessor indexUpdateProcessor, BeanDescriptorManager descMgr, BootupClasses bootupClasses) { + DocStoreUpdateProcessor indexUpdateProcessor, BeanDescriptorManager descMgr) { - super(localL2Caching, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, descMgr, bootupClasses); + super(localL2Caching, serverConfig, clusterManager, backgroundExecutor, indexUpdateProcessor, descMgr); } /** diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java index dc1402503..4d42916e4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java @@ -4,8 +4,6 @@ import com.avaje.ebean.BackgroundExecutor; import com.avaje.ebean.config.PersistBatch; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.DatabasePlatform.OnQueryOnly; -import com.avaje.ebean.dbmigration.DbOffline; -import com.avaje.ebean.event.TransactionEventListener; import com.avaje.ebean.event.changelog.ChangeLogListener; import com.avaje.ebean.event.changelog.ChangeLogPrepare; import com.avaje.ebean.event.changelog.ChangeSet; @@ -14,11 +12,10 @@ import com.avaje.ebeaninternal.api.TransactionEvent; import com.avaje.ebeaninternal.api.TransactionEventTable; import com.avaje.ebeaninternal.api.TransactionEventTable.TableIUD; import com.avaje.ebeaninternal.server.cluster.ClusterManager; -import com.avaje.ebeaninternal.server.core.bootup.BootupClasses; import com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager; -import org.avaje.datasource.DataSourcePool; import com.avaje.ebeanservice.docstore.api.DocStoreUpdateProcessor; import com.avaje.ebeanservice.docstore.api.DocStoreUpdates; +import org.avaje.datasource.DataSourcePool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -92,8 +89,6 @@ public class TransactionManager { protected final BulkEventListenerMap bulkEventListenerMap; - protected final TransactionEventListener[] transactionEventListeners; - /** * Used to prepare the change set setting user context information in the * foreground thread before logging. @@ -115,7 +110,7 @@ public class TransactionManager { * Create the TransactionManager */ public TransactionManager(boolean localL2Caching, ServerConfig config, ClusterManager clusterManager, BackgroundExecutor backgroundExecutor, - DocStoreUpdateProcessor docStoreUpdateProcessor, BeanDescriptorManager descMgr, BootupClasses bootupClasses) { + DocStoreUpdateProcessor docStoreUpdateProcessor, BeanDescriptorManager descMgr) { this.skipCacheAfterWrite = config.isSkipCacheAfterWrite(); this.localL2Caching = localL2Caching; @@ -133,9 +128,6 @@ public class TransactionManager { this.docStoreUpdateProcessor = docStoreUpdateProcessor; this.bulkEventListenerMap = new BulkEventListenerMap(config.getBulkTableEventListeners()); - List transactionEventListeners = bootupClasses.getTransactionEventListeners(); - this.transactionEventListeners = transactionEventListeners.toArray(new TransactionEventListener[transactionEventListeners.size()]); - this.prefix = ""; this.externalTransPrefix = "e"; @@ -311,10 +303,6 @@ public class TransactionManager { TXN_LOGGER.debug(msg); } - for (TransactionEventListener listener : transactionEventListeners) { - listener.postTransactionRollback(transaction, cause); - } - } catch (Exception ex) { logger.error("Error while notifying TransactionEventListener of rollback event", ex); } @@ -369,10 +357,6 @@ public class TransactionManager { postCommit.notifyLocalCache(); backgroundExecutor.execute(postCommit.backgroundNotify()); - for (TransactionEventListener listener : transactionEventListeners) { - listener.postTransactionCommit(transaction); - } - } catch (Exception ex) { logger.error("NotifyOfCommit failed. L2 Cache potentially not notified.", ex); } diff --git a/src/test/java/com/avaje/tests/basic/event/MyTestTransactionEventListener.java b/src/test/java/com/avaje/tests/basic/event/MyTestTransactionEventListener.java deleted file mode 100644 index abe27803c..000000000 --- a/src/test/java/com/avaje/tests/basic/event/MyTestTransactionEventListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.avaje.tests.basic.event; - -import com.avaje.ebean.Transaction; -import com.avaje.ebean.event.TransactionEventListener; - -public class MyTestTransactionEventListener implements TransactionEventListener { - private volatile static boolean doTest = false; - - private static Transaction lastCommitted; - private static Transaction lastRollbacked; - - public void postTransactionCommit(Transaction tx) { - if (!doTest) { - return; - } - - lastCommitted = tx; - } - - public void postTransactionRollback(Transaction tx, Throwable cause) { - if (!doTest) { - return; - } - - lastRollbacked = tx; - } - - public static void setDoTest(boolean doTest) { - MyTestTransactionEventListener.doTest = doTest; - - // reset what we've recorded so far - lastCommitted = null; - lastRollbacked = null; - } - - public static Transaction getLastCommitted() { - return lastCommitted; - } - - public static Transaction getLastRollbacked() { - return lastRollbacked; - } -} diff --git a/src/test/java/com/avaje/tests/basic/event/TestTransactionEvent.java b/src/test/java/com/avaje/tests/basic/event/TestTransactionEvent.java deleted file mode 100644 index 6a36c862e..000000000 --- a/src/test/java/com/avaje/tests/basic/event/TestTransactionEvent.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.avaje.tests.basic.event; - -import junit.framework.TestCase; - -import com.avaje.ebean.Ebean; -import com.avaje.ebean.Transaction; -import com.avaje.tests.model.basic.TWithPreInsert; - -public class TestTransactionEvent extends TestCase { - - @Override - protected void tearDown() throws Exception { - MyTestTransactionEventListener.setDoTest(false); - } - - @Override - protected void setUp() throws Exception { - MyTestTransactionEventListener.setDoTest(true); - } - - public void test() { - - assertNull(MyTestTransactionEventListener.getLastCommitted()); - assertNull(MyTestTransactionEventListener.getLastRollbacked()); - - final Object myUserObject = new Object(); - - Transaction tx = Ebean.beginTransaction(); - tx.putUserObject("myUserObject", myUserObject); - - TWithPreInsert e = new TWithPreInsert(); - e.setTitle("Mister Transaction1"); - Ebean.save(e); - - tx.commit(); - - assertNotNull(MyTestTransactionEventListener.getLastCommitted()); - assertNotNull(MyTestTransactionEventListener.getLastCommitted().getUserObject("myUserObject")); - assertSame(MyTestTransactionEventListener.getLastCommitted().getUserObject("myUserObject"), myUserObject); - assertNull(MyTestTransactionEventListener.getLastRollbacked()); - - Transaction tx2 = Ebean.beginTransaction(); - tx2.putUserObject("myUserObject2", myUserObject); - - TWithPreInsert e2 = new TWithPreInsert(); - e2.setTitle("Mister Transaction2"); - Ebean.save(e2); - - tx2.rollback(); - - assertNotNull(MyTestTransactionEventListener.getLastCommitted()); - assertNotNull(MyTestTransactionEventListener.getLastRollbacked()); - - assertNotSame(MyTestTransactionEventListener.getLastCommitted(), MyTestTransactionEventListener.getLastRollbacked()); - - assertNotNull(MyTestTransactionEventListener.getLastCommitted().getUserObject("myUserObject")); - assertSame(MyTestTransactionEventListener.getLastCommitted().getUserObject("myUserObject"), myUserObject); - - assertNotNull(MyTestTransactionEventListener.getLastRollbacked().getUserObject("myUserObject2")); - assertSame(MyTestTransactionEventListener.getLastRollbacked().getUserObject("myUserObject2"), myUserObject); - } -}