# 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(); + } } /**