setRollbackOnly() lives in TWO interfaces

image with no caption

Note

Be SURE you know the rules for BOTH of the setRollbackOnly() methods!

Be ready for the exam to test you on the use of setRollbackOnly() for both BMT and CMT beans.

EJBContext.setRollbackOnly()

UserTransaction.setRollbackOnly()

Remember, no single bean can ever use BOTH of these!

CMT beans can use only the EJBContext.setRollbackOnly()

BMT beans can use only the UserTransaction.setRollbackOnly()

Expect to see code examples where you’ll need to figure out if the bean is BMT or CMT by looking at the code. And it won’t be as obvious as a call to getUserTransaction(). If you see a call to EJBContext.setRollbackOnly(), for example, you know that this must be a CMT bean. So if that same bean later starts a UserTransaction, you know the code is illegal.

The methods in the UserTransaction interface are for BMT beans only; CMT beans can’t use anything in UserTransaction.

The EJBContext interface, on the other hand, is for both BMT and CMT beans, except for the two transaction methods.

The setRollbackOnly() and getRollbackOnly() methods in EJBContext are off-limits to BMT beans.

Bottom line: BMT beans call setRollbackOnly() on a UserTransaction; CMT beans call setRollbackOnly() on an EJBContext.

Note

A bean that calls setRollbackOnly() MUST be in a transaction!

You can call setRollbackOnly() from a BMT bean ONLY if you’re inside a transaction. In other words, only ...

Get Head First EJB now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.