OK, one quick comment before I dive in: we generally want to depend on Maven
to grab dependencies. Right now you have a lib folder checked into git that
appears to hold the JTA libs and Atomikos. If that's the Sun JTA libs then
we can't distribute them. We generally use the geronimo JTA API, so you
could instead add dependencies to your pom.xml from the following:

http://mvnrepository.com/artifact/com.atomikos

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jta_1.1_spec</artifactId>
    <version>1.1.1</version>
</dependency>

Let me know if you have any problems with that. Now, on to the code!

Derek

On Tue, Jun 9, 2009 at 9:44 AM, Derek Chen-Becker <dchenbec...@gmail.com>wrote:

> Awesome! I'll take a look at the code. If you're basing this on ScalaJPA,
> would it be preferable to add the functionality there, or is there anything
> Lift-specific?
>
> Derek
>
>
>
> On Tue, Jun 9, 2009 at 7: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
>>
>> >>
>>
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to