From 0f3803d111b81580ae5ff7bc600a610e3bf20fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Wed, 14 Apr 2010 20:47:19 +0200 Subject: [PATCH] Added AtomicTemplate to allow atomic blocks from Java code --- .../src/main/scala/stm/Transaction.scala | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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)