Table 12.1. Handling of exceptions thrown by a business method of a bean with container-managed transaction demarcation (CMT)
Method condition | Method exception | Container's action | Client's view |
---|---|---|---|
Bean method runs in the context of the caller's transaction. This case may happen with Required, Mandatory, and Supports attributes. | APPLICATION exception | re-throw APPLICATION exception | Receives APPLICATION exception. Can attempt to continue computation in the transaction, and eventually commit the transaction (the commit would fail if the instance called setRollbackOnly()). |
SYSTEM exception |
| Receives javax.transaction. TransactionRolledbackException or javax.ejb. TransactionRolledbackLocalException Continuing transaction is fruitless. | |
Bean method runs in the context of a transaction that the Container started immediately before dispatching the business method. This case may happen with Required and RequiresNew attributes. | APPLICATION exception | If the instance called setRollbackOnly(), then rollback the transaction, and re-throw APPLICATION exception. Otherwise, attempt to COMMIT the transaction, and then re-throw APPLICATION exception. | Receives APPLICATION exception. If the client executes in a transaction, the client's transaction is NOT marked for rollback, and client can continue its work. |
SYSTEM exception |
| Receives RemoteException or EJBException. If the client executes in a transaction, the client's transaction MAY or MAY NOT be marked for rollback. | |
Bean method runs with an UNSPECIFIED transaction context. This case may happen with the NotSupported, Never, and Supports attributes. | APPLICATION exception | re-throw APPLICATION exception | Receives APPLICATION exception. If the client executes in a transaction, the client's transaction is NOT marked for rollback, and client can continue its work. |
SYSTEM exception |
| Receives RemoteException or EJBException. If the client executes in a transaction, the client's transaction MAY or MAY NOT be marked for rollback. |
Table 12.2. Handling of exceptions thrown by a business method of a session with bean-managed transaction demarcation (BMT)
Bean method condition | Bean method exception | Container's action | Client receives |
---|---|---|---|
Bean is STATEFUL or STATLESS Session. | APPLICATION exception | re-throw APPLICATION exception | Receives APPLICATION exception. |
SYSTEM exception |
| Receives RemoteException or EJBException. |
Table 12.3. Handling of exceptions thrown by a method of a message-driven bean (MDB) with container-managed transaction demarcation (CMT).
Method condition | Method exception | Container's action |
---|---|---|
Bean method runs in the context of a transaction that the Container started immediately before dispatching the method. This case happens with Required attribute. | SYSTEM exception |
|
Bean method runs with an UNSPECIFIED transaction context. This case happens with the NotSupported attribute. | SYSTEM exception |
|
Table 12.4. Handling of exceptions thrown by a method of a message-driven bean (MDB) with bean-managed transaction demarcation (BMT).
Bean method condition | Bean method exception | Container's action |
---|---|---|
Bean is message-driven bean (MDB) | SYSTEM exception |
|
If exception happens in callback method (EntityBean.ejbActivate(), EntityBean.ejbLoad(), EntityBean.ejbPassivate(), EntityBean.ejbStore(), EntityBean.setEntityContext(EntityContext), EntityBean.unsetEntityContext(), SessionBean.ejbActivate(), SessionBean.ejbPassivate(), SessionBean.setSessionContext(SessionContext), MessageDrivenBean.setMessageDrivenContext(MessageDrivenContext), SessionSynchronization.afterBegin(), SessionSynchronization.beforeCompletion(), and SessionSynchronization.afterCompletion(boolean)) the Container must handle all exception as follows:
LOG the exception or error to bring the problem to the attention of the System Administrator.
If the instance is in a transaction, mark the transaction for ROLLBACK.
DISCARD the instance. 0
If the exception or error happened during the processing of a client invoked method, throw the java.rmi.RemoteException to the client if the client is a REMOTE client or throw the javax.ejb.EJBException to the client if the client is a LOCAL client. If the instance executed IN the client's transaction, the Container should throw the javax.transaction.TransactionRolledbackException to a REMOTE client or the javax.ejb.TransactionRolledbackLocalException to a LOCAL client, because it provides more information to the client. (The client knows that it is fruitless to continue the transaction.)
If a client makes a call to a SESSION object that has been REMOVED, the Container should throw the java.rmi.NoSuchObjectException (which is a subclass of java.rmi.RemoteException) to a REMOTE client
, or the javax.ejb.NoSuchObjectLocalException to a local client.