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

Reply via email to