diff options
author | Leif Åstrand <leif@vaadin.com> | 2011-08-22 14:39:48 +0000 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2011-08-22 14:39:48 +0000 |
commit | 7ee4a17e64c9cd6bea335950d71a046274409cca (patch) | |
tree | d50d3fba8f4625ad2512032787c61697a663aa07 /tests | |
parent | 1c9efd41dc2950f40b4ebfa7dd17c43116e03fe0 (diff) | |
download | vaadin-framework-7ee4a17e64c9cd6bea335950d71a046274409cca.tar.gz vaadin-framework-7ee4a17e64c9cd6bea335950d71a046274409cca.zip |
#7065 ConcurrentModificationException in AbstractWebApplicationContext.endTransaction() and startTransaction()
svn changeset:20545/svn branch:6.7
Diffstat (limited to 'tests')
-rw-r--r-- | tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java b/tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java new file mode 100644 index 0000000000..8723e23a2a --- /dev/null +++ b/tests/src/com/vaadin/tests/applicationcontext/RemoveTransactionListener.java @@ -0,0 +1,78 @@ +package com.vaadin.tests.applicationcontext; + +import com.vaadin.Application; +import com.vaadin.service.ApplicationContext; +import com.vaadin.service.ApplicationContext.TransactionListener; +import com.vaadin.tests.components.TestBase; +import com.vaadin.tests.util.Log; + +public class RemoveTransactionListener extends TestBase { + + private final Log log = new Log(10); + + @Override + protected void setup() { + // Add one listener that will remove itself from within transactionEnd + getMainWindow().getApplication().getContext() + .addTransactionListener(new TransactionListener() { + public void transactionStart(Application application, + Object transactionData) { + } + + public void transactionEnd(Application application, + Object transactionData) { + removeListener(this); + log.log("Listener removed in transactionEnd"); + } + }); + + // Add one listener that will remove itself from within transactionStart + getMainWindow().getApplication().getContext() + .addTransactionListener(new TransactionListener() { + public void transactionStart(Application application, + Object transactionData) { + removeListener(this); + log.log("Listener removed in transactionStart"); + } + + public void transactionEnd(Application application, + Object transactionData) { + } + }); + + // Add one listener to verify that all listeners are called, as thrown + // ConcurrentModificationException causes subsequent listeners to be + // ignored + getMainWindow().getApplication().getContext() + .addTransactionListener(new TransactionListener() { + public void transactionStart(Application application, + Object transactionData) { + log.log("transactionStart from last listener"); + } + + public void transactionEnd(Application application, + Object transactionData) { + log.log("transactionEnd from last listener"); + } + }); + + addComponent(log); + } + + private void removeListener(TransactionListener l) { + ApplicationContext context = getMainWindow().getApplication() + .getContext(); + context.removeTransactionListener(l); + } + + @Override + protected String getDescription() { + return "Tests that a transaction listener can be removed from within the listener."; + } + + @Override + protected Integer getTicketNumber() { + return Integer.valueOf(7065); + } + +} |