summaryrefslogtreecommitdiff
path: root/java/src/Freeze/TransactionalEvictorI.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/Freeze/TransactionalEvictorI.java')
-rw-r--r--java/src/Freeze/TransactionalEvictorI.java75
1 files changed, 33 insertions, 42 deletions
diff --git a/java/src/Freeze/TransactionalEvictorI.java b/java/src/Freeze/TransactionalEvictorI.java
index 62696eb061c..143071eac1f 100644
--- a/java/src/Freeze/TransactionalEvictorI.java
+++ b/java/src/Freeze/TransactionalEvictorI.java
@@ -11,13 +11,13 @@ package Freeze;
class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
{
- public TransactionalEvictorContext
- getCurrentContext()
+ public Transaction
+ getCurrentTransaction()
{
_deactivateController.lock();
try
{
- return _dbEnv.getCurrent();
+ return _dbEnv.getCurrent().transaction();
}
finally
{
@@ -25,21 +25,13 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
}
- public TransactionalEvictorContext
- createCurrentContext()
+ public void
+ setCurrentTransaction(Transaction tx)
{
_deactivateController.lock();
try
{
- Ice.BooleanHolder created = new Ice.BooleanHolder();
- TransactionalEvictorContext ctx = _dbEnv.getOrCreateCurrent(created);
-
- if(created.value == false)
- {
- throw new DatabaseException(_errorPrefix +
- "createCurrentContext: there is already a current context");
- }
- return ctx;
+ _dbEnv.setCurrentTransaction(tx);
}
finally
{
@@ -73,7 +65,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
throw ex;
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
updateStats(rec.stats, currentTime);
@@ -120,14 +112,14 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
ObjectStore store = findStore(facet, false);
if(store != null)
{
- TransactionalEvictorContextI ctx = _dbEnv.getCurrent();
- com.sleepycat.db.Transaction tx = null;
+ TransactionalEvictorContext ctx = _dbEnv.getCurrent();
+ TransactionI tx = null;
if(ctx != null)
{
- tx = ctx.transaction().dbTxn();
+ tx = ctx.transaction();
if(tx == null)
{
- throw new DatabaseException(_errorPrefix + "invalid TransactionalEvictorContext");
+ throw new DatabaseException(_errorPrefix + "inactive transaction");
}
}
@@ -202,7 +194,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
return false;
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
if(tx == null)
{
@@ -282,7 +274,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
//
// Is there an existing context?
//
- TransactionalEvictorContextI ctx = _dbEnv.getCurrent();
+ TransactionalEvictorContext ctx = _dbEnv.getCurrent();
if(ctx != null)
{
@@ -291,7 +283,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
//
// If yes, use this context; there is no retrying
//
- TransactionalEvictorContextI.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
+ TransactionalEvictorContext.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
if(sh.servant() == null)
{
@@ -304,7 +296,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
if(dispatchStatus == Ice.DispatchStatus.DispatchUserException && _rollbackOnUserException)
{
- ctx.rollbackOnly();
+ ctx.rollback();
}
if(dispatchStatus == Ice.DispatchStatus.DispatchAsync)
{
@@ -314,7 +306,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
catch(RuntimeException ex)
{
- ctx.rollbackOnly();
+ ctx.rollback();
throw ex;
}
finally
@@ -329,7 +321,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
catch(RuntimeException ex)
{
- ctx.rollbackOnly();
+ ctx.rollback();
throw ex;
}
}
@@ -404,13 +396,13 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
do
{
- ctx = _dbEnv.getOrCreateCurrent(null);
+ ctx = _dbEnv.createCurrent();
try
{
try
{
- TransactionalEvictorContextI.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
+ TransactionalEvictorContext.ServantHolder sh = ctx.createServantHolder(current, store, _useNonmutating);
if(sh.servant() == null)
{
@@ -422,7 +414,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
Ice.DispatchStatus dispatchStatus = sh.servant().ice_dispatch(request, ctx);
if(dispatchStatus == Ice.DispatchStatus.DispatchUserException && _rollbackOnUserException)
{
- ctx.rollbackOnly();
+ ctx.rollback();
}
if(dispatchStatus == Ice.DispatchStatus.DispatchAsync)
{
@@ -432,12 +424,13 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
catch(RuntimeException ex)
{
- ctx.rollbackOnly();
+ ctx.rollback();
throw ex;
}
finally
{
sh.release();
+ ctx.commit();
}
}
catch(DeadlockException ex)
@@ -445,21 +438,19 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
ctx.deadlockException();
throw ex;
}
- catch(RuntimeException ex)
- {
- ctx.rollbackOnly();
- throw ex;
- }
finally
{
- ctx.complete();
+ ctx.rollback();
}
}
catch(DeadlockException ex)
{
tryAgain = true;
}
-
+ finally
+ {
+ _dbEnv.setCurrentTransaction(null);
+ }
} while(tryAgain);
}
}
@@ -513,7 +504,7 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
storeMapCopy = new java.util.HashMap(_storeMap);
}
- com.sleepycat.db.Transaction tx = beforeQuery();
+ TransactionI tx = beforeQuery();
java.util.Iterator p = storeMapCopy.entrySet().iterator();
while(p.hasNext())
@@ -562,17 +553,17 @@ class TransactionalEvictorI extends EvictorI implements TransactionalEvictor
}
}
- protected com.sleepycat.db.Transaction
+ protected TransactionI
beforeQuery()
{
- TransactionalEvictorContextI ctx = _dbEnv.getCurrent();
- com.sleepycat.db.Transaction tx = null;
+ TransactionalEvictorContext ctx = _dbEnv.getCurrent();
+ TransactionI tx = null;
if(ctx != null)
{
- tx = ctx.transaction().dbTxn();
+ tx = ctx.transaction();
if(tx == null)
{
- throw new DatabaseException(_errorPrefix + "invalid TransactionalEvictorContext");
+ throw new DatabaseException(_errorPrefix + "inactive transaction");
}
}