Thanks Derek. Thanks for taking time to do a code review. I'll add that to the README. /Jonas
2009/6/9 Derek Chen-Becker <dchenbec...@gmail.com>: > Jonas, the code looks great! I don't see any issues with how ScalaJPA is > used. It's nice to see that this fits what you're doing well and I really > like how this lets one use transactions without having to go with a > full-blown JEE container. One thing that you might want to put into the > README is a reminder that if you're going to be using JNDI along with an > EntityManager then JTA is not only required, but should be handled > automatically by the container. The only valid operation on a > Container-managed EM (as pointed out by mrxtravis yesterday when he found a > bug in ScalaJPA) is to set the TX as rollback-only. > > Derek > > On Tue, Jun 9, 2009 at 1:10 PM, Derek Chen-Becker <dchenbec...@gmail.com> > wrote: >> >> In my email above I have the link to the Maven artifacts for Atomikos: >> >> http://mvnrepository.com/artifact/com.atomikos >> >> I think that the dependency you want is: >> >> <dependency> >> <groupId>com.atomikos</groupId> >> <artifactId>transactions-jta</artifactId> >> <version>3.2.3</version> >> </dependency> >> >> Derek >> >> On Tue, Jun 9, 2009 at 12:54 PM, Meredith Gregory >> <lgreg.mered...@gmail.com> wrote: >>> >>> 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 -~----------~----~----~----~------~----~------~--~---