Sweet looking stuff!
On Tue, Jun 9, 2009 at 6:18 AM, Jonas Bonér <[email protected]> wrote:
>
> Hey guys.
>
> I have hacked together an early draft of the JTA transaction stuff.
>
> I have wrapped it up in a monad. Here are some examples of usage:
>
> for {
> ctx <- TransactionContext.Required
> entity <- updatedEntities
> if !ctx.isRollbackOnly
> } {
> // transactional stuff
> ctx.getEntityManager.merge(entity)
> }
>
> val users = for {
> ctx <- TransactionContext.Required
> name <- userNames
> } yield {
> // transactional stuff
> val query = ctx.getEntityManager.createNamedQuery("findUserByName")
> query.setParameter("userName", name)
> query.getSingleResult
> }
>
> If you don't like the monadic approach you can just use the high-order
> functions:
>
> TransactionContext.withTxRequired {
> ... // REQUIRED semantics
>
> TransactionContext.withTxRequiresNew {
> ... // REQUIRES_NEW semantics
> }
> }
>
> I have implemented the same semantics as used in the EJB spec.
> Required, RequiresNew, Mandatory, Supports, Never. All these are
> monadic objects in the TransactionContext object.
> I don't have a webapp to try this out, so I would be happy to get all
> kinds of feedback, but API wise and bug reports or fixes.
>
> This API is hooked into Derek's Scala-JPA stuff. I had my own impl of
> this but replaced it with Derek's work.
>
> Derek,
> please go through the integration to see if I have done it correctly,
> and where things code be improved.
>
> All committers,
> feel free to hack and change this code anyway you want.
>
> The code is in a branch (wip-jta-jonas), you can find it here:
>
> http://github.com/dpp/liftweb/tree/3783b9e2200cc57dd72baa1bd8cabdb1365ee923/lift-jta
>
> Check the ScalaDoc (or the source) for the documentation on usage,
> semantics etc.
> Also see the README for configuration in persistence.xml etc.
>
> Currently it is hard-coded to use the Atomikos Transaction library and
> Hibernate JPA, that would have to be configurable + some other options
> as well. See the TODOs in the code.
>
> As I said, this needs feedback and testing. Thanks.
>
> --
> Jonas Bonér
>
> twitter: @jboner
> blog: http://jonasboner.com
> work: http://crisp.se
> work: http://scalablesolutions.se
> code: http://github.com/jboner
>
> >
>
--
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Git some: http://github.com/dpp
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---