Charlie, What I want to achieve is the following over the same EM:
1. Start Transaction1 on method_1 2. Start Transaction2 on method_1.method_2 3. Commit Transaction2 on method_1.method_2 4. Commit Transaction1 on method_1 What do I have to do? Thanks in advance. I find the use case trivial but very hard to achieve. Regards, Esteve On Thu, Nov 13, 2014 at 5:32 PM, Charlie Mordant <[email protected]> wrote: > Hi Esteve, > > Your question is not easy to understand, as commiting the transaction at > the end of all @Transactional annotated methods is what your code is > expected to do. > > Here's how this @Transactional annotation works: > > * To start a new transaction, annotate a method with @Transactional: the > transaction will start at the call. > * To continue the transaction between multiple method calls, annotate all > the methods you want to be part of the transaction with @Transactional. > * To commit a transaction, make a call on a method which is not annotated. > * To rollback, throw an exception (that is not catched in the chain if > think). > > Regards, > Charlie > > > 2014-11-13 16:17 GMT+01:00 Esteve Avilés <[email protected]>: > > > Gerhard, > > > > Thanks for the reply. I don't understand from your reply and > documentation > > if I would be able to achieve what I told you in this particular > > environment. > > > > Thanks in advance. > > > > Esteve > > > > On Thu, Nov 13, 2014 at 9:26 AM, Gerhard Petracek < > > [email protected]> wrote: > > > > > hi esteve, > > > > > > if you have one persistence-unit, the interceptor-logic executed for > the > > > outermost transactional method will #begin and finally > #commit/#rollback > > > the transaction for the UserTransaction provided by the container (see > > > BeanManagedUserTransactionStrategy). > > > > > > regards, > > > gerhard > > > > > > http://www.irian.at > > > > > > Your JavaEE powerhouse - > > > JavaEE Consulting, Development and > > > Courses in English and German > > > > > > Professional Support for Apache > > > MyFaces, DeltaSpike and OpenWebBeans > > > > > > > > > > > > 2014-11-12 22:17 GMT+01:00 Esteve Avilés <[email protected]>: > > > > > > > Hi all, > > > > > > > > I am using Deltaspike 1.0.3 in a JBoss EAP 6.3 server. We want to use > > > > @Transactional annotation to delimiter a transactions. We use JTA and > > we > > > > have set the beans alternative and created extended entity manager. > > > > > > > > After setting @Transactional as follows (we first call > > > > createAllValsForAPromocioValDescompte): > > > > /** > > > > * Facade method for createAllValsForAPromocioValDescompte. > > > > * It first gets the PromocioValDescompte by its Id and then calls > > > > createAllValsForAPromocioValDescompte > > > > * @param promocioValDescompteId > > > > * @throws BusinessException > > > > */ > > > > public void createAllValsForAPromocioValDescompte(Long > > > > promocioValDescompteId) throws BusinessException { > > > > PromocioValDescompte promocio = retrieveById(promocioValDescompteId); > > > > if(promocio != null) { > > > > updateStatusToInProgress(promocio); > > > > this.createAllValsForAPromocioValDescompte(promocio); > > > > } else { > > > > log.error("PromocioValDescompte no trobat amb Id {} per proces > creacio > > > > vals", promocioValDescompteId); > > > > } > > > > } > > > > @Transactional(readOnly = false) > > > > public void updateStatusToInProgress(PromocioValDescompte > > > > promocioValDescompte) throws BusinessException { > > > > > > > > > > > > > > promocioValDescompte.setEstatProcesGeneracio(EstatPromocioValDescompte.EN_EXECUCIO); > > > > promocioValDescompteRepository.saveAndFlush(promocioValDescompte); > > > > } > > > > /** > > > > * Generates all vouchers that will be contained in the > > > > EmissioVoucherPredefinit > > > > * @param promocioValDescompte > > > > * @param emissorVoucher > > > > * @param tipusVoucher > > > > * @throws BusinessException > > > > */ > > > > @Transactional > > > > public void > createAllValsForAPromocioValDescompte(PromocioValDescompte > > > > promocioValDescompte) throws BusinessException { > > > > > > > > log.info("Inici creacio de {} vals per a l'emissio {} i Id {}", > > > > promocioValDescompte.getQuantitatDemanada(), > > > promocioValDescompte.getNom(), > > > > promocioValDescompte.getId()); > > > > promocioValDescompte.setQuantitatGenerada(0); > > > > ..... > > > > > > > > We see all methods executed in a unique transaction, and database is > > only > > > > updated at the end. > > > > > > > > Do we need to set something else? Before that, in a JEE5 env, we were > > > > using @Transactional(TransactionPropagationType.REQUIRED) > > > > and @Transactional(TransactionPropagationType.NEVER) to achieve the > > same > > > > objective. > > > > > > > > Can anyone help us? > > > > > > > > Thanks in advance. > > > > > > > > Regards, > > > > > > > > -- > > > > Esteve Avilés > > > > > > > > > > > > > > > -- > > Esteve Avilés > > > > > > -- > Charlie Mordant > > Full OSGI/EE stack made with Karaf: > https://github.com/OsgiliathEnterprise/net.osgiliath.parent > -- Esteve Avilés
