Java Messaging Service (JMS)

Samankaltaiset tiedostot
Java Message Service. Projekti 1C Rinnakkaisohjelmointi Syksy 2008, periodi Ismo Lehtonen Ville Kesola Ilkka Pullinen

JMS RIO PR1. TKTL s2008. Tekijät: Aki Valkama Lauri Savolainen Niklas Jahnsson

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Palveluperustaiset arkkitehtuurityylit

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

17. Javan omat luokat 17.1

Visma Software Oy

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

5. HelloWorld-ohjelma 5.1

in condition monitoring

Visma Nova Webservice Versio 1.1 /

PUSH palvelut mobiilikehityksessä: Android ja Windows phone 7. Pauli Kettunen

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

HOJ J2EE & EJB & SOAP &...

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

7 Viestipohjaisten yritysjärjestelmien suunnittelumallit

12. Näppäimistöltä lukeminen 12.1

A TIETORAKENTEET JA ALGORITMIT

OSI ja Protokollapino

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

2. Olio-ohjelmoinnin perusteita 2.1

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro

17. Javan omat luokat 17.1

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Helia Ohjelmointitaito Tuomas Kaipainen Mermit Business Applications Oy Mermit Business Applications

Tietokannat II -kurssin harjoitustyö

Delegaatit ja tapahtumakäsittelijät

Tiedonsiirto- ja rajapintastandardit

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

7/20: Paketti kasassa ensimmäistä kertaa

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

13/20: Kierrätys kannattaa koodaamisessakin

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Rajapinta (interface)

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Tehtävä 2: Tietoliikenneprotokolla

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

Olio-ohjelmointi Javalla

5. HelloWorld-ohjelma 5.1

Internet Protocol version 6. IPv6

Mikä yhteyssuhde on?

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Integrointi. Ohjelmistotekniikka kevät 2003

T Henkilökohtainen harjoitus: FASTAXON

14. Poikkeukset 14.1

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

JAVA-OHJELMOINTI 3 op A274615

Alkuraportti. LAPPEENRANNAN TEKNILLINEN YLIOPISTO TIETOJENKÄSITTELYN LAITOS Ti Kandidaatintyö ja seminaari

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

UML:n yleiskatsaus. UML:n osat:

2. Olio-ohjelmoinnin perusteita 2.1

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Järjestelmäarkkitehtuuri (TK081702)

16. Javan omat luokat 16.1

14. Poikkeukset 14.1

Tietorakenteet, laskuharjoitus 7,

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

Ohjelmoinnin perusteet, syksy 2006

Javan perusteita. Janne Käki

Ohjelmoinnin jatkokurssi, kurssikoe

Web Services tietokantaohjelmoinnin perusteet

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Pakkauksen kokoaminen

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmointi 2 / 2010 Välikoe / 26.3

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

58131 Tietorakenteet ja algoritmit (syksy 2015)

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

L models. Käyttöohje. Ryhmä Rajoitteiset

Verkkoliikennettä Java[ssa lla] Jouni Smed

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat

Tekninen suunnitelma - StatbeatMOBILE

Verkko-ohjemointia. TCP vs. UDP Socket, ServerSocket Datagrammit RMI

HSMT J2EE & EJB & SOAP &...

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

1. Mitä tehdään ensiksi?

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Transkriptio:

Java Messaging Service (JMS) Kaj Karhu, Teemu Laakkonen, Jaakko Nygren, Kalervo Oikarinen, Taina Vartiala 4.12.2008 Helsingin yliopisto Tietojenkäsittelytieteen laitos Tätä ohjetta saa käyttää ja kehittää Helsingin yliopiston opetustarkoituksiin.

Rinnakkaisohjelmointi, projekti 2 Java Messaging Service (JMS)...2 Johdanto...2 Terminologia...2 Mikä Java Messaging Service (JMS) on?...3 Kuinka tämä liittyy rinnakkaisohjelmointiin?...4 Keskeiset piirteet...5 Arkkitehtuuri...5 JMS-viestimalli...6 Point to Point -järjestelmä...7 Julkaise-tilaa-järjestelmä (Publish-Subscribe)...7 Rajaukset...8 Vaatimukset...9 Käyttöohje...9 Tärkeimmät rajapinnan osat...9 1. Käyttöesimerkki - Hei Maailma!...9 2. Käyttöesimerkki - Seti@Home...11 Seti-palvelin...12 Seti-asiakas...12 Lähdeluettelo...13 1

Rinnakkaisohjelmointi, projekti 2 Java Messaging Service (JMS) Johdanto Java Messaging Service (JMS) on viestinvälitysmalli, joka mahdollistaa erilaisten ja toisistaan irrallisten osapuolten keskinäisen viestinnän. Siinä sovellukset eivät ole tekemisissä suoraan toistensa kanssa, vaan viestien välitys tapahtuu palvelimen jonon kautta, mikä tekee JMS:stä joustavan, mutta toisaalta palvelimen häiriöille alttiin ja jossain määrin tehottoman viestijärjestelmän. Tämä dokumentti on syksyn 2008 Rinnakkaisohjelmointikurssin ryhmän "Mikä tahansa" ryhmätyö, joka käsittelee Java Messaging Serviceä. Aloitamme käymällä läpi dokumentissa käyttämäämme terminologiaa, jonka jälkeen esittelemme JMS:n lyhyesti ja pohdimme, minkälaisia kytköksiä aiheellamme on rinnakkaisohjelmointiin. Keskeiset piirteet -kappaleessa käsittelemme JMS:n viestimallia ja arkkitehtonisia piirteitä, sekä toisaalta sen rajoituksia ja toteutusympäristölleen asettamia vaatimuksia. Lisäksi tutustumme hieman tarkemmin Point to point - ja julkaise-tilaa-järjestelmiin. Lopuksi annamme vielä kaksi Java Messaging Servicen käyttöesimerkkiä. Hei maailma! - esimerkissä pyrimme avaamaan viestimallin käyttölogiikkaa yksinkertaisen koodiesimerkin avulla. Seti@Home taas on laajemman mittakaavan esimerkki JMS:n tarjoamista monipuolisista mahdollisuuksista. Terminologia Alla on kuvattu tässä dokumentissa käytettävä termistö sekä lyhenteet. Termistöstä löytyvät myös suomenkielisten sanojen alkuperäiset englanninkieliset vastikkeet, ja olemme ottaneet vapauden tässä dokumentissa antaa niille suomenkieliset vastineet. Termi Selite Asiakas (client) JMS-sovellus Viesti Viestirajapinnan käyttäjät. Sovellus koostuu määritetyistä viesteistä sekä joukosta asiakkaita, jotka käyttävät sovellusta. Pienin yksikkö, jonka avulla asiakkaat 2

kommunikoivat viestijärjestelmän kanssa Point to Point (P2P) Julkaise-tilaa-järjestelmä (Publish-subscribe Model) JMS-tarjoaja (JMS Provider) Julkaisija (publisher) Tilaaja (subscriber) Pub-Sub Viestityyppien säilö Siirtoprotokolla Turvallisuus Hallinta Virhetapausten viestitys Kuorman tasaus / virheensietokyky Objekti Kuluttaa (consume) Tuottaa (produce) Välittää (deliver) JMS JNDI Taulukko 1: Terminologia JMS:n määrittelemä viestimalli, joka perustuu viestijonoihin. JMS:n määrittelemä viestimalli, jossa voi olla useita viestin vastaanottajia. JMS-tarjoaja tarjoaa toteutuksen viestijärjestelmälle, jonka kanssa JMSsovellukset kommunikoivat. JMS Pub-Sub -mallissa oleva Publisherosapuoli JMS Pub-Sub -mallissa oleva Subscriberosapuoli ks. Julkaise-tilaa-järjestelmä. Message type repository Wire-protocol security Administration Error / Advisory notification Load Balancing / Fault tolerance Tässä yhteydessä objektia käytetään luokan instanssien / ilmentymien synonyyminä. Tarkoittaa, että asiakas vastaanottaa viestin. Huom suuntana on asiakas -> järjestelmä. Käytetään yleisenä terminä viestin lähettämiselle. Viestijonojärjestelmän viestin lähetys siinä tapauksessa, että kyseessä on pub/subjärjestelmä. Huom. suuntana on järjestelmä -> asiakas. Java Messaging Service Java Naming and Directory Interface Mikä Java Messaging Service (JMS) on? Java Messaging Service eli lyhyesti JMS on viestirajapinta, joka on toteutettu Sun Microsystemsin kehittämällä Java-kielellä. JMS-sovelluskehyksen käyttökohteita ovat esimerkiksi yritysten järjestelmäintegraatiot, joissa osajärjestelmien välinen kommunikointi hoidetaan viestien avulla. 3

JMS voidaan ymmärtää sovelluskehyksenä, sillä siinä on valmiina joukko rajapintoja sekä valmiita osatoteutuksia, jotka sisältävät semantiikan siitä millä tavoin asiakassovellus (client application) kommunikoi viestijärjestelmän kanssa. JMS pyrkii maksimoimaan viestisovellusten siirrettävyyden. Siirrettävyyden yhtenä keskeisenä osana on Java-kieli. JMS:n keskeisimmät kommunikoinnin käsitteet ovat Point to Point (P2P) - sekä Publisher Subscriber (Pub/Sub) - mallit. Nämä mallit käsitellään omissa osioissaan. Kuinka tämä liittyy rinnakkaisohjelmointiin? Hajautettu järjestelmä on rinnakkaisohjelma, jossa laskenta on jaettu useille fyysisesti erillisille tietokoneille, joilla ei ole yhteistä jaettua muistia tai prosessoria, vaan joiden välille on rakennettu viestirajapinta. JMS:ä voidaan käyttää toteutettaessa hajautettu järjestelmä Javalla. JMSClient on hajautetun järjestelmän solmu ja JMSProvider toteuttaa viestirajapinnan. Fyysisesti useaan tietokoneeseen hajautetussa järjestelmässä yhden solmun resurssien jakaminen ja konekäskyjen lomittaminen hallitaan samalla tavalla kuin yhdessä tietokoneessa suoritettavassa rinnakkaisohjelmassa. Tämän lisäksi hajautetussa järjestelmässä tulee kuitenkin hallita solmujen välillä tapahtuva viestien synkronointi. Koska prosesseilla ei ole yhteisiä jaettuja resursseja, lomittaminen perustuu viestien lähettämiseen ja vastaanottamiseen ja solmujen hallintaan niiden diskreettien tilojen avulla. Hajautetussa järjestelmässä jokainen solmu voi olla ainoastaan kolmessa eri tilassa: Suorittamassa omaa laskutehtäväänsä tai lähettämässä tai vastaanottamassa viestiä. Tämän merkittävän eron vuoksi hajautetut järjestelmät eivät ole toteutukseltaan verrannollisia muiden rinnakkaisohjelmien kanssa. Koska yhteistä nopeaa muistia tai rekistereitä ei ole, vaan solmujen välinen keskustelu tapahtuu hitaammilla viesteillä, toteutuksessa joudutaan punnitsemaan viestirajapinnan kustannuksia suhteessa sen tehokkuuteen. Koska solmujen määrä voi kasvaa hyvin suureksi, tarvittavien viestikanavien määrä kasvaa toteutuksesta riippuen hyvin nopeasti. JMS pyrkii ratkaisemaan ongelman tarjoamalla JMSProvider-viestirajapinnan, jonka kautta kaikki viestit lähetetään ja vastaanotetaan. Tällä tavalla saadaan pudotettua tarvittavien viestikanavien määrää huomattavasti verrattuna siihen, että kaikki solmut olisivat yhteydessä suoraan toisiinsa. Ratkaisu ei ole välttämättä tehokkain kaikkiin tilanteisiin, mutta tarjoaa myös selkeän jaon viestirajapinnan ja solmujen välillä. Hajautettujen järjestelmien toinen merkittävä ero suhteessa muihin rinnakkaisohjelmiin on hajautetun järjestelmän viansietokyky. Kun yhdessä tietokoneessa toimivan rinnakkaisohjelman 4

laitevika saattaa estää kaikkien prosessien toiminnan ja olla fataali ohjelman suoritukselle, voidaan hajautetusti toteutetussa järjestelmässä usein todeta solmun vioittuminen ja toteuttaa viallisen solmun tehtävät jollakin toisella solmulla, tai ohittaa solmu viestiketjussa. JMS:llä voidaan laskenta toteuttaa jaetusti usealle solmulle, joten vioittuneen solmun virheet havaitaan ja voidaan korvata toisten solmujen laskennan tuloksilla. JMS:n kaltaisessa toteutuksessa kuitenkin koko hajautettu järjestelmä on riippuvainen JMSProviderin toiminnasta. Yhden JMSProviderin järjestelmässä, sen vioittuessa koko järjestelmän viestinvälitys lakkaa toimimasta. Viansietokyky on siten huomattavasti matalammalla tasolla kuin esim. internetprotokollien toteutuksessa, jossa uusi reitti voidaan yhden reitittimen hajotessa tai ruuhkautuessa ottaa vaivatta käyttöön. (Lähde [4]) Keskeiset piirteet Tässä kappaleessa käsitellään Java Messaging Servicen keskeisiä piirteitä ja käsitteitä, sekä sekä luodaan katsaus arkkitehtuuriin ja JMS:n määrittämiin viestimalleihin. Tarkastelu on melko pintapuolista, ja tarkempaa tietoa löytyykin JMS-spesifikaatiosta. Arkkitehtuuri JMS on joukko ennaltamääritettyjä rajapintoja, joiden avulla abstrahoidaan viestijärjestelmä asiakassovellusten kannalta ja täten vähennetään asiakassovelluksen riippuvuutta tietystä viestijärjestelmästä. JMS:n yleiset rajapinnat ovat seuraavat (JMS-mallit sisältävät omat variantit näistä rajapinnoista, mutta niiden semantiikka on näiden rajapintojen kaltainen): ConnectionFactory, Connection, Destination, Session, MessageProducer sekä MessageConsumer (ks. kuva 1). JMS:ssä on kaksi erilaista mallia kommunikointiin: point to point - ja julkaise-tilaa-järjestelmä. JMS tarjoaa rajapinnat molempien mallien kanssa kommunikointiin. JMS:n keskeisimmät käsitteelliset komponentit ovat: JMS-asiakkaat (JMS clients), ei-jms-asiakkaat (non-jms clients), viestit (Messages), JMS-tarjoaja (JMS Provider) ja hallitut objektit (Administered objects). JMS-asiakkaat ovat java-ohjelmointikielellä toteutettuja sovelluksia, jotka toimivat itsenäisesti ja muiden kuin viestien osalta mahdollisesti riippumattomina JMS-tarjoajasta. JMS:n kannalta asiakkaat vain vastaanottavat ja lähettävät viestejä. Ei-JMS-sovellukset ovat sellaisia sovelluksia, jotka hyödyntävät viestijärjestelmän natiivia rajapintaa kommunikointiin JMS:n 5

sijaan. Viestit ovat JMS:n kommunikoinnin peruskomponentti. Jokainen JMS-sovellus määrittelee itse viestit, joiden avulla viestijärjestelmä kommunikoi asiakkaan kanssa. JMS-tarjoaja on täydellinen viestijärjestelmän toteutus. JMS itsessään on pelkkä spesifikaatio ja kehys viestirajapinnasta. Tarjoaja on sellainen järjestelmä, joka toteuttaa itsenäisen sovelluksen vaatimat piirteet sekä tarjoaa toteutuksen JMS:lle. Hallitut objektit ovat sellaisia objekteja jotka on ennalta määritetty viestijärjestelmän toteutuksen puitteissa. JMS:ssä on olemassa kahdenlaisia JMS:n ennaltamäärittämiä komponentteja: Yhteystehdas (connection factory), jonka tehtävänä on luoda yhteys asiakkaan ja tarjoajan välille sekä kohde (destination), joka määrittää päätepisteen, jonne asiakassovellus lähettää viestinsä. Nämä hallitut objektit sijoitetaan JNDI (Java Naming and Directory Interface) -avaruuteen, josta asiakkaat voivat hakea ne. Kuva 1: JMS:n keskeiset rajapinnat ja niiden roolit (lähde [1]). JMS-viestimalli JMS:ssä viesteillä on seuraavat osat: otsake (header), ominaisuudet (properties) sekä runko (body). Otsaketiedot pitävät sisällään tietoja joita käytetään viestien tunnistamiseen ja reitittämiseen. Ominaisuudet sisältävät esimerkiksi sovelluskohtaisia lisäominaisuuksia tai lisäotsaketietoja. JMS määrittää muutamia erilaisia standardeja runkotyyppejä, jotka kattavat suurimman osan käyttötapauksista. JMS:ssä on seuraavat viestirungot: StreamMessage, MapMessage, TextMessage, ObjectMessage sekä BytesMessage. 6

Point to Point -järjestelmä Point to Point (P2P) -järjestelmä on rakennettu viestijonojen käsitteen päälle [1]. Tässä järjestelmässä viestit sijoitetaan jonoihin, joita asiakkaat purkavat. Tällöin asiakkaan purkama viesti poistuu viestijonosta. Jokaiselle asiakkaalle on järjestelmässä olemassa oma spesifi jononsa. Yleisesti yksittäinen asiakas lähettää viestinsä yhteen jonoon (ks. kuva 2). PTP-mallin keskeinen tehtävä on määrittää kuinka asiakassovellus käyttäytyy jonojen kanssa. Mallissa määritetään millä tavoin asiakas lähettää, vastaanottaa sekä löytää viestit jonoista. Mallin keskeiset rajapinnat (ks. myös kuva 1): QueueConnectionFactory - hoitaa yhteyden QueueConnection - Aktiivinen yhteys jonoon Queue - Jono QueueSession - Tarjoaa keskeisiä tehdasmetodeja eri objektien toteutukseen QueueSender - Viestienlähetysmekanismi QueueReceiver - Viestin vastaanottomekanismi Kuva 2: Point to point käsite (Lähde [2]) Julkaise-tilaa-järjestelmä (Publish-Subscribe) Julkaise-tilaa (publish/subscribe) -viestijärjestelmässä yksi lähettäjä voi lähettää viestejä usealle vastaanottajalle. Sitä voi verrata anonyymiin ilmoitustauluun, jolta kiinnostuneet käyvät lukemassa viestejä. Järjestelmässä lähettäjä lähettää viestin jostain aiheesta (Topic) palvelun tarjoajalle, joka jakaa sen kaikille kyseisen aiheen tilaajille. JMS itsessään ei säilytä viestejä niiden jakamisen jälkeen. Julkaisija luo ensin aiheen, jota muut asiakasohjelmat voivat sen jälkeen alkaa tilata. Tilaajat saavat vai ne viestit, jotka on lähetetty tilauksen jälkeen. Mallin keskeiset rajapinnat: TopicConnectionFactory - Hoitaa yhteyden 7

TopicConnection - Aktiivinen yhteys palvelun tarjoajaan TopicSession - Tarjoaa metodeja objektien toteutukseen TopicPublisher Asiakas, joka lähettää viestejä johonkin aiheeseen TopicSubschiber - Asiakas, joka ottaa vastaan viestejä jostakin aiheesta Durable TopicSubscriber - Asiakas, joka ottaa vastaan kaikki viestit jostakin aiheesta Tavallisen ja jatkuvan (durable) tilauksen ero on, että tavallisessa asiakas ei saa niitä viestejä, jotka on lähettetty tämän ollessa passiivinen, kun taas jatkuva tilaaja saa kaikki aiheeseen lähetetyt viestit. Kuva 3: Publish/Subscribe Messaging (Lähde [2]) Rajaukset JMS:ssä on seuraavat rajaukset, joihin JMS kehys ei ota lainkaan kantaa eikä tarjoa valmiita toteutuksia: Kuorman tasaus / virheensietokyky Virhetapausten viestitys asiakkaille / palvelimelle Hallinta - JMS ei tarjoa valmista API:a JMS-järjestelmien hallintaliittymän toteuttamiseen Turvallisuus - JMS ei ota kantaa viestin kryptaukseen tai kommunikaatioväylän salaukseen Siirtoprotokolla - JMS ei määrittele kiinteää protokollaa, jonka avulla JMS-viestejä siirretään (täten käy esim. HTTP tai UDP) Viestityyppien säilö - JMS ei määrittele mitään säilöä viestityyppien määrittelyjen tallettamiseen eikä myöskään kieltä viestien määrittämiseen. 8

Vaatimukset JMS asettaa myös tiettyjä vaatimuksia toteutusympäristölle. Java-kielestä johtuen JMS vaatii ympäristöltä, että siinä on Java-suoritusympäristö käytettävissä. Yleensä tehtäessä JMS:llä liittyy siihen myös joukko muita J2EE-teknologioita (esim. JDBC, JNDI, Java Beans, J2EE platform jne.). Nämä lisäteknologiat asettavat järjestelmälle myös omat vaatimuksensa, jotka järjestelmän tulee täyttää. Käyttöohje Tärkeimmät rajapinnan osat Käytössä tärkeimmät rajapinnan osat määrätyvät valitun viestimallin mukaan. Keskeisimmät rajapinnat löytyvät mallia käsittelevästä kappaleesta sekä arkkitehtuurikappaleesta, jossa käsitellään JMS:n yleisiä arkkitehtonisia piirteitä. 1. Käyttöesimerkki - Hei Maailma! LahetetaanHeiMaailma.java - Yksinkertainen 'Hei, maailma!' sovellus, jossa demonstroidaan viestin lähettämistä nimettyyn viestijonoon JMS:n avulla. import javax.jms.* import java.util.* // lähettää viestin JMS-serverin kanavalle 'jono' public class LahetetaanHeiMaailma { public static void main (String[] args) { try { ConnectionFactory omaconnectionfactory; Queue omaqueue; // haetaan yhteystehdas ja kohde omaconnectionfactory = new com.sun.messaging.connectionfactory(); // luodaan yhteys Connection omaconnection = omaconnectionfactory.createconnection(); // luodaan sessio Session omasession = omaconnection.createsession(false, Session.AUTO_ACKNOWLEDGE); 9

// valitaan kanava omaqueue = new.com.sun.messaging.queue( jono ); // alustetaan viestien lähettäjä MessageProducer omamessageproducer=omasession.createproducer(omaqueue); // luodaan viesti TextMessage omatextmessage = omasession.createtextmessage(); omatextmessage.settext( Hei maailma! ); //lähetetään viesti omamessageproducer.send(omatextmessage); // suljetaan sessio omasession.close(); } } // suljetaan yhteys omaconnection.close(); } catch (Exception jmse) { System.out.println(jmse.toString()); LuetaanHeiMaailma.java - Yksinkertainen sovellus, jolla demonstroidaan edellisen sovelluksen lähettämän viestin lukemista viestijonosta JMS:n avulla. import javax.jms.* import java.util.* // lukee viestin JMS-serverin kanavalta 'jono' public class LuetaanHeiMaailma { public static void main (String[] args) { try { ConnectionFactory omaconnectionfactory; Queue omaqueue; // haetaan yhteystehdas ja kohde omaconnectionfactory = new com.sun.messaging.connectionfactory(); // luodaan yhteys 10

Connection omaconnection = omaconnectionfactory.createconnection(); // luodaan sessio Session omasession = omaconnection.createsession(false, Session.AUTO_ACKNOWLEDGE); // valitaan kanava omaqueue = new.com.sun.messaging.queue( jono ); // alustetaan viestien lukija MessageConsumer omamessageconsumer=omasession.createconsumer(omaqueue); // avataan yhteys omaconnection.start(); // luetaan viesti Message message = omamessageconsumer.receive(); // tulostetaan viesti if (message instanceof TextMessage) { TextMessage textmessage = (TextMessage) message; System.out.println(textMessage.getText()); } // suljetaan sessio omasession.close(); } } // suljetaan yhteys omaconnection.close(); } catch (Exception jmse) { System.out.println(jmse.toString()); 2. Käyttöesimerkki - Seti@Home SETI@home (Search for Extra-Terrestrial Intelligence at home) on tieteellinen hajautetun laskennan projekti, jossa etsitään Maapallon ulkopuolista älyllistä elämää. Projektiin osallistuvat vapaaehtoiset lataavat tietokoneelleen ohjelman, joka analysoi radioteleskoopin keräämää dataa etsien säännöllisiä kapeakaistaisia radiosignaaleja. Teleskoopilta postitse lähetetyt 11

datanauhat pilkotaan Berkeleyssä kestoltaan ja taajuusalueeltaan pienemmiksi työpaketeiksi, joita lähetetään internetin välityksellä vapaaehtoisille analysoitavaksi. Alla esimerkit kuinka Setipalvelin ja -asiakas voitaisiin toteuttaa JMS:n avulla. Seti-palvelin Palvelin julkaisee seuraavan työpaketin. Viisi ensimmäistä aktiivista paketin hakijaksi ilmoittautunutta asiakasta saavat luvan pakettiin. Nämä viisi asiakasta hakevat paketin itselleen. Palvelin lopettaa kyseisen paketin tarjoamisen ja julkaisee uuden paketin, jonka saavat taas viisi ensimmäistä asiakasta. Sama paketti annetaan viidelle eri asiakkaalle, jotta virheelliset ja peukaloidut tulokset pystytään eliminoimaan. Seti-asiakas Asiakas ilmoittautuu paketin hakijaksi ja hakee paketin, kun palvelin on myöntänyt sille luvan siihen. Asiakas suorittaa paketin datan analysoinnin ja lähettää käsitellyn paketin suoraan setiserverille p2p-yhteydellä. Tämän jälkeen asiakas ilmoittautuu taas uuden paketin hakijaksi. 12

Lähdeluettelo [1] - JMS Spesifikaatio vuodelta 2002 (http://java.sun.com/products/jms/) [2] - http://java.sun.com/javaee/5/docs/tutorial/doc/bncdx.html [3] Sun Microsystemsin viestijärjestelmä (ilmeisesti ilmainen): https://cds.sun.com/is- bin/intershop.enfinity/wfs/cds-cds_smi-site/en_us/-/usd/viewproductdetail- Start?ProductRef=JavaSystem-MsgQ3-2005Q1-OTH-G-F@CDS-CDS_SMI [4] - M. Ben Ari: Principles of Concurrent and Distributed Programming (Addison-Wesley, 2006 p.16) 13