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 > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>> > >>>>>> > >>>>> > >>>> > >>> > >> > >
