diff --git a/akka-core/src/main/scala/stm/Transaction.scala b/akka-core/src/main/scala/stm/Transaction.scala index 16a3cd0e5f..209c131781 100644 --- a/akka-core/src/main/scala/stm/Transaction.scala +++ b/akka-core/src/main/scala/stm/Transaction.scala @@ -22,6 +22,25 @@ import org.multiverse.stms.alpha.AlphaStm class NoTransactionInScopeException extends RuntimeException class TransactionRetryException(message: String) extends RuntimeException(message) +/** + * FIXDOC: document AtomicTemplate + * AtomicTemplate can be used to create atomic blocks from Java code. + *
+ * User newUser = new AtomicTemplate[User]() {
+ *   User atomic() {
+ *     ... // create user atomically
+ *     return user;
+ *   }
+ * }.execute();
+ * 
+ */ +trait AtomicTemplate[T] { + def atomic: T + def execute: T = Transaction.Local.atomic { + atomic + } +} + object Transaction { val idFactory = new AtomicLong(-1L)