Lue ohje kokonaan läpi ennen kuin teet mitään.
Ideana on, että opiskelijat voivat AS-mikroluokassa (Huone 1521, TUAS-talo) tehdä työtä itsenäisesti. Mikroluokkaan on asennettu ympäristö, jossa on tarvittavat ohjelmistot työn tekemiseen.
Varsinaiset harjoituskerrat järjestetään AS-mikroluokassa torstaisin klo 12-14 ja 14-16. Harjoituksiin ilmoittaudutaan web-topissa. Harjoitustilaisuuksilla on kaksi tarkoitusta: 1) tilaisuuksissa käydään demoamassa ja tarkistuttamassa assistenteilla harjoitystyön vaiheita. 2) tilaisuuksissa on mahdollista saada opastusta työn tekemiseen. Vinkkejä saa ottaa myös muilta opiskelijoilta ja siihen jopa kannustetaan, sinun tulee kuitenkin kyetä selittämään ja demoamaan tekemääsi kun palautat harjoitustyön.
Jokaiseen AS-luokan koneeseen on asennettu Tomcat 5.5.17 ja Axis 1.4, joita käytetään paikallisesti. Tomcatin käynnistys- ja alasajoskriptit löytyvät windowsin startup-valikosta.
Kurssille on tehty hakemisto windows-palvelimelle: \\win.hut.fi\gen\courses\AS\75\3600. Sen alihakemistosta general löytyy työtä helpottavia skriptejä, sekä esimerkkejä. Alihakemmistoon students voi tallentaa kaikkien käyttöön ja muokattavaksi tiedostoja, jos sille ilmenee tarpeita.
Tämän jälkeen pitäisi voida käyttää komentoja wsdl2java, java2wsdl, adminclient ja tcpmon.
Kolme useasti tarvittua toimintoa (kurssin) Web Services -ympäristössä
WSDL ei käänny oikein (esim. could not find serializer for..) Tarkista, että kaikilla beaneilla on oikean muotoiset get- ja set-metodit. Tee myös palvelurajapintaan metodit, joiden deklaraatiossa mainitset luokat joita palvelu käyttää. Käyttämämme Axis tuntuu olevan niin tyhmä, ettei ymmärrä tehdä serialisoijia luokille joita ei ole määritelty metodideklaraaatiossa. Määrittele siis vaikkapa metodi public Book getBook(name);, jossa siis mainitset Book tietotyypin.
(Tomcat - restore-vbs ei pysty tekemään mitään)
Tämä pitää ajaa silloin kun tomcat ei ole päällä.
wsdl4j-1.5.1.jar org.apache.axis.client.AdminClient deploy.wsdd Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis/client/AdminClient
Tämä taas johtuu siitä ettei ole ajanut komentoa \\win.hut.fi\gen\courses\AS\75\3600\general\SetupAxis.bat .
Fault - Could not find class for the service named: fi.seco.courses.sws.example.CurrencyExchangeRateService Hint: you may need to copy your class files/tree into the right location (which depends on the servlet system you are using).; nested exception is: java.lang.ClassNotFoundException: fi.seco.courses.sws.example.CurrencyExchangeRateService
Ja tämä siitä ettei c:\programs\axis\webapp\axis\WEB-INF\lib-hakemistoon ole kopioitu esimerkin jar-tiedostoa, se on luotu jossain muussa hakemistossa kuin src tai mahdollisesti myös siitä ettei Tomcatia ole käynnistetty uudestaan.
HUOM: vaikka ensimmäisen harjoituksen voi suorittaa käytännössä vain kopioimalla komentorivejä, olennaista on ymmärtää mitä missäkin kohdassa tehdään. Siis kysy erityisesti siitä, jos et ymmärrä.
Asenna esimerkkiwebpalvelu (kopioi itsellesi hakemistosta \\win.hut.fi\gen\courses\AS\75\3600\general\sws-example-server) paikalliseen Tomcatiin. Kohta kohdalta ohjeet Toiminta 1:n kohdalla.
Kopioi itsellesi myös hakemisto \\win.hut.fi\gen\courses\AS\75\3600\general\sws-example-client. Luo edellisessä kohdassa asentamastasi esimerkkisovelluksesta client-edustajaluokat hakemistoon src wsdl2javalla. Kutsu palvelu-sovellusta client-sovelluksella. Kohta kohdalta ohjeet Toiminta 2:n kohdalla.
Kopioi itsellesi hakemisto \\win.hut.fi\gen\courses\AS\75\3600\general\sws-example-amazon-test-client. Luo client-edustajaluokat hakemistoon src komennolla "wsdl2java -p fi.seco.courses.sws.example.gen http://soap.amazon.com/schemas2/AmazonWebServices.wsdl". Kokeile Amazonin web-palvelun kutsumista annetulla client-sovelluksella. Pystytä tcpmon asetuksilla Listen Port = 8888, Target hostname = soap.amazon.com ja Target port = 80, ja muuta asiakasta niin että locatorista saadaan monitorin läpi kulkeva versio palvelusta: service = locator.getAmazonSearchPort(new URL("http://localhost:8888/onca/soap2")); (Lisäksi joudut muuttamaan java-koodin "throws ServiceException, RemoteException" muotoon "throws ServiceException, RemoteException, MalformedURLException" ja lisätä import-lauseet "import java.net.URL;" ja "import java.net.MalformedURLException". Ruksaa tcpmonista kohta XML Format ja aja asiakas. Katsele SOAP-viestien sisältöä.
Suunnittele toimijoiden (jälleenmyyjäpalvelun, Amazon.comin webpalvelun, maksupalvelun ja käyttäjän) välisen keskustelun kulku ja kussakin vaiheessa välitettävät tietoalkiot. Amazon.comin webpalvelu on tietysti valmiina, mutta muut keskustelun osakkaat (jälleenmyyjäpalvelu, maksupalvelu, käyttäjä) sinun täytyy suunnitella itse.
Vinkki: mieti miten prosessi etenee, mitkä toimijat missäkin vaiheessa keskustelevat toistensa kanssa, mikä on missäkin vaiheessa kunkin toimijan rooli, ja mitä tietoa tämän pitää kumppanilleen tuossa prosessin vaiheessa välittää.
Käytännössä mahdollisia prosessikulkuja on kaksi, eroten siinä miten maksuliikenne pankkipalvelun suhteen hoidetaan. Yritä keksiä kumpikin, ja vertaile niitä.
Jotta harjoitustyö olisi mielekäs (ja pääset siitä läpi) sinulla tulisi olla ainakin tiedot kirjoista, tilauksesta ja maksutapahtumasta. Rohkeat voivat tehdä laajemmankin sovelluksen. Kirjassa tulisi olla tilattavan tuotteen nimi ja hinta. Maksutapahtumassa tulisi ilmetä kokonaishinta, joka lasketaan kirjojen hinnasta sekä joitain muita tietoja, kuten maksajan nimi, luottokortin numero jne. Suunnittele tietomalli vapaavalintaisella menetelmällä, esimerkiksi käyttämällä UML:n luokkakaavioita. Suunnitelmasta tulisi käydä ilmi tietotyypit attribuuteille ja luokkakuvaukset metodeineen. Muista tukiluennolla annetut suunnitteluvinkit tietotyyppien ja listojen osalta, sekä bean spesifikaation vaatimukset getter ja setter metodien osalta.
Suunnittele lisäksi palvelukuvausten rajapinnat. Minkälaisia palveluita tarvitset, jotta tilaus ja maksaminen onnistuu ja kuvaa myös nämä. Käytännössä kannattaa tehdä jokaiselle erilliselle palvelulle metodeista koostuva rajapinta ja määritellä metodit ja niiden parametrit sekä palautusarvot. Ota huomioon että palvelut ovat tilattomia, eli et voi säilöä palvelinpäässä sessiotietoa. Täten palveluille tulisi voida kerralla lähettää kaikki sen tarvitsema tieto.
Kurssityössä ei tarvitse huolehtia transaktioihin tai tietoturvaan liittyvistä tiedon eheysperiaatteiden toteutumisesta, joten voit halutessasi tehdä myös useita palvelukutsuja vaativan palvelurajapinnan.
Tässä vaiheessa luokkia tai palvelurajapintoja ei kannata vielä toteuttaa eikä tehdä näistä webpalveluita, vain suunnitella ne! Tee suunnitelmasta pieni dokumentti (1-2 sivua) ja tuo se mukanasi seuraaviin harjoituksiin. Suunnitelmasta tulee käydä ilmi ainakin seuraavat asiat: (1) kommunikaatioprosessi eli kuka kutsuu mitä palvelua missäkin vaiheessa, (2) siirrettävät tietorakenteet kussakin vaiheessa ja (3) palveluiden rajapinnat.
Huomioitavaa: 1. Käytämme Amazon-yhteyksiin Amazonin vanhaa rajapintaa, kahdesta syystä: koska se on nykyistä yksinkertaisempi, ja koska siitä ei ole enää dokumentaatiota saatavilla. Teidän on siis syytä kaivaa tarvittavat tiedot WSDL-kuvauksesta (jonka "pitäisi" riittää) ja esimerkistä. 2. Tarkoitus ei siis ole oikeasti tilata mitään Amazonista asti, vaan tilauksen ja maksun välittäminen Amazonille on syytä jättää pois toiminnallisuudesta, tyytyen vain kuittaamaan tilaajalle että tilaus on ok.
Toteuta mahdollisesti suunnitelmaasi saamat korjausehdotukset. Kun suunnitelma on mielestäsi (ja ohjaajien mielestä) riittävän tarkka ja siinä on otettu huomioon mm. harjoitustyön tukiluennolla esiin tuodut asiat, voit toteuttaa palvelusi. Toteuta suunnittelemasi tietorakenteet, rajapinnat ja palveluluokka. Kirjoita asiakas ja testaa, että palvelu toimii. Joudut demoamaan toimivan palvelun harjoituksissa.