Konrad, So Mark's correct, CMT is basically no-op, because it relies on an outer transaction to have been created. If you're marking your entry points as @Transactional then you're good to go. If you're using DeltaSpike's @Transactional then you'll need to use BMTStrategy.
John On Wed, May 10, 2017 at 4:02 PM Instantiation Exception < [email protected]> wrote: > javax.transaction.Transactional > > On Wed, May 10, 2017 at 9:56 PM, Mark Struberg <[email protected]> > wrote: > > > 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 > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > >> > > > > >
