Java Message Service. Projekti 1C Rinnakkaisohjelmointi Syksy 2008, periodi Ismo Lehtonen Ville Kesola Ilkka Pullinen
|
|
- Teija Nurminen
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 Java Message Service Projekti 1C Rinnakkaisohjelmointi Syksy 2008, periodi Ismo Lehtonen Ville Kesola Ilkka Pullinen
2 1 Yleistä Lupa käyttää materiaalia yliopistolla opetustarkoituksiin ja jatkokehittelyyn JMS Johdanto Mikä on JMS? JNDI - Java Naming and Directory Interface API Arkkitehtuuri Yhteiset osat JMS Viestit Point-to-point viestintä (PTP) Publish / Subscibe viestintä (PUB/SUB) PUB/SUB vasteaika Kestoikä Aihekokonaisuuksien hallinta (Topic management) Aihe (Topic) TopicRequestor (aihe pyytäjä) Ohjelma esimerkit Point-to-Point esimerkki: Producer-Consumer kahdella prosessilla Producer.java Consumer.java Publisher-subscriber esimerkki PSNode.java LÄHTEET... 17
3 1 Yleistä 1.1 Lupa käyttää materiaalia yliopistolla opetustarkoituksiin ja jatkokehittelyyn Tätä dokumenttia saa käyttää yliopistolla opetustarkoituksiin ja jatkokehitykseen. 1
4 2 JMS Johdanto 2.1 Mikä on JMS? JMS on Javan sovellusohjelmaliittymä (API, application program interface). JMS:n avulla voidaan luoda, lähettää, vastaanottaa sekä lukea viestijärjestelmästä järjestelmän viestejä. JMS:llä toteutettuja sovelluksia voidaan käyttää välikerrosohjelmistoissa, jotka sitovat yrityksissä useita komponentteja yhteen, esimerkiksi hajautetussa järjestelmässä viestien välitykseen palvelinten välillä. Viestijärjestelmät toimivat normaalisti lähteestä kohteeseen (point-to-point) tai julkaise-tilaa (publish-subscribe) mallin mukaan. Lähteestä kohteeseen mallissa jokainen viesti laitetaan jonoon, josta ne käsitellään järjestyksessä. Julkaise-tilaa mallissa vastaanottajia voi olla useampia toisin kuin PTPyhteydessä. JMS sovellukset tarvitsevat toimiakseen JMS tarjoajan, joka toteuttaa JMS API:n määrittämät palvelut sekä hoitaa viestien säilytyksen (tarvittaessa) ja välityksen JMS sovellusten välillä. JMS tarjoajia on useita, esimerkkeinä OpenJMS ( ja esimerkkien testauksessa ja toimintaan laitossa käytetty Sun:n Java EE sovelluspalvelin ( jossa JMS:n toteuttaa tarkalleen OpenMQ, JNDI - Java Naming and Directory Interface API JNDI tarjoaa rajapinnan palveluun, jonne voidaan lisätä muita Java olioita tietyllä nimellä muiden olioiden saatavaksi. Olioiden JNDI:hin lisäyksen jälkeen muut sovellukset, esim JMS käyttävät eri osapuolet, voivat kysellä rajapinnan kautta halutun nimisen olion saatavuutta ja tämän yhteystietoja. JNDI toimii siis tavallaan kuten DNS, mutta kyselyn tuloksena saadaan haettava Java olio. JMS sovellukset käyttävät JNDI:tä kyselemään tarvittavat JMS tarjoajan tarjoamat hallinnalliset oliot käytettyjen yhteyksien luontia varten JMS sovellusten/jms tarjoajan välille ja etsimään käyttöönsä tarvitsevansa nimetyt jonot (Point-to-Point) ja/tai aihealueet (Publish-Subscribe). Sovellukseen luotavalle JNDI oliolle voidaan antaa alustuksen yhteydessä tiedot juuri tai toisesta JNDI -instanssista, johon luotava JNDI olio liitetään. Näin ympäri verkkoa erillisillä palvelimilla olevat sovellusten tarjoamat JNDI:t liitetään yhdeksi JNDI avaruudeksi tietyn JNDI juuri olion avulla. JNDI tarjoaa siis vain rajapinnan tietyille toiminnoille, jotka täytyy toteuttaa jonkin tarjoajan toimesta, joka liittää rajapinnan toiminnot esimerkiksi johonkin toiseen olemassa olevaan hakemisto-/nimipalveluun. 2
5 2.3 Arkkitehtuuri JMS sovellukset koostuvat seuraavasta komponenteista: asiakkaat, ei-jms asiakkaat, viestit, tuottaja sekä hallinnalliset oliot. Asiakkaat ovat Java-ohjelmia, jotka vastaanottajat ja lähettävät viestejä. Ei- JMS asiakkaat käyttävät järjestelmän omaa API:a JMS API:n sijaan, jolloin JMS tarjoaja muuntaa viestin muodon tarvittaessa JMS:n määrittämästä ei-jms asiakkaan ymmärtämään muotoon ja toisinpäin. Viestit ovat joukko viestejä, joita käytetään asiakkaiden välillä. JMS-tarjoaja toteuttaa JMSviestijärjestelmän sekä hallinnoi ja kontrolloi viestejä. Hallinnalliset oliot ovat valmiiksi konfiguroitu järjestelmään, jotka ylläpitäjä asettaa asiakkaiden käyttöön tarvittavien yhteyksien muodostamista varten JMS -asiakkaiden ja tarjoajan välille sekä käytettyjen jonojen ja topikien kyselyyn käyttöä varten. 2.4 Yhteiset osat JMS määrittää JMS sovelluksille yhteisen rajapinnan, joiden määrittämien metodien toteuttavia olioita käytetään hallinnallisten olioiden luomiseen JMS asiakkassovelluksen toimesta. JMS:n määrittämä rajapinta toteutetaan jonkin JMS tarjoajan toimesta. JMS tarjoajan määrittelemät ja tarjoamat hallinnalliset oliot JMS asiakkaiden käyttöön ovat ConnectionFactory ja Destination. ConnectionFactory:ä käytetään luomaan yhteys tuottajaan sisältäen tarjoajan määrittämät tarvittavat asetukset yhteyden luomista varten. Destination oliot pitävät kirjaa siitä, mihin viestit ovat tarkoitus lähettää (jono, aihealue) tarjoten mahdollisuuden käyttää haluttua nimeämiskäytäntöä käytetyissä osoitteissa. ConnectionFactory sekä Destination oliot ovat samassa nimiavaruudessa, josta JMSasiakas voi kysellä JNDI:n avulla esimerkiksi olion saatavuutta. Nämä oliot tukevat samanaikaisuutta. JMS asiakkaat luovat Connection olion saadun Connectionfactory luokan avulla. Connetion olio luodaan yhteyden autentikoinnin yhteydessä ja se on yhteysolio asiakkaan ja JMS tarjoajan välille luoden käytetyn TCP socket:n. Connection olion avulla luodaan yhteyttä käyttävät Session oliot (istunto) lopullista viestien lähetystä ja vastaanottamista varten. Yhteyden luonnin yhteydessä määritellään myös joko JMS tarjoajan toimesta tai asiakassovelluksen puolesta asiakastunniste (Client Identifier) yhteydelle. Connection olio sisältää myös mahdollisuuden määrittää poikkeuskäsittelijän (ExceptionListener), jonka kautta JMS tarjoaja ilmoittaa JMS asiakkaalle yhteysongelmasta (JMSException luokan olioiden avulla), jota JMS tarjoaja ei ole pystynyt korjaamaan. Connection olion määrittämä yhteys on luonnin jälkeen pysäytetyssä (stop) tilassa, jolloin viestejä asiakkaalle ei vielä tule. Connection olio asetetaan käynnissä (start) tilaan vasta sen jälkeen, kun tarvittava(t) viestienkäsittelijä olio(t) on luotu, jolloin tuleville viesteille on tarvittava käsittelijä sovelluksessa. JMS sovelluksen lopulliseen viestien lähettämiseen ja vastaanottoon tarvittavat oliot MessageConsumer ja MessageProvider luodaan Session olion avulla, ja vaikka niitä voidaan luoda monta yhdelle istunnolle, ne eivät tue rinnakkaisuutta vaan niitä tulee käyttää sarjallisesti. Connection olion luoma yhteys voidaan pysäyttää ja käynnistää käytön aikana ja asiakas voi lähettää MessageProvider olion avulla viestejä ulospäin yhteyden ollessa pysäytettynä. JMS asiakassovelluksen 3
6 sammutuksen yhteydessä luodut Session olio ja Connection olion yhteys tulee sulkea hallitusti. Session olio siis tarjoaa muun muassa metodit yhteyden viestien käsittelyyn ja luomiseen, tarvittavien viestien lähetys ja vastaanotto olioiden luontia varten (MessageProvider, MessageConsumer), JMS-tarjoaja optimoidut metodit lähetettävien viestiolioiden luomista varten sekä metodit tarvittavien olioiden luomiseen väliaikaisten ja dynaamisten jonojen tai aihealueiden hallintaa ja käyttöä varten (TemporaryQueues, TemporaryTopics, Queues, Topics). Session olio mahdollistaa myös tarvittaessa transaktioihin perustuvat viestien lähetyksen ja käsittelyn ja pitää huolta vastaanotettujen viestien kuittaamisesta sessioon määritetyllä tavalla. Session olio pitää huolta viestien vastaanotosta oikeassa järjestyksessä. Viestien vastaanottoon luotu MessageConsumer olio voi vastaanottaa viestejä joko synkronisesti receive() -metodin avulla tai asynkronisesti luomalla MessageListener rajapinnan toteuttavan MessageConsumer olion tätä varten. Viestien lähetykseen luotu MessageProvider olio luodaan antaen käytetty Queue tai Topic olio (Kohdealueen jonon tai aihealueen toimintojen rajapinta Destination oliolle) parametrina olion luovalle metodille määrittäen kohteen, johon lähetettävät viestit lähetetään. JMS määrittää kaksi eri viestien lähetys tapaa, joista toisessa viestit lähetetään korkeintaan kerran (NON_PERSISTENT, eli sallitaan viestien hukkuminen matkalla) ja toisessa viestit tulee lähettää kerran ja vain kerran (PERSISTENT, eli lähetettävää viestiä ei saa hukata ja lähetyksen tulee onnistua). Lähetettävälle viestille voidaan määrittää myös time-to-live aika, jonka jälkeen viesti poistetaan JMS tarjoajan toimesta jos sitä ei ole saatu lähetettyä vastaanottajalle. 2.5 JMS Viestit JMS määrittelee myös siinä käytettyjen viestien muodon. Viesti sisältää seuraavat pääosat: Otsikko kentät, joilla määritellään viestin vakiotiedot ja joilla annetaan ohjeita viestin käsittelyyn JMS tarjoajalle ja JMS asiakkaille, lisäasetukset (ominaisuudet), joilla sovellukset voivat lisätä tarvitsemiaan otsikkokenttiä sekä viimeisenä itse viestitieto (runko, body). Jotkin otsikkokenttien tiedoista voidaan sopia käyttämättömiksi viestin koon minimoimiseksi (JMS tarjoajan salliessa tämän ominaisuuden), jolloin sovittujen kenttien arvot sisältävät vain nolla tai tyhjämerkin. Lisäasetuksiin voidaan määrittää vain tietyn muotoisia arvoja ja jotkin ominaisuuksien nimet ovat JMS:n varaamia tulevaa käyttöä varten (kuten JMSX alkuiset ominaisuuksien nimet). 4
7 3 Point-to-point viestintä (PTP) Point-to-point viestintä on lähettäjien ja vastaanottajien välistä suoraa viestintää, jossa yhdellä viestillä on vain yksi vastaanottaja. Jokaisella vastaanottajalla on oma jononsa jonne lähettäjät välittävät sille tarkoitetut viestit. Jonot toimivat kuten geneeriset postilaatikot, toisin sanoen kunkin jonon luonti ja ylläpito vaatii resursseja. Tavallisesti vastaanottajan kaikki viestit toimitetaankin yhteen jonoon. Vastaanottaja poimii sitten jonostaan viestin ja vahvistaa viestin purettuaan sen onnistuneen purun. Viestit säilytetään jonossa, kunnes vastaanottaja poimii ne tai ne vanhentuvat. Viestin lähettäjän ja vastaanottajan välillä ei näin ollen ole aikariippuvuutta, vastaanottaja voi poimia viestin kun se pääsee suoritukseen. JMS PTP malli määrittelee kuinka käyttäjät toimivat jonojen kanssa, kuinka ne löydetään, ja kuinka niihin välitetään ja niistä haetaan viestejä. Jono oliossa (Queue) on määritelty tarjoajakohtainen jonon nimi, jonka perusteella käyttäjät voivat määrittää jonon identiteetin JMS:n metodeille. Tarvittaessa ajon aikana voidaan luoda myös TemporaryQueue (väliaikainen jono) tyyppisiä jonoja ja ne ovat olemassa vain yhteyden ajan (QueueConnection olion olemassa olon ajan). Jonot siis luodaan yhteyden muodostuksessa. JMS ei tarjoa palveluita pitempikestoisten jonojen käyttöön. Tämä ei ole ongelma, koska useimmat palvelunkäyttäjät käyttävät staattisesti määriteltyjä jonoja. Jos jonossa on vastaanottajan käsittelemiä, mutta vahvistamattomia viestejä yhteyden sulkeutuessa pitää nämä viestit säilyttää ja lähettää uudelleen kunnes vastaanottaja seuraavankerran ottaa yhteyden jonoon. Palvelunkäyttäjät käyttävät QueueConnectionFactory oliota luodessaan yhteyden QueueConnection olion avulla JMS PTP palveluntarjoajaan. Edelleen QueueConnection oliota käytetään luomaan QueueSession olioita, joilla puolestaan tarvitaan viestien luontiin ja vastaanottoon. QueueSession luokkaa tarjoaa metodit QueueReceiver, QueueSender, QueueBrowsers ja TemporaryQueues olioiden luontiin. Vastaanottaja käyttää QueueReceiver olion metodeja hakiessaan viestejä jonosta. Olioon voidaan määritellä, että jonosta haetaan vain tiettyjä viestejä toisin sanoen viestejä ei ole välttämätöntä käsitellä saapumisjärjestyksessä. Vastaanottaja käyttää QueueBrowser oliota jonossa olevien viestien tutkimiseen, ilman, että niitä täytyy käsitellä/poistaa jonosta. Selausmetodi palauttaa java.util.enumeration, jota voidaan käyttää joko koko jonon sisällön tai vain jonon sisältämien tiettyjen viestien tutkimiseen. PTP rajapinta QueueConnectionFactory QueueConnection Queue QueueSession QueueSender QueueReceiver Yleinen JMS rajapinta ConnectionFactory Connection Destination Session MessageProducer MessageConsumer 5
8 4 Publish / Subscibe viestintä (PUB/SUB) Pub/Sub malli määrittelee kuinka JMS-käyttäjät julkaisevat ja hakevat viestejä tunnetuista, sisällön perusteella järjestetyistä "solmuista". JMS:ssä näitä solmuja kutsutaan aihekokonaisuuksiksi (topic). Aihekokonaisuus voidaan käsittää viestien välittäjäksi, joka kokoaa ja jakaa sille toimitettuja viestejä. Tässä mallissa aihekokonaisuuksien välittäjä toimii siis välikätenä viestien julkaisijoiden ja vastaanottajien välillä (vrt. PTP malli). Käyttäjä käyttää TopicConnectionFactory luokkan oliota luodakseen yhteyden TopicConnection olion avulla JMS PUB/SUB palveluntarjoajaan. TopicConnection on aktiivinen yhteys palveluntarjoajaan. Käyttäjä käyttää TopicConnection oliota luodakseen yhden tai useampia TopicSession olioita viestien luontiin ja vastaanottoon. TopicSession luokka tarjoaa metodit TopicPublisher, TopicSubsciber ja TemporatyTopics luokkien olioiden luontiin. Se tarjoaa myös unsubscibe metodin asiakkaan kestoiällä varustetun kirjautumisten (durable subscription) poistamiseen. Julkaisijat ja vastaanottajat ovat aktiivisia, kun niiden edustamat java oliot ovat olemassa. JMS tukee myös vaihtoehtoista durability (kestoikä) ominaisuutta vastaanottajille, jonka avulla JMS muistaa viestin vastaanottajan, vaikka tämä ei olisikaan aktiivinen. Jos järjestelmässä on kuittaamattomia viestejä TopicSession olion määrittämän istunnon sulkemisen aikaan, kestoiällä varustetun TopicSubscriber olion täyttyy säilyttää ja uudelleen välittää ne. Jos kirjautuminen on toteutettu normaalilla TopicSubscriber luokalla näin ei tarvitse menetellä. Kestoiällä varustetut TopicSubscribe oliot vievät JMS palveluntarjoajalta enemmän resursseja. TopicPublisher oliota käytetään aiheeseen liittyvien viestien lähettämiseen aihekokonaisuuteen. TopicSubsciber oliota käytetään vastaavasti aiheeseen liittyvien viestien vastaanottoon. Viestin valitsimen (message selector) filtteroi viestejä ja määrittelee mitkä toimitetaan vastaanottajalle. Käyttäjän näkökulmasta palveluntarjoaja rekisteröi julkaisijat ja vastaanottajat dynaamisesti kirjautumisen yhteydessä. Palveluntarjoajan kannalta näiden luontiin voidaan tarvita muutakin. JMS ei määrittele aiheiden/viestien varastointiin allokoitua tilaa tai resurssien ylivuodon seurauksia JMS tarjoajien toteuttaessa nämä kukin omalla tavallaan. JMS PUB/SUB palveluntarjoajan täytyy taata yhtäläinen toimivuus JMS käyttäjille huolimatta siitä käyttääkö JMS käyttäjäohjelma PUB/SUB rajapintaa vai yleistä JMS rajapintaa. PUB/SUB rajapinta Topic connection factory Topic connection Topic TopicSession TopicPublisher TopicSubscriber Yleinen JMS rajapinta Connection Factory Connection Destination Session MessageProducer MessageConsumer 6
9 4.1 PUB/SUB vasteaika Kaikissa PUB/SUB järjestelmissä on tyypillisesti jonkin verran viivettä. Vastaanottajan näkemät viestit voivat vaihdella riippuen siitä kuinka nopeasti JMS palveluntarjoaja aktivoi vastaanottajan olemassaolon ja kuinka kauan itse viestien välitys kestää. Esim. vastaanottaja voi olla saamatta joltain kaukaiselta julkaisijalta lähetettyä viestiä, koska palveluntarjoaja ei ole ehtinyt julkaista uuden vastaanottajan olemassaoloa koko järjestelmään. Toisaalta aktivoitu vastaanottaja voi saada myös vanhoja viestejä jotka ovat palvelutarjoajalla vielä tallella. JMS ei määrittele tarkkaa välitys- tai toimintalogiikkaa sille ajalle kun palveluntarjoaja aktivoi uuden käyttäjän. Toiminta taataan vasta kun uusi käyttäjä on määritelty koko järjestelmään. 4.2 Kestoikä Vastaanottaja näkee julkaistut viestit ainoastaan ollessaan aktiivinen. Vastaanottaja voi määritellä itselleen erillisen, kestoiällä varustetun, vastaanottajan (durable subscriber) statuksen kirjautuessaan järjestelmään. Tällöin JMS säilyttää välitettyjä viestejä, vaikka vastaanottaja ei olisikaan aktiivinen, kunnes vastaanottaja aktivoituu ja saa viestit tai kunnes viestit vanhenevat. Kaikkien JMS palveluntarjoajien pitää pystyä ajamaan JMS sovelluksia, jotka dynaamisesti luovat ja tuhoavat kestoiällä varustettuja kirjautumisia. 4.3 Aihekokonaisuuksien hallinta (Topic management) JMS ei määrittele toimintoja aihekokonaisuuksien hallintaan, luontiin ja poistamiseen. Jotkin tuotteen vaativat, että aiheet on staattisesti määritelty, mutta joillain ei ole minkäänlaista aiheiden hallintaa. 4.4 Aihe (Topic) Topic olioiden avulla viestien välittäjä määrittelee aiheen identiteetin JMS metodeille. Monet PUB/SUB palveluntarjoajat määrittelevät aiheet hierarkioiksi ja tarjoavat monia tapoja kirjautua hierarkian eri osiin. JMS ei määrittele rajoituksia koskien mitä Topic olio edustaa. Se voi olla oksa aihehierarkiassa tai se voi olla suurempi osa hierarkiasta. Aiheiden ja niihin liittyvien kirjautumisien organisointi on tärkeä osa SUB/PUB sovelluksen arkkitehtuuria. JMS ei määrittele tapaa kuinka tämä tulisi toteuttaa. Väliaikainen aihe (TemporaryTopic) on erityisoolio, joka luodaan yhteyden (Connection) tai aiheyhteyden (TopicConnection) ajaksi. Se on aihe, jota voi käyttää ainoastaan sen luonut yhteys. 7
10 4.5 TopicRequestor (aihe pyytäjä) JMS tarjoaa TopicRequestor apuluokan palvelupyyntöjen yksinkertaistamiseen. TopicRequestor luokan konstruktorille annetaan parametreina TopicSession olio ja haluttu aihe. Se luo TemporaryTopic olion vastauksille ja tarjoaa request() metodin joka välittää halutun viestin ja odottaa sen vahvistusta. 8
11 5 Ohjelma esimerkit Alla olevat esimerkit saa käännettyä ja ajettua seuraavan ohjeen mukaan (Esimerkit toimivat myös muiden JMS tarjoajien avulla jolloin JMS hallintaresurssien luonti saattaa tapahtua erilailla). Ohje esimerkkisovellusten ajoon pätee vain ympäristössä, jossa sekä JMS tarjoaja, että esimerkkisovellukset ajetaan samalla palvelimella. Jos sovellukset ajetaan eri palvelimilla (kuten oikeassa elämässä tarkoitus on), tulee JNDI alustaa toisella tavalla (Ottamaan yhteys juuri JNDI olioon). 1. Lataa Java 2 EE "GlassFish" ( "GlassFish Java EE", "Download Java EE 5 SDK Update 6 for Windows, English") 2. Asenna sovellus. Windows puolella normaali windows asennus. Internet sivustojen mukaan Vistassa kannattaa kohdepolkuna käyttää jotain muuta, kuin oletuksena annettavaa "Program Files" hakemistoa. 3. Lisää CLASSPATH ymäristömuuttujaan seuraavat jar -paketit: 1. <javaeesdk asennushakemisto>\lib\javaee.jar 2. <javaeesdk asennushakemisto>\lib\appserv-rt.jar 3. <javaeesdk asennushakemisto>\lib\appserv-admin.jar 4. <javaeesdk asennushakemisto>\lib\install\applications\jmsra\imqjmsra.jar 4. Käynnistä Java EE SDK (GlassFish) oletus palvelin Windows: Start -> Programs -> Sun Microsystems -> Java EE 5 SDK -> Start default server, HUOM! Vistassa (Home 64bit) tuota polkua ei löydy ollenkaan yhden testatun asennuksen tapauksessa) Komentokehoitteesta: asadmin start-domain domain1 5. Käynnistys pitäisi onnistua ilman ongelmia, olettaen että tarvittavat portit eivät ole varattuna. 6. Mene selaimella "Java System Application Server Consoleen" joka löytyy oletus asennuksella osoitteesta 7. Kirjaudu asennuksen yhteydessä määrittämälläsi administrator tunnuksella sisään 8. Mene vasemman menun polkuun: Configuration -> Java Message Service 9. Klikkaa oikealle ilmestynyttä ping ikonia testataksesi että JMS provider on toiminnassa, ilmoitus on "Ping succeeded: JMS service is running" kun kaikki ok JMS tarjoajan kohdalla. 10. Mene vasemman menun polkuun: Resources -> JMS Resources -> Destination Resources 11. Klikkaa "new" ikonia oikealla luodaksesi esimerkeissä käytetyt jonot (ja topic:t) 12. Poin-To-Point Jonon (Queue) luonti (aseta seuraavat tiedot näkyviin kenttiin) 1. JNDI Name: jmstestijono (Ulospäin näkyvä jonon nimi) 2. Physical Destination Name: jono1 (Sisäinen jono "fyysinen" jono jonka JMS provider luo automaattisesti ja jonka kautta ne viestit liikkuu) 3. Resource Type: javax.jms.queue (Jonon tyyppi) 13. Publish-subscribe aiheen (Topic) luonti (aseta seuraavat tiedot näkyviin kenttiin) 9
12 1. JNDI Name: jmstestitopic (Ulospäin näkyvä aihealueen nimi) 2. Physical Destination Name: aihe1 (Sisäinen jono "fyysinen" jono jonka JMS provider luo automaattisesti ja jonka kautta ne viestit liikkuu) 3. Resource Type: javax.jms.topic (Jonon tyyppi) 14. Yhteyden toteuttajan luominen (Connection factory) 1. JNDI Name: connectionfactory (Ulospäin näkyvä nimi) 2. Resource Type: javax.jms.connectionfactory (Resurssin tyyppi) Käännä esimerkit normaalisti javac <tiedostonnimi.java> 15. Käännä esimerkit normaalisti javac <tiedostonmini.java> 16. Aja esimerkit normaalisti java <tiedostonimi> ottaen huomioon mahdolliset kommentit esimerkin alussa. 5.1 Point-to-Point esimerkki: Producer-Consumer kahdella prosessilla Point-to-Point esimerkissä on toteutettu Producer-Consumer ongelman ratkaisu kahdelle prosessille käyttäen apuna JMS:ä, jolloin bufferina toimii JMS:n jono (queue). Ohjelmat voi kääntää 4. kohdan ohjeen mukaan. Ohjelmat voi ajaa joko samaan aikaan tai eri aikaan tai peräjälkeen. Consumer prosessi jää odottamaan ikuisesti kulutettavaa, jolloin producer on hyvä käynnistää jossain vaiheessa Producer.java import javax.naming.*; import javax.jms.*; public class Producer { public static void main(string[] args) { int maxmessages, messagescreated; ConnectionFactory connectionfactory=null; /* JMS tarjoajan antama olio * yhteyksien muodostamista varten Connection myconnection=null; /* Yhteys luokka joka muodostetaan * ConnectionFactoryn avulla Session mysession=null; /* Istunto luokka joka muodostetaan * yhteys olion avulla Context JNDIContex=null; /* Paikallinen olio JNDI:lle Queue myqueue=null; MessageProducer myproducer; TextMessage mymessage; /* JNDI:n kautta kyseltävä käytettävä * jono JMS tarjoajalta /* Istunto olion avulla luotava * viestien lähettäjä olio /* Istunto olion avulla luotava * lähetettävä viesti olio 10
13 maxmessages=messagescreated=0; /* Parametrinä annetaan monta viestiä tuotetaan ja lähetetään maksimissaan if (args.length<1) { System.out.println("Anna parametrina monta viestiä tuotetaan maksimissaan."); maxmessages=new Integer(args[0]); catch (Exception e) { if (maxmessages<1) { System.out.println("Parametrinä annettava viestien määrä tulee " +"olla positiivinen kokonaisluku."); /* Instanssin käyttämä JNDI olio, jonka olettaa käytettävien * JNDI oletus asetusten olevan jndi.properties tiedostossa * joka löytyy CLASSPATH:n määritellystä appserv-rt.jar paketista. JNDIContex=new InitialContext(); catch (NamingException e) { /* JMS tarjoaman ConnectionFactoryn kysely ja haku JNDI:stä connectionfactory=(connectionfactory)jndicontex.lookup("connectionfactory"); catch (NamingException e) { /* Käytetyn jono -olion hakeminen JNDI:stä myqueue=(queue)jndicontex.lookup("jmstestijono"); catch (NamingException e) { /* Käytetyn yhteyden ja yhteys olion luominen myconnection = connectionfactory.createconnection(); /* Yhteydessä käytetyn istunto olion luominen * false = Ei transaktioiden käyttöä * Session.AUTO_ACKNOWLEDGE = Automaattinen viestien kuittaus tapa mysession=myconnection.createsession(false, Session.AUTO_ACKNOWLEDGE); /* Viestien tuottaja olion luominen myproducer=mysession.createproducer(myqueue); //myconnection.start(); while (messagescreated<maxmessages) { messagescreated++; /* Odotetaan maks 2 sekuntia viestien välillä int i=(int)(math.random()*2000); System.out.println("\nTuotetaan tuotettavaa (odotetaan "+i+" millisekuntia)..."); /* Odotetaan maks 2 sekuntia viestien välillä Thread.sleep( i); catch (InterruptedException e) { 11
14 /* Luodaan lähetettävä TextMessage -tyyppinen viesti olio mymessage=mysession.createtextmessage(); mymessage.settext("tuotettava tieto nro "+messagescreated); System.out.println("Lähetetään tuotettu tieto viestinä eteenpäin..."); myproducer.send(mymessage); System.out.println("Viesti lähetetty eteenpäin."); /* while (...) System.out.println("\nLähetetään viesti sisältäen tiedon lähetyksen lopusta."); mymessage=mysession.createtextmessage(); mymessage.settext("end of production"); myproducer.send(mymessage); System.out.println("\nSuljetaan yhteys"); mysession.close(); myconnection.close(); catch (JMSException e) { /* try /* Sammutetaan ohjelma tylysti. Testatessa esimerkit jäivät hengaamaan loppuun * odottaen, jonkin taustalle luodun threadin sammumista. * Seuraavissa linkeissä on asiasta keskustelua: * - * - System.exit(0); /* main() /* class Producer Consumer.java import javax.naming.*; import javax.jms.*; public class Consumer { public static void main(string[] args) { ConnectionFactory connectionfactory=null; /* JMS tarjoajan antama olio * yhteyksien muodostamista varten Connection myconnection=null; /* Yhteys luokka joka muodostetaan * ConnectionFactoryn avulla Session mysession=null; /* Istunto luokka joka muodostetaan * yhteys olion avulla Context JNDIContex=null; /* Paikallinen olio JNDI:lle Queue myqueue=null; MessageConsumer myconsumer; TextMessage mymessage; String strmessage; /* Instanssin käyttämä JNDI olio, jonka olettaa käytettävien /* JNDI:n kautta kyseltävä käytettävä * jono JMS tarjoajalta /* Istunto olion avulla luotava * viestien vastaanottaja olio /* Vastaanottaja oliolta saatava * vastaanotettu viesti olio 12
15 * JNDI oletus asetusten olevan jndi.properties tiedostossa * joka löytyy CLASSPATH:n määritellystä appserv-rt.jar paketista. JNDIContex=new InitialContext(); catch (NamingException e) { /* JMS tarjoaman ConnectionFactoryn kysely ja haku JNDI:stä connectionfactory=(connectionfactory)jndicontex.lookup("connectionfactory"); catch (NamingException e) { /* Käytetyn jono -olion hakeminen JNDI:stä myqueue=(queue)jndicontex.lookup("jmstestijono"); catch (NamingException e) { /* Käytetyn yhteyden ja yhteys olion luominen myconnection=connectionfactory.createconnection(); /* Yhteydessä käytetyn istunto olion luominen * false = Ei transaktioiden käyttöä * Session.AUTO_ACKNOWLEDGE = Automaattinen viestien kuittaus tapa mysession=myconnection.createsession(false, Session.AUTO_ACKNOWLEDGE); /* Viestien tuottaja olion luominen, parametrinä käytettävän jonon olio myconsumer=mysession.createconsumer(myqueue); myconnection.start(); do { System.out.println("\nOdotetaan kulutettavaa..."); /* Parametrinä arvo kuinka kauan odotetaan, jolloin 0 tarkoittaa, että odotetaan * kunnes seuraava viesti saadaan eli blokataan kuluttaja prosessi. mymessage=(textmessage)myconsumer.receive(0); System.out.println("Käsitellään vastaanotettua viestiä..."); System.out.println("Saatu viesti: "+mymessage); strmessage=mymessage.gettext(); while (strmessage!=null &&!strmessage.equals("end of production")); System.out.println("\nLähetyspää lähetti viestin ilmoittaen lähetyksen lopusta."); System.out.println("\nSuljetaan yhteys"); mysession.close(); myconnection.close(); catch (JMSException e) { /* try /* Sammutetaan ohjelma tylysti. Testatessa esimerkit jäivät hengaamaan loppuun * odottaen, jonkin taustalle luodun threadin sammumista. * Seuraavissa linkeissä on asiasta keskustelua: * - * - System.exit(0); 13
16 /* main() /* class Consumer 5.2 Publisher-subscriber esimerkki Publisher-subscriber esimerkkinä on toteutettu yksittäinen node luokka, joka lähettää tarvittaessa viestejä muille nodeille ja muuten käy tarkistamassa, onko viestejä muilta nodeilta tarjolla. Esimerkkiä voi käyttää jonkin hajautetun järjestelmän noden pohjana. Kääntö 4. kohdan ohjeen mukaan ja ajo käynnistämällä käännetty esimerkki ohjeen mukaan rinnakkain omiin komentokehoitteesiinsa pyörimään. Sovellus sammuvat vain painamalla CTRL-C PSNode.java import javax.naming.*; import javax.jms.*; public class PSNode { public static void main(string[] args) { int maxmessages, messagescreated; TopicConnectionFactory connectionfactory=null; /* JMS tarjoajan antama olio * yhteyksien muodostamista varten TopicConnection myconnection=null; /* Yhteys luokka joka muodostetaan * ConnectionFactoryn avulla TopicSession mysession=null; /* Istunto luokka joka muodostetaan * yhteys olion avulla Context JNDIContex=null; /* Paikallinen olio JNDI:lle Topic mytopic=null; /* JNDI:n kautta kyseltävä käytettävä * "topic" JMS tarjoajalta TopicPublisher mysender; TopicSubscriber myreceiver; TextMessage mymessage; /* Istunto olion avulla luotava * viestien lähettäjä olio /* Istunto olion avulla luotava * viestien vastaanottaja olio /* Istunto olion avulla luotava * lähetettävä viesti olio /* Instanssin käyttämä JNDI olio, jonka olettaa käytettävien * JNDI oletus asetusten olevan jndi.properties tiedostossa * joka löytyy CLASSPATH:n määritellystä appserv-rt.jar paketista. JNDIContex=new InitialContext(); catch (NamingException e) { /* JMS tarjoaman TopicConnectionFactoryn kysely ja haku JNDI:stä connectionfactory=(topicconnectionfactory)jndicontex.lookup("connectionfactory"); catch (NamingException e) { 14
17 /* Käytetyn topic -olion hakeminen JNDI:stä mytopic=(topic)jndicontex.lookup("jmstestitopic"); catch (NamingException e) { /* Käytetyn yhteyden ja yhteys olion luominen myconnection=connectionfactory.createtopicconnection(); /* Yhteydessä käytetyn istunto olion luominen * false = Ei transaktioiden käyttöä * Session.AUTO_ACKNOWLEDGE = Automaattinen viestien kuittaus tapa mysession=myconnection.createtopicsession(false, Session.AUTO_ACKNOWLEDGE); /* Viestien lähettäjä olion luominen mysender=mysession.createpublisher(mytopic); /* Viestien vastaanottaja olion luominen myreceiver=mysession.createsubscriber(mytopic); myconnection.start(); while (true) { /* Odotetaan maks 2 sekuntia viestien välillä int i=(int)(math.random()*2000); System.out.println("\nTehdään noden omia juttuja (odotetaan "+i +" millisekuntia)..."); /* Odotetaan maks 2 sekuntia viestien välillä Thread.sleep( i); catch (InterruptedException e) { /* Arvotaan, lähetetäänkö viestiä muille i=((int)(math.random()*100)); if ( i<20) { System.out.println("Muodostetaan viestiä..."); mymessage=mysession.createtextmessage(); mymessage.settext("viesti nodesta "+mysender); /* Asetetaan oma lisäasetus lähetettävään viestiin, josta * selviää viestin lähettäjän ID, jolloin saadaan selville, tuliko * viesti itseltä vai muualta. mymessage.setstringproperty("sendernodeid", mysender.tostring()); mysender.publish(mymessage); else { System.out.println("Haetaan viestejä..."); mymessage=(textmessage)myreceiver.receive(1); if (mymessage!=null) { String SenderNodeID=myMessage.getStringProperty("SenderNodeID"); /* Onko saatu viesti oma lähettämä? if (SenderNodeID==null!SenderNodeID.equals(mySender.toString())) { System.out.println("Saatiin viesti "+mymessage); else { System.out.println("Saatu viesti oli itse lähetetty."); /* if (...) /* if (...) /* if (...) /* while (...) catch (JMSException e) { 15
18 finally { mysession.close(); myconnection.close(); catch (JMSException e) { /* try /* try /* main() /* class PSNode 16
19 6 LÄHTEET Wikipedia: Java Message Service Java Message Service Specification - version
JMS RIO PR1. TKTL s2008. Tekijät: Aki Valkama Lauri Savolainen Niklas Jahnsson
JMS RIO PR1 TKTL s2008 Tekijät: Aki Valkama Lauri Savolainen Niklas Jahnsson Sisällys 0 Johdanto...3 1 Menetelmän perusidea...4 1.1 JMS:n komponentit...4 1.1.1 Provider...4 1.1.2 Client...4 1.1.3 Producer...4
Java Messaging Service (JMS)
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ää
CLOUDBACKUP TSM varmistusohjelmiston asennus
Luottamuksellinen JAVERDEL OY CLOUDBACKUP TSM varmistusohjelmiston asennus Copyright 2 (9) SISÄLLYSLUETTELO 1 ASENNUSOHJE WINDOWS KÄYTTÖJÄRJESTELMÄLLÄ VARUSTETTUIHIN LAITTEISIIN... 3 1.1 Yleistä... 3 1.2
Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti
Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi
8. Näppäimistöltä lukeminen 8.1
8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)
8. Näppäimistöltä lukeminen 8.1
8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)
Olio-ohjelmointi Javalla
1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi
JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4
Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.
4. Luokan testaus ja käyttö olion kautta 4.1
4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään
12. Näppäimistöltä lukeminen 12.1
12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.
20. Javan omat luokat 20.1
20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)
Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang
Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)
Sisällys. 14. Poikkeukset. Johdanto. Johdanto
Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
Eclipse 3.1 Pikaopas versio 1.0
Anne Benson/Tanja Bergius Opintojaksojen atk84d ja ict02d käyttöön 1/17 Eclipse 3.1 Pikaopas versio 1.0 Pikaohjeen sisältö 1. Esittely 2. Asennus ja poistaminen 3. Sovelluskehitys 4. Sovelluksen toteutus
812341A Olio-ohjelmointi Peruskäsitteet jatkoa
812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää
14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
Maventa Connector Käyttöohje
Maventa Connector Käyttöohje 17.4.2015 Sisällys 1. Esittely... 2 1.1. Käytön edellytykset... 2 1.2. Tuetut aineistomuodot... 2 2. Asennustiedosto... 3 2.1. Sisäänkirjautuminen... 7 3. Asetuksien määrittäminen...
Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0
Toukokuu 2014 1 (11) Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0 Päivitysohje Toukokuu 2014 2 (11) Sisällysluettelo 1. Tehtävät ennen versiopäivitystä... 3 1.1. Ohjelmistomuutosten luku...
Sisällys. 14. Poikkeukset. Johdanto. Johdanto
Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla
Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004
Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;
17. Javan omat luokat 17.1
17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)
WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY
1 WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY 10.4.2015 Lounea Oy Tehdaskatu 6, 24100 Salo Puh. 029 707 00 Y-tunnus 0139471-8 www.lounea.fi Asiakaspalvelu 0800 303 00 Yrityspalvelu 0800 303 01 Myymälät 0800 303
14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla
1 Tehtävän kuvaus ja analysointi
Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.
Opus SMS tekstiviestipalvelu
Opus SMS tekstiviestipalvelu Sivu 1 / 17 1. Yleistä toiminnosta Opus SMS tekstiviestipalvelun avulla voidaan Opus Dental potilashallintaohjelmasta Lähettää muistutuksia tekstiviestillä Lähettää tiedusteluita
Rinnakkaisohjelmointi, Syksy 2006
Rinnakkaisohjelmointi, Syksy 2006 17.12.2006 Opintopiiri WTF Mika Holmström Paula Kemppi Janne Piippo Lasse Lukkari Javan semaforit 1. Menetelmän käyttötarkoitus ja sovellusalue Semaforin idea kehitettiin
Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.
1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).
Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen
Pedacode Pikaopas Java-kehitysympäristön pystyttäminen Pikaoppaan sisältö Pikaoppaassa kuvataan, miten Windowstyöasemalle asennetaan Java-ohjelmoinnissa tarvittavat työkalut, minkälaisia konfigurointeja
D-Link DSL-504T ADSL Reitittimen Asennusohje ver. 1.0
D-Link DSL-504T ADSL Reitittimen Asennusohje ver. 1.0 Tervetuloa D-Link ADSL reitittimen omistajaksi. Tämän ohjeen avulla saat reitittimesi helposti ja nopeasti toimimaan. Tämä ohje kannattaa lukea läpi
Aimo-ohjauspaneelin käyttöohje Sisällys
Aimo-ohjauspaneelin käyttöohje Sisällys Tunnusten tilaaminen... 2 Sisäänkirjautuminen... 3 Käyttöliittymä... 4 Ryhmätekstiviestien lähettäminen... 5 Ryhmät... 7 Push-viestien lähettäminen... 12 Mobiilipalvelun
Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.
MagicDraw-pikaohje Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia. Alkuvalmistelut Windows (sali TC205) 1) Kirjaudu sisään TTY:n intra-tunnuksella.
Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä
2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa
Javan asennus ja ohjeita ongelmatilanteisiin
Javan asennus ja ohjeita ongelmatilanteisiin Javaa tarvitaan Fivaldin Sovellusikkunan alaisiin sovelluksiin, jotka käyttävät Oracle Forms -tekniikkaa. Visma Fivaldin osalta suosittelemme aina käyttämään
Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0
Toukokuu 2013 1 (10) Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0 Päivitysohje Copyright Aditro 2013 Toukokuu 2013 2 (10) Sisällysluettelo 1. Tehtävät ennen versiopäivitystä... 3 1.1. Ohjelmistomuutosten
Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:
Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int
Tikon ostolaskujen käsittely
Toukokuu 2014 1 (8) Toukokuu 2014 2 (8) Sisällysluettelo 1. Käyttäjäasetukset... 3 2. Yleiset parametrit... 3 3. Kierrätysasetukset... 3 4. palvelimen tiedot... 4 5. lähetyksen aktivointi... 5 6. Eräajot
Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla
Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Lasse Leino ja Marko Kahilakoski Helsingin Yliopisto Tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi 18. joulukuuta 2006 Sisältö 1 Säikeet
Verkkoliikennettä Java[ssa lla] Jouni Smed
Verkkoliikennettä Java[ssa lla] Jouni Smed 9.2.2001 1 Perusteita 1 (2) tarvittavat luokat paketissa MDYDQHW IP-osoitteita käsitellään,qhw$gguhvv-olioina luonti (huom. ei konstruktoria):,qhw$gguhvvdggu,qhw$gguhvvjhw%\1dphdgguhvv
Ohjelmointi 2 / 2010 Välikoe / 26.3
Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään
Mikä yhteyssuhde on?
1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String
Tietokannat II -kurssin harjoitustyö
Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava
Visma Liikkuvan työn ratkaisut
Visma Liikkuvan työn ratkaisut Päivitysohje Pääkäyttäjän opas Visma Software Oy pidättää itsellään oikeuden mahdollisiin parannuksiin ja/tai muutoksiin tässä oppaassa ja/tai ohjelmassa ilman eri ilmoitusta.
erasmartcardkortinlukijaohjelmiston
erasmartcardkortinlukijaohjelmiston asennusohje Sisällysluettelo 1. erasmartcard... 2 2. erasmartcard-ohjelmiston normaali asennus... 3 2.1. Ennen asennusta... 3 2.2. Asennus... 3 3. Muut asennustavat...
Sisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
L7 8.8 Tulorekisteriaineistot: Aineistojen lähetys ja virhetilanteet, aineistojen korjaaminen
L7 8.8 Tulorekisteriaineistot: Aineistojen lähetys ja virhetilanteet, aineistojen korjaaminen Toimiala: Yleinen Kirjoittaja: Sovellus: Palkanlaskenta Tiedosto: Päivämäärä: 21.1.2019 Versio: 1.1 1 Yleistä
Graafisen käyttöliittymän ohjelmointi Syksy 2013
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 10 Rinnakkaisuus käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Rinnakkaisuus ja käyttöliittymäohjelmointi
Sisältö. 22. Taulukot. Yleistä. Yleistä
Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä
Rajapinta (interface)
1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä
JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko
JavaRMI 1 JAVA RMI Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 2 Table of Contents...1 JAVA RMI...1 Yleistä...4 Arkkitehtuuri...5 Java RMI kerrosarkkitehtuuri...5
Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();
Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio
Febdok 6.0 paikallisversion asennus OHJEISTUS
Febdok 6.0 paikallisversion asennus OHJEISTUS Sisällys 1 YLEISTÄ 1 2 ASENNUKSEN VALMISTELUT 2 2.1 VARMUUSKOPIOT 2 2.2 ASENNUSTIEDOSTON LATAUS, WWW.FEBDOK.FI 2 2.3 ASENNUSTIEDOSTON LATAUS, FEBDOK:IN SISÄINEN
Visma Liikkuvan työn ratkaisut Päivitysohje. Pääkäyttäjän opas
Visma Liikkuvan työn ratkaisut Pääkäyttäjän opas Visma Software Oy pidättää itsellään oikeuden mahdollisiin parannuksiin ja/tai muutoksiin tässä oppaassa ja/tai ohjelmassa ilman eri ilmoitusta. Oppaan
Visma Econet Pro Factoring laskutus Finvoice muodossa
Visma Econet Pro Factoring laskutus Finvoice muodossa Oppaan päiväys: 27.4.2012. Asiakasneuvonta: Helpdesk: kirjautuminen Visma Econet infolinen tai osoitteen www.visma.fi kautta Visma Econet Pro: 0600-39-7261
Valppaan asennus- ja käyttöohje
Versio Päiväys Muokkaaja Kuvaus 0.9 16.2.2006 Tuukka Laakso Korjattu versio 0.1 Antti Kettunen Alustava versio Sisällysluettelo 1 Johdanto...2 2 Valppaan asennus...3 2.1 Valppaan kääntäminen...3 2.2 Valmiiksi
Selvitysraportti. MySQL serverin asennus Windows ympäristöön
Selvitysraportti MySQL serverin asennus Windows ympäristöön IIO30200 / Jouni Huotari Arto Sorsa / F3900 CREATIVE COMMONS LISENSOITU http://creativecommons.org/licenses/by-nc-sa/1.0/fi/ 26.4.2010 1 SISÄLTÖ
KIITOS RICA OPTIMOINTIOHJELMAN VALITSEMISESTA
KIITOS RICA OPTIMOINTIOHJELMAN VALITSEMISESTA Asennusohjeiden sisältö 1. RICA optimointiohjelmoinnin periaate isoftloaderilla... 2 2. RICA isoftloader toimituspaketin sisältö... 3 3. isoftloader Sync-ohjelmiston
P e d a c o d e ohjelmointikoulutus verkossa
P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN
Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki
Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,
Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2
6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma
Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen
Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät
Toimittajaportaalin pikaohje
1 Toimittajaportaalin pikaohje Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden asiakkaan lisääminen Laskujen
Olet tehnyt hyvän valinnan hankkiessasi kotimaisen StorageIT varmuuskopiointipalvelun.
StorageIT 2006 varmuuskopiointiohjelman asennusohje. Hyvä asiakkaamme! Olet tehnyt hyvän valinnan hankkiessasi kotimaisen StorageIT varmuuskopiointipalvelun. Ennen asennuksen aloittamista Varmista, että
Korkeakoulujen prosessipalvelin: mallintajan palvelinohje Versio 0.2
Korkeakoulujen prosessipalvelin: mallintajan palvelinohje Versio 0.2 Sisällysluettelo Muutoshistoria...3 1 Johdanto...4 2 Palvelimen käyttöön tarvittavat ohjelmat...4 3 Palvelimelle kirjautuminen...4 4
Tikon ostolaskujen käsittely
Toukokuu 2013 1 (7) 6.3.0 Copyright Aditro 2013 Toukokuu 2013 2 (7) Sisällysluettelo 1. Käyttäjäasetukset... 3 2. Yleiset parametrit... 3 3. Kierrätysasetukset... 3 4. palvelimen tiedot... 4 5. lähetyksen
Autentikoivan lähtevän postin palvelimen asetukset
Autentikoivan lähtevän postin palvelimen asetukset - Avaa Työkalut valikko ja valitse Tilien asetukset - Valitse vasemman reunan lokerosta Lähtevän postin palvelin (SM - Valitse listasta palvelin, jonka
Aditro Tikon ostolaskujen käsittely versio 6.2.0
Lokakuu 2012 1 (9) Aditro versio 6.2.0 Päivitysohje Lokakuu 2012 2 (9) Sisällysluettelo 1. Tehtävät ennen versiopäivitystä... 3 1.1. Ohjelmistomuutosten luku... 3 1.2. Aditro Pankkipalvelut yhteensopiva
Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006
TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa
Ohjelmointi 2 / 2011 Välikoe / 25.3
Välikoe / 25.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään liittyvää tehtävää. Aikaa 4 tuntia.
Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely
Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely 1 Ominaisuudet Kun tutkimme työasemapohjaisia sovelluksiamme, tarvitaan joskus tietoa: mikä on käyttöjärjestelmä mikä on käytössä oleva
Visma GATEWAY INSTALLER. asennusopas
Visma GATEWAY INSTALLER asennusopas 1 Sisällys Tietoa dokumentista...3 Tuetut käyttöjärjestelmät...3 GATEWAY INSTALLER sovelluksen itselatausohjelma...3 GATEWAY INSTALLER sovelluksen suorittaminen...4
JOVISION IP-KAMERA Käyttöohje
JOVISION IP-KAMERA Käyttöohje 1 Yleistä... 2 2 Kameran kytkeminen verkkoon... 2 2.1 Tietokoneella... 2 2.2 Älypuhelimella / tabletilla... 5 3 Salasanan vaihtaminen... 8 3.1 Salasanan vaihtaminen Windows
Java-kielen perusteet
Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero
Poista tietokoneessasi olevat Javat ja asenna uusin Java-ohjelma
Poista tietokoneessasi olevat Javat ja asenna uusin Java-ohjelma Jos käytät verkkopankkia kotikoneeltasi, toimi tämän ohjeen mukaan. Jos käytät verkkopankkia työpaikkasi tietokoneelta, anna tämä ohje työpaikan
Internet Protocol version 6. IPv6
Internet Protocol version 6 IPv6 IPv6 Osoiteavaruus 32-bittisestä 128-bittiseksi Otsikkokentässä vähemmän kenttiä Lisäominaisuuksien määritteleminen mahdollista Pakettien salaus ja autentikointi mahdollista
Maha Eurosystem jarrulaskentaohjelman asennusohje versio 7.20.026
2012 Tecalemit Oy Seppo Koskivuori Maha Eurosystem jarrulaskentaohjelman asennusohje versio 7.20.026 Vaatimukset: - tietokone (PC), jossa vapaa USB portti - käyttöjärjestelmä Windows XP, Vista tai Windows
Luokat ja oliot. Ville Sundberg
Luokat ja oliot Ville Sundberg 12.9.2007 Maailma on täynnä olioita Myös tietokoneohjelmat koostuvat olioista Σ Ο ω Μ ς υ φ Ϊ Φ Θ ψ Љ Є Ύ χ Й Mikä on olio? Tietokoneohjelman rakennuspalikka Oliolla on kaksi
erasmartcard-kortinlukijaohjelmiston asennusohje (mpollux jää toiseksi kortinlukijaohjelmistoksi)
erasmartcard-kortinlukijaohjelmiston asennusohje (mpollux jää toiseksi kortinlukijaohjelmistoksi) Sisällysluettelo 1 erasmartcard 3 2 erasmartcard-ohjelmiston normaali asennus 4 2.1 Ennen asennusta 4 2.2
7. Oliot ja viitteet 7.1
7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin
SSH Secure Shell & SSH File Transfer
SSH Secure Shell & SSH File Transfer TIETOHALLINTO Janne Suvanto 1.9 2002 Sisällysluettelo Sisällysluettelo... 1 Yleistä... 2 SSH Secure Shell ohjelman asetukset... 3 POP3 tunnelin asetukset... 6 Yhteyden
Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).
Tehtävä 1: Metodit, listat, alkuluvut (4p) Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Alkuluvut ovat lukuja, jotka ovat suurempia kuin yksi ja jotka ovat jaollisia
Maiju Mykkänen (D6297@jamk.fi) Susanna Sällinen (E0941@jamk.fi)
Maiju Mykkänen (D6297@jamk.fi) Susanna Sällinen (E0941@jamk.fi) Tietokannan hallinta-opintojakson selvitysraportti Huhtikuu 2010 Mediatekniikka ICT/Teknologia Tämän teosteoksen käyttöoikeutta koskee Creative
Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma
1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja
Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen
Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus
Java ja grafiikka. Ville Sundberg 12.12.2007
Java ja grafiikka Ville Sundberg 12.12.2007 What happen Viritetty JPanel Graphics ja Graphics2D ImageIO ja BufferedImage Animaatio ja ajastus Optimoinnista Kehykset import javax.swing.jframe; public class
Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.
11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen
5. HelloWorld-ohjelma 5.1
5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2
Visma Fivaldi -käsikirja Tehtävienhallinta- ohje käyttäjälle
Visma Fivaldi -käsikirja Tehtävienhallinta- ohje käyttäjälle 2 Sisällys 1 Palvelunhallinta... 3 1.1 Käyttäjäryhmän luominen... 3 2 Tehtävienhallinta- perustiedot... 4 2.1 Yhtiön perustiedot... 4 2.2 Tehtävä-/
Luottamuksellinen sähköposti Trafissa
OHJE 1 (8) Luottamuksellinen sähköposti Trafissa Trafi käyttää Deltagon Sec@GW -ohjelmistoa sähköpostin luottamuksellisuuden suojaamiseen. D-Envelope sovelluksen avulla viestien vastaanottaminen ei edellytä
Lumon tuotekirjaston asennusohje. Asennus- ja rekisteröintiohje
Lumon tuotekirjaston asennusohje Asennus- ja rekisteröintiohje 1. Sisältö 1. Asennuspaketin lataaminen 4 2. Zip-tiedoston purkaminen ja sovelluksen asentaminen 4 3. Sovelluksen rekisteröiminen 7 4. Sisällön
on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä
LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen
Tietorakenteet, laskuharjoitus 7,
Tietorakenteet, laskuharjoitus 7, 14.-19.3. 1. "Tira meets software engineering, osa 1" Lue luentomonisteen kalvot 233-236. Toteuta luokka Opiskelijarekisteri joka tarjoaa seuraavat palvelut: opiskelijoiden
Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Käyttöohje Boa Open Access Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari Heikkinen
Viva-16. Käyttöohje. 1.4.2009 Veikko Nokkala Suomen Videovalvonta.com
Viva-16 Käyttöohje 1.4.2009 Veikko Nokkala Sisällysluettelo Sisällysluettelo... 2 Ohjelmisto käyttöliittymä... 3 Asentaminen... 3 Käyttöönotto... 3 Katselu... 6 Tallennus... 8 Toistaminen... 9 Selain käyttöliittymä...
Pakkauksen kokoaminen
13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen package-määrettä käyttäen. Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa importlauseen avulla. Pakkaukset ja näkyvyys.
Connection Manager -käyttöohje
Connection Manager -käyttöohje 1.0. painos 2 Sisältö Tee yhteysongelmien vianmääritys 10 Tietoja yhteydenhallintasovelluksesta 3 Näin pääset alkuun 3 Avaa yhteydenhallintasovellus 3 Tarkista nykyisen yhteyden
VERKKOKÄYTTÄJÄN OPAS. Tulostuslokin tallennus verkkoon. Versio 0 FIN
VERKKOKÄYTTÄJÄN OPAS Tulostuslokin tallennus verkkoon Versio 0 FIN Oppaassa käytetyt kuvakkeet Tässä käyttöoppaassa käytetään seuraavaa kuvaketta: Vinkki kertoo, miten toimia tietyissä tilanteissa, tai
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka
Android ohjelmointi. Mobiiliohjelmointi 2-3T5245
Android ohjelmointi Mobiiliohjelmointi 2-3T5245 Mikä on Android? Linux kernelin päälle rakennettu, Googlen kehittämä sovelluspino mobiilisovelluksiin Erillinen versio puhelimelle ja taulutietokoneille