HOJ Kertausluento Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista ja XML + protokollat (2h) 9. Pilvialustat (1h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.2/58
Kurssin tavoitteita 1/2 Käydä läpi ohjelmointikielten ulkopuoliset modernit hajautettujen sovellusten tekemiseen liittyvät rajapinnat. Opetetaan asioita erityisesti Javan kannalta. Moni käsiteltävä asia on ratkaistu useassa ohjelmointikielessä samalla tapaa, mutta merkittäviä erojakin on. Voimakas sidos Javaan on hieman epätoivottava, mutta konkretisointi on välttämätöntä. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.3/58
Kurssin tavoitteita 2/2 Säikeet ja samanaikaisuuteen liittyvän problematiikan hallinta. Soketit. RMI Remote Method Invovation. RPC Remote Procedure Call Verkko: asiakas-palvelin sovelluksen välinen keskustelu; XML, JSON. Verkko: palvelinsovellukset ja tietokantapalvelimet. WWW+Java: Serveletit, Ajax Verkkoliikenteen turvallisuudesta. Dokumentointi, testaus,... HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.4/58
Asiakas-palvelin suhteesta Internet: maailmanlaajuinen alusta asiakas-palvelin tietokonesovelluksille. (Muita: DigiTV, mobiiliverkko.) WWW-selain: asiakas; http-palvelin, news-palvelin,... WWW:n idea: palvelimella html-dokumentteja & Java-appletteja; selain lataa niitä ja suorittaa itse. Yleisemmin: palvelin on tieto- ja palvelu varasto. Asiakaspuolen laskenta (client-side computing). Aiemmin keskuskoneessa tehtiin laskenta; nyt keskuskone jakaa laskettavaa. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.5/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.6/58
Yleistä säikeistä 1/4 Tutustuttu jo: tapahtumankäsittelysäie ja main -säie. Voidaan luoda ja käynnistää itse. Säie: peräkkäinen käskyvirta. Samanaikaisuus rinnakkaisuus. Säie prosessi. Monen ongelman ratkaisun ilmaiseminen rinnakkain luonnollista. Koneessa useita prosessoreita = aidosti samanaikaan suoritettavia prosesseja. Kyky reagoida moneen suuntaan. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.7/58
Yleistä säikeistä 2/4 Perustuu työn jakamiseen, mutta seurauksena on usein myös tietojen jakaminen. Javan säikeet jakavat muistiavaruuden. KJ:n prosessien muistiavaruus erillinen. Tiedon käytön koordinointi tärkeää: samanaikainen käyttö voi johtaa ongelmatilanteisiin. Samanaikaisten päivitysten seurauksena ehkä epäkonsistentti tila. Lukeminen: myös ongelmia. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.8/58
Yleistä säikeistä 3/4 Lukitsemalla tietorakenteita (olioita) tai estämällä usean säikeen pääsy samanaikaisesti metodiin voidaan ratkaista ongelmia. Mutta... lukitsemisen seurauksena voi tulla syklejä = jumiutuminen. Lisäksi: säikeille annettavaa aikaa pitää jotenkin kontrolloida. Kaikkien pitää saada aikaa, muuten starvation. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.9/58
Yleistä säikeistä 4/4 Käytännön seikkoja: Javaa suoritetaan usein tulkitsemalla. Tulkitseva JVM on yksi koneen KJ:n prosessi. Koneen KJ jakaa aikaa prosessien välillä. Javan säikeitä suoritetaan JVM:n sisällä. JVM:llä on KJ:n prosessien hallintaominaisuudet. (Tilanne on osin muuttunut: mahdollista käyttää useita KJ:n säikeitä.) Ei siis kovin helposti tehoa monesta prosessorista, mutta silti hyödyllistä esim. animoinnissa ja verkkoyhteyksissä. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.10/58
Raita: säikeiden tilat Suorituksen loppuminen normaalisti tai epänormaalisti Päättynyt (kuollut) Säie valitaan suoritukseen Valmis Säie käynnistetään start komennolla Suorituksessa Aikakvantti loppunut, yield, interrupt IO suoritettu, uniaika loppunut, notify, notifyall IO pyyntö, sleep, wait Estynyt Uusi Säie luodaan HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.11/58
Samanaikaisuuden ongelmista Halutaan jakaa tietoja, mutta tehdä niiden samanaikaiset muutokset kontrolloidusti. Miten välittää tietoa säikeeltä toiselle? Miten ajoittaa säikeiden suoritus? Esim. kuluttaja + tuottaja -tilanne. Miten taata, että säikeet saavat suoritusaikaa? Lukitusten avulla voidaan tehdä muutokset kontrolloidusti (olion eheys säilyy), mutta samanaikaiset lukot voivat johtaa lukkiumatilanteisiin. Valitettavasti yleistä lukkiumat välttävää ratkaisua ei ole. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.12/58
Javan ratkaisuista 1/2 Lukitus: olio voidaan lukita; siihen kiinnitetään monitori (mutex; mutually exclusive lock), joka sallii vain yhden säikeen operoivan oliolla kerrallaan. Varattu sana synchronized. Voidaan liittää metodeihin: kyseisiä metodeja saa käyttää vain yksi säie kerrallaan. Ei voida liittää luokka- tai instanssimuuttujiin. Voidaan liittää myös lausekkeeseen (olioon); sama vaikutus. Vaikka olioon on lukko, niin muut säikeet voivat käyttää olion ei-synkronoituja piireitä vapaasti. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.13/58
Javan ratkaisuista 2/2 Object.wait(... ): jäädään odottamaan jonkin asian/ehdon tapahtumista. Edellyttää lukkoa olioon; soveltaminen vapauttaa lukon. Object.notify(): ilmoitetaan, että asia tapahtunut. Edellyttää lukkoa olioon; antaa lukon jollekin sitä odottavista säikeistä. Object.notifyAll(): kaikki odottajat valmis -tilaan; joku saa lukon. Muut jäävät sitä odottamaan. Ongelma: kuka vapauttaa kaikki odottajat? Jonkun täytyy ensin ottaa lukko ja käyttää sitä sitten muiden vapauttamiseen. Vastuu!! wait & nofity:n idea on pyrkiä vähentämään lukkiumatilanteita. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.14/58
Yhteenveto Säikeet ovat olioita. JVM:n tapa käsitellä säikeitä. Luonti: Thread, Runnable. Tilat, siirtymien syyt. Tiedon jakaminen ja sen hallinta: lukitukset. synchronized. Prioriteetti. Säieryhmä. Demoni. Soveltaminen? GUIhin? Verkkosovellusten yhteydessä? Animointi? HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.15/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.16/58
Yleistä Hajautettu sovellus: joukko erillisiä ohjelmia, jotka keskustelevat toistensa kanssa. Ohjelmat voivat toimia eri koneissa. Kommunikointi: verkon yli, jollakin keskustelukielellä. Mahdollisesti erikielisiä ohjelmia. Yleensä kommunikoivilla ohjelmilla hyvin erilainen rooli. Asiakas- ja palvelinsovelluksia. Palvelin: sovellus, joka kuuntelee yhteydenottoja. Asiakas: aloittaa kommunikaation; kommunikaation suunnan painopiste vaihtelee tapauskohtaisesti. Yleensä välitetään passiivista tietoa; ei niinkään pyritä vaikuttamaan toisen ohjelman suoritukseen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.17/58
Ongelmia? Miten välittää tietoa? Miten asiakas tietää, missä palvelin on? Miten palvelin osaa vastata? Yhteyden muodostaminen & lopetus? Useita asiakkaita? Useita palvelimia? Ongelmia samanaikaisuudesta? Palvelin: miten palvella kaikkia tasapuolisesti? Miten hallita hajautetun sovelluksen siirtymistä tilasta toiseen? Periaatteessa kaikki samat ongelmat kuin säikeiden tapauksessakin. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.18/58
Kommunikoinnista lisää Porttinumerot: TCP:hen (ja UDP:hen) liittyvä numero; väliltä 0 65535; kertoo, missä koneen sisällä vastaanottaja on. Lähettäjä samoin. Soketit: sovellustason yhteys (IP-osoite & portti), jota Java-ohjelmassa voidaan käsitellä tiedostovirran tapaan. Toisen osapuolen ei tarvitse olla Java-ohjelma RMI (Remote Method Invocation): tapa välittää metodin kutsuja asiakkaalta palvelimelle. Kutsu = tietoa asiakkalta + ohjaus; takaisin tietoa palvelimelta. Molemmat osapuolet ovat Java-ohjelmia. CORBA, RPC,... HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.19/58
Soketit: tilanne Ohjelma Ohjelma Tietokone Ohjelma Portti Portti Portti Verkko Porttinumerot: 0... 65535. Tietokoneella IP-osoite. Ohjelma voi käsitellä useampaa porttia samanaikaisesti. Koneen käyttöjärjestelmä välittää verkkokortin ottaman tiedon porttiin kytkeytyneelle ohjelmalle. Lähettäminen vastaavasti. 0... 1024: standardoitu merkitys. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.20/58
Soketit Soketti kytkös: (kone1, portti1) (kone2, portti2) niin, että kumpikin kone tietää kytköksen. UDP-pohjainen tiedon välitys: DatagramPacket ja DatagramSocket. Miten käyttää? TCP-pohjainen välitys: Socket ja ServerSocket. Miten käyttää? Streamit InputStream, DataInputStream, ObjectInputStream. Useita asiakkaita? Monilähetys (ryhmälähetys, multicast): useita vastaanottajia. Yleislähetys (broadcast). Paketissa java.net. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.21/58
TCP-pohjaiset soketit TCP: pakettien järjestys ja perille pääsy taataan. Idea: yhteydellinen 2-suuntainen tietovirta. Käytetään kuten muitakin Javan tiedostovirtoja. Asiakas luo: Socket-olion kohteeseen. Palvelin luo: ServerSocket-olion, joka kautta muodostetaan Socket-olio. Soketteihin liittyy sisään- ja ulosmenevät tiedostovirrat. Paketit: ei eksplisiittisiä paketteja. Kirjoitetaan vain tiedostovirtaan! HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.22/58
Palvelimen toiminnasta Socket clientsocket = serversocket.accept(); Palvelin usein palvelee useita asiakkaita. Ei voi asiakas-soketin muodostamisen jälkeen keskittyä kokonaan siihen. Ratkaisu: asiakas-soketin käsittely siirretään sitä varten tehtävälle säikeelle. (Hyvin samantapaista kuin Unix:ssa inetd.) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.23/58
Palvelimen ydin while (true) { Socket clientsocket = serversocket.accept(); CommHandler c = new CommHandler(clientSocket); c.start(); } // while HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.24/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (2h) 7. RPC (1h) 8. WWW-sovellustekniikoista (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.25/58
Remote Method Invocation: Yleistä 1/2 Palvelinsovellus kuuntelee yhteydenottoja; yhteydenotto = metodin kutsu ja suorittaminen palvelimessa. Asiakas kutsuu palvelinsovellusta suorittamaan jokin etäolion jotain tiettyä metodia (parametrit). Parametrit: tietoa asiakkaalta palvelimelle. Tulos: tietoa palvelimelta asiakkaalle. Tietoa välitetään Javan olioina! Palvelin- & asiakassovellus: Java-ohjelmia. Yleisesti: useita palvelimia ja asiakkaita. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.26/58
RMI: Yleistä 2/2 Etäolio (server object): palvelimessa oleva olio. Paikallinen olio (client object): asiakassovelluksessa. Edustajaolio (stub): asiakkaalla on olio, joka edustaa palvelimessa olevaa etäoliota. Tukee turvallisuusominaisuuksia ja roskien keruuta (yms). Asiakkaan ja palvelimen roolit eivät kiinteitä: osapuoli voi olla molemmissa rooleissa. Paketit java.rmi (asiakas); java.rmi.server (palvelin); java.rmi.registry (rekisteri: nimiä palvelimen olioille);... HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.27/58
RMI:n kulisseissa tapahtuu (asiakas) (palvelin) rekisteri palvelinohj. asiakasohj. etäolio luonti etäoliota vastaava edustajaolio rekisteristä etäolion rekisteröinti metodin kutsu paikalliselle ohjelmalle edustajaolio kutsun + param. ohjaus eteenpäin tulosten välittäminen edustajaoliolle kutsun suoritus edustajaolion olion kutsuja odottava säie tulokset takaisin HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.28/58
Sovellusten keskustelusta Kaksi palvelinsovellusta voi keskustella keskenään. RMI: metodin kutsu = vaikuttamisen yhteydessä pitää huolehtia, ettei tule avoimien kutsujen sykliä. Tavallaan kutsut tarkoittavat vuoron siirtämistä toiselle. Molemmat osapuolet aktiivisia: ei syklejä, jos metodin kutsu tarkoittaa palvelupyynnön välittämistä. Riittää kun vain toiseen suuntaan palvelupyyntöjä! Ratkaisu: molemmilla itsenäinen säie & RMI-kutsut ainakin toiseen suuntaan palvelupyyntöjä. Paljon säikeitä: main, itsenäinen säie (+ ilm. Remote-oliota varten syntyy oma säie). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.29/58
Turvallisuudesta Mahdollista kryptata RMI-liikenne (voidaan vaihtaa RMI:n käyttämät tavalliset soketit SSL-soketeiksi). Palvelimen puolella ei ole tukea sille, että rajoitettaisiin oikeutta tehdä kutsu edustaolion kautta (miten palvelin tietää kuka sitä kutsuu? edustaolio voidaan välittää eteenpäin...). Palvelimeen voidaan tehdä login-osuus, jonka jälkeen saa varsinaisen etäolion palveluiden käyttämiseksi. Kyseinen olio voi olla erilainen eli käyttäjille. Palvelimen pitää varautua siihen, että asiakas häiriköi. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.30/58
Jakamisesta ja lukoista RMI ei varsinaisesti tunne lukkoja, mutta... RMI:n yhteydessä on mahdollista soveltaa lukkoja palvelipäässä. RMI-palvelin on monisäikeinen (kutakin samanaikaista kutsua toteuttaa eri säie). Määritellään kriittiset etäolion operaatiot sychronized-suojatuiksi. Suojaa etäoliokutsujen kautta tapahtuvaa samanaikaista käyttöä (sekä muuta palvelimessa etäolioon tapahtuvaa käyttöä). Asiakas ei siis suoraan saa lukkoa etäolioon (vaan sen edustaja etäkutsua suorittava säie palvelimessa). wait()/notify() hankalia mutta mahdollisia lähinnä vain estetään samanaikainen jaetun datan käyttö. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.31/58
Yhteenveto RMI = Remote Method Invocation. Etäolio + edustaolio. Kutsulla saadaan aikaan tiedon siirto molempiin suuntiin voidaan välittää olioita kopioimatta. Edustaolioiden == eri kuin etäolioiden ==!! Kutsuja aktiivinen; kutsuttava passiivinen. Pitää varoa avoimien kutsuketjujen sykliä. Palvelin vs useita asiakkaita: helppo. Palvelin & palvelin: vaikeampi. Toteutettu säikeillä ja soketeilla. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.32/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI (2h) 7. RPC (1h) 8. WWW-sovellustekniikoista (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.33/58
Remote Procedure Call, RPC RPC:n (Remote Procedure Call) idea on välittää (TCP avulla) verkon yli proseduurin kutsu(ja) argumentteineen ja palauttaa takaisin etäällä suoritetun proseduurin tulos. Syy irrottaa proseduuri etäproseduuriksi liittyy yleensä työmäärään tai keskitettyyn suureen tietomäärään (jota ei ole järkevä kopioida moneen paikkaan). RPC:ssä, etäproseduurin kutsu näyttää ohjelmassa tavalliselta metodin kutsulta. Toteutus (kommunikointi verkon yli) on näkymätön ohjelmoijan kannalta. C-pohjainen ei olioita kuten RMI:ssä. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.34/58
Parametriongelmia Etäproseduurikutsujen toteuttaminen olisi helppoa, jos kaikki parametriarvot olisivat skalaariarvoja ja molemmat RPC-järjestelmät olisivat samoja. RPC-toteutukset perustuvat usein alla olevaan käyttöjärjestelmään ja siinä tiedon esitysmuoto voi vaihdella. Parametrien koodauksen (mashalling) täytyy ottaa tämä huomioon. (XDR) Jotkin paikalliset parametrit voivat olla viiteparametrejä. Jos sallittua, marshallointi tarkoittaa viitatun rakenteen kopiointia. Tulisiko muutosten heijastua takaisin? Mahdollista! Copy/restore-parametrit! HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.35/58
Huomioita RPC:stä RPC:n kirjasto tarjoaa suuren määrään proseduureja asiakkaita ja palvelimia varten. Parametrien koodausstandardi: XDR (external Data Representation). Asiakkaan ja palvelimen voi tehdä alusta alkaen itse tai ne voi toteutusympäristöstä riippuen osittain generoida. IDL-kieli on kohtuullisen rikas. TCP:n tilalla voi olla jokin muu kuljetusmekanismi (XML-RPC: HTTP). RPC ei ole vain C-kielisille ohjelmille esim. XML-RPC toteutuksia on useille kielille: Java, C/C++, Perl, PHP, Python. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.36/58
Lopuksi RPC on esitelty välitystekniikkana. Sovellusten tekemisen problematiikka samanlaista kuin RMI:n kohdallakin. Etäproseduurit eivät ole mitään aktiivista, vaan passiivisia palveluita. Ja yleisemmin monisäiesovellusten ongelmat koskien tiedon samanaikaista käsittelyä ovat myös RPC-sovellusten ongelmia. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.37/58
Corba yleiskatsaus CORBA (Common Object Request Broker Architecture) on ryhmän nimeltä OMG (Object Management Group) määrittelemä. OMG perustettu 1989. (www.omg.org.) Tavoitteena on mahdollistaa hajautettujen järjestelmien kehittäminen kieliriippumattomuutta tukien. Ensimmäinen versio 1991. Versio 2.0 vuonna 1996 ja versio 3.0 vuonna 2002. Määrittely on n. 2000 sivua. Tehty ennen RMI:tä ja Javaa. RMI:tä laajempi. Soveltuu myös muille kuin OO-kielille. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.38/58
jatkuu... CORBAn ydin on ORB (Object Request Broker), joka on alustaja kieliriippumaton taso etäkutsujen tekemiseksi. Huolehtii mm. marshalloinnista. Sovelluksissa olevat ORBit keskustelevat GIOP:llä (General Inter-ORB Protocol). Sen TCP/IP-mukaelma on IIOP (Internet Inter-ORP Protocol). Asiakas/palvelin rajapinnat kuvataan Corbassa IDL:llä (Interface Description Language). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.39/58
Muita CORBAn ominaisuuksia Tukee lukkoja ja transaktioita. Tukee replikointia (ja cachea). Tukee vikasietoisuutta. Tukee kryptausta, autentikointia,...... + paljon muuta. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.40/58
Lopuksi Hyvin samanlainen kuin RMI, mutta yleisempi. Tosin kaikkia ominaisuuksia ei kaikissa toteutuksissa. RMI:n ja RPC:n ja samanaikaisuuden ongelmat ovat myös CORBAn ongelmia. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.41/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista ja XML + protokollat (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.42/58
Luennon rakenne Protokollista Yleistä Protokolla asiakkaan ja palvelimen kannalta; tilat Kuvaaminen Muodostaminen Protokollasta luokiksi XML sopii mm. protokollan viestien esittämiseen Mikä XML on? Käsitteitä: XML, XSL, DTD, skeema,... XML:n käyttötilanteita, XML-esimerkkejä DOM ja SAX: XML-dokumentit Java-ohjelmissa. Esittäminen, jäsentäminen ja antijäsentäminen. Esimerkkejä. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.43/58
Protokollista: muodostaminen Pitää miettiä läpi kaikki asiakkaan ja palvelimen väliset keskustelut. Kirjataan keskustelun vaiheet viesteiksi; vältä turhia viestejä. Pitäisi pyrkiä minimoimaan erilaisten viestien määrää. Tärkeää huomioida erilaiset kuittaukset sekä virhetilanteista ilmoittaminen. Todellisuudessa keskustelu ei aina etene niin kuin toivotaan: virheistä toipumisen eräs keskustelun muoto (viestejä). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.44/58
Protokollista: viestien koodaus Binäärisessä muodossa, esim. kirjoitetaan olioita TCP-sokettien virran päällä. Tekstimuodossa (perinteinen vaihtoehto): suunnitellaan itse viestien muoto ja koodaus. Moderni variaatio: esitetään viestit XML:llä. Kaikkien edellisten vaihtoehtojen yhteydessä on hyvinkin järkevää esittää viestit ohjelmassa erilaisilla Java-olioilla. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.45/58
Protokollista: kuvaaminen Muodostetaan sovellukselle tiloja. Tilat ovat hajautetun järjestelmän kokonaistiloja, mutta usein liittyvät johonkin osapuoleen. Tilakaavio: Tilasta toiseen siirrytään vaihtamalla viestejä tekemällä keskustelu. Yksittäiset tilasiirtymät (keskustelu) voidaan kuvata UML:n sekvenssikaaviolla. Yleisemmin sekvenssikaaviolla voidaan kuvata tyypillisiä keskusteluja. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.46/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista ja XML + protokollat (2h) 9. Pilvialustat (2h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.47/58
Rakenne Yleiskuva Web 2.0: WWW-sovellusten luonne WWW:n RIA-tekniikoista yleisesti Vaadin Servlet-tekniikasta HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.48/58
Yleiskuva Pohditaan: Mitä osapuolia hajautetun järjestelmän kannalta web-sovelluksissa? Mikä muuttuu web:n myötä? Mihin tekniikan oikeastaan kohdistuvat? Mitä resursseja web-sovellusten osapuolilla on? HTML5:n tuoma muutos... HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.49/58
Vaadin IT Mill Oy (Turku). Katsotaan kuvia 3.1 ja 4.1 Vaadin-kirjasta. Vaadin-sovelluksen tekeminen näyttää standalone-sovelluksen (Swing:n tapainen) tekemiseltä. Pääpaino on GUI-asioissa. Palvelin puolella Vaadin-sovellus on servletti. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.50/58
Servletit Tilanne: Mikä servletti oikein on? WWW ja HTML-tiedostojen rakenne HTTP-protokolla Miten välittää tietoa? Lomakkeet Luokat Servlet ja HttpServlet Luokat HttpServletRequest ja HttpServletResponse sekä Cookie Esimerkkejä (Kirja: Java Servlet Programming, Jason Hunter & William Crawford, 1998.) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.51/58
Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (3h) 7. RPC (1h) 8. WWW-sovellustekniikoista ja XML + protokollat (2h) 9. Pilvialustat (1h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) + 1h pelivaraa HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.52/58
Palvelumallit SaaS (Software as a Service) Valmiiden sovellusten tarjoamista palveluna. Esim. Google Apps. PaaS (Platform as a Service) Tarjoaa sovellusten suoritusalustan. Esim. Google AppEngine, Windows Azure, Amazon EC2. IaaS (Infrastructure as a Service) Tarjoaa alustan, jonka päälle pystyttää resursseja (koneita, tietovarastoja). Esim. Amazon AWS?? (vai PaaS) IaaS:n ja PaaS:n on esitetty yhtyvän. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.53/58
Pilvilaskennan ja HOJ:n suhde Pohditaan! Pilvialustojen suhde käyttöjärjestelmiin? Pilvisovellusten yhteyskeinot pilven sisällä/ulkopuolelle toisiin sovelluksiin / resursseihin? Entä toisinpäin? Osapuolten nimeäminen pilvessä? Onko nykytilanne rajoittunut mitä tulevaisuus tuo tullessaan? HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.54/58
Luvun rakenne Mitä on pilvilaskenta? Tarkoitus, tavoitteet,... Pilvialustat Pilvialustojen ominaisuuksia Sovellusten tekemisestä Suhde hajautettuihin järjestelmiin? HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.55/58
Tenttimateriaali Kalvot (moodle). Moniste, luvut 1-9 (moodle). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.56/58
Vanhoja tenttikysymyksiä Miten TCP-pohjainen sokettiyhteys luodaan? Mitä huomionarvoisia seikkoja palvelinpuolen toteutukseen liittyy? Toteuta tuottaja-kuluttaja tilanteen mukainen ohjelma, jossa tuottajasäie tuottaa yhden kerrallaan satunnaisia luokan Piste alkioita, joita kuluttajasäie kuluttaa sitä mukaa kuin niitä tulee. Tuottaja tuottaa uuden vasta kun edellinen on kulutettu. Rajoitetaan satunnaisuutta niin, että tuotettaville pisteille on voimassa 0 x, y 10. Sovitaan, että kuluttaminen tarkoittaa tässä yhteydessä pisteen koordinaattiarvojen tulostamista. Kun kuluttajasäie saa pisteen (0, 0), sen tulee aiheuttaa tuottajasäikeen ja itsensä suorituksen loppuminen kuitenkaan lopettamatta taustalla olevaa sovellusta. Kirjoita luokka tuottaja- ja kuluttajasäikeitä varten sekä hallitse niiden välinen tiedonsiirto. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.57/58
The End Kiitoksia mielenkiinnostanne! Toivottavasti kurssi avasi teille uusia näkymiä hajautettujen sovellusten tekemiseen. Kurssi Käyttöliittymät jatkaa 3. periodilla asiakaspuolen tekniikoiden läpikäyntiä (tapahtumaohjattua ohjelmointia). Tsemppiä tenttiin!.. ja harjoitustyöhön (DL, Osa II: 25.1.2013). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.58/58