Az Üzenetvezérelt beanek - Message Driven Beans (MDB)[1] olyan vállalati beanek, amelynek a futását üzenetek váltják ki események helyett. Az üzenetvezérelt beanek többek közt arra használatosak, hogy magas szintű, könnyen használható absztrakciót biztosítsanak az alacsonyabb szintű JMS specifikációnak. Fel tudnak iratkozni JMS üzenetekre vagy üzenet témákra, ami jellemzően az activationConfig attribútum a @MessageDriven annotációban. Az EJB hozta magával az MDB-t, hogy lehetővé tegyék az eseményvezérelt feldolgozást. A munkamenet beanek (Session Beans) és a üzenetvezérelt beanek között az alapvető különbség az, hogy a klienseknek nincs az interfészeken keresztül hozzáférésük az üzenetvezérelt beanekhez. Csupán várakoznak egy bejövő üzenetre, pl.: egy JMS üzenetre és azt automatikusan feldolgozzák. Csupán JMS támogatásra van szükség a Java EE specifikáció alapján,[2] de az MDB-k képesek más üzenetkezelő protokollokat is támogatni.[3][4] Ezek a protokollok lehetnek aszinkronok vagy akár szinkronok is. Amióta a munkamenet beanek is lehetnek szinkronok vagy aszinkronok, a legfőbb különbség a munkamenet és az üzenetvezérelt beanek közt nem szinkronizáltság, hanem az objektum orientált függvény hívás és üzenet kezelés.

Az üzenetvezérelt beanek több szempontból is hasonlítanak az állapotmentes munkamenet beanekre:

  • a MDB példányok nem tárolnak adatokat vagy állapotokat a kliensek számára
  • a MDB példányok azonosak, ezzel lehetővé téve a konténer számára, hogy az üzeneteket bármelyik példányhoz hozzárendeljék
  • egy MDB képes több különböző klienstől érkező üzenetek feldolgozására

Példák szerkesztés

  • Egy konfiguráció frissítés több módon történhet egy JMS üzenet küldése révén egy 'üzenet témával' és ez lekezelhető egy MDB segítségével, ami figyeli az előző 'üzenet témát'. (Ebben az eseten az üzenet megközelítést használtuk, mivel a küldőnek nem kell, hogy tudomása legyen a vevők számáról, azok helyéről vagy pontos típusukról.)
  • Egy munka beküldése egy klaszternek történhet egy, az 'üzenet sornak' küldött JMS üzeneten keresztül. Ennek az üzenetnek a feldolgozása is történhet egy MDB-vel, de ebben az esetben az egy üzenet sort fog figyelni. (Az üzenet paradigma és a sor került felhasználásra, mivel a küldőnek nem kell foglalkoznia, hogy melyik dolgozó fogja e munkát elvégezni, de azt biztosítani kell, hogy egy feladat csak egyszer kerül végrehajtásra.)
  • A Quartz scheduler időzítőtől származó események feldolgozása is történhet üzenetvezérelt babok útján. Amikor a Quartz trigger lejár, az MDB automatikussan meghívódik. Mivel a Java EE alapértelmezésben nem ismeri a Quartz-ot, a JCA erőforrás adapterre lesz szükség és az MDB ezekre mutató hivatkozásokkal lenne annotálva.[5]

Jegyzetek szerkesztés