You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by sk...@apache.org on 2006/09/14 00:45:22 UTC

svn commit: r443153 - in /incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel: BrokerImpl.java StateManagerImpl.java

Author: skim
Date: Wed Sep 13 15:45:21 2006
New Revision: 443153

URL: http://svn.apache.org/viewvc?view=rev&rev=443153
Log:
fix for re-proxying of hashed types during commit / rollback

Modified:
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java?view=diff&rev=443153&r1=443152&r2=443153
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java Wed Sep 13 15:45:21 2006
@@ -135,6 +135,7 @@
     private static final int FLAG_FLUSH_REQUIRED = 2 << 8;
     private static final int FLAG_REMOTE_LISTENER = 2 << 9;
     private static final int FLAG_RETAINED_CONN = 2 << 10;
+    private static final int FLAG_TRANS_ENDING = 2 << 11;
 
     private static final Localizer _loc =
         Localizer.forPackage(BrokerImpl.class);
@@ -1640,6 +1641,19 @@
         }
     }
 
+    /**
+     * Return whether the given transaction is ending, i.e. in the 2nd phase
+     * of a commit or rollback
+     */
+    boolean isTransactionEnding() {
+        beginOperation(true);
+        try {
+            return (_flags & FLAG_TRANS_ENDING) != 0;
+        } finally {
+            endOperation();
+        }
+    }
+
     public boolean beginOperation(boolean syncTrans) {
         lock();
         try {
@@ -1722,6 +1736,7 @@
         try {
             assertActiveTransaction();
 
+            _flags |= FLAG_TRANS_ENDING;
             endTransaction(status);
             if (_sync != null)
                 _sync.afterCompletion(status);
@@ -1746,6 +1761,7 @@
         } finally {
             _flags &= ~FLAG_ACTIVE;
             _flags &= ~FLAG_FLUSHED;
+            _flags &= ~FLAG_TRANS_ENDING;
 
             if (_transEventManager != null 
                 && _transEventManager.hasEndListeners()) {

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?view=diff&rev=443153&r1=443152&r2=443153
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Wed Sep 13 15:45:21 2006
@@ -824,7 +824,8 @@
             return;
 
         boolean active = _broker.isActive();
-        if (active) {
+        boolean ending = _broker.isTransactionEnding();
+        if (active && !ending) {
             if (_broker.getOptimistic())
                 setPCState(_state.beforeOptimisticRead(this, field));
             else