next_inactive up previous


Toteutusdokumentti

Convergence of messaging

The Converge Group


Sisältö


Kuvat

  1. Arkkitehtuuri
  2. Ytimen luokkakaavio, jossa soikiot osoittavat säikeitä käynnistävät luokat
  3. Tiedonhakumoduulin luokkakaavio
  4. WWW-käyttöliittymä

0.0.1                  Dokumentti luotu; kopio suunnittelu-
                       dokumentista                          Anssi Johansson
0.0.2     15.12.2002   Muutoksia Järjestelmän ydin-lukuun    Olli Pettay
0.1       16.12.2002   Järjestemän ydin-lukua muokattu
                       vastaamaan toteutusta                 Mikko Hiipakka
0.1.1     18.12.2002   Muokkausta                            Ryhmä
1.0       20.12.2002   Lopputarkistus ja jäädytys            Mikko Hiipakka

Johdanto

Dokumentin tarkoitus

Tämä toteutusdokumentti esittää teknisen mallin ohjelmistotuotantoprojektin ''Convergence of Messaging'' tuotteena syntyneestä suunnitteludokumentin perusteella toteutetusta järjestelmän prototyypistä.

Määritelmät, termit ja lyhenteet


Taulukko 1: Dokumentissa käytetyt termit ja lyhenteet
HTML Hypertext Markup Language, WWW-sivujen
  kuvauksessa käytetty kieli
  http://www.w3.org/MarkUp/
HTTP Hypertext Transfer Protocol
  http://www.w3.org/Protocols/
Javadoc Java-kielen kommentointityökalu
  http://java.sun.com/j2se/javadoc/ 
XML Extensible Markup Language
  http://www.w3.org/TR/REC-xml
DOM Document Object Model,
  määritys dokumenttien luonnille, muuttamiselle ja läpikäynnille,
  käytetään usein XML-dokumenttien yhteydessä
  http://www.w3.org/DOM/
XPath XML Path Language,
  kyselykieli XML:lle
  http://www.w3.org/TR/xpath
XUpdate Kieli XML-dokumenttien muuttamiseksi,
  http://www.xmldb.org/xupdate/xupdate-wd.html
IMAP Internet Message Access Protocol,
  protokolla sähköpostien noutoa varten
  http://www.imap.org/
SSL Secure Sockets Layer,
  verkkoliikenteen salausmenetelmä
  http://wp.netscape.com/eng/ssl3/


Dokumentin rakenne

Ensimmäinen luku esittelee dokumentin sisällön ja rakenteen sekä dokumentissa käytetyt termit ja lyhenteet.
Toisessa luvussa on mainittu ne lisäykset määrittelydokumenttiin, jotka ovat tulleet esiin määrittelydokumentin kirjoittamisen jälkeen.
Kolmas luku sisältää järjestelmän tietosuunnitelman.
Neljännessä luvussa kuvataan järjestelmän arkkitehtuuri yleisellä tasolla.
Viidennessä luvussa on kuvattuna järjestelmän ytimen luokkarakenne, luokkien tehtävät ja metodit sekä ytimen rajapinnat.
Kuudennessa luvussa kuvataan tiedonhakumoduulin yhteydet sähköpostipalvelimille sekä rajapinnat järjestelmän muihin osiin.
Seitsemännessä luvussa kuvataan asiakasmoduulin tarjoamat rajapinnat asiakasohjelmalle ja järjestelmän ytimelle.
Kahdeksannessa luvussa kuvataan asiakasohjelman toiminta.
AttributeInterface -rajapinnan toteutusesimerkit on sisällytetty dokumenttiin liitteenä A.
Liitteessä B on UserPropertyInterface -rajapinnan toteutusesimerkkejä.
Liitteessä C on ActionInterface -rajapinnan toteutusesimerkkejä.
Avoimiksi jääneitä kysymyksiä ja muita kommentteja löytyy liitteestä D.
Asennus- ja ylläpito-ohjeet on liitteessä E ja käyttöliittymän käyttöohje liitteessä F.

Tietokannan kuvaus

Järjestelmä käyttää tietojen säilyttämiseen Apache-organisaation Xindice XML-tietokantaa. Järjestelmän dynaamisesta luonteesta johtuen ei tietokannan dokumenttien rakenteelle voida asettaa tiukkoja muotovaatimuksia. Esimerkiksi viestien tallennuksessa käytettävän XML:n muoto riippuu muun muassa viestin tyypistä (onko se esimerkiksi sähköposti) ja siitä, millaisia attribuuttimäärityksiä järjestelmään on tehty. Attribuuttiluokkia saatetaan tulevaisuudessa lisätä järjestelmään dynaamisesti, joten voi olla mahdollista, että viestien muoto muuttuu järjestelmän toiminnan aikana.

Vaikka varsinaisille XML-dokumenteille ei tässä määritellä muotoa, tulee dokumenttien kantaantallettaminen määritellä. Xindicen avulla dokumenttien joukkoja ryhmitellään kokoelmiksi (collection). Tietokannan juuri on /db ja sen alaisuudessa seuraavat kokoelmat:

Arkkitehtuuri

Järjestelmä voidaan jakaa toiminnallisesti kolmeen eri moduuliin: järjestelmän ytimeen, tiedonhakumoduuliin ja asiakasmoduuliin.

Ytimen rooli järjestelmässä on hallinnoida ryhmiä ja käyttäjiä sekä näihin liitettyjä tietoja kuten kontekstimallit ja profiilit. Toimintoja, joista ydin huolehtii, ovat tietokantaoperaatiot, viestien käsittely kontekstimallivertailujen ja profiilisääntöjen perusteella sekä ajastettujen toimintojen hallinta. Ytimen tehtäviin kuuluu myös suuri osa asiakasmoduulin tarjoaman käyttöliittymän palveluista, muun muassa näkymien hallinta ja tiedonlähdeasetusten ylläpitäminen.

Tiedonhakumoduuli huolehtii yhteyksistä järjestelmän ulkopuolella oleville palvelimille. Näitä palvelimia ovat esimerkiksi sähköpostipalvelimet (sekä saapuvat että lähtevät viestit), uutisryhmäpalvelimet, WWW-palvelimet ym. Tiedonhakumoduuli myös muokkaa saapuneet viestit järjestelmän käyttämään sisäiseen muotoon.

Asiakasmoduuli yhdistää järjestelmän ja järjestelmän käyttäjän. Kaikki tieto järjestelmältä asiakkaalle ja asiakkaalta järjestelmään välitetään asiakasmoduulin kautta.
Asiakasmoduuli huolehtii järjestelmän ytimestä tulevien viestien muuttamisesta järjestelmän sisäisestä muodosta kunkin asiakasohjelman ymmärtämään muotoon, esimerkiksi muuttaen viestin HTML-muotoon toimitettaessa viestiä WWW-sovellukselle. Asiakasmoduulissa muutetaan myös asiakkaalta tuleva tieto järjestelmän sisäiseen muotoon, esimerkiksi käyttäjän luodessa uusia kontekstimalleja tai profiileja.

Kuva 1: Arkkitehtuuri
\includegraphics[height=0.9\textheight]{graphics/arkkitehtuuri.eps}

Järjestelmän ydin

Kokonaisuudessaan toteutetun järjestelmän toiminta-ajatuksena on, että käyttäjä voisi muokata viestintäjärjestelmän toimimaan haluamallaan tavalla. Järjestelmä pystyisi siis itsenäisesti sille annettujen tietojen perusteella päättelemään esimerkiksi mitä viestejä käyttäjä tiettynä ajanhetkenä voisi pitää kiireellisenä. Toteutetun prototyypin ydinluokat huolehtivat nimenomaan tämän toiminnallisuuden toteutuksesta järjestelmässä. Tiedonhakumoduuli sekä asiakasmoduuli huolehtivat puolestaan tietovirrasta järjestelmän ulkopuolella kuten postin hakemisesta sähköpostipalvelimelta tai viestin lähettämisestä käyttäjän päätelaitteeseen.

Jokaiselle järjestelmään rekisteröityneelle käyttäjälle luodaan oma (User, luku 4.1.20, sivulla [*]) käyttäjä-olio, jonka tarkoituksena on tarjota mahdollisimman keskitetysti tiedot järjestelmän käyttäjästä (palvelimien osoitteet, profiilit jne.). Käyttäjä-olioon liitetään järjestelmän sisäisessä käytössä ominaisuuksia (UserPropertyInterface, luku 4.3.1, sivulla [*]), joilla voidaan kuvata järjestelmän käsitystä käyttäjän reaalimaailman ominaisuuksista. Esimerkiksi ominaisuus nimeltä ''paikka'' pitäisi sisällään käyttäjän olinpaikan mukaan muuttuvan tiedon, joka kuvaisi hänen sijaintinsa järjestelmän ymmärtämässä muodossa esim.''Helsinki, Kallio, Toinen Linja 10''.

Kontekstimalli (ContextModel, luku 4.1.1, sivulla [*]) on edellä mainittua käyttäjän ominaisuutta (UserPropertyInterface)laajempi tapa kuvata käyttäjän reaalimaailman ominaisuuksia. Kontakstimallien tavoitteena on kuvata käyttäjällä tietyllä ajanhetkellä mahdollisesti vallitsevaa tilannetta. Tämä kuvaus toteutetaan järjestelmässä määrittelemällä kontekstimalli, johon liitetään attribuutteja (ContextModelAttributeInterface, luku 4.3.4, sivulla [*]), joihin määritetyt arvovälit kuvaavat suhdetta sillä hetkellä päteviin faktoihin (MessageAttributeInterface, luku 4.3.3, sivulla [*]). Esimerkiksi kontekstimalliin voitaisiin määritellä attribuutti, jonka looginen nimi olisi ''paikka'' ja arvoväli ''Helsinki''. Tällöin kontekstimallivertailussa voidaan sanoa toteuttiko olemassa oleva fakta vaaditun arvovälin. Tällä tavalla vertailemalla attribuutteja olemassa oleviin faktoihin voidaan päätellä mallin toteutumisprosentti eli kuinka hyvin faktat toteuttivat malliin määritellyt arvovälit.

ContextModelHandler-luokka vastaanottaa viestejä (Message, luku 5.1.6, sivulla [*]) ytimen käsiteltäväksi ja luo heti uuden säikeen Process-luokasta, jonka tehtävänä on huolehtia, että kaikki saapuneen viestin vastaanottajakäyttäjän kontekstimallit suorittavat edellä mainitun vertailun. Vertailun tuloksen (ContextModelValueAttribute, luku A.5, sivulla [*]) kontekstimallit liittävät viesti-olion attribuutiksi.

Seuraavaksi saapuneen viestin käsittely siirtyy ProfileHandler-luokalle, joka tutkii käyttäjä-olioon liitettyjä profiileja (Profile, luku 4.1.24, sivulla [*]). Profiileihin käyttäjä on voinut määritellä sääntöjä (Rule, luku 4.1.25, sivulla [*]), joilla järjestelmän toimintaa tietyissä tilanteissa voidaan ennalta määritellä. Jokainen käyttäjän profiili on joko aktiivinen tai passiivinen, mistä vain aktiiviset tullaan tutkimaan. Jokaiseen profiiliin on aina liitetty jokin määritelty kontekstimalli, ja jotta profiilin säännöt suoritettaisiin, on jonkin profiiliin liitetyn mallin kynnysarvo ylityttävä. Jos tämä kynnysarvo ylittyy, tarkoittaa se sitä, että saapuneeseen viestiin liitetyt faktat ovat toteuttaneet profiiliin liitetyn kontekstimallin riittävän hyvin, jotta järjestelmä voi jatkossa toimia säännöissä määritetyllä tavalla. Esimerkiksi jokin sääntö voisi määrittää, että jos ''kellonaika'' niminen fakta on suurempi kuin ''16.00'' ja ''päivä'' niminen fakta on perjantai lähetä kaikki saapuneet viestit gsm-puhelimeen tekstiviestinä.

Kun kynnysarvo on ylitetty, siirtyy suoritus RuleHandler-luokalle, joka huolehtii sääntöjen tutkimisesta sekä niiden määrittelemien toimintojen alustamisesta, muokkaamalla tapahtumaoliota (ActionEvent, luku 4.1.7, sivulla [*]). Jokaisella järjestelmän käyttäjä-oliolla on vähintään oletusprofiili, joka määrittää säännön viestin liittämiselle Inbox-näkymään. Kun sääntöjen käsittely on saatu päätökseen, viedään toimintatapahtuma EventMonitor-luokan (luku 4.1.8, sivulla [*]) säilytettäväksi, josta EventManager (luku 4.1.9, sivulla [*]) sen hakee käsittelyyn. Tämän käsittelyn aikana pyydetään ActionLoader-luokalta (luku 4.1.11, sivulla [*]) toimintotapahtuma-olioon talletetuille toiminnoille toteutuksen tarjoavan luokan ilmentymä (ActionInterface, luku 4.2.1, sivulla [*]). Talletetut toiminnot ovat toimintojen loogisia nimiä, joiden mukaan ActionLoader luo toteuttavan luokan.

Jotta käyttäjälle yleensäkin saapuu viestejä passiiviselta tiedontarjoajalta (esim. sähköpostipalvelin) on hänen määriteltävä itselleen ajastuksia (Scheduler, luku 4.1.31, sivulla [*]), jotka laukeavat niihin määritetyn ajanjakson välein. Näihin ajastuksiin liitetään ajastettuja sääntöjä (ScheduledRule, luku 4.1.28, sivulla [*]), jotka ajastuksen laukeamisen yhteydessä lähetetään RuleHandler-luokan käsittelyyn, minkä toimesta luodaan uusia toimintatapahtumia samalla tavalla kuin viestin käsittelyn yhteydessä. Toiminnot, joita ajastetuilla säännöillä voidaan toteuttaa ovat luonteeltaan erilaisia. Esimerkiksi viestin saapuessa ''Set-To-View'' asettaa viestin tiettyyn näkymään, mutta ajastuksena se ei ole kovin mielekästä.

Käyttäjä-olioihin on liitettynä myös kontaktilista (ContactList, luku 4.1.27, sivulla [*]), johon voi kerätä henkilöiden yhteystietoja (Contact, luku 4.1.26, sivulla [*]).

Kaikille tietokantaa käsitteleville luokille on ytimeen luotu DatabaseProvider-luokka (DatabaseProvider, luku 4.1.18, sivulla [*]), joka tarjoaa peruskantakäsittelyt.

Järjestelmään saapuvat viestit tallennetaan kantaan ja viite niihin lisätään käyttäjän haluamiin näkymiin. Näkymien ja viestien käsittelyä hallinnoivat ViewMonitor (luku 4.1.14, sivulla [*]) ja ViewManager (luku 4.1.16, sivulla [*]) yhdessä ViewManagerThread-säikeen kanssa (luku 4.1.17, sivulla [*]).

Kuva 2: Ytimen luokkakaavio, jossa soikiot osoittavat säikeitä käynnistävät luokat
\includegraphics[height=0.72\textheight]{graphics/suunnittelu_kernel.eps}

Luokat : converge.kernel


ContextModel

ContextModel-luokka tarjoaa attribuuttien hallintaa sekä vertailun viestiolion attribuutteihin. Kontekstimalli-ilmentymälle voidaan määritellä joukko attribuutteja, joihin liitetään arvo sekä vertailussa käytettävä laskusääntö. Näiden avulla luokka laskee itselleen arvon siitä kuinka hyvin viestiolion attribuuttien arvot (eli kyseisellä ajanhetkellä olevat faktat) toteuttavat laskusäännön määrittelemällä tavalla malliin liitettyjen attribuuttien arvovälejä. Saatu mallin toteutumisarvo liitetään viestiolioon ContextModelValueAttribute-tyyppisenä (kts. luku A.5, sivulla [*]) attribuuttina.

Tulevaisuudessa tähän luokkaa liitetty toiminta voisi perustua kerättyyn historiadataan, joka korvaisi tarpeen, että käyttäjä itse määrittelee attribuuttien arvovälitietoja. Tämän datan avulla voitaisiin päätellä samankaltaisesti kuin nyt se mikä on käyttäjän konteksti ja täyttääkö viesti eteenpäin lähettämisen vaatimukset.

Määrittely
:
public class ContextModel implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


AttributeWeightPair

AttributeWeightPair-luokka on tarkoitettu attribuuttien ja niiden painoarvojen toisiinsa liitettynä säilyttämiseen. Luokka on määritelty ContextModel-luokan sisäluokaksi.

Määrittely
:
public class ContextModel {
class AttributeWeightPair
}
Konstruktorit
:
Kentät
:
Metodit
:


ContextModelHandler

ContextModelHandler-luokan toiminta alkaa kun tiedonhakumoduuli lähettää järjestelmään saapuneen viestin luokan käsiteltäväksi. Toteutus tukee viestien jatkuvaa saapumista siten, että viestien vastaanotto on säikeistettyä toimintaa. Kun uusi säie on käynnistetty viestin käsittelyyn, suoritetaan kontekstimallimuuttujien arvovälien vertailu viestiolion tarjoamiin konteksti- ja viestiattribuutteihin. Tämä vertailu suoritetaan kaikille vastaanottajana (useamman vastaanottajan viestit käsitellään jokaiselle erikseen) käsiteltävään käyttäjään liitetyille kontekstimalleille (tämän tuloksena kontekstimallit liittävät itselleen saamat arvot viestiolioon nimetyiksi attribuuteiksi). Lopuksi suorittava säie antaa käsittelemänsä viestin edelleen käsiteltäväksi ProfileHandler-luokalle, jonka toiminta suoritetaan siis samassa säikeessä kuin ContextModelHandler:kin toiminta.

Määrittely
:
public class ContextModelHandler
Riippuvuudet
:
Metodit
:


Process

Säie-luokka, jonka run-metodissa ContextModelHandler:in kuvauksen toiminnot toteutetaan. Run-metodi pitää saapuneeseen viestiin liitettyä käyttäjää lukulukossa niin kauan kun viestin käsittely järjestelmässä on käynnissä. Mitään käyttäjään liitettyä tietoa ei saa käsittelyn aikana muuttaa, mikä on ehdoton vaatimus sille, että käsittely on luotettavasti mahdollista.

Määrittely
:
class Process extends Thread
Konstruktorit
:
Kentät
:
Metodit
:


ProfileHandler

ProfileHandlerissa aluksi käyttäjän oletusprofiilin säännöt, viesti ja tyhjä toimintatapahtuma annetaan RuleHandlerille, joka muokkaa toimintatapahtumaa oletusprofiilissa määriteltyjen sääntöjen mukaan. Tämän jälkeen tutkitaan viestiolion eri kontekstimalliarvoja jokaisen profiilin hallinnoimien kontekstimallien kynnysarvoihin. Jos arvon ylittyy, viesti ja käsittelyssä olevan profiilin säännöt, sekä oletusprofiilin muokkaama toimintatapahtuma annetaan RuleHandlerille, joka jatkaa toimintatapahtuman muokkausta annettujen sääntöjen mukaan. Kun kaikki viestiolioon liitetyn käyttäjän profiilit on käsitelty annetaan toimintotapahtuma viestin kanssa EventMonitorille. Jos kuitenkin vastaanottaja oli ryhmä tallennetaan muokattu toimintotapahtuma ja käynnistetään jokaiselle ryhmänjäsenelle henkilökohtainen viestinkäsittely. Kun tämä suoritus tulee ProfileHandlerille asti otetaan tyhjän toimintotapahtuman sijasta ryhmätasolla muokatun tapahtumakopion käyttäjän profiilien käsittelyn pohjaksi.

Määrittely
:
public class ProfileHandler
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


RuleHandler

RuleHandler huolehtii sääntöjen käsittelystä. Se liittää Drools-sääntökäsittelijän järjestelmään.
Määrittely
:
public class RuleHandler
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


ActionEvent

ActionEvent-olioita käytetään sääntöjenkäsittelyn yhteydessä.
Jokaiseen tutkittavaan sääntöön on liitetty toiminta, joka tulisi suorittaa, jos sääntö toteutuu. Näitä suoritettavia toimintoja kerätään ActionEvent-olioon siten, että aina säännön toteutuessa lisätään suoritettavan toiminnon looginen nimi (esim. Get-Messages) johon liitetään toiminnon toteuttavaa luokkaa ohjaavia arvoja.
Määrittely
:
class ActionEvent
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


EventMonitor

EventMonitorissa hallitaan ytimen sisään tulleiden viestien käsittelyssä ja ajastetuissa säännöissä syntyneiden tapahtumaolioiden (ActionEvent) tallentamista siihen saakka, kunnes omassa säikeessä toimiva EventManager hoitaa tapahtumaolioiden ja viestin jatkokäsittelyn.
Määrittely
:
class EventMonitor
Konstruktorit
:
Kentät
:
Metodit
:


EventManager

EventManager-luokka suorittaa tapahtumaolioiden määrittelemiä toimintoja. ActionInterface-tyyppisten olioiden avulla se suorittaa muun muassa viestien kantaanlisäyksen, näkymien hallinnan ja viestien lähettämiseen liittyvät toiminnot.
Määrittely
:
public class EventManager extends Thread
Riippuvuus
:
Konstruktorit
:
Kentät
:
Metodit
:

Pair

Hyvin tiivis luokka jolla ei ole toimintaa, vaan tarkoituksena on tarjota täysin julkinen ActionEvent-Object parien säilytys olio.

Määrittely
: class Pair
Konstruktorit
:
Kentät
:


ActionLoader

ActionLoader-luokalla tuodaan ActionInterface-rajapinnan toimintoja toteuttavia luokkia järjestelmän käyttöön. Kaikki toiminta on luokka tasoista, joten ActionLoaderista ei ole järjestelmässä yhtään ilmentymää.
Määrittely
:
public class ActionLoader
Riippuvuudet
:
Kentät
:
Metodit
:


View

View-tyyppisillä olioilla kuvataan tietokannan näkymien sisältöä.
Määrittely
:
public class View implements XMLContentInterface
Konstruktorit
:
Kentät
:
Metodit
:


Header

Header-olioon on koottu viestin niitä otsikkotietoja, joita tarvitaan näkymän sisällön listauksessa käyttöliittymässä.
Määrittely
:
public class
Konstruktorit
:
Kentät
:
Metodit
:


ViewMonitor

Järjestelmässä ViewMonitor-luokka huolehtii viestien ja näkymien muutosten synkronoinnista tarjamalla
Määrittely
:
public class ViewMonitor
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


ViewEvent

ViewEvent on apuluokka ViewMonitorin ja ViewManagerin välillä. ViewEvent-olioiden avulla ViewManager suorittaa viestiin ja näkymiin liittyviä pyydettyjä toimintoja.
Määrittely
:
class ViewEvent
Riippuvuudet
:
Konstruktorit
:
Kentät
:


ViewManager

ViewManager huolehtii ViewMonitorille annettujen näkymien ja viestien muutospyyntöjen käsittelemisestä ViewManagerThreadin avulla.
Määrittely
:
public class ViewManager
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


ViewManagerThread

Järjestelmässä oleva yksi ainoa ViewManagerThread tarkkailee ViewMonitor-olioiden muodossa tulevia toimintapyyntöjä ja suorittaa niitä saapumisjärjestyksessä. Muutokset tietokantaan hoidetaan DatabaseProviderin kautta.
Määrittely
:
class ViewManager extends Thread
Riippuvuudet
:
Kentät
:
Metodit
:


DatabaseProvider

DatabaseProvider tarjoaa tietokantapalveluita muille järjestelmän olioille. Tietokantana se käyttää Apache organisaation Xindice XML-tietokantaa, ja tästä syystä suoritettavat kyselyt ovat lähinnä DOM-puiden läpikäyntiä. Tulevaisuudessa myös XPath-kyselyt ja XUpdate-päivitykset voivat olla mahdollisia.
Määrittely
:
public class DatabaseProvider
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:

Crypt

Crypt-luokka tarjoaa palveluita datan salaamiseksi salasanan avulla. Salattu tieto muutetaan lisäksi Base64-muotoon, jotta sen tallentaminen tietokantaan onnistuisi.
Määrittely
:
public class Crypt
Riippuvuudet
:
Kentät
:
Metodit
:


User

User-luokan ilmentymillä ylläpidetään järjestelmässä eri käyttäjien tietoja. Ilmentymät sisältävät profiileja, kontekstimalleja, viittauksia tiedonlähteisiin, ominaisuusolioita ja kontaktilistan.
Määrittely
:
public class User
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


UserManager

UserManager hallinnoi käyttäjä- ja ryhmäolioita ja huolehtii niiden kantaantallennuksesta.
Määrittely
:
class UserManager
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


Group

Järjestelmän ylläpitäjä voi muodostaa käyttäjäryhmiä, joita kuvaa Group-luokka. Käyttäjäryhmien toiminta on useilta osin sama kuin varsinaisilla käyttäjillä, mutta ryhmillä ei ole näkymiä. Ryhmälle tullut viesti käsitellään samoin kuin tavallisetkin viestit, mutta ProfileHandler ei annakaan viestiä EventMonitorille, vaan siitä luodaan kopio jokaista ryhmän jäsentä varten, mitkä käsitellään uudestaan jokaisen ryhmän jäsenen kontekstimallien ja sääntöjen avulla.
Määrittely
:
public class Group extends User
Konstruktorit
:
Kentät
:
Metodit
:

UserNameCollection

Määrittely
:
public class UserNameCollection implements XMLContentInterface
Riippuvuudet
:
Kentät
:
Metodit
:


Profile

Profile-oliolla kuvataan järjestelmässä käyttäjään liitettyä profiilia. Se sisältää tiedon siihen liitettyjen kontekstimallien kynnysarvoista, ajastetuista säännöistä ja varsinaisista viestin hallintaan liittyvistä säännöistä.

Määrittely
:
public class Profile implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


Rule

Rule-luokalla kuvataan järjestelmässä käytettäviä sääntöjä, jotka ovat muodoltaan ehdot-toiminnot -pareja.
Määrittely
:
class Rule implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


Contact

Contact-luokka kuvaa yhtä kontaktilistassa olevaa tietoalkiota. Rakenteeltaan Contact on nimetty hajautustaulu, eli sillä on nimi ja muut tiedot esitetään avain-arvo -pareina.
Määrittely
:
public class Contact implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


ContactList

Jokaisella järjestelmän käyttäjällä on yksi kontaktilista (ContactList), joka voi sisältää sekä varsinaisia kontaktitietoja (Contact) että toisia kontaktilistoja.
Määrittely
:
public class ContactList implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


ScheduledRule

ScheduledRule muuttaa Rule-luokan määrityksiä siten, että sääntöjä voidaan käyttää myös ajastetuissa säännöissä. Tämä tarkoittaa erityisesti sääntökäsittelijän käyttämän Message-olioviittauksen muuttamista User-tyyppiseksi.
Määrittely
:
public class ScheduledRule extends Rule
Riippuvuudet
:
Konstruktorit
:
Metodit
:


ScheduleManager

ScheduleManager käy säännöllisin väliajoin läpi käyttäjien ja ryhmien aktiivisten profiilien ajastetut säännöt ja mikäli jokin sääntö tulee laukaista, luodaan uusi ScheduledRuleHandler-säie, joka huolehtii säännön käsittelystä.
Määrittely
:
public class ScheduleManager extends Thread
Riippuvuudet
:
Kentät
:
Metodit
:


ScheduledRuleHandler

ScheduledRuleHandler huolehtii yhden ajastetun säännön suorittamisesta.
Määrittely
:
class ScheduledRuleHandler extends Thread
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


Scheduler

Scheduler kuvaa aikaväliä tai tarkkaa aikaa, jolloin jonkin toiminnon pitäisi tapahtua.
Määrittely
:
public class Scheduler implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


XMLUtil

XMLUtil-luokka tarjoaa XML:n käsittelyä helpottavia staattisia metodeja.
Määrittely
:
public class XMLUtil
Riippuvuudet
:
Kentät
:
Metodit
:


Log

Log-luokkaa käytetään järjestelmän lokitietojen tallennukseen.
Määrittely
:
public class Log
Riippuvuudet
:
Kentät
:
Metodit
:

Rajapinnat : converge.kernel


ActionInterface

ActionInterface:lla määritetään ne toiminnallisuudet, jotka jokaisen järjestelmään toteutettavan toiminnallisuusluokan on tarjottava. Toteutusvaiheessa tällaisia luokkia tullaan tekemään esimerkiksi viestien lähettämistä ja hakua varten.
Määrittely
:
interface ActionEvent extends XMLContentInterface
Metodit
:


XMLContentInterface

XMLContentInterface-rajapinnan toteuttavien luokkien on osattava luoda omasta tietosisällöstään XML-kuvaus, jonka avulla ilmentymät voidaan myöhemmin palauttaa samaan tilaan kuin missä ne olivat kuvauksen luonnin yhteydessä.
Määrittely
:
interface XMLContentInterface
Metodit
:

Rajapinnat : converge.attribute


UserPropertyInterface

UserPropertyInterface:lla määritetään ne ominaisuudet, jotka jokaisen käyttäjäolioon liitettävien ominaisuuksien toteutusluokkien on tarjottava. Tällaisia ominaisuuksia ovat kaikki käyttäjän ulkomaailman kontekstia kuvaavat tiedot esimerkiksi käyttäjän paikkatieto ( ''paikannus''=''Helsinki, Kallio, Toinen Linja 10'' ) tai päätelaitteen saavutettavuus ( ''GSM-OnLine''=''false'' ).
Määrittely
:
interface UserPropertyInterface
Metodit
:


AttributeInterface

AttributeInterface:lla määritetään ne ominaisuudet, jotka jokaisen attribuuttien käsittelyn toteuttavien luokkien on tarjottava.
Määrittely
:
interface AttributeInterface extends XMLContentInterface
Metodit
:


MessageAttributeInterface

MessageAttributeInterface:lla määritetään kaikki ne ominaisuudet, jotka viestiolioon liitettävien attribuuttiolioiden toteutusluokkien on tarjottava.
Määrittely
:
public interface MessageAttributeInterface extends AttributeInterface
Metodit
:


ContextModelAttributeInterface

ContextModelAttributeInterface:lla määritetään ne ominaisuudet, jotka kontekstimalliolioon liitettävien attribuuttiolioiden toteutusluokkien on tarjottava.
Määrittely
:
public interface ContextModelAttributeInterface extends AttributeInterface
Metodit
:

Luokat : converge.attribute


AttributeLoader

AttributeLoader-luokalla ladataan (tarvittaessa dynaamisesti) AttributeInterface -rajapinnan toteuttavia luokkia järjestelmän käyttöön.
Määrittely
:
public class AttributeLoader
Metodit
:


Attribute

Attribute on abstrakti yliluokka muille Attribute-sarjan luokille. Yksi Attribute-sarjan aliluokan ilmentymä pitää sisällään yhden viestin attribuutin (lähettäjä, otsikko, lähetysaika, tärkeys, viestityyppi). Erityyppisiä attribuutteja varten luodaan omia aliluokkia Attribuuteista, esim. merkkijonoja varten on luokka AttributeString.
Määrittely
:
public abstract class Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Kentät
:
Metodit
:

Luokat : converge


Converge

Järjestelmän käynnistävä luokka.
Määrittely
:
public class Converge
Riippuvuudet
:
Metodit
:


ConvergeShutdown

Järjestelmän sulkemisesta huolehtiva luokka.
Määrittely
:
class ConvergeShutdown extends Thread
Riippuvuudet
:
Metodit
:


PairPanel

Kahden käyttöliittymää rakentavan olion yhdistäminen toisiinsa.
Määrittely
:
class PairPanel extends Panel
Riippuvuudet
:
Konstruktorit
:


UIUpdater

Ylläpitäjän käyttöliittymää päivittävä säie.
Määrittely
:
class UIUpdater extends Thread
Riippuvuudet
:
Konstruktorit
:
Metodit
:


ConvergeAWT

Ylläpitäjän käyttöliittymän (yksinkertainen) toteutus.
Määrittely
:
class ConvergeAWT extends Frame implements WindowListener, ItemListener, ActionListener
Riippuvuudet
:
Konstruktorit
:
Metodit
:

Rajapinta tiedonhakumoduulille

Ytimen tiedonhakumoduulille tarjoamat rajapinnat löytyvät seuraavista luokista:

Rajapinta asiakasmoduulille

Ytimen asiakasmoduulille tarjoamat rajapinnat löytyvät seuraavista luokista:

Tiedonhakumoduuli

Tiedonhakumoduuli huolehtii yhteyksistä muihin Internetin palvelimiin. Moduuli käyttää hyväkseen JavaMail- ja Java Secure Socket Extension -paketteja (katso http://java.sun.com/products/javamail/ ja http://java.sun.com/products/jsse/). Järjestelmän ydin kutsuu tiedonhakumoduulia kun käyttäjälle saapuneet uudet viestit halutaan noutaa, ja viestit noudettuaan tiedonhakumoduuli muuttaa ne järjestelmän sisäiseen muotoon ja välittää ne järjestelmän ytimelle jatkokäsittelyä varten. Tiedonhakumoduuli huolehtii myös viestien lähettämisestä muille postipalvelimille.

Kuva 3: Tiedonhakumoduulin luokkakaavio
\includegraphics[height=0.42\textheight]{graphics/toteutus_service.eps}

Luokat : converge.service


DataSource

DataSource on abstrakti yläluokka kaikille tiedonlähteille. Luokka tarjoaa aliluokilleen joitakin tiettyjä yleisiä metodeja, mutta suurin osa metodeista pitää tehdä tiedonlähdekohtaisesti. DataSource-luokasta ei tehdä koskaan ilmentymiä, ainoastaan sen aliluokista.

Uusia DataSourcea laajentavia luokkia voidaan kirjoittaa tarpeiden mukaisesti, periaatteena on luoda yksi uusi luokka jokaista verkkoprotokollaa varten.

Määrittely
:
public abstract class DataSource implements XMLContentInterface
Kentät
:
Metodit
:


IMAP

IMAP on DataSource-luokan aliluokka ja laajentaa DataSourcea toteuttamalla tuen IMAP-postilaatikoille.
Määrittely
:
public class IMAP extends DataSource
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


IMAPMessageThread

IMAPMessageThread on säie, joka hakee uudet viestit IMAP-postilaatikosta. Jos viestejä haettaessa tulee virhetilanne, siitä lähetetään käyttäjälle järjestelmän sisäinen viesti.
Määrittely
:
public class IMAPMessageThread extends Thread
Riippuvuudet
:
Konstruktori
:
Kentät
:
Metodi
:


IMAPStreamDownloader

IMAPStreamDownloader on säie, joka lukee tietoa aiemmin avatusta lukijaolioon toiseen aiemmin avattuun kirjoittajaolioon kunnes luettavaa ei enää ole, ja sulkee lopuksi IMAP-postilaatikon.
Määrittely
:
public class IMAPStreamDownloader extends Thread
Riippuvuudet
:
Konstruktori
:
Metodi
:


IMAPURLProperties

IMAPURLProperties on apuluokka, jonka avulla voidaan pilkkoa osiin ja tarkistaa IMAP-postilaatikkoihin osoittavat pointterimerkkijonot. Tämän luokan avulla voidaan helposti poimia pointterista esimerkiksi vain palvelimen osoite tai käyttäjätunnus.
Määrittely
:
public class IMAPURLProperties
Konstruktori
:
Kentät
:


Message

Message sisältää viestin järjestelmän sisäisessä muodossa.
Määrittely
:
public class Message implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


Email

Email on luokka, joka osaa muuntaa saamansa Internetin sähköpostiviestin järjestelmän sisäiseen muotoon.
Määrittely
:
public class Email
Riippuvuudet
:
Metodit
:


HTTP

HTTP hakee liitetiedostojen tiedot WWW-sivuilta.
Määrittely
:
public class HTTP
Riippuvuudet
:
Metodi
:


Attachment

Kaikista liitetiedostoista tallennetaan tietokantaan ainoastaan liitetiedoston osoite. Jos viestin mukana tulee perinteinen liitetiedosto, se korvataan pointterilla IMAP-postilaatikkoon, jolloin URLiksi tulee esim. imap://kayttaja@palvelin/msgid/nro-tiedosto.txt.

Jos viestin liitetiedostona tulee määrätynmuotoinen osoitteen sisältämä tekstitiedosto, asetetaan viestin liitetiedoston osoitteeksi saapunut osoite. Tekstitiedosto noudattaa mm. Internet Explorerin käyttämää url-tiedostomuotoa.

Tässä esimerkki eräästä järjestelmän ymmärtämästä WWW-liitetiedostopointterista:

[DEFAULT]
BASEURL=http://news.google.com/
[InternetShortcut]
URL=http://news.google.com/
Modified=F0EFFF2169A3C201CE

Määrittely
:
public class Attachment implements XMLContentInterface
Riippuvuudet
:
Konstruktori
:
Kentät
:
Metodit
:


AttachmentAttributes

Tietovarasto liitetiedoston ominaisuuksille.
Määrittely
:
public class AttachmentAttributes implements XMLContentInterface
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


PipeMessage

Tietovarasto liitetiedoston noudossa tulleille virheilmoituksille. Sisältää joko tiedostokahvan liitetiedoston lukemiseksi tai virheilmoituksen.
Määrittely
:
public class AttachmentAttributes
Riippuvuudet
:
Konstruktorit
:
Kentät
:
Metodit
:


StreamDownloader

StreamDownloader on säie, joka lukee tietoa aiemmin avatusta lukijaolioon toiseen aiemmin avattuun kirjoittajaolioon kunnes luettavaa ei enää ole. Tämä on yleinen luokka, jota voidaan käyttää erilaisten datavirtojen lukemiseen erilaisista tiedonlähteistä.
Määrittely
:
public class StreamDownloader extends Thread
Riippuvuudet
:
Konstruktori
:
Metodi
:


SMTP

SMTP hoitaa sähköpostiviestien lähettämisen.
Määrittely
:
public class SMTP
Riippuvuudet
:
Metodit
:


ConvergeSSLSocketFactory

ConvergeSSLSocketFactory luo SSL-suojattuja verkkosocketeja. Näitä tarvitaan haettaessa viestejä SSL-suojatulta IMAP-palvelimelta tai SSL-suojatulta WWW-palvelimelta.
Määrittely
:
public class ConvergeSSLSocketFactory
Riippuvuudet
:
Konstruktorit
:
Metodit
:


ConvergeTrustManager

Yksinkertainen luokka, joka hyväksyy kaikki annetut turvasertifikaatit. Tätä voisi joskus tulevaisuudessa virittää turvallisemmaksikin eli toteuttaa puuttuvat metodit. Tämä taso riittää kuitenkin prototyyppiin.
Määrittely
:
public class ConvergeTrustManager implements X509TrustManager
Riippuvuudet
:
Metodit
:

Rajapinta järjestelmän ytimelle

Tiedonhakumoduulin järjestelmän ytimelle tarjoamat rajapinnat löytyvät seuraavista luokista:

Rajapinta asiakasmoduulille

Tiedonhakumoduulin asiakasmoduulille tarjoamat rajapinnat löytyvät seuraavista luokista:

Asiakasmoduuli

Asiakasmoduuli toimii välittäjänä järjestelmän ytimen ja erilaisten asiakasohjelmien tai päätelaitteiden välillä. Jokaista tuettua asiakasohjelmatyyppiä kohden on asiakasmoduulissa oma komponentti, joka osaa kaikki tarvittavat protokollat joiden avulla kyseisen ohjelman tai päätelaitteen kanssa voidaan kommunikoida.

Ohjelmointirajapinta jota vasten uudentyyppisiä asiakasohjelmaluokkia voidaan rakentaa, koostuu ClientHandler -yläluokasta ja ClientManager-luokan tarjoamista metodeista.

Huomautus: asiakasmoduulin ne osat, jotka toteuttavat tämän prototyypin ainoan asiakasohjelmatyypin, WWW-asiakasohjelman, on kuvattu seuraavassa luvussa.

Luokat

Pakkaus converge.clientmanager

ClientManager

Järjestelmässä on yksi ClientManager-ilmentymä, jonka tehtävä (tässä prototyypissä) on mm. pitää kirjaa aktiivisista käyttäjistä, hoitaa sessionhallintaa ja välittää User-olioita asiakasohjelmaluokille.

Ytimelle tarjottavat palvelut

Erityyppisille asiakasohjelmaluokille tarjottavat palvelut

Muut metodit

ClientHandler

ClientHandler on abstrakti yläluokka kaikentyyppisten asiakasohjelmien käsittelijöille. Siinä on määritelty joitakin metodeja, jotka ovat yhteisiä kaikille aliluokille, mutta jotka jokainen aliluokka toteuttaa omalla tavallaan.

Metodit

WWW-asiakasohjelma

Järjestelmän prototyypissä on WWW:ssä toimiva asiakasohjelma. Tämä ohjelma sisältää varsin rajoitetun määrän toiminnallisuutta, eikä esimerkiksi käyttöliittymän suunnittelussa ole nähty siinä määrin vaivaa kuin ''oikean'' asiakasohjelman kohdalla pitäisi tehdä. Sen avulla on kuitenkin mahdollista käyttää järjestelmän yleisimpiä toimintoja.

Asiakasmoduuliin kuuluu Javalla tehty palvelin, joka kuuntelee jotakin TCP/IP -porttia ja ymmärtää HTTP-protokollaa. Asiakasohjelmana toimii siis oikeastaan WWW-selain, jolla käyttäjä voi suoraan ottaa yhteyden järjestelmään. Tässä luvussa ei käsitellä varsinaista asiakasohjelmaa (WWW-selainta), vaan esitellään ne järjestelmän (asiakasmoduulin) osat, jotka mahdollistavat WWW-selaimen käyttämisen asiakasohjelmana.

HTTP-palvelimen toiminnallisuutta ei toteuteta itse, vaan prototyypissä käytetään valmista webcore1-nimistä open source Java-palvelinta.

Luokat

WebClientHandler

WebClientHandler on ClientHandler-luokan aliluokka. Tämä on prototyypin ainoa luokka joka mahdollistaa järjestelmän käytön jollain tietyllä päätelaiteella / asiakasohjelmalla, tässä tapauksessa WWW-selaimella.

WebClientHandlerin ainoa tehtävä tässä prototyypissä on webcore-palvelimen käynnistäminen ja sulkeminen; se tarjoaa ytimelle metodit näihin tarkoituksiin. Luokan sendMessage-metodi ei tee tässä tapauksessa mitään. (WWW-selaimelle ei voida push-tyyppisesti lähettää viestejä, vaan kaikki toiminta tapahtuu selaimen aloitteesta.)

Metodit

HTML:ää tuottavat webcore-luokat (pakkaus webcore)

Nämä luokat huolehtivat tietynlaisten HTML-sivujen luomisesta ja niiden palauttamisesta WWW-selaimelle vastauksena HTTP-pyyntöön. Suurin osa asiakasmoduulin toiminnallisuudesta löytyy webcore-pakkauksen luokista.

Periaatteessa kaiken toiminnallisuuden ja HTML:n generoinnin voisi tehdä esimerkiksi vain yhdessä luokassa; toiminnallisuus on jaettu useampaan luokkaan lähinnä selkeyden vuoksi. Kukin luokka vastaa periaatteessa käyttöliittymän yhtä ''näkymää''.



Lista webcore-luokista

Login - sisään- ja uloskirjautumiseen liittyvät asiat, etusivu
Main - sisäänkirjautumisen jälkeinen pääsivu, lista kaikista näkymistä
View - yhden näkymän sisältö
Message - yhden viestin näyttäminen
Attachment - liitetiedoston välittäminen käyttäjälle
Settings - asetusten muokkaaminen (sisältää tässä prototyypissä vain IMAP-palvelinten asetukset, käyttöliittymässä kohta "DataSources")
ContextModel - kontekstimallien luominen, muokkaaminen ja poistaminen
Profile - profiilien ja niihin liittyvien sääntöjen luominen, muokkaaminen ja poistaminen
ContactList - kontaktilistan muokkaaminen
Write - viestin kirjoittaminen ja lähetys

Kaikki edellämainitut luokat toteuttavat webcore-järjestelmän WebRequestable -rajapinnan. Luokassa on rajapinnan vaatima metodi

public void processRequest(HTTPRequest httpRequest)

joka saa parametrina HTTP-pyynnön, ja jonka tehtävänä on tuottaa selaimelle vastauksena lähetettävä HTML-sivu. Lisäksi luokissa on mahdollisesti omia apumetodeja; esimerkiksi Login-luokassa sisäänkirjautumislomakkeen tulostamista varten on pieni apumetodi.

webcore-luokkien toiminta

Sessionhallinta hoidetaan HTTP-''keksien'' (cookie) ja yksilöllisten session-id -tunnusten avulla. Sisäänkirjautumisen jälkeen jokainen selaimelta tuleva HTTP-pyyntö sisältää session-id:n, ja pyynnön käsittelevä webcore-luokka kutsuu ClientManagerin getUserBySessionId -metodia, joka palauttaa session-id:tä vastaavan User-olion. Tämän jälkeen kyseinen webcore-luokka voi suoraan käyttää User-olion metodeja esimerkiksi listatakseen käyttäjän tietyn näkymän viestit, tai tehdäkseen käyttäjän pyytämiä muutoksia johonkin profiiliin tai kontekstimalliin.

Login -luokka toimii muista poiketen siten, että se saa käyttäjältä käyttäjänimen ja salasanan, jotka välitetään ClientManagerin login-metodille, ja näin saadaan viite User-olioon. Onnistuneen sisäänkirjautumisen yhteydessä Login asettaa selaimelle session-id -''keksin'', jonka avulla tunnistus ja sessionhallinta jatkossa tapahtuu.

Useimmissa tapauksissa sivulla oleva HTML-lomake lähetetään samalle sivulle, toisin sanoen sama luokka tuottaa HTML:n joka sisältää lomakkeen, sekä koodin joka käsittelee ko. lomakkeen kun käyttäjä on syöttänyt siihen selaimella tietoja.

Webcore-luokkien toiminta selviää parhaiten itse lähdekoodia tutkimalla. Kannattaa kuitenkin muistaa, että ne toteuttavat vain yhden (alkeellisen) asiakasohjelman (joka tässä tapauksessa toimii HTTP- ja HTML -tekniikoiden avulla), eikä niiden merkitys kontekstisensitiivisen viestintäjärjestelmän kannalta ole kovin suuri.

Lisäksi webcore-pakkauksessa on luokka HtmlUtils, johon on koottu useissa webcore-luokissa tarvittavia apumetodeja. Näihin kuuluu mm. metodeja jotka tekevät erilaisia usein tarvittavia HTML-tulostuksia, luovat HTTP-protokollan otsikkotietoja (mm. ''keksien'' asettamista varten) ja käsittelevät merkkijonoja eri tavoilla (esim. metodi joka muuttaa välilyönnit ja rivinvaihdot alaviivoiksi). Tarkat kuvaukset apumetodeista on Javadoc-dokumentaatiossa.



Kuva 4: WWW-käyttöliittymä

AttributeInterface -rajapinnan toteutusesimerkkejä

AttributeString

Attribute-luokan aliluokka, joka osaa käsitellä merkkijonoja.
Määrittely
:
public class AttributeString
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:

AttributeDate

Attribute-luokan aliluokka, joka osaa käsitellä päivämääriä (esim. viestin lähetysaika).
Määrittely
:
public class AttributeDate
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:

AttributePriority

Attribute-luokan aliluokka, joka osaa käsitellä viestin mukana tullutta Priority-arvoa (normal, high, low).
Määrittely
:
public class AttributePriority
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:

AttributePrecedence

Attribute-luokan aliluokka, joka osaa käsitellä viestin mukana tullutta Precedence-arvoa (bulk, normal, priority ym.)
Määrittely
:
public class AttributePrecedence
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:


ContextModelValueAttribute

ContextModelValueAttribute on attribuutin toteutusluokka, joka on tarkoitettu viestiolioon liitettäväksi (implements MessageAttributeInterface) ja sen toiminnallisuus on tarkoitettu käsittelemään kontekstimalliolion itselleen määrittelemää arvoa, joka kuvastaa prosentuaalisesti ( kokonaislukuna 0-100 ) vertailun onnistumista.
Määrittely
:
class ContextModelValueAttribute implements MessageAttributeInterface
Konstruktorit
:
Metodit
:

AttributeStringArray

AttributeStringArray-luokka on toteutus luokka viestiolioon liitettävillä ( implements MessageAttributeInterface ) attribuuteille, joiden arvotietosisältö voi olla moniosainen tekstiarvo.
Määrittely
:
class AttributeStringArray implements MessageAttributeInterface
Konstruktorit
:
Metodit
:

UserPropertyInterface -rajapinnan toteutusesimerkkejä

TimeProperty

TimeProperty-luokassa toteutetaan vertailu vuorokauden tunteihin (0-23).
Määrittely
:
public class TimeProperty implements UserPropertyInterface
Metodit
:

ActionInterface -rajapinnan toteutusesimerkkejä

ActionActivateProfile

ActionActivateProfile-luokka toteuttaa profiilien aktivoimiseen liittyviä toimintoja.
Määrittely
:
public class ActionActivateProfile implements ActionInterface
Riippuvuudet
:
Kentät
:
Metodit
:

ActionGetMessages

ActionGetMessages-luokka toteuttaa viestien hakemiseen liittyvää toiminnallisuutta.
Määrittely
:

public class ActionGetMessages implements ActionInterface

Riippuvuudet
:
Kentät
:
Metodit
:

ActionIncomingMessage

Tämä ActionInterface-rajapinnan toteutus liittää järjestelmän sisään tulleen viestin johonkin näkymään.
Määrittely
:

public class ActionIncomingMessage implements ActionInterface

Riippuvuudet
:
Kentät
:
Metodit
:

Avoimeksi jääneitä kysymyksiä ja muita lyhyitä kommentteja

Asennus ja ylläpito

Toimintaympäristö

Prototyypissä käytetään seuraavia ohjelmointikieliä, ohjelmistoja, ym. tekniikoita:

Linux 2.4.18
Java SDK, versio 1.4.1
Xindice, versio 1.0 (pienin omin korjauksin)
Drools, versio 2.0 beta7
WWW-käyttöliittymä toimii millä tahansa HTML- ja CSS-standardeja kohtuullisen hyvin tukevalla selaimella. (Esimerkiksi Mozilla 1.0 (tai uudempi) ja MS Internet Explorer 6 kelpaavat hyvin. Sen sijaan esim. Netscapen versiolla 4.x käyttöliittymä ei välttämättä toimi oikein.) Selaimen asetuksissa on oltava ''keksit'' eli cookiet päällä ja proxy-palvelinten käyttö pois päältä.

Järjestelmän asennus ja käyttöönotto

Ryhmän kotisivulta voi ladata järjestelmän lähdekoodit paketissa converge.tar.gz. Paketti puretaan komennolla tar xvfz converge.tar.gz, jolloin syntyy uusi hakemisto sources, jonka alta löytyvät Java SDK:ta lukuunottamatta kaikki tarpeelliset ohjelmakirjastot ja lähdekoodit.

Kääntäminen

Mikäli lähdekoodit halutaan kääntää ja käyttöympäristön javac -komento on Java SDK:n version 1.4.1:n mukainen, voidaan kääntäminen suorittaa sources-hakemistossa komennolla ./compile

Tietojenkäsittelytieteen laitoksen koneissa käytetään vielä oletuksena Javan vanhempaa versiota, mutta compile-skripti osaa käyttää /opt/j2sdk1.4.1_01/bin/ -hakemistosta löytyvää kääntäjää.

Käynnistäminen

Järjestelmä voidaan käynnistää komennolla ./start , mikäli käyttöympäristön Java-versio on 1.4.1.

Tietojenkäsittelytieteen laitoksen koneissa käytetään vielä oletuksena Javan vanhempaa versiota, mutta start-skripti osaa käyttää /opt/j2sdk1.4.1_01/jre/bin -hakemistosta löytyvää Java-tulkkia.

Jos halutaan käynnistää myös ylläpitäjän käyttöliittymä (esimerkiksi ryhmien luontia varten), voidaan käynnistyksen yhteydessä antaa parametri -gui.

Käynnistyessään järjestelmä avaa sources/config/clientmanager.cfg-tiedostossa määritellyt portit (oletuksena 8080 suojaamattomalle ja 8081 SSL-salatulle yhteydelle), joihin voi viitata WWW-selaimella esimerkiksi osoitteilla http://localhost:8080/ tai https://localhost:8081/.

Järjestelmän sulkeminen

Järjestelmä voidaan sulkea komentorivikehoitteessa komennolla Ctrl-c, jolloin käynnistyy järjestelmän hallittu alasajo. (Myös ylläpitäjän käyttöliittymäikkunan sulkeminen aiheuttaa järjestelmän alasajon.)

Javadoc -dokumentaatio

Järjestelmän Javadoc-dokumentaatioon on linkki ryhmän kotisivuilla osoitteessa
http://www.cs.helsinki.fi/group/converge, mutta tarvittaessa voidaan dokumentaatio luoda paikallisestikin antamalla sources-hakemistossa komento ./makejavadoc. Tällöin luodaan uusi hakemisto sources/javadoc, joka sisältää kaiken lähdekoodeista tuotetun dokumentaation.

Javadoc-dokumenttien luonnissa esiintyy varoitusilmoituksia, mutta ne ovat hyväksyttäviä.

Ylläpito

Lokitiedostot

Tässä prototyypissä kerätään runsaasti erilaista ohjelmiston toiminnasta kertovaa lokitietoa sources/logs -hakemistoon. Lokitiedostot luodaan aina uudestaan järjestelmää käynnistettäessä, viimeistään siinä vaiheessa, kun kuhunkin lokitiedostoon kirjoitetaan ensimmäistä kertaa.

Tietokannan varmuuskopio

Tietokannasta voidaan ottaa varmuuskopio kopioimalla hakemisto sources/db sisältöineen haluttuun paikkaan. Kopion palautus toimii vastaavasti kopioimalla varmuuskopio sources/db-hakemiston päälle (tätä ennen kannattanee sources/db joko tyhjentää tai poistaa kokonaan).

Asetustiedostot

WWW-käyttöliittymän ulkoasu on suurimmaksi osaksi helposti muutettavissa hakemistosta sources/webcore/public_html/ löytyvää converge.css -tyylitiedostoa muokkaamalla. Saman hakemiston index.html on webcore-palvelimen juureen tuleva dokumentti (eli tavallaan järjestelmän etusivu osoitteessa http://localhost:8080/). (Muutokset public_html -hakemiston tiedostoihin tulevat voimaan ilman järjestelmän uudelleenkääntämistä.)

sources/config/clientmanager.cfg
Asiakasmoduuliin ja webcoreen liittyvät asetukset:
- Session vanhentumisaika (sekunteina)
- Webcoren käyttämät porttinumerot (SSL ja ei-SSL)
- Tulostetaanko WWW-käyttöliittymään testausinformaatiota (HTTP-parametrit ym.)

sources/config/converge.key
- SSL-palvelimen salausavain

sources/config/profile.xml
- Käyttäjän oletusprofiili XML-muodossa

sources/config/groupprofile.xml
- Ryhmän oletusprofiili XML-muodossa

Muut sources/config-hakemiston asetustiedostot ovat Xindicen asetuksia.

WWW-käyttöliittymän käyttöohje

Tästä dokumentista ...

Convergence of messaging

Tämä dokumentti tehtiin ohjelmistolla LaTeX2HTML translator Version 2002 (1.62)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, Ross Moore, Mathematics Department, Macquarie University, Sydney.

Komentoriviargumentit olivat:
latex2html -split 0 toteutusdokumentti.tex.

Komennon ajoi Joni J Karppinen 2002-12-20


Footnotes

...webcore1
Lisätietoja osoitteesta http://www.hunter-lovell.org/webcore/doc/overview.html

next_inactive up previous
Joni J Karppinen 2002-12-20