1. MessageDrivenContext
En meddelandedriven böna kommunicerar med behållaren genom klassen MessageDrivenContext. En referens till en instans av MessageDrivenContext tilldelas bönan genom att behållaren anropar setMessageDrivenContext() då bönan initieras. MessageDrivenContext ärver av EJBContext men tillför inte några egna metoder, se bilden:
2. Tillåtna anrop på MessageDrivenContext och övriga externa resurser
Metoderna i MessageDrivenContext kan inte anropas var som helst i en meddelandedriven böna. Eftersom en meddelandedriven böna inte har någon klient och inte heller har något Home eller EJBObject-gränssnitt finns det inte så många metoder i MessageDrivenContext som är relevanta att använda. Endast följande anrop är tillåtna i callbackmetoderna mot metoderna i MessageDrivenContext och övriga externa resurser:
MessageDrivenContext och externa resurser | | Constructor | | setMessageDrivenContext() | | ejbCreate() eller ejbRemove() | | onMessage() | |
Tillgång till JNDI | | Nej | | Ja | | Ja | | Ja |
Tillgång till andra bönor | | Nej | | Nej | | Nej | | Ja |
Tillgång till resurshanterare | | Nej | | Nej | | Nej | | Ja |
getEJBHome() | | Nej | | Nej | | Nej | | Nej |
getEJBLocalHome() | | Nej | | Nej | | Nej | | Nej |
getCallerPrincipal() | | Nej | | Nej | | Nej | | Nej |
isCallerInRole() | | Nej | | Nej | | Nej | | Nej |
getUserTransaction() [BMT] | | Nej | | Nej | | Ja | | Ja |
getRollbackOnly() [CMT] | | Nej | | Nej | | Nej | | Ja |
setRollbackOnly() [CMT] | | Nej | | Nej | | Nej | | Ja |
Om du gör ett anrop som inte är tillåtet kommer undantaget java.lang.IllegalStateException att kastas. Märk följande:
- En meddelandedriven böna kan aldrig få någon information om användaren eftersom det inte är någon användare som anropar bönan.
- En CMT meddelandedriven böna kan inte anropa "set/getRollbackOnly()" i metoderna "ejbCreate()" och "ejbRemove()" eftersom ingen transaktion har startat ännu.