Thanks Greg. And thanks for the suggestion to see transactions as monadic. All feedback is more than welcome. /Jonas
2009/6/9 Meredith Gregory <lgreg.mered...@gmail.com>: > Jonas, > > Awesome! i look forward to digging into this stuff! > > Best wishes, > > --greg > > 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 >> >> > > > > -- > L.G. Meredith > Managing Partner > Biosimilarity LLC > 1219 NW 83rd St > Seattle, WA 98117 > > +1 206.650.3740 > > http://biosimilarity.blogspot.com > > > > -- Jonas Bonér twitter: @jboner blog: http://jonasboner.com work: http://crisp.se work: http://scalablesolutions.se code: http://github.com/jboner --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---