Starkt jobbat Jonas! I'll have a look at it asap :)
On Tue, Jun 9, 2009 at 4:27 PM, Jonas Bonér <jbo...@gmail.com> wrote: > > 2009/6/9 David Pollak <feeder.of.the.be...@gmail.com>: > > Sweet looking stuff! > > Thanks. > > > > > On Tue, Jun 9, 2009 at 6:18 AM, Jonas Bonér <jbo...@gmail.com> 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 > > > > > > > > > > > -- > Jonas Bonér > > twitter: @jboner > blog: http://jonasboner.com > work: http://crisp.se > work: http://scalablesolutions.se > code: http://github.com/jboner > > > > -- Viktor Klang Rockstar Developer --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---