short addition:

we could provide e.g. #beforeBegin and #afterProceed -> with that you just
need to provide a TransactionStrategy which
extends BeanManagedUserTransactionStrategy.
-> resolve the TransactionManager and use the std. api to suspend/resume
the transaction based on meta-data provided by the InvocationContext.

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-13 21:45 GMT+01:00 Gerhard Petracek <[email protected]>:

> hi esteve,
>
> suspending a transaction is just supported by jta. since
> @org.apache.deltaspike.jpa.api.transaction.Transactional shouldn't cover
> 1:1 what ejbs provide already, it's just not supported. -> if you need it,
> you can handle the suspend/resume manually (or via an own
> TransactionStrategy based on BeanManagedUserTransactionStrategy) or you
> just use ejbs instead.
>
> 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-13 20:41 GMT+01:00 Esteve Avilés <[email protected]>:
>
>> 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
>>
>
>

Reply via email to