If you complete purchaseFirstLeg() and purcharseSecondLeg(), and then decide
to give up on the whole thing you'll need to execute the compensating
transactions - cancelFirstLeg() and cancelSecondLeg().  purchaseThirdLeg()
will have rolled itself back.

Cheers
Jay Walters

-----Original Message-----
From: Robert Nicholson [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, March 07, 2001 2:30 PM
To: [EMAIL PROTECTED]
Subject: Re: Trip planning problem... transactoin attributes?


This is a little vague.

Given that the scope of the transaction will be during the method call how
can you undo the effects in their own methods?

I have

purchaseFirstLeg()
purchaseSecondLeg()
purchaseThirdLeg()

returning a system exception from any of these if they are TX_REQUIRES_NEW
will rollback it's own transction so what would these "cancel" methods do?

> -----Original Message-----
> From: A mailing list for Enterprise JavaBeans development
> [mailto:[EMAIL PROTECTED]]On Behalf Of Victor Langelo
> Sent: Wednesday, March 07, 2001 10:07 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Trip planning problem... transactoin attributes?
>
>
> Robert,
>
> Since EJB supports only flat transactions, it will not handle
> this very easily.
> You would need nested transactions to support rolling back a
> portion of work
> without cancelling the entire operation.
>
> You can achieve the same effect by creating three additional
> methods which would
> undo the effect of the purchase methods.
>
> cancelFirstLeg();
> cancelSecondLeg();
> cancelThirdLeg();
>
> You then have two options. Put planTrip in a transaction or put
> each leg in it's
> own transaction. How you handle the transactions depends on what
> interaction is
> desired on other processes.
>
> --Victor
>
> Robert Nicholson wrote:
>
> > Suppose you have to plan a world trip (Ed Romans Trip Planning
> example) and
> > there are three legs and you want to be able to retry each leg
> if it fails
> > and if it continues to fail you then want to roll back the entire
> > transaction.
> >
> > How do you structure the methods and their transaction
> attributes to support
> > this?
> >
> > The key here is that just because you fail to plan a leg the first time
> > doesn't mean that you will roll back everything. However, if
> you continue to
> > fail you will want to roll back everything that took place before.
> >
> > Can somebody describe the transaction attributes if you have
> >
> > planTrip()
> >         purchaseFirstLeg()
> >         purchaseSecondLeg()
> >         purchaseThirdLeg()
> >
> > What would the transaction attributes have to be for this to work?
> >
> > What I don't understand is if you need to be able to both
> rollback just an
> > individual leg and also have the flexibility to roll back the
> planTrip all
> > together. How can you do this when you use TX_REQUIRES_NEW for the inner
> > legs and choose not to keep conversational state that indicates
> failure with
> > any one inner level?
>
> ==================================================================
> =========
> To unsubscribe, send email to [EMAIL PROTECTED] and include
> in the body
> of the message "signoff EJB-INTEREST".  For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
>

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to