diff --git a/src/main/scala/net/liftmodules/transaction/TransactionContext.scala b/src/main/scala/net/liftmodules/transaction/TransactionContext.scala index 399a273..e5e4dda 100644 --- a/src/main/scala/net/liftmodules/transaction/TransactionContext.scala +++ b/src/main/scala/net/liftmodules/transaction/TransactionContext.scala @@ -80,6 +80,11 @@ trait TransactionMonad { */ def getEntityManager: EntityManager = TransactionContext.getEntityManager + /** + * Returns the current EntityManager as ScalaEntityManager. + */ + def getScalaEntityManager: ScalaEntityManager = TransactionContext.getScalaEntityManager + /** * Checks if an EntityManager exists in current context. */ @@ -122,6 +127,16 @@ trait TransactionMonad { * query.getSingleResult * } * + * Example usage 3: + *
+ * def findUserByName(name: String) = TransactionContext.required { ctx =>
+ *   // transactional stuff
+ *   ctx.getScalaentityManager
+ *      .createQuery[User]("select u from User u where u.name = :name")
+ *      .setParams("name" -> "fred")
+ *      .findOne
+ * }
+ * 
* * @author Jonas Bonér */ @@ -168,6 +183,16 @@ object TransactionContext extends TransactionProtocol with Loggable { override def filter(f: TransactionMonad => Boolean): TransactionMonad = this } + def required[T](body: TransactionMonad => T): T = for (ctx <- Required) yield { body(ctx) } + + def requiresNew[T](body: TransactionMonad => T): T = for (ctx <- RequiresNew) yield { body(ctx) } + + def supports[T](body: TransactionMonad => T): T = for (ctx <- Supports) yield { body(ctx) } + + def mandatory[T](body: TransactionMonad => T): T = for (ctx <- Mandatory) yield { body(ctx) } + + def never[T](body: => T): T = for (ctx <- Mandatory) yield { body } + private[transaction] def setRollbackOnly = current.setRollbackOnly private[transaction] def isRollbackOnly = current.isRollbackOnly @@ -178,6 +203,8 @@ object TransactionContext extends TransactionProtocol with Loggable { private[transaction] def getEntityManager: EntityManager = current.getEntityManager + private[transaction] def getScalaEntityManager: ScalaEntityManager = current + private[transaction] def closeEntityManager = current.closeEntityManager private[this] def current = stack.value