JMS

Java Message Service (JMS) - standartizuota Java API sąsaja, skirta komunikacijai pranešimais realizuoti tarp dviejų ar daugiau programų sistemų ar jos dalių. JMS API leidžia programų sistemoms sukurti, išsiųsti, priimti ir perskaityti informaciją pranešimų pavidalu. JMS specifikacija (JSR-914) yra Java Platform, Enterprise Edition dalis.

Komunikacijos pranešimais (Messaging) principai 
Kaip ir kiekvienoje komunikacijoje, komunikacijoje pranešimais, dalyvauja dvi ar daugiau programų sistemos ar jų dalys vadinamos klientinėmis programomis. Komunikacija pranešimais (messaging) - tai silpnai surišanti klientines programas, paskirstyta (angl. distributed), asinchroninė komunikacija. Čia žodis komunikacija yra suprantamas kaip apsikeitimas pranešimais. Sąsaja tarp klientų yra susilpninama specialia tarpine programų sistema, kuri dažnai vadinama pranešimų eile.

Jei klientinė programa siuntėjas nori perduoti pranešimą klientinei programai gavėjui, tai siuntėjas pranešimą padeda į eilę. Gavėjas tikrina ar yra eilėje naujų pranešimų. Jei eilėje yra naujas pranešimas, tai jis yra nuskaitomas ir apdorojamas. Nuskaityta žinutė iš eilės yra ištrinama.

Versijos 
 JMS 1.0.2b (2001 Birželio 25 d.)
 JMS 1.1 (2002 Kovo 18 d.)

JMS komponentai 
Žemiau yra pateikiami JMS komponentai:
JMS teikėjas (provider)
 Komunikacijos pranešimais sistema realizuojanti JMS API sąsają, suteikiančią valdymo ir kontrolės galimybes. JMS yra J2EE (nuo 1.3 versijos) dalis.
JMS klientas (client)
 Programų sistema ar jos sudedamoji dalis, kuri sukuria ir siunčia arba priima ir apdoroja pranešimus. JMS klientas, kuris sukuria ir siunčia pranešimus vadinamas siuntėju (producer), o JMS klientas, kuris nuskaito ir apdoroja pranešimą - gavėju (consumer).
JMS pranešimas (message)
 Tai objektas, kurio pagalba yra perduodama informacija tarp JMS klientų.
JMS eilė (queue)
 Tai loginė struktūra, kur yra saugomi išsiųsti ir dar nenuskaityti pranešimai. Pranešimai yra pristatomi ta pačia tvarka, kaip ir buvo išsiųsti. Kai pranešimas yra perskaitomas, jis yra pašalinamas iš eilės
JMS tema (topic)
 Tai loginė struktūra, kuri leidžia realizuoti pranešimų publikavimą ir jų pristatymą visiems prenumeratoriams

Komunikavimo modeliai 
JMS API sąsaja palaiko du komunikavimo modelius:
 vienas su vienu (point - to - point),
 publikuoti/prenumeruoti (publish/subscribe).

Modelis vienas su vienu yra pagrįstas JMS eilės, pranešimo, siuntėjo ir gavėjo sąvokomis. Kiekvienas pranešimas yra priskiriamas tam tikrai eilei. JMS klientas siuntėjas, norėdamas perduoti pranešimą, jį padeda į kliento gavėjo pranešimų aptarnavimui sukurtą eilę, iš kurios klientas gavėjas tuos pranešimus nuskaito. Eilėje yra saugomos visos žinutės, kurios buvo išsiųstos, bet nenuskaitytos ir kurių galiojimo terminas yra nepasibaigęs. Už eilių valdymą yra atsakingas JMS teikėjas.

Vienas su vienu komunikavimo modelis pasižymi šiomis savybėmis:
 Kiekvienas pranešimas turi tik vieną gavėją.
 Klientas gavėjas neprivalo būti aktyvus (veikiantis), kai klientas siuntėjas perduoda pranešimą ir atvirkščiai, klientas siuntėjas neprivalo būti aktyvus, kai klientas gavėjas nuskaito žinutes.
 Klientas gavėjas patvirtina sėkmingą žinutės apdorojimą.

Modelis publikuoti/prenumeruoti yra pagrįstas JMS temos, pranešimo, siuntėjo ir gavėjo sąvokomis. Naudojant šį apsikeitimo pranešimais modelį, visi siuntėjo pranešimai yra adresuojami tam tikrai temai. Gavėjas turi užsiprenumertuoti (užsiregistruoti sistemoje) tam tikros temos pranešimus, kad juos gautų. Nei siuntėjas nei gavėjas nieko nežino vienas apie kitą. Siuntėjo pranešimas temoje yra saugomas tol, kol visi tuo momentu užsiprenumeravę gavėjai jo negauna. Publikuoti/prenumeruoti bendravimo modelį būtų galima palyginti su anonimine pranešimų lenta. Už temų valdymą yra atsakingas JMS teikėjas.

Publikuoti/prenumeruoti komunikavimo modelis pasižymi šiomis savybėmis:
 Kiekvienas pranešimas gali turėti keletą gavėjų,
 Siuntėjas ir gavėjas yra, laiko atžvilgiu, priklausomi vienas nuo kito. Gavėjas gali gauti tik tuos pranešimus, kurie buvo publikuoti vėliau nei gavėjas užsiprenumeravo temos pranešimus, bei prenumerata turi būti aktyvi, kad gavėjas galėtų gauti publikuojamus pranešimus.

API sąsaja 

JMS API yra aprašyta Java pakete javax.jms. Žemiau yra pateikta keletą pagrindinių sąsajų:

 ConnectinoFactory
 Connection
 Destination
 MessageConsumer
 MessageProducer
 Message
 Session

JMS teikėjo realizacijos 

Norint naudoti JMS yra būtina turėti JMS teikėja, kuris valdytų sesijas, eiles, temas ir pranešimus. Yra keletas atvirojo kodo ir komercinių JMS teikėjų realizacijų.

Atvirojo kodo realizacijos:
 Apache ActiveMQ
 OpenJMS
 JBoss Messaging
 JORAM 
 Open Message Queue

Komercinės realizacijos:
 IMB Webpshere MQ
 TIBCO Enterprise Message Service 
 Progress Software SonicMQ

Nuorodos 

J2EE