This week's giveaway is in the EJB and other Java EE Technologies forum. We're giving away four copies of EJB 3 in Action and have Debu Panda, Reza Rahman, Ryan Cuprak, and Michael Remijan on-line! See this thread for details.
In my previous post i forgot to post the method flow for this question.I got the answer for the my second question in my previous post from the spec.
1. Select all combinations of transaction attributes that would make this scenario possible (without exceptions being thrown).
Method A (transaction A) | +- Method B (no transaction) | | | + Method C (transaction B) | +- Method D (transaction A) | +- Method E (transaction C) | + Method F (no transaction)
A. B-Supports, C-Required, D-Supports, E-Required, F-NotSupported B. B-NotSupported, C-Required, D-Mandatory, E-RequiresNew, F-NotSupported C. B-NotSupported, C-RequiresNew, D-Required, E-RequiresNew, F-Never D. B-Never, C-Required, D-Required, E-Mandatory, F-Never E. B-NotSupported, C-RequiresNew, D-Supports, E-RequiresNew, F-NotSupported F. B-NotSupported, C-Mandatory, D-Supports, E-RequiresNew, F-NotSupported
ans : b,e
My doubt in this question is that how come option B is right.
Below is my justification for option B not to be a right choice.
Here is this case since method B has trans attribute as 'not supported',it will suspend the transaction(A) comming from the Method A and executes the method B without a transaction. After method B completes, it will resume the suspened transaction(A) and calls method C with that transaction. Here since method C has the trans attribute as required, it will continue to make use of the resumed transaction(A) rather than starting a new transaction(B).But the requirement is that method C should start a new transaction B.
your assumption is correct.B is a wrong choice. C-Required is not possible, it should be RequiresNew.
Joined: Aug 02, 2002
Hi, Thanks for your reply.I think the answer given was correct.
Pls read the following para which i got from spec for notSupported.
If a client calls with a transaction context, the container suspends the association of the transaction context with the current thread before invoking the enterprise bean�s business method. The container resumes the suspended association when the business method has completed. The suspended transaction context of the client is not passed to the resource managers or other enterprise Bean objects that are invoked from the business method. If the business method invokes other enterprise beans, the Container passes no transaction context with the invocation.
B and E right. See options B, the answer saying method-C is required. this starts a new transaction since method C is coming from Method B which is no transaction and 'required' guarantees creating transaction B.