Return-Path: X-Original-To: apmail-incubator-deltaspike-dev-archive@minotaur.apache.org Delivered-To: apmail-incubator-deltaspike-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A0C52D1BF for ; Mon, 9 Jul 2012 19:49:22 +0000 (UTC) Received: (qmail 76263 invoked by uid 500); 9 Jul 2012 19:49:22 -0000 Delivered-To: apmail-incubator-deltaspike-dev-archive@incubator.apache.org Received: (qmail 76232 invoked by uid 500); 9 Jul 2012 19:49:22 -0000 Mailing-List: contact deltaspike-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: deltaspike-dev@incubator.apache.org Delivered-To: mailing list deltaspike-dev@incubator.apache.org Received: (qmail 76223 invoked by uid 99); 9 Jul 2012 19:49:22 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 09 Jul 2012 19:49:22 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=5.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [87.128.223.163] (HELO mx01.openknowledge.de) (87.128.223.163) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 09 Jul 2012 19:49:17 +0000 From: Arne Limburg To: "deltaspike-dev@incubator.apache.org" Date: Mon, 9 Jul 2012 21:51:32 +0200 Subject: AW: DS-175 using EJB Transactions for CDI beans in a portable way Thread-Topic: DS-175 using EJB Transactions for CDI beans in a portable way Thread-Index: Ac1eC2MI30fcs7fVR1SVjd2aGEjq6AAAHyfg References: <20120705090046.7144616464E@mx01.openknowledge.de> <494776C1-491D-4F9C-8111-42B365CFBD2D@redhat.com> <20120708154456.37C4A164A83@mx01.openknowledge.de> <1341762378.55855.YahooMailNeo@web171502.mail.ir2.yahoo.com> <20120708182350.6EA1D164464@mx01.openknowledge.de> <20120708183632.E066C16422F@mx01.openknowledge.de> <1341774996.3793.YahooMailNeo@web171505.mail.ir2.yahoo.com> <20120709063136.C22C3164A83@mx01.openknowledge.de> <1341859576.61917.YahooMailNeo@web171503.mail.ir2.yahoo.com> <1341859854.91959.YahooMailNeo@web171501.mail.ir2.yahoo.com> <1341860537.1425.YahooMailNeo@web171501.mail.ir2.yahoo.com> <20120709192702.049D2164685@mx01.openknowledge.de> <20120709193507.0A110164A83@mx01.openknowledge.de> <20120709194316.6FC20164A83@mx01.openknowledge.de> In-Reply-To: Accept-Language: de-DE, en-US Content-Language: de-DE X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: de-DE, en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Message-Id: <20120709194852.B70DE1643EA@mx01.openknowledge.de> X-Virus-Checked: Checked by ClamAV on apache.org Do you mean, we have no SessionContext in the JNDI in the CMT case, why not= ? Don't mix this up with the UserTransaction! -----Urspr=FCngliche Nachricht----- Von: Romain Manni-Bucau [mailto:rmannibucau@gmail.com] Gesendet: Montag, 9. Juli 2012 21:44 An: deltaspike-dev@incubator.apache.org Betreff: Re: DS-175 using EJB Transactions for CDI beans in a portable way yes but not the cmt case - Romain 2012/7/9 Arne Limburg > OK, but I just want to detect if we are in an EJB environment to use > the EjbTransactionHelper... > And if someone puts an EJBContext into the JNDI, we can believe, we > are within an EJBContainer ;-) > > Cheers, > Arne > > -----Urspr=FCngliche Nachricht----- > Von: Romain Manni-Bucau [mailto:rmannibucau@gmail.com] > Gesendet: Montag, 9. Juli 2012 21:40 > An: deltaspike-dev@incubator.apache.org > Betreff: Re: DS-175 using EJB Transactions for CDI beans in a portable > way > > can't we have an EJBContext facade which throw an exception for each > method and no ut (is the case i was thinking of)? > > - Romain > > > 2012/7/9 Arne Limburg > > > OK, > > discard the "must be" ;-) But if we have @Transactional, an > > EJBContext and no UserTransaction, we can safely use the > > EjbTransactionHelper > > > > Cheers, > > Arne > > > > -----Urspr=FCngliche Nachricht----- > > Von: Romain Manni-Bucau [mailto:rmannibucau@gmail.com] > > Gesendet: Montag, 9. Juli 2012 21:31 > > An: deltaspike-dev@incubator.apache.org > > Betreff: Re: DS-175 using EJB Transactions for CDI beans in a > > portable way > > > > hmm i dont like the 'it mush be" since it is not obvious. > > > > well maybe start with ut only then testing we'll see quickly what is > > missing > > > > - Romain > > > > > > 2012/7/9 Arne Limburg > > > > > Hi Mark, > > > > > > I had some other thoughts about it, that might work better, even > > > in nested > > > executions: We can use JNDI lookups to detect the scenario we are in: > > > 1. If a UserTransaction is available via java:comp/UserTransaction > > > use it 2. If a EJBContext is available via java:comp/EJBContext > > > and no UserTransaction is available, it must be the CMT case! Then > > > we could use your CMT EjbTransactionHelper and should use > > > EJBContext.setRollbackOnly to align behavior on Exceptions. > > > Else we should use the ResourceLocalPersistenceStrategy. > > > > > > Wdyt? > > > Cheers, > > > Arne > > > > > > -----Urspr=FCngliche Nachricht----- > > > Von: Mark Struberg [mailto:struberg@yahoo.de] > > > Gesendet: Montag, 9. Juli 2012 21:02 > > > An: deltaspike-dev@incubator.apache.org > > > Betreff: Re: DS-175 using EJB Transactions for CDI beans in a > > > portable way > > > > > > Dough, I do! > > > > > > As our EjbTransactionHelper is annotated @Stateless, it will have > > > CMT which closes the EM right after returning from the Server. All > > > subsequently called EJBs and CDI beans will use the EJB transaction. > > > > > > Of course, you cannot control rollback and commits but must rely > > > on the EJB container. But that's perfectly fine for some use cases. > > > > > > In practice we might have a JtaPersistenceStrategy which first > > > does an inspection of the intercepted class. > > > > > > 1. If the class contains an Extended EM -> use UserTransaction > > > > > > > > > 2. if the class contains a UserTransaction -> use UserTransaction > > > > > > 3.. else -> let EJB manage the transaction via the wrapper > > > > > > > > > LieGrue, > > > strub > > > > > > > > > > > > ----- Original Message ----- > > > > From: Romain Manni-Bucau > > > > To: deltaspike-dev@incubator.apache.org; Mark Struberg > > > > > > > > Cc: > > > > Sent: Monday, July 9, 2012 8:54 PM > > > > Subject: Re: DS-175 using EJB Transactions for CDI beans in a > > > > portable way > > > > > > > >t his way you'll not control the Tx > > > > > > > > - Romain > > > > > > > > > > > > 2012/7/9 Mark Struberg > > > > > > > >> Well this should be a candidate for a PersistenceStrategy of > > > >> @Transactional > > > >> > > > >> > > > >> The question is how to pickup the right Strategy. This needs > > > >> some brainpower still... > > > >> > > > >> LieGrue, > > > >> strub > > > >> > > > >> >________________________________ > From: Romain Manni-Bucau > > > >> > > > >> >To: deltaspike-dev@incubator.apache.org; Mark Struberg > > > > > > >> > > > > >> >Sent: Monday, July 9, 2012 8:48 PM > > > >> >Subject: Re: DS-175 using EJB Transactions for CDI beans in a > > > >> portable > > > > way > > > >> > > > > >> > > > > >> >it is enough but where to put it? > > > >> > > > > >> > > > > >> >what i like -> transparent and almost free >what i don't > > > >> know-> what about JTA (which is more generic)? > > > >> >what i don't like -> not compatible with @Transactional > > > > >> >- Romain > > > >> > > > > >> > > > > >> > > > > >> >2012/7/9 Mark Struberg > >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 >> >>>publ= ic > > > >> class EjbTransactionHelper >> >>> public 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 > > > >> >>> To: > > > >> "deltaspike-dev@incubator.apache.org" < > > > >> deltaspike-dev@incubator.apache.org> > > > >> >>> 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=FCngliche Nachricht----- >>> Von: Romain > > > >> Manni-Bucau [mailto:rmannibucau@gmail.com] >>> Gesendet: > > > >> Sonntag, 8. Juli 2012 > > > >> 21:37 >>> An: deltaspike-dev@incubator.apache.org; Mark > > > >> Struberg > > > >> >>> Betreff: Re: AW: AW: [DISCUSS] [DELTASPIKE-175] > > > > [DELTASPIKE-219] > > > >> @Transactional > > > >> >>> > > > >> >>> sounds fine > > > >> >>> > > > >> >>> - Romain > > > >> >>> > > > >> >>> > > > >> >>> 2012/7/8 Mark Struberg >>> >>>> > > > >> 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 > > > > > > > >> >>>> > To: "deltaspike-dev@incubator.apache.org" > > > > < > > > >> >>>> deltaspike-dev@incubator.apache.org> > > > >> >>>> > 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=FCngliche Nachricht----- >>>> > Von: Romain > > > >> Manni-Bucau > > > > [mailto:rmannibucau@gmail.com] > > > >> >>>> > Gesendet: Sonntag, 8. Juli 2012 20:29 >>>> > An: > > > >> deltaspike-dev@incubator.apache.org > > > >> >>>> > 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 > > > > > > > >> >>>> > > > > >> >>>> >> 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=FCngliche Nachricht----- >>>> >> Von: > > > >> Romain Manni-Bucau > > > > [mailto:rmannibucau@gmail.com] > > > >> >>>> >> Gesendet: Sonntag, 8. Juli 2012 17:48 >>>> >> An: > > > >> deltaspike-dev@incubator.apache.org; Mark > > > > Struberg > > > >> >>>> >> Betreff: Re: AW: [DISCUSS] [DELTASPIKE-175] > > > > [DELTASPIKE-219] > > > >> >>>> >> @Transactional > > > >> >>>> >> > > > >> >>>> >> +1 > > > >> >>>> >> > > > >> >>>> >> - Romain > > > >> >>>> >> > > > >> >>>> >> > > > >> >>>> >> 2012/7/8 Mark Struberg > > > > > > > >> >>>> >> > > > >> >>>> >> > +1 for JTA module. > > > >> >>>> >> > > > > >> >>>> >> > LieGrue, > > > >> >>>> >> > strub > > > >> >>>> >> > > > > >> >>>> >> > > > > >> >>>> >> > > > > >> >>>> >> > ----- Original Message ----- >>>> >> > > From: > > > >> Arne Limburg >>> > > To: > > > >> >>>> >> "deltaspike-dev@incubator.apache.org" > > > > < > > > > >> >>>> >> deltaspike-dev@incubator.apache.org> > > > >> >>>> >> > > 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=FCngliche Nachricht----- > Von: > > > >> >>> Romain Manni-Bucau > > > >> >>>> >> [mailto:rmannibucau@gmail.com] > > > > > > Gesendet: Donnerstag, 5. > > > >> >>> Juli > > > >> >>>> >> 2012 15:07 > > An: > > > > deltaspike-dev@incubator.apache.org > > > >> >>>> >> > > 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 > > > > > > > > > >> >>>> >> 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 > > > >> >>>> >> > >> > > > >> >>>> >> > >> > > > >> >>>> >> > > > > > >> >>>> >> > > > > >> >>>> >> > > > >> >>>> > > > > >> >>>> > > > >> >>> > > > >> >> > > > >> > > > > >> > > > > >> > > > > >> > > > > > > > > > >