JMS

Több hozzászólásomban is említettem már a JMS fogalmat, de bővebben még nem írtam róla. No, épp itt az ideje.

A Java Message Service (JMS) egy Sun által fejlesztett API, ami már bekerült a J2EE 1.3-as verzióba is, ami azt jelenti, hogy az ezt, vagy ennél magasabb J2EE verziót támogató alkalmazásszerverek már megvalósítják. A JMS tulajdonképpen megbízható, flexibilis szolgáltatást nyújt kritikus üzenetek átvitelére. Eddig is léteztek üzenet átvívő szoftverek (szépen mondva üzenetorientált middleware-ek), de a JMS API megjelenése biztosítja a hordozhatóságot, illetve azt a biztonságot, hogy a köztes szoftver cseréje esetén nem kell új API-t megtanulni. A további kapcsolódó újdonságok a J2EE 1.3 platform esetében az üzenet-vezérelt bean-ek, illetve a Java Transaction API (JTA), ami lehetővé teszi, hogy ne csak az adatbázis műveleteket lehessen egy tranzakción belül kezelni, hanem akár az üzeneteket is.

Az üzenetküldés lehetővé teszi két pont közötti kommunikációt, üzenet továbbítást. A JMS tulajdonképpen az üzenetsorakoztatást feltételezi, azaz a komponensek lazán kapcsoltak lehetnek, nem muszáj az üzenet küldésekor akár a közvetítő közegnek (hálózat), akár a célpontnak elérhetőnek lennie. Az üzenet csak akkor továbbítódik, ha a kapcsolat helyreáll. Ezenkívül a JMS biztosítja az aszinkron üzenetküldést, azaz a beérkező üzenetet nem kell azonnal feldolgozni, hanem akár a cél állomásnál várakozhat. Garantálja a megbízhatóságot, ami azt jelenti, hogy az üzenet a feladóhoz egyszer, és csakis egyszer érkezik meg, és biztos, hogy megérkezik.

A JMS architektúra következő elemekből épül fel: JMS szolgáltató (a JMS-t megvalósító komponens), JMS kliensek (melyek igénybe veszik a szolgáltatást), az üzenetek (tulajdonképpeni bájt folyamok), az adminisztrált objektumok (destination és connection factories), illetve a natív kliensek (a JMS szolgáltató szolgáltatásait natív API-n keresztül veszik igénybe).

Két felhasználási mód lehetséges, egyik a point-to-point, ami két pont közötti üzenetküldést valósítja meg, illetve a publish-and-subscribe, ahol topic-ok vannak, melyekre az üzenetküldők küldik az üzeneteket, és csak azon kliensek kapják meg, melyek az adott topic-ra feliratkoztak.

Az J2EE 1.3 szabványt támogató alkalmazásszerverek mellett rengeteg különálló JMS implementáció is van.