You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/09/06 08:59:28 UTC

cayenne git commit: CAY-2110 Obfuscated exception when processing iterated results

Repository: cayenne
Updated Branches:
  refs/heads/master 5838101e5 -> 43a382ee0


CAY-2110 Obfuscated exception when processing iterated results

* making sure there's no way we'd commit a rolled back transaction


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/43a382ee
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/43a382ee
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/43a382ee

Branch: refs/heads/master
Commit: 43a382ee04a4689050c7e46942ad6b759b1e8b0f
Parents: 5838101
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Tue Sep 6 11:54:42 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Tue Sep 6 11:59:12 2016 +0300

----------------------------------------------------------------------
 .../access/TransactionResultIteratorDecorator.java       | 11 +++++++++++
 .../cayenne/access/DataContextIteratedQueryIT.java       |  2 +-
 docs/doc/src/main/resources/RELEASE-NOTES.txt            |  1 +
 3 files changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/43a382ee/cayenne-server/src/main/java/org/apache/cayenne/access/TransactionResultIteratorDecorator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/TransactionResultIteratorDecorator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/TransactionResultIteratorDecorator.java
index b269f8d..d0045f3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/TransactionResultIteratorDecorator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/TransactionResultIteratorDecorator.java
@@ -36,9 +36,17 @@ import java.util.List;
 final class TransactionResultIteratorDecorator<T> implements ResultIterator<T> {
 
     private ResultIterator<T> result;
+
+
     private Transaction tx;
 
     public TransactionResultIteratorDecorator(ResultIterator<T> result, Transaction tx) {
+
+        // make sure it is still valid before proceeding with the iterator
+        if(tx.isRollbackOnly()) {
+            throw new CayenneRuntimeException("Transaction passed should be rolled back");
+        }
+
         this.result = result;
         this.tx = tx;
     }
@@ -56,6 +64,9 @@ final class TransactionResultIteratorDecorator<T> implements ResultIterator<T> {
 
         try {
             result.close();
+
+            // we can safely commit here as the transaction is internal to this decorator, and we already checked
+            // that it hasn't been rolled back in constructor.
             tx.commit();
         } catch (Exception e) {
             try {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/43a382ee/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIteratedQueryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIteratedQueryIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIteratedQueryIT.java
index e630e46..ff5f65e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIteratedQueryIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextIteratedQueryIT.java
@@ -236,7 +236,7 @@ public class DataContextIteratedQueryIT extends ServerCase {
         createArtistsDataSet();
 
         try (ResultIterator<?> it = context.performIteratedQuery(SelectQuery.query(Artist.class));) {
-            assertNull(BaseTransaction.getThreadTransaction());
+            assertNull("Iterator transaction was not unbound from thread", BaseTransaction.getThreadTransaction());
         }
 
         // TODO: how do we test that transaction unbound from the thread is closed/committed at the end?

http://git-wip-us.apache.org/repos/asf/cayenne/blob/43a382ee/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index aa2df92..d496e84 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -47,6 +47,7 @@ CAY-2097 NullPointerException while updating relationships for entities with ver
 CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name
 CAY-2105 Add missing elements to the reverseEngineering.xsd
 CAY-2108 cayenne-di: StackOverflow for decorator that takes Provider of the delegate
+CAY-2110 Obfuscated exception when processing iterated results
 
 ----------------------------------
 Release: 4.0.M3