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