Hajautettujen järjestelmien rakentaminen - Jini Ohjelmistotuotantovälineet-seminaarin esitelmä Anu K. Leponiemi (anu@lepo.net) Helsingin yliopisto Tietojenkäsittelytieteen laitos Helsinki 2000
SISÄLLYSLUETTELO 1 JINI VISIO VERKOTETUSTA PALVELUAVARUUDESTA... 1 2 JININ TOIMINTA... 2 2.1 PALVELUVERKON RAKENNE... 2 2.2 JINI-PALVELUPYYNNÖN ETENEMINEN... 3 3 JINI-PALVELUN TOTEUTTAMISEN TEKNISIÄ NÄKÖKOHTIA... 4 3.1 JINI-PALVELUN TARVITSEMAT APUPALVELUT... 4 3.2 JINI... 4 4 JININ TULEVAISUUS... 6 4.1 LÄHEISET TEKNIIKAT... 6 4.2 JINI PÄÄTELAITTEISSA... 7 4.3 JINIOLOGIASTA... 7 LÄHTEET
1 Jini visio verkotetusta palveluavaruudesta Päätelaitteiden erityislaatuinen luonne tietokoneena erityisesti rajallisen kapasiteetin tuottamat ongelmat lisäävät tarvetta yksinkertaiselle tavalle toteuttaa hajautettuja järjestelmiä. Jini on hajautettujen järjestelmien rakentamiseen tarkoitettu Java-teknologia. Jini-teknologian kantavana ajatuksena on tehdä ohjelmistopalveluista ja laitteista Jini-palveluita, jotka ovat helposti käytettävissä kaikkialla Internetissä. Teknisemmin tarkasteltuna Jini on Java 2:n päälle rakennettu Java-rajapinta. Sen ensimmäisen version, Jini 1.0:n, Sun Microsystems julkisti tammikuussa 1999. Tällä hetkellä toimivia Java 2 alustoja ovat Java 2 Standard Edition (J2SE), Java 2 Enterprise Edition (J2EE) ja Java 2 Micro Edition (J2ME). Lokakuussa 2000 Jinistä julkaistiin versio 1.1. 1
2 Jinin toiminta Java 2 tarjoaa turvallisuuskysymyksiin ja hajautettujen järjestelmien viestintään liittyviä valmiuksia, jotka puuttuivat aikaisemmista Javan versioista, ja joita Jini tarvitsee toimiakseen. RMI (Remote Method Invocation) on Java 2:n osa, joka on Jinin pohjana hajautettujen järjestelmien toiminnassa. 2.1 Palveluverkon rakenne Jini muodostuu palveluyhteisöistä (a community of Jini services), joihin Jinipalvelut kuuluvat. Palvelu voi olla esimerkiksi tulostuspalvelu. Näitä palveluja muut yhteisön Jini-palvelut voivat käyttää. Yhteen yhteisöön voi kuulua useampia Jini-palveluita, ja yksi Jini-palvelu voi kuulua useampaan yhteisöön. Kuva 1. Yhteen palveluun voi ottaa yhteyttä monen eri palvelurekisterin kautta (P3). Kuvassa Y tarkoittaa yhteisöä, P palvelua ja DB palvelurekisteriä. 2
Palveluyhteisön palveluiden tiedot on talletettu kunkin palveluyhteisön palvelurekisteriin. 2.2 Jini-palvelupyynnön eteneminen Jinin perustoiminnot voidaan esittää yleistasolla kolmessa osassa. Toimijana on Jini-palvelua käyttävä palvelu. Ensin palvelu löytää (discover) Jinipalveluyhteisön. Löytäminen voi tapahtua esimerkiksi etsimällä paikallisia Jini-yhteisöjä, saamalla joltakin uudelta Jini-yhteisöltä useille palveluille yleisesti tarkoitettu (multicast) ilmoitus tai liittymällä suoraan johonkin ennalta tunnetun yhteisön palvelurekisteriin (lookup service). Palvelurekisterillä on tieto kaikista yhteisön palveluista; sen kautta palvelut käyttävät toisiaan. Palvelu valitsee löytämistään yhteisöistä ne, jotka se katsoo hyödyllisiksi, ja liittyy niihin. Tämän se tekee ottamalla yhteyden palvelurekisteriin välittäen sille itseään kuvaavan palveluyksikön (service item). Palveluyksikkö koostuu metadatasta ja palvelun proxy-oliosta, ts. palvelun käyttäjille tarjotusta rajapinnasta. Saamiensa tietojen avulla palvelurekisteri liittää uuden palvelun osaksi yhteisöä lisäämällä sen proxy-olion ja metadatan omaan tietovarastoonsa. Jini-yhteisön palvelurekisteri huolehtii siis siitä, että asiakas löytää etsimänsä palvelun. Asiakas täyttää palvelukaavakkeen (service template), jossa se kuvaa etsimänsä palvelun. Kaavakkeen tietoja voivat olla esimerkiksi palvelun tunnus (service id), palvelun käyttämät Java-luokat ja joukko muita palvelua kuvaavia ominaisuuksia. Näiden hakuehtojen perusteella asiakas saa palvelurekisteriltä proxy-olion, jonka asiakas voi imuroida (download) ja ajaa. Proxy-olio voi hoitaa saamansa palvelupyynnöt itse tai ohjata pyynnön jatkokäsittelyä varten varsinaiseen yhteisöön liittyneeseen palveluun sen omalle palvelimelle. Edelleen proxy-olio ohjaa saamansa vastauksen pyynnön lähettäneelle asiakkaalle. 3
3 Jini-palvelun toteuttamisen teknisiä näkökohtia Tässä kappaleessa esitetään muutamia teknisiä käytännön asioita yksinkertaisen Jini-sovelluksen toteuttamiseksi. Aluksi käydään läpi tarvittavat apupalvelut. Lisätietoja kannattaa etsiä Sun Microsystemsin wwwsivuilta osoitteesta http://java.sun.com/jini/. 3.1 Jini-palvelun tarvitsemat apupalvelut Jini-palvelu vaatii toimiakseen tietyt apupalvelut. Näitä välttämättömiä apupalveluja ovat HTTP-palvelin, RMI:n vahtipalvelu (RMI activation daemon) ja palvelunetsintäpalvelu (lookup service) [Edw99]. HTTP-palvelin tarvitaan käytännössä jokaiselle koneelle, jonka kautta koodia välitetään toisille sovelluksille, koska RMI käyttää HTTP-protokollaa koodin siirtämiseen. Ainoa syy jättää erillinen HTTP-palvelin pystyttämättä tällaisessa tilanteessa on se, että Jini-palvelu itse tarjoaa välineet HTTPsiirtoon [Edw99]. RMI-vahtipalvelu antaa harvoin käytettävien olioiden olla täysin passiivisessa tilassa. Palvelupyynnön saavuttua RMI-vahtipalvelu välittää tiedon näille olioille eli herättää ne. RMI-vahti tulee käynnistää erikseen jokaiselle koneelle, jolla ajetaan palvelunetsintäpalvelua. Palvelurekisteri pitää siis kirjaa kaikista palveluyhteisön Jini-palveluista. RMI-vahtipalvelu on korvaamaton palvelurekisterille, koska palvelurekisterin kaatuessa RMI-vahtipalvelu saa sen nopeasti toimimaan. Palvelurekisteri on Jini-verkon keskeisin osa, ja siksi sen toiminnan pitää olla mahdollisimman vakaata. 3.2 Jini Jini koostuu joukosta Java-luokkia. Sun Microsystemsin www-palvelusta on saatavissa Jinin uusin versio alle kymmenen megatavun (10 MT) zip- 4
pakettina. Paketti sisältää paitsi Jinin ytimen myös esimerkkisovelluksia, dokumentteja ja muita kirjastoja, joista on apua Jini-palvelujen kehittämisessä. Suurin osa Jini-koodista on net.jini:n alla. Koodi on jaettu osiin siten, että Jinin ydinosat ovat net.jini.core.*-pakkauksissa (pakattu jar-tiedostoon jini-core.jar) ja ytimen päälle rakennetut osat net.jini.*-pakkauksissa (jini-ext.jar). Sunin erilliset apuluokat ovat com.sun.jini.*-pakkauksissa (sun-util.jar). 5
4 Jinin tulevaisuus Tässä kappaleessa käydään läpi asioita, jotka vaikuttavat Jini-tekniikan menestymiseen tulevaisuudessa. 4.1 Läheiset tekniikat Jiniä on verrattu CORBAan (Common Object Request Broker Architecture), joka on OMG:n (Object Management Group) määrittelemä hajautettujen palvelujen kehittämisen mahdollistava olioarkkitehtuurimalli [Hoq97]. CORBA pyrkii toimimaan mahdollisimman riippumattomana ohjelmointikielistä, kun taas Jiniä ja aiemmin RMI-tekniikkaa on kritisoitu siitä, että se tukee vain Javaa. Jinin käyttämä RMI-tekniikka perustui aikaisemmin erityiselle RMIprotokollalle, mutta on laajennettu toimimaan myös CORBAn Internet Inter- ORB protokollalla (IIOP). Tämän ansiosta RMI-asiakkaat ja palvelut voivat keskustella CORBA-sovellusten kanssa [Wal00]. Jinissä Javan käyttö kaikissa palvelurakenteissa ei kuitenkaan ole välttämätöntä. Java-rajapinnat mahdollistavat kommunikoinnin Jinipalveluverkossa, mutta palvelujen sisällä laitteistorajapinnat ja ohjelmistopalvelut voidaan rakentaa käyttäen Jinistä riippumatonta ohjelmointikieltä [Wal00]. RMI (Remote Method Invocation) tekniikka mainitaan usein Jinin yhteydessä. RMI:n tarjoamat välineet ovat olennainen osa Jinin toimintaa, mutta eivät kuitenkaan sama asia. Jini käyttää hyväkseen RMI-tekniikan suomia mahdollisuuksia; Jini on joukko palveluja ja malleja, jotka on rakennettu RMI:n päälle [Edw99]. 6
4.2 Jini päätelaitteissa Jini on suunnattu ennen kaikkea sulautettuihin järjestelmiin eli päätelaitteisiin, joiden kapasiteetti on rajallinen. Jinin laitearkkitehtuurimäärittely (Jini Device Architecture Specification) määrittelee yleiset tavat käyttää Jiniä ylemmällä tasolla. Näitä kuvauksia on esitetty Perronen ja Chagantin artikkelissa [PCK99]. Palvelimella oleva Jini-palvelu koostuu laite-proxysta (device proxy), joka tarjoaa Jini-palvelun käyttäjille Java-rajapinnan laitteeseen. On kuitenkin mahdollista toteuttaa laitteen ohjaus jollakin muulla kielellä kuin Javalla. Javaa Jini-palvelu tarvitsee vain verkkorajapintana. Ajateltaessa Jini-palvelua jotakin laitetta ohjaavana älykkäänä rajapintana tämä toteutusvälineiden kirjo on ehkä helpoin ymmärtää. Jini-sovellusta rakennettaessa on tehtävä linjaveto siitä, mitä toteutetaan asiakaspäätelaitteessa (palvelun proxy-oliossa) ja mikä jätetään palvelimella olevan osan tehtäväksi. Päätös ei ole helppo, sillä tässä yhteydessä palvelin voi tarkoittaa myös toista sulautettua järjestelmää - esimerkiksi tulostinta - jolloin senkin kapasiteetti on rajallinen. Laitteiden Java-alustan täytyy tukea Jiniä, joten vaihtoehdoiksi käyvät vain aiemmin mainitut Java 2 alustat. J2SE ja J2EE ovat raskaita; J2ME on kevyempi mutta myös toiminnallisuudeltaan rajallisempi. Yksi vaihtoehto siirtää kuormaa laitteelta on toteuttaa Jini-palvelu ja laite-proxy kapasiteetiltaan suuremmalle koneelle, joka voi käyttää täyttä Java 2 sovellusalustaa, ja antaa näiden kommunikoida omalla tavallaan itse ohjattavan laitteen kanssa. 4.3 Jiniologiasta Jinistä on puhuttu joskus Jiniologiana sen filosofisen luonteen vuoksi; Jini pyrkii ennakoimaan nopeiden verkkojen tulevaisuutta, jossa palvelujen hajautettu käyttö ja kannettavat järjestelmät ovat arkipäivää. Tietokoneen 7
luonne monipuolistuu; se ei ole enää tavallinen kotitietokone, vaan pieniä tietokoneita voi olla yhdessäkin taloudessa monta [Ven99]. Tällaisessa tulevaisuudessa Jini nähdään rakentamassa tietokoneiden välistä palveluverkostoa. 8
LÄHTEET Edw99 Edwards, K. Core Jini, Sun Microsystems, 1999. Hoq98 Hoque, R. CORBA 3, IDG Books Worldwide, Inc, 1998. PCK99 Perrone, P. J, Chaganti, V. S. R. K; Jini in the Box (Embedded Systems Programming; marraskuu 1999; nro 12; ss. 55-64) SUN00 Sun Microsystemsin www-palvelu (http://java.sun.com/jini/). Ven99 Venners, B. The Jini, Vision (JavaWorld, August 1999). <URL: http://developer.java.sun.com/developer/technicalarticles/jini/jinivision/jinio logy.html> Wal00 Waldo, J. The End of the Protocols. Sun Microsystems. <URL: http://developer.java.sun.com/developer/technicalarticles/jini/protocols.html> 9