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

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