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)