Java Message Service

Java Message Service (JMS) ir Java ziņojumapmaiņas starpprogrammatūras lietojumprogrammas saskarne (API) ziņojumu sūtīšanai starp diviem vai vairākiem klientiem. JMS API definē interfeisus un saistīto semantiku, kas ļauj Java rakstītām programmām sazināties ar citām ziņojumapamaiņas realizācijām.

JMS ir Java Platform, Enterprise Edition (Java EE) daļa. Sākotnēji tā tika definēta ar Sun Microsystems izstrādātu specifikāciju, bet tagad projektu vada Java Community process.

Java Message Service nodrošina saziņu starp dažādiem izplatītas lietojumprogrammas komponentiem:
 asinhroni — saņēmēja klientam nav jāsaņem ziņojumi tajā pašā laikā, kad sūtītājs klients tos nosūta. Nosūtošajam klientam nav jāgaida, kad saņēmējs nosūtīs apstiprinājumu, tas var turpināt citus uzdevumus
 vaļīgu sasaisti — nosūtītājs un saņēmējs nav cieši saistīti, ziņojumi tiek nosūtīti ar starpnieka palīdzību
 uzticami — JMS nodrošina, ka ziņojums tiek piegādāts vienreiz un tikai vienu reizi. Zemāka uzticamības pakāpe ir pieejama lietojumprogrammām, kas var atļauties palaist garām ziņojumus vai saņemt ziņojumu dublikātus.

Modeļi 
JMS API atbalsta divus atšķirīgus ziņojumapamaiņas modeļus:
 No punkta uz punktu (ziņojumu rinda)
 publicēšana — abonēšana

No punkta uz punktu 
No punkta uz punktu sistēmā ziņojumi tiek sūtīti atsevišķiem saņēmējiem, kas uztur ienākošo ziņojumu rindas. Šī ziņojumapmaiņas tipa pamatā ir ziņojumu rindu, sūtītāju (ražotāju) un saņēmēju (patērētāju) jēdziens. Katrs ziņojums tiek adresēts konkrētai rindai, un saņēmēji klienti izgūst ziņojumus no rindām, kas izveidotas, lai turētu savus ziņojumus. Lai gan jebkurš skaits ražotāju var nosūtīt ziņojumus uz rindu, katrs ziņojums ir garantēti jāpiegādā, un tikai vienam saņēmējam tas ir jāsaņem. Rindas uzglabā visus ziņojumus, kas tiem nosūtīti, līdz ziņojumi tiek patērēti vai kamēr beidzas to derīgums. Ja neviens patērētājs nav reģistrēts, lai uzņemtu ziņojumus, rinda tos notur līdz brīdim, kad patērētājs reģistrējas, lai tos patērētu. Sistēma negarantē, ka ziņojumi tiks saņemti tādā secībā, kādā tie tika nosūtīti.

Publicēšana — abonēšana 
"Publicēšana — abonēšana" modelis atbalsta ziņojumu publicēšanu noteiktā ziņojuma "tēmā". Abonenti var reģistrēt vēlmi saņemt ziņojumus, kas publicēti konkrētajā ziņojumu tēmā. Šajā modelī ne izdevējs, ne abonents nezina neko cits par citu.

Pastāv laika atkarība starp izdevējiem un abonentiem. Izdevējam ir jāizveido ziņu tēma klientiem, kas vēlas abonēt. Abonentam ir pastāvīgi jāpaliek aktīvam, lai saņemtu ziņas, ja vien tas nav izveidojis ilglaicīgu abonementu. Šādā gadījumā ziņojumi, kas tiek publicēti, kamēr abonents nav savienots, tiek pārsūtīti ikreiz, kad tiek veikta atkārtota savienošana. Atkarībā no tā, cik saņēmēji ir abonējuši tēmu, ziņojumu var saņemt vairāki patērētāji vai nesaņemt neviens.

JMS nodrošina veidu, kā datu sniegšanā nodalīt lietojumslāni no transporta slāņa. Vienas un tās pašas Java klases var izmantot, lai sazinātos ar dažādiem JMS nodrošinātājiem, izmantojot vajadzīgā nodrošinātāja Java Naming and Directory Interface (JNDI) informāciju. Klases vispirms izmanto savienojuma fabriku, lai izveidotu savienojumu ar rindu vai tēmu, un pēc tam izmanto aizpildīšanu un ziņojumu nosūtīšanu vai publicēšanu. Saņēmēja pusē pēc tam klienti saņem vai abonē ziņojumus.

URI shēma 
Java Message Service URI shēmu RFC 6167 definē kā jms:.

Ārējās saites 
 Package javax.jms Oracle
 JSR 343: Java Message Service 2.0

Java Platform, Enterprise Edition
Ziņojumapmaiņas starpprogrammatūra