diff --git a/akka-actors/src/main/scala/actor/Actor.scala b/akka-actors/src/main/scala/actor/Actor.scala
index 9430fb2127..86e3c1c988 100644
--- a/akka-actors/src/main/scala/actor/Actor.scala
+++ b/akka-actors/src/main/scala/actor/Actor.scala
@@ -21,7 +21,7 @@ import se.scalablesolutions.akka.util.Logging
import org.codehaus.aspectwerkz.proxy.Uuid
-import org.multiverse.utils.ThreadLocalTransaction._
+import org.multiverse.api.ThreadLocalTransaction._
/**
* Mix in this trait to give an actor TransactionRequired semantics.
diff --git a/akka-actors/src/main/scala/stm/Transaction.scala b/akka-actors/src/main/scala/stm/Transaction.scala
index 20ea9ede9f..14c5b0d106 100644
--- a/akka-actors/src/main/scala/stm/Transaction.scala
+++ b/akka-actors/src/main/scala/stm/Transaction.scala
@@ -12,7 +12,7 @@ import se.scalablesolutions.akka.util.Logging
import org.multiverse.api.{Stm, Transaction => MultiverseTransaction}
import org.multiverse.api.GlobalStmInstance.getGlobalStmInstance
-import org.multiverse.utils.ThreadLocalTransaction._
+import org.multiverse.api.ThreadLocalTransaction._
import org.multiverse.templates.OrElseTemplate
import scala.collection.mutable.HashMap
diff --git a/akka-actors/src/main/scala/stm/TransactionManagement.scala b/akka-actors/src/main/scala/stm/TransactionManagement.scala
index 06e65d0ceb..6a3ee9abf8 100644
--- a/akka-actors/src/main/scala/stm/TransactionManagement.scala
+++ b/akka-actors/src/main/scala/stm/TransactionManagement.scala
@@ -10,7 +10,7 @@ import se.scalablesolutions.akka.util.Logging
import scala.collection.mutable.HashSet
-import org.multiverse.utils.ThreadLocalTransaction._
+import org.multiverse.api.ThreadLocalTransaction._
class StmException(msg: String) extends RuntimeException(msg)
diff --git a/akka-actors/src/main/scala/stm/TransactionalState.scala b/akka-actors/src/main/scala/stm/TransactionalState.scala
index de3b97e794..bd89a41224 100644
--- a/akka-actors/src/main/scala/stm/TransactionalState.scala
+++ b/akka-actors/src/main/scala/stm/TransactionalState.scala
@@ -74,7 +74,7 @@ object TransactionalRef {
* @author Jonas Bonér
*/
class TransactionalRef[T] extends Transactional {
- import org.multiverse.utils.ThreadLocalTransaction._
+ import org.multiverse.api.ThreadLocalTransaction._
private[this] val ref: Ref[T] = atomic { new Ref }
diff --git a/akka-util-java/src/main/java/se/scalablesolutions/akka/stm/AtomicTemplate.java b/akka-util-java/src/main/java/se/scalablesolutions/akka/stm/AtomicTemplate.java
index d01d1c12a4..a693ff1248 100644
--- a/akka-util-java/src/main/java/se/scalablesolutions/akka/stm/AtomicTemplate.java
+++ b/akka-util-java/src/main/java/se/scalablesolutions/akka/stm/AtomicTemplate.java
@@ -1,16 +1,18 @@
package se.scalablesolutions.akka.stm;
-import org.multiverse.templates.AbortedException;
+import static org.multiverse.api.GlobalStmInstance.getGlobalStmInstance;
import org.multiverse.api.Stm;
+import static org.multiverse.api.ThreadLocalTransaction.getThreadLocalTransaction;
+import static org.multiverse.api.ThreadLocalTransaction.setThreadLocalTransaction;
import org.multiverse.api.Transaction;
import org.multiverse.api.TransactionStatus;
import org.multiverse.api.exceptions.CommitFailureException;
import org.multiverse.api.exceptions.LoadException;
import org.multiverse.api.exceptions.RetryError;
import org.multiverse.api.exceptions.TooManyRetriesException;
-import static org.multiverse.api.GlobalStmInstance.getGlobalStmInstance;
-import static org.multiverse.utils.ThreadLocalTransaction.getThreadLocalTransaction;
-import static org.multiverse.utils.ThreadLocalTransaction.setThreadLocalTransaction;
+import org.multiverse.templates.AbortedException;
+import org.multiverse.utils.latches.CheapLatch;
+import org.multiverse.utils.latches.Latch;
import static java.lang.String.format;
import java.util.logging.Logger;
@@ -259,7 +261,9 @@ public abstract class AtomicTemplate {
postCommit();
return result;
} catch (RetryError e) {
- t.abortAndWaitForRetry();
+ Latch latch = new CheapLatch();
+ t.abortAndRegisterRetryLatch(latch);
+ latch.awaitUninterruptible();
//since the abort is already done, no need to do it again.
abort = false;
} catch (CommitFailureException ex) {
@@ -274,7 +278,8 @@ public abstract class AtomicTemplate {
if (abort) {
t.abort();
if (reset) {
- t.restart();
+ t = t.abortAndReturnRestarted();
+ setTransaction(t);
}
}
}
@@ -333,4 +338,4 @@ public abstract class AtomicTemplate {
return (Exception) super.getCause();
}
}
-}
\ No newline at end of file
+}