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 AD3F0D578 for ; Mon, 9 Jul 2012 19:02:47 +0000 (UTC) Received: (qmail 3078 invoked by uid 500); 9 Jul 2012 19:02:47 -0000 Delivered-To: apmail-incubator-deltaspike-dev-archive@incubator.apache.org Received: (qmail 3019 invoked by uid 500); 9 Jul 2012 19:02:47 -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 3011 invoked by uid 99); 9 Jul 2012 19:02:47 -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:02:47 +0000 X-ASF-Spam-Status: No, hits=0.7 required=5.0 tests=FSL_FREEMAIL_1,FSL_FREEMAIL_2,RCVD_IN_DNSWL_NONE,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (athena.apache.org: local policy) Received: from [77.238.189.92] (HELO nm19-vm0.bullet.mail.ird.yahoo.com) (77.238.189.92) by apache.org (qpsmtpd/0.29) with SMTP; Mon, 09 Jul 2012 19:02:40 +0000 Received: from [77.238.189.52] by nm19.bullet.mail.ird.yahoo.com with NNFMP; 09 Jul 2012 19:02:17 -0000 Received: from [212.82.109.128] by tm5.bullet.mail.ird.yahoo.com with NNFMP; 09 Jul 2012 19:02:17 -0000 Received: from [127.0.0.1] by omp1020.mail.ird.yahoo.com with NNFMP; 09 Jul 2012 19:02:17 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 749161.76179.bm@omp1020.mail.ird.yahoo.com Received: (qmail 2685 invoked by uid 60001); 9 Jul 2012 19:02:17 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s1024; t=1341860537; bh=KRWQMBCQsXE41u85k6sbVSeHfML86kWGxTLcv4yPGkI=; h=X-YMail-OSG:Received:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=HCqZwjOwB1h/TGp2GbXiCjbPaMoMmw2+eOm3b2ROhquqKweYequP4LC6Y3IrNAQQByJZQPuI1WIpERWpHa33rtL8cVQ0DPWJpuQYo89dRx36QWxijG/R7/K+o7Is7+7LVoF9XzP6h5dblbWoSqMBw7vTjPRpMvmmjmx4mC2NARI= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.de; h=X-YMail-OSG:Received:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=euYA5exhfaGKHvKmlBVgAAZqRVcS7RTmeAFAhAmDKp4NMkpCazE9N0jGQpx0o6lzRd2C5Np+ft3m5zvzVcmdOxuj+ebRE3Mryc0c5Rbsl/CR7QBmWMs9E88W5K6i5ihGRj83BBU6W0J+sERFM//injMTxDdcwf9bBKPKYEJx6/8=; X-YMail-OSG: DGHoPlkVM1mj8rx_SrajbUGp.NuL45Luze0sGv4lqTg.5EG .xqCO_Vn0l4pQa4Oilfj2JvcM9.r81I9y3QP9vNMLaLmNI1QCj_sy_o5Qds_ rEoIGNJVfAZNqp2f5qOfmx2ORdOMyPIEW0RQ4RgRLO7.96g2bhaKbcJcDLoG WXT_BNmxKXLb8nUEYL6KGXxtid_Jl_4aclZ9JwZTgHEdATSCRWqRdJW7MWy_ nWuVfCdZL9YrRycb0Rp8ZddIzzpIhTgmu.GgnAS4xBp5zzpjdOEQvVZC.f5. 9Oz3Miq6bYN2oLrr8Hhbv8wLdO3Jss2KxUEaKdNKAbSmgqEuZlQMgwV1FiIu Yu8sMDpfA4PaqhfZUFC8EDF40mgnz.MiIY26sHL1Pvxh5on_1bpEX6PCgpOl gWQLY19g7.Eif0U3KSOsP7_3xJu5nG3vAh20- Received: from [80.108.122.184] by web171501.mail.ir2.yahoo.com via HTTP; Mon, 09 Jul 2012 20:02:17 BST X-Mailer: YahooMailWebService/0.8.120.356233 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> Message-ID: <1341860537.1425.YahooMailNeo@web171501.mail.ir2.yahoo.com> Date: Mon, 9 Jul 2012 20:02:17 +0100 (BST) From: Mark Struberg Reply-To: Mark Struberg Subject: Re: DS-175 using EJB Transactions for CDI beans in a portable way To: "deltaspike-dev@incubator.apache.org" In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org Dough, I do!=0A=0AAs our EjbTransactionHelper is annotated @Stateless, it w= ill have CMT which closes the EM right after returning from the Server. All= subsequently called EJBs and CDI beans will use the EJB transaction.=0A=0A= Of course, you cannot control rollback and commits but must rely on the EJB= container. But that's perfectly fine for some use cases.=0A=0AIn practice = we might have a JtaPersistenceStrategy which first does an inspection of th= e intercepted class.=0A=0A1. If the class contains an Extended EM -> use Us= erTransaction=0A=0A=0A2. if the class contains a UserTransaction -> use Use= rTransaction=0A=0A3.. else -> let EJB manage the transaction via the wrappe= r=0A=0A=0ALieGrue,=0Astrub=0A=0A=0A=0A----- Original Message -----=0A> From= : Romain Manni-Bucau =0A> To: deltaspike-dev@incubat= or.apache.org; Mark Struberg =0A> Cc: =0A> Sent: Monday,= July 9, 2012 8:54 PM=0A> Subject: Re: DS-175 using EJB Transactions for CD= I beans in a portable way=0A> =0A>t his way you'll not control the Tx=0A> = =0A> - Romain=0A> =0A> =0A> 2012/7/9 Mark Struberg =0A> = =0A>> Well this should be a candidate for a PersistenceStrategy of @Transa= ctional=0A>> =0A>> =0A>> The question is how to pickup the right Strategy.= This needs some=0A>> brainpower still...=0A>> =0A>> LieGrue,=0A>> strub= =0A>> =0A>> >________________________________=0A>> > From: Romain Manni-B= ucau =0A>> >To: deltaspike-dev@incubator.apache.org= ; Mark Struberg =0A> > >=0A>> >Sent: Monday, July 9= , 2012 8:48 PM=0A>> >Subject: Re: DS-175 using EJB Transactions for CDI be= ans in a portable =0A> way=0A>> >=0A>> >=0A>> >it is enough but where to= put it?=0A>> >=0A>> >=0A>> >what i like -> transparent and almost free= =0A>> >what i don't know-> what about JTA (which is more generic)?=0A>> >= what i don't like -> not compatible with @Transactional=0A>> >=0A>> >- Ro= main=0A>> >=0A>> >=0A>> >=0A>> >2012/7/9 Mark Struberg =0A>> >=0A>> >back to the original problem about how to integrate with= container=0A>> management.=0A>> >>=0A>> >>I found a solution which hope= fully works for managing CDI beans =0A> with EJB=0A>> CMT - even in a 100%= portable way.=0A>> >>=0A>> >>Please first take a look what I've done in = TransactionHelper. =0A> The same=0A>> could basically be done _inside_ a C= mtPersistenceStrategy.=0A>> >>=0A>> >>First we create an internal EJB:=0A= >> >>=0A>> >>=0A>> >>>@Stateless // this is automatically transactional= =0A>> >>=0A>> >>>public class EjbTransactionHelper=0A>> >>=0A>> >>>=A0 = =A0 public T invokeTransactional(InvocationContext=0A>> invocationCont= ext) throws Exception=0A>> >>>=A0 =A0 {=0A>> >>>=A0 =A0 =A0 =A0 return in= vocationContext.proceed();=0A>> >>>=A0 =A0 }=0A>> >>>}=0A>> >>=0A>> >>= =0A>> >>and then we use this EJB inside the invoke method of the=0A>> EeP= ersistenceStrategy wrapping the target in a anynomous Callable which=0A>> = just invokes the 'real' target method.=0A>> >>=0A>> >>=0A>> >>private @I= nject EjbTransactionHelper ejbTransaction;=0A>> >>...=0A>> >>public Objec= t execute(InvocationContext invocationContext) throws=0A>> Exception=0A>> = >>{=0A>> >>...=0A>> >>=0A>> >>=0A>> >>and instead of directly invoking= invocationContext.proceed() we =0A> just use=0A>> the EJB:=0A>> >>=0A>> = >>ejbTransaction.invokeTransactional(invocationContext);=0A>> >>=0A>> >>= Since the EJB will open the transaction for us, we are basically =0A> done = ...=0A>> >>=0A>> >>=0A>> >>=0A>> >>Wdyt?=0A>> >>=0A>> >>LieGrue,=0A>>= >>strub=0A>> >>=0A>> >>=0A>> >>=0A>> >>=0A>> >>=0A>> >>----- Origin= al Message -----=0A>> >>> From: Arne Limburg =0A>> >>> To: "deltaspike-dev@incubator.apache.org" <=0A>> deltaspike-d= ev@incubator.apache.org>=0A>> >>> Cc:=0A>> >>> Sent: Monday, July 9, 2012= 8:30 AM=0A>> >>> Subject: AW: AW: AW: [DISCUSS] [DELTASPIKE-175] =0A> [DE= LTASPIKE-219]=0A>> @Transactional=0A>> >>>=0A>> >>> For api it's fine,= =0A>> >>> and then we have two impl modules, JPA and JTA?=0A>> >>>=0A>> = >>> Cheers,=0A>> >>> Arne=0A>> >>>=0A>> >>> -----Urspr=FCngliche Nachric= ht-----=0A>> >>> Von: Romain Manni-Bucau [mailto:rmannibucau@gmail.com]=0A= >> >>> Gesendet: Sonntag, 8. Juli 2012 21:37=0A>> >>> An: deltaspike-dev@= incubator.apache.org; Mark Struberg=0A>> >>> Betreff: Re: AW: AW: [DISCUSS= ] [DELTASPIKE-175] =0A> [DELTASPIKE-219]=0A>> @Transactional=0A>> >>>=0A>= > >>> sounds fine=0A>> >>>=0A>> >>> - Romain=0A>> >>>=0A>> >>>=0A>> >= >> 2012/7/8 Mark Struberg =0A>> >>>=0A>> >>>>=A0 maybe= we should just rename the jpa module to tx?=0A>> >>>>=0A>> >>>>=A0 There= is no single import of any javax.persistence in=0A>> >>>>=A0 deltaspike-j= pa-api yet.=0A>> >>>>=0A>> >>>>=A0 LieGrue,=0A>> >>>>=A0 strub=0A>> >>>= >=0A>> >>>>=0A>> >>>>=0A>> >>>>=A0 ----- Original Message -----=0A>> >>= >>=A0 > From: Arne Limburg =0A> =0A>> >>>>= =A0 > To: "deltaspike-dev@incubator.apache.org" =0A> <=0A>> >>>>=A0 deltas= pike-dev@incubator.apache.org>=0A>> >>>>=A0 > Cc:=0A>> >>>>=A0 > Sent: Su= nday, July 8, 2012 8:39 PM=0A>> >>>>=A0 > Subject: AW: AW: [DISCUSS] [DELT= ASPIKE-175] =0A> [DELTASPIKE-219]=0A>> >>>>=A0 @Transactional=0A>> >>>>= =A0 >=0A>> >>>>=A0 > Yes, sounds good.=0A>> >>>>=A0 > The impl of that mo= dule could contain the JTA stuff. =0A> And the JPA=0A>> >>>>=A0 > module= =0A>> >>>>=A0 would=0A>> >>>>=A0 > contain the resource local stuff. Ever= ybody that =0A> does not need the=0A>> >>>>=A0 > JTA=0A>> >>>>=A0 then=0A= >> >>>>=A0 > could just use the tx-api and the JPA api and impl.=0A>> >>>= >=A0 >=0A>> >>>>=A0 > Cheers,=0A>> >>>>=A0 > Arne=0A>> >>>>=A0 >=0A>> >= >>>=A0 > -----Urspr=FCngliche Nachricht-----=0A>> >>>>=A0 > Von: Romain Ma= nni-Bucau =0A> [mailto:rmannibucau@gmail.com]=0A>> >>>>=A0 > Gesendet: Son= ntag, 8. Juli 2012 20:29=0A>> >>>>=A0 > An: deltaspike-dev@incubator.apach= e.org=0A>> >>>>=A0 > Betreff: Re: AW: [DISCUSS] [DELTASPIKE-175] =0A> [DEL= TASPIKE-219]=0A>> >>>>=A0 @Transactional=0A>> >>>>=A0 >=0A>> >>>>=A0 > i= thought the same, JTA shouldn't depend on JPA. =0A> @Transactional=0A>> >= >>>=A0 > should=0A>> >>>>=A0 be in=0A>> >>>>=A0 > a tx module then JPA co= uld use it.=0A>> >>>>=A0 >=0A>> >>>>=A0 > wdyt?=0A>> >>>>=A0 >=0A>> >>>= >=A0 > - Romain=0A>> >>>>=A0 >=0A>> >>>>=A0 >=0A>> >>>>=A0 > 2012/7/8 Ar= ne Limburg =0A> =0A>> >>>>=A0 >=0A>> >>>>= =A0 >>=A0 OK, but I am still not sure where to split it. =0A> While=0A>> >= >> implementing=0A>> >>>>=A0 >> this, I got the feeling, that the @Transac= tional =0A> stuff should=0A>> >>>>=A0 >> completely move out of the JPA mo= dule. It feeled =0A> quite strange=0A>> >>> that=0A>> >>>>=A0 >> the JTA = module depends on the JPA module...=0A>> >>>>=A0 >>=0A>> >>>>=A0 >>=A0 I = think, I'll push my stuff right after the =0A> 0.3 release and=0A>> >>> th= an=0A>> >>>>=A0 >> we=A0 can discuss this at the code-base.=0A>> >>>>=A0 = >>=A0 Maybe I should put all into the JPA module and =0A> we split it after= =0A>> >>>=0A>> >>>>=A0 >> agreeing to a module structure?=0A>> >>>>=A0 >= >=0A>> >>>>=A0 >>=A0 Cheers,=0A>> >>>>=A0 >>=A0 Arne=0A>> >>>>=A0 >>=0A>= > >>>>=A0 >>=A0 -----Urspr=FCngliche Nachricht-----=0A>> >>>>=A0 >>=A0 Vo= n: Romain Manni-Bucau =0A> [mailto:rmannibucau@gmail.com]=0A>> >>>>=A0 >>= =A0 Gesendet: Sonntag, 8. Juli 2012 17:48=0A>> >>>>=A0 >>=A0 An: deltaspik= e-dev@incubator.apache.org; Mark =0A> Struberg=0A>> >>>>=A0 >>=A0 Betreff:= Re: AW: [DISCUSS] [DELTASPIKE-175] =0A> [DELTASPIKE-219]=0A>> >>>>=A0 >> = @Transactional=0A>> >>>>=A0 >>=0A>> >>>>=A0 >>=A0 +1=0A>> >>>>=A0 >>=0A>= > >>>>=A0 >>=A0 - Romain=0A>> >>>>=A0 >>=0A>> >>>>=A0 >>=0A>> >>>>=A0 >= >=A0 2012/7/8 Mark Struberg =0A> =0A>> >>>>=A0 >>=0A>> = >>>>=A0 >>=A0 > +1 for JTA module.=0A>> >>>>=A0 >>=A0 >=0A>> >>>>=A0 >>= =A0 > LieGrue,=0A>> >>>>=A0 >>=A0 > strub=0A>> >>>>=A0 >>=A0 >=0A>> >>>>= =A0 >>=A0 >=0A>> >>>>=A0 >>=A0 >=0A>> >>>>=A0 >>=A0 > ----- Original Mess= age -----=0A>> >>>>=A0 >>=A0 > > From: Arne Limburg=0A>> >>> =A0 > > To:=0A>> >>>>=A0 >> "deltaspike-dev@incubator.a= pache.org" =0A> <=A0 >=0A>> >>>>=A0 >> deltaspike-dev@incubator.apache.org= >=0A>> >>>>=A0 >>=A0 > > Cc:=0A>> >>>>=A0 >>=A0 > > Sent: Sunday, July 8,= 2012 5:47 PM=A0 =0A>> > Subject:=0A>> >>> AW: [DISCUSS]=0A>> >>>>=A0 >>= [DELTASPIKE-175] [DELTASPIKE-219]=A0 > > =0A> @Transactional=A0 >=0A>> >>= >>=A0 > > Hi,=0A>> >>>>=A0 >> > > I startet implementing it that way, =0A= > but I stumbled over=0A>> >>> another=0A>> >>>>=A0 > issue:=0A>> >>>>= =A0 >>=A0 > > We get a dependency to the JTA spec =0A> and the EJB spec=0A>= > >>> that way.=0A>> >>>>=A0 >> So=0A>> >>>>=A0 >=0A>> >>>>=A0 >>=A0 > = > our=0A>> >>>>=A0 >>=A0 > JPA module=0A>> >>>>=A0 >>=A0 > > only would w= ork with this apis in the =0A> classpath.=0A>> >>>>=A0 >>=A0 > > Do we acc= ept this or are we back on a =0A> JTA module?=0A>> >>>>=A0 >>=A0 > >=0A>> = >>>>=A0 >>=A0 > > Cheers,=0A>> >>>>=A0 >>=A0 > > Arne=0A>> >>>>=A0 >>=A0= > >=0A>> >>>>=A0 >>=A0 > > -----Urspr=FCngliche Nachricht-----=A0 =0A>> = > Von:=0A>> >>> Romain Manni-Bucau=0A>> >>>>=A0 >> [mailto:rmannibucau@gm= ail.com]=A0 > > =0A> Gesendet: Donnerstag, 5.=0A>> >>> Juli=0A>> >>>>=A0 = >> 2012 15:07=A0 > > An: =0A> deltaspike-dev@incubator.apache.org=0A>> >>>= >=A0 >>=A0 > > Betreff: Re: [DISCUSS] =0A> [DELTASPIKE-175]=0A>> >>> [DELT= ASPIKE-219]=A0 > >=0A>> >>>>=A0 >> @Transactional=A0 > >=A0 > > if it work= s =0A> fine with CMT +1=0A>> >>>>=A0 >=A0 > >=0A>> >>>>=A0 >> well let's = have a try, we'll fix it if =0A> it is not enough=0A>> >>>>=A0 > ;)=0A>> = >>>>=A0 >>=A0 > >=0A>> >>>>=A0 >>=A0 > > - Romain=0A>> >>>>=A0 >>=A0 > >= =0A>> >>>>=A0 >>=A0 > >=0A>> >>>>=A0 >>=A0 > > 2012/7/5 Pete Muir =0A> =A0 > >=0A>> >>>>=A0 >>=A0 In Seam 2=0A>> >>>>=A0 >> we:= =0A>> >>>>=A0 >>=A0 > >>=0A>> >>>>=A0 >>=A0 > >>=A0 * checked if UT was a= vailable in =0A> JNDI, and used it=0A>> >>> if it=0A>> >>>>=A0 > were=0A>= > >>>>=A0 >>=A0 > >>=A0 * checked if there was a CMT =0A> transaction, and= used=0A>> >>> it (IIRC=0A>> >>>>=A0 > this=0A>> >>>>=A0 >>=A0 > >> wwas= =A0 to work around abug)=0A>> >>>>=A0 >>=A0 > >>=A0 * otherwise tried to u= se a =0A> resource local=0A>> >>> transaction (e.g.=0A>> >>>>=A0 > from= =0A>> >>>>=A0 >>=A0 > >>=A0 Hibernate)=0A>> >>>>=A0 >>=A0 > >>=A0 * allow= ed the user to override =0A> and specify one=0A>> >>> strategy=A0 >=0A>> = >>>>=A0 >> >>=A0 > >>=A0 In Seam 3 we did the =0A> same.=0A>> >>>>=A0 >>= =A0 > >>=0A>> >>>>=A0 >>=A0 > >>=A0 So I like option 1.=0A>> >>>>=A0 >>= =A0 > >>=0A>> >>>>=A0 >>=A0 > >>=A0 On 5 Jul 2012, at 10:03, Arne =0A> Lim= burg wrote:=0A>> >>>>=A0 >>=A0 > >>=0A>> >>>>=A0 >>=A0 > >>=A0 > Hi,=0A>>= >>>>=A0 >>=A0 > >>=A0 >=0A>> >>>>=A0 >>=A0 > >>=A0 > yesterday I startet= working =0A> on the JTA=0A>> >>> support for=0A>> >>>>=A0 > @Transaction= al.=0A>> >>>>=A0 >>=A0 > >>=A0 > My current approach is to =0A> implement = a=0A>> >>>>=A0 > JtaPersistenceStrategy.=0A>> >>>>=A0 >>=A0 > >>=A0 > How= ever that leads me to =0A> the problem: Who=0A>> >>> decides which=0A>> >= >>>=A0 >=0A>> >>>>=A0 >>=A0 > >> PersistenceStrategy should be =0A> taken = and how should=0A>> >>> this=0A>> >>>>=A0 > decision=0A>> >>>>=A0 >>=A0 = > >> be=0A>> >>>>=A0 >>=A0 > made?=0A>> >>>>=A0 >>=A0 > >>=A0 > I have th= ree suggestions:=0A>> >>>>=A0 >>=A0 > >>=A0 >=0A>> >>>>=A0 >>=A0 > >>=A0 = > 1.=A0 =A0 =A0 We detect, if a =0A> UserTransaction is=0A>> >>> available= ,=0A>> >>>>=A0 > if so, the=0A>> >>>>=A0 >>=A0 > >>=A0 JtaPersistenceStra= tegy is taken, =0A> otherwise the=0A>> >>>>=A0 >>=0A>> >>>>=A0 >> Resourc= eLocalPersistenceStrategy is taken.=0A>> >>>>=A0 >>=A0 > >>=A0 >=0A>> >>>= >=A0 >>=A0 > >>=A0 > 2.=A0 =A0 =A0 We detect, if the =0A> involved=0A>> >>= > persistence units=0A>> >>>>=A0 > use JTA or=0A>> >>>>=A0 >>=A0 > >>=A0 = RESOURCE_LOCAL (which would lead =0A> to another=0A>> >>> question: Would= =0A>> >>>>=A0 > we=0A>> >>>>=A0 >>=A0 > >> like to=A0 support, that =0A> = @Transactional mixes both=0A>> >>> strategies?)=0A>> >>>>=A0 > and=0A>> = >>>>=A0 >>=A0 > >> decide from=A0 that information=A0 =0A>> =0A>> >>>>=A0 = >>=A0 > >>=A0 > 3.=A0 =A0 =A0 We let the user =0A> decide by making one=0A>= > >>> (or both)=0A>> >>>>=A0 > persistence=0A>> >>>>=A0 >>=A0 > >>=A0 st= rategies @Alternatives=0A>> >>>>=A0 >>=A0 > >>=A0 > What do you think?=0A>= > >>>>=A0 >>=A0 > >>=A0 >=0A>> >>>>=A0 >>=A0 > >>=A0 > Cheers,=0A>> >>>>= =A0 >>=A0 > >>=A0 > Arne=0A>> >>>>=A0 >>=A0 > >>=0A>> >>>>=A0 >>=A0 > >>= =0A>> >>>>=A0 >>=A0 > >=0A>> >>>>=A0 >>=A0 >=0A>> >>>>=A0 >>=0A>> >>>>= =A0 >=0A>> >>>>=0A>> >>>=0A>> >>=0A>> >=0A>> >=0A>> >=0A>> =0A>