Which @Transactional do you use? javax.transaction.Transactional or org.apache.deltaspike.jpa.api.transaction.Transactional ?
LieGrue, strub > Am 10.05.2017 um 19:51 schrieb Instantiation Exception > <[email protected]>: > > John, > > So in this situation can I completly remove beans.xml? > > So why does it work? ContainerManagedTransactionStrategy has trivial > implementation: > https://github.com/apache/deltaspike/blob/master/deltaspike/modules/jpa/impl/src/main/java/org/apache/deltaspike/jpa/impl/transaction/ContainerManagedTransactionStrategy.java > > As Mark said > "It is essentially a no-op TransactionStrategy. It delegates through > without doing something." > "This is useful if you GUARANTEED have a ContainerManagedTransation in an > outer level. > E.g. if you have some existing code using DeltaSpike @Transactional, and > you know that you ALWAYS have e.g. a @Stateless @WebService calling your > code." > > Best regards, > Konrad > > > On Wed, May 10, 2017 at 7:39 PM, John D. Ament <[email protected]> > wrote: > >> Konrad, >> >> By using a global alternative, you're effectively making what is in >> beans.xml ignored. >> >> John >> >> On Wed, May 10, 2017 at 1:32 PM Instantiation Exception < >> [email protected]> wrote: >> >>> John, >>> >>> There is one think which I don't understand: >>> apache-deltaspike.properties contains different TransactionStrategy >>> than beans.xml >>> >>> * apache-deltaspike.properties contains >>> >>> org.apache.deltaspike.jpa.impl.transaction. >> ContainerManagedTransactionStrategy >>> * beans.xml contains >>> >>> org.apache.deltaspike.jpa.impl.transaction. >> BeanManagedUserTransactionStrategy >>> >>> Isn't it a conflict? >>> >>> Best regards, >>> Konrad >>> >>> On Wed, May 10, 2017 at 7:22 PM, John D. Ament <[email protected]> >>> wrote: >>> >>>> Konrad, >>>> >>>> Yes, what you're doing should work and actually matches what I do >>> presently >>>> in a production environment. If you're using the JTA @Transactional >> what >>>> you're doing is what will work for you. >>>> >>>> John >>>> >>>> On Wed, May 10, 2017 at 1:20 PM Instantiation Exception < >>>> [email protected]> wrote: >>>> >>>>> Mark, John >>>>> >>>>> I am not sure if I properly understand so I created demo app with my >>>>> current configuration: >>>>> https://github.com/instantiationexception/wildfly-deltaspike-data >>>>> >>>>> Generally there are 4 files specific to DeltaSpike Data: >>>>> >>>>> * EntityManagerProducer.java >>>>> * apache-deltaspike.properties >>>>> * beans.xml >>>>> >>>>> My goals are: >>>>> >>>>> * Use JTA EntityManager provided by WildFly >>>>> * Use @Transactional from javax.transaction >>>>> * Mix CDI and EJB >>>>> >>>>> Generally this demo app works. But I am not sure if more complicated >>> app >>>>> will work. >>>>> Is this configuration correct? Are there any unneeded/invalid >> elements? >>>>> >>>>> Best regards, >>>>> Konrad >>>>> >>>>> On Wed, May 10, 2017 at 11:22 AM, Mark Struberg >>>> <[email protected] >>>>>> >>>>> wrote: >>>>> >>>>>> Hi Konrad, John! >>>>>> >>>>>> Hmm not sure about ContainerManagedTransactionStrategy. >>>>>> >>>>>> Look at the code, this is probably not named properly. It is >>>> essentially >>>>> a >>>>>> no-op TransactionStrategy. It delegates through without doing >>>> something. >>>>>> >>>>>> This is useful if you GUARANTEED have a ContainerManagedTransation >> in >>>> an >>>>>> outer level. >>>>>> E.g. if you have some existing code using DeltaSpike >> @Transactional, >>>> and >>>>>> you know that you ALWAYS have e.g. a @Stateless @WebService calling >>>> your >>>>>> code. >>>>>> We cannot rename this now because otherwise the Alternatives >> enabled >>> in >>>>>> various beans.xml files would go bonkers... >>>>>> >>>>>> So if you are about to use e.g. an @ApplicationScoped >> @Transactional >>>> bean >>>>>> without any EJBs involved at all, then you should rather use the >>>>>> BeanManagedUserTransactionStrategy. >>>>>> This one leverages the UserTransaction functionality provided by >> the >>>>>> server. If a JTA Transaction is already active then it would simply >>> do >>>>>> nothing. So in this case it really behaves the same like >>>>>> ContainerManagedTransactionStrategy. >>>>>> >>>>>> But if there is NO active Transaction, then it will use the >>>>>> UserTransaction API to open a transaction and to commit/rollback on >>>> this >>>>>> very layer when leaving the intercepted method. Subsequently >> invoked >>>>>> @Transactional CDI beans - and even EJBs! - will just take this >> open >>>>>> transaction and work with it. >>>>>> So this works perfectly fine in cases where you only use CDI but >> also >>>>> when >>>>>> you wildly mix EJBs and CDI beans. >>>>>> I use this in production for quite a few projects. >>>>>> >>>>>> Note that the EntityManagerProducer you need to provide must use a >>>>>> container provided EntityManagerFactory, otherwise your >> EntityManager >>>>> won't >>>>>> integrate with JTA. >>>>>> A sample can be found here: >>>>>> https://github.com/struberg/lightweightEE/blob/jtacdi11/ >>>>>> backend/src/main/java/de/jaxenter/eesummit/caroline/backend/tools/ >>>>>> EntityManagerProducer.java#L40 >>>>>> >>>>>> >>>>>> hth. >>>>>> >>>>>> LieGrue, >>>>>> strub >>>>>> >>>>>>> Am 09.05.2017 um 01:50 schrieb John D. Ament < >>> [email protected] >>>>> : >>>>>>> >>>>>>> Konrad, >>>>>>> >>>>>>> When you specify globalAlternatives, you don't need to specify >>>> anything >>>>>> in >>>>>>> beans.xml >>>>>>> >>>>>>> RE which strategy to use, it'll be the one that matches your >>>>> transaction >>>>>>> mode. If you're using plain JTA just use >>>>>>> ContainerManagedTransactionStrategy. >>>>>>> >>>>>>> John >>>>>>> >>>>>>> On Mon, May 8, 2017 at 3:56 PM Instantiation Exception < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> John, >>>>>>>> >>>>>>>> I want to clarify one thing. When I use >>>>>>>> META-INF/apache-deltaspike.properties with >>>>>>>> globalAlternatives.org.apache.deltaspike.jpa.spi.transaction. >>>>>>>> TransactionStrategy=org.apache.deltaspike.jpa.impl.transaction. >>>>>>>> ContainerManagedTransactionStrategy >>>>>>>> >>>>>>>> should I use alternative in beans.xml? And which one? >>>>>>>> org.apache.deltaspike.jpa.impl.transaction. >>>>>> ContainerManagedTransactionStr >>>>>>>> ategy >>>>>>>> or >>>>>>>> org.apache.deltaspike.jpa.impl.transaction. >>>>>> BeanManagedUserTransactionStrategy >>>>>>>> >>>>>>>> Best regards, >>>>>>>> Konrad >>>>>>>> >>>>>>>> On Fri, Mar 3, 2017 at 2:57 PM, John D. Ament < >>>> [email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Ondrej, >>>>>>>>> >>>>>>>>> I agree as well. It definitely should be more turn key in this >>>>>> respect. >>>>>>>>> >>>>>>>>> John >>>>>>>>> >>>>>>>>> On Fri, Mar 3, 2017 at 8:53 AM Ondrej Mihályi < >>>>>> [email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi John, >>>>>>>>>> >>>>>>>>>> It sounds to me that DeltaSpike could be improved to make a >>>>>>>> sophisticated >>>>>>>>>> guess to infer the default value of this configuration from >> the >>>>>>>> container >>>>>>>>>> it is running in. At least for WildFly and maybe some other >>>>> containers >>>>>>>>>> where people report problems. >>>>>>>>>> >>>>>>>>>> Just an idea :) >>>>>>>>>> >>>>>>>>>> Ondrej >>>>>>>>>> >>>>>>>>>> 2017-03-03 12:05 GMT+01:00 John D. Ament < >> [email protected] >>>> : >>>>>>>>>> >>>>>>>>>>> Hi Konrad, >>>>>>>>>>> >>>>>>>>>>> What that's referring to is that you need to create a >>>>>>>>>>> META-INF/apache-deltaspike.properties and add the following >>>> line: >>>>>>>>>>> >>>>>>>>>>> globalAlternatives.org.apache.deltaspike.jpa.spi. >> transaction. >>>>>>>>>>> TransactionStrategy=org.apache.deltaspike.jpa.impl. >> transaction. >>>>>>>>>>> ContainerManagedTransactionStrategy >>>>>>>>>>> >>>>>>>>>>> I do something similar to you, and it works perfect. I'm >>> using >>>>>>>> maven >>>>>>>>> to >>>>>>>>>>> build a WAR file, so it just goes in >>>>>>>>>>> src/main/resources/META-INF/apache-deltaspike.properties >>>>>>>>>>> >>>>>>>>>>> John >>>>>>>>>>> >>>>>>>>>>> On Fri, Mar 3, 2017 at 3:38 AM Instantiation Exception < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> In my company projects we use WildFly. In the past I tried >> few >>>>>>>> times >>>>>>>>> to >>>>>>>>>>> use >>>>>>>>>>>> DeltaSpike Data, but it didn't work. I configured everything >>>>>>>>> according >>>>>>>>>> to >>>>>>>>>>>> documentation. In pure CDI scenario it worked. But when I >>>> created >>>>>>>>>>>> @Dependent @Repository and injected it to @Stateless EJB I >> got >>>>> some >>>>>>>>>>>> transaction errors when tried to call EJB methods. In >>>>>>>> documentation I >>>>>>>>>> see >>>>>>>>>>>> warning: >>>>>>>>>>>> >>>>>>>>>>>> Some containers do not support >> BeanManagedUserTransactionStra >>>> tegy! >>>>>>>>> As >>>>>>>>>>> JTA >>>>>>>>>>>>> has still some portability issues even in Java EE 7, it >> might >>>> be >>>>>>>>>>> required >>>>>>>>>>>>> that you implement your own TransactionStrategy. We will >>> think >>>>>>>>> about >>>>>>>>>>>>> providing an acceptable solution for this. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Is it about WildFly? Is WildFly supported? >>>>>>>>>>>> >>>>>>>>>>>> Best regards, >>>>>>>>>>>> Konrad >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >>
