# ignite-322: move txTransactions rollback at finally-block

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/5ed43d19
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/5ed43d19
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/5ed43d19

Branch: refs/heads/ignite-51
Commit: 5ed43d19995f70e0bd338c74626d5236be3b639a
Parents: 4e57996
Author: Artem Shutak <ashu...@gridgain.com>
Authored: Thu Feb 26 13:18:12 2015 +0300
Committer: Artem Shutak <ashu...@gridgain.com>
Committed: Thu Feb 26 13:18:12 2015 +0300

----------------------------------------------------------------------
 .../HibernateReadWriteAccessStrategy.java       | 81 +++++++++++++++-----
 1 file changed, 63 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ed43d19/modules/hibernate/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
----------------------------------------------------------------------
diff --git 
a/modules/hibernate/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
 
b/modules/hibernate/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
index 1b083a1..21320f3 100644
--- 
a/modules/hibernate/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
+++ 
b/modules/hibernate/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
@@ -74,30 +74,46 @@ public class HibernateReadWriteAccessStrategy extends 
HibernateAccessStrategyAda
 
     /** {@inheritDoc} */
     @Override protected Object get(Object key) throws CacheException {
+        boolean success = false;
+        
         try {
-            return cache.get(key);
+            Object o = cache.get(key);
+            
+            success = true;
+            
+            return o;
         }
         catch (IgniteCheckedException e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /** {@inheritDoc} */
     @Override protected void putFromLoad(Object key, Object val) throws 
CacheException {
+        boolean success = false;
+        
         try {
             cache.putx(key, val);
+            
+            success = true;
         }
         catch (IgniteCheckedException e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /** {@inheritDoc} */
     @Override protected SoftLock lock(Object key) throws CacheException {
+        boolean success = false;
+        
         try {
             TxContext ctx = txCtx.get();
 
@@ -107,29 +123,39 @@ public class HibernateReadWriteAccessStrategy extends 
HibernateAccessStrategyAda
             lockKey(key);
 
             ctx.locked(key);
+            
+            success = true;
 
             return null;
         }
         catch (IgniteCheckedException e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /** {@inheritDoc} */
     @Override protected void unlock(Object key, SoftLock lock) throws 
CacheException {
+        boolean success = false;
+        
         try {
             TxContext ctx = txCtx.get();
 
             if (ctx != null)
                 unlock(ctx, key);
+            
+            success = true;
         }
         catch (Exception e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /** {@inheritDoc} */
@@ -139,6 +165,9 @@ public class HibernateReadWriteAccessStrategy extends 
HibernateAccessStrategyAda
 
     /** {@inheritDoc} */
     @Override protected boolean afterUpdate(Object key, Object val, SoftLock 
lock) throws CacheException {
+        boolean success = false;
+        boolean res = false;
+        
         try {
             TxContext ctx = txCtx.get();
 
@@ -146,17 +175,21 @@ public class HibernateReadWriteAccessStrategy extends 
HibernateAccessStrategyAda
                 cache.putx(key, val);
 
                 unlock(ctx, key);
-
-                return true;
+                
+                res = true;
             }
+            
+            success = true;
 
-            return false;
+            return res;
         }
         catch (Exception e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /** {@inheritDoc} */
@@ -166,31 +199,43 @@ public class HibernateReadWriteAccessStrategy extends 
HibernateAccessStrategyAda
 
     /** {@inheritDoc} */
     @Override protected boolean afterInsert(Object key, Object val) throws 
CacheException {
+        boolean success = false;
+        
         try {
             cache.putx(key, val);
 
+            success = true;
+            
             return true;
         }
         catch (IgniteCheckedException e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /** {@inheritDoc} */
     @Override protected void remove(Object key) throws CacheException {
+        boolean success = false;
+        
         try {
             TxContext ctx = txCtx.get();
 
             if (ctx != null)
                 cache.removex(key);
+            
+            success = true;
         }
         catch (IgniteCheckedException e) {
-            rollbackCurrentTx();
-
             throw new CacheException(e);
         }
+        finally {
+            if (!success)
+                rollbackCurrentTx();
+        }
     }
 
     /**

Reply via email to