back to the original problem about how to integrate with container management.

I found a solution which hopefully works for managing CDI beans with EJB CMT - 
even in a 100% portable way.

Please first take a look what I've done in TransactionHelper. The same could 
basically be done _inside_ a CmtPersistenceStrategy.

First we create an internal EJB:


>@Stateless // this is automatically transactional

>public class EjbTransactionHelper

>    public <T> T invokeTransactional(InvocationContext invocationContext) 
>throws Exception
>    {
>        return invocationContext.proceed();
>    }
>}


and then we use this EJB inside the invoke method of the EePersistenceStrategy 
wrapping the target in a anynomous Callable which just invokes the 'real' 
target method. 


private @Inject EjbTransactionHelper ejbTransaction;
...
public Object execute(InvocationContext invocationContext) throws Exception
{
...


and instead of directly invoking invocationContext.proceed() we just use the 
EJB:

ejbTransaction.invokeTransactional(invocationContext);

Since the EJB will open the transaction for us, we are basically done ...



Wdyt?

LieGrue,
strub





----- Original Message -----
> From: Arne Limburg <[email protected]>
> To: "[email protected]" 
> <[email protected]>
> Cc: 
> Sent: Monday, July 9, 2012 8:30 AM
> Subject: AW: AW: AW: [DISCUSS] [DELTASPIKE-175] [DELTASPIKE-219] 
> @Transactional
> 
> For api it's fine,
> and then we have two impl modules, JPA and JTA?
> 
> Cheers,
> Arne
> 
> -----Ursprüngliche Nachricht-----
> Von: Romain Manni-Bucau [mailto:[email protected]] 
> Gesendet: Sonntag, 8. Juli 2012 21:37
> An: [email protected]; Mark Struberg
> Betreff: Re: AW: AW: [DISCUSS] [DELTASPIKE-175] [DELTASPIKE-219] 
> @Transactional
> 
> sounds fine
> 
> - Romain
> 
> 
> 2012/7/8 Mark Struberg <[email protected]>
> 
>>  maybe we should just rename the jpa module to tx?
>> 
>>  There is no single import of any javax.persistence in 
>>  deltaspike-jpa-api yet.
>> 
>>  LieGrue,
>>  strub
>> 
>> 
>> 
>>  ----- Original Message -----
>>  > From: Arne Limburg <[email protected]>
>>  > To: "[email protected]" <
>>  [email protected]>
>>  > Cc:
>>  > Sent: Sunday, July 8, 2012 8:39 PM
>>  > Subject: AW: AW: [DISCUSS] [DELTASPIKE-175] [DELTASPIKE-219]
>>  @Transactional
>>  >
>>  > Yes, sounds good.
>>  > The impl of that module could contain the JTA stuff. And the JPA 
>>  > module
>>  would
>>  > contain the resource local stuff. Everybody that does not need the 
>>  > JTA
>>  then
>>  > could just use the tx-api and the JPA api and impl.
>>  >
>>  > Cheers,
>>  > Arne
>>  >
>>  > -----Ursprüngliche Nachricht-----
>>  > Von: Romain Manni-Bucau [mailto:[email protected]]
>>  > Gesendet: Sonntag, 8. Juli 2012 20:29
>>  > An: [email protected]
>>  > Betreff: Re: AW: [DISCUSS] [DELTASPIKE-175] [DELTASPIKE-219]
>>  @Transactional
>>  >
>>  > i thought the same, JTA shouldn't depend on JPA. @Transactional 
>>  > should
>>  be in
>>  > a tx module then JPA could use it.
>>  >
>>  > wdyt?
>>  >
>>  > - Romain
>>  >
>>  >
>>  > 2012/7/8 Arne Limburg <[email protected]>
>>  >
>>  >>  OK, but I am still not sure where to split it. While 
> implementing  
>>  >> this, I got the feeling, that the @Transactional stuff should  
>>  >> completely move out of the JPA module. It feeled quite strange 
> that  
>>  >> the JTA module depends on the JPA module...
>>  >>
>>  >>  I think, I'll push my stuff right after the 0.3 release and 
> than 
>>  >> we  can discuss this at the code-base.
>>  >>  Maybe I should put all into the JPA module and we split it after  
> 
>>  >> agreeing to a module structure?
>>  >>
>>  >>  Cheers,
>>  >>  Arne
>>  >>
>>  >>  -----Ursprüngliche Nachricht-----
>>  >>  Von: Romain Manni-Bucau [mailto:[email protected]]
>>  >>  Gesendet: Sonntag, 8. Juli 2012 17:48
>>  >>  An: [email protected]; Mark Struberg
>>  >>  Betreff: Re: AW: [DISCUSS] [DELTASPIKE-175] [DELTASPIKE-219]  
>>  >> @Transactional
>>  >>
>>  >>  +1
>>  >>
>>  >>  - Romain
>>  >>
>>  >>
>>  >>  2012/7/8 Mark Struberg <[email protected]>
>>  >>
>>  >>  > +1 for JTA module.
>>  >>  >
>>  >>  > LieGrue,
>>  >>  > strub
>>  >>  >
>>  >>  >
>>  >>  >
>>  >>  > ----- Original Message -----
>>  >>  > > From: Arne Limburg 
> <[email protected]>  > > To: 
>>  >> "[email protected]" <  > 
>>  >> [email protected]>
>>  >>  > > Cc:
>>  >>  > > Sent: Sunday, July 8, 2012 5:47 PM  > > Subject: 
> AW: [DISCUSS] 
>>  >> [DELTASPIKE-175] [DELTASPIKE-219]  > > @Transactional  > 
>>   > > Hi,  
>>  >> > > I startet implementing it that way, but I stumbled over 
> another
>>  > issue:
>>  >>  > > We get a dependency to the JTA spec and the EJB spec 
> that way. 
>>  >> So
>>  >
>>  >>  > > our
>>  >>  > JPA module
>>  >>  > > only would work with this apis in the classpath.
>>  >>  > > Do we accept this or are we back on a JTA module?
>>  >>  > >
>>  >>  > > Cheers,
>>  >>  > > Arne
>>  >>  > >
>>  >>  > > -----Ursprüngliche Nachricht-----  > > Von: 
> Romain Manni-Bucau 
>>  >> [mailto:[email protected] > > Gesendet: Donnerstag, 5. 
> Juli 
>>  >> 2012 15:07  > > An: [email protected]
>>  >>  > > Betreff: Re: [DISCUSS] [DELTASPIKE-175] 
> [DELTASPIKE-219]  > > 
>>  >> @Transactional  > >  > > if it works fine with CMT +1  
>>  >  > > 
>>  >> well let's have a try, we'll fix it if it is not enough
>>  > ;)
>>  >>  > >
>>  >>  > > - Romain
>>  >>  > >
>>  >>  > >
>>  >>  > > 2012/7/5 Pete Muir <[email protected]>  > >  
>>  >>  In Seam 2 
>>  >> we:
>>  >>  > >>
>>  >>  > >>  * checked if UT was available in JNDI, and used it 
> if it
>>  > were
>>  >>  > >>  * checked if there was a CMT transaction, and used 
> it (IIRC
>>  > this
>>  >>  > >> wwas  to work around abug)
>>  >>  > >>  * otherwise tried to use a resource local 
> transaction (e.g.
>>  > from
>>  >>  > >>  Hibernate)
>>  >>  > >>  * allowed the user to override and specify one 
> strategy  > 
>>  >> >>  > >>  In Seam 3 we did the same.
>>  >>  > >>
>>  >>  > >>  So I like option 1.
>>  >>  > >>
>>  >>  > >>  On 5 Jul 2012, at 10:03, Arne Limburg wrote:
>>  >>  > >>
>>  >>  > >>  > Hi,
>>  >>  > >>  >
>>  >>  > >>  > yesterday I startet working on the JTA 
> support for
>>  > @Transactional.
>>  >>  > >>  > My current approach is to implement a
>>  > JtaPersistenceStrategy.
>>  >>  > >>  > However that leads me to the problem: Who 
> decides which
>>  >
>>  >>  > >> PersistenceStrategy should be taken and how should 
> this
>>  > decision
>>  >>  > >> be
>>  >>  > made?
>>  >>  > >>  > I have three suggestions:
>>  >>  > >>  >
>>  >>  > >>  > 1.      We detect, if a UserTransaction is 
> available,
>>  > if so, the
>>  >>  > >>  JtaPersistenceStrategy is taken, otherwise the  
>>  >> 
>>  >> ResourceLocalPersistenceStrategy is taken.
>>  >>  > >>  >
>>  >>  > >>  > 2.      We detect, if the involved 
> persistence units
>>  > use JTA or
>>  >>  > >>  RESOURCE_LOCAL (which would lead to another 
> question: Would
>>  > we
>>  >>  > >> like to  support, that @Transactional mixes both 
> strategies?)
>>  > and
>>  >>  > >> decide from  that information  >
>>  >>  > >>  > 3.      We let the user decide by making one 
> (or both)
>>  > persistence
>>  >>  > >>  strategies @Alternatives
>>  >>  > >>  > What do you think?
>>  >>  > >>  >
>>  >>  > >>  > Cheers,
>>  >>  > >>  > Arne
>>  >>  > >>
>>  >>  > >>
>>  >>  > >
>>  >>  >
>>  >>
>>  >
>> 
>

Reply via email to