Ohjelmointi

Etsi palvelut Jini-hakupalvelun avulla

Jinin hakupalvelu, joka on keskeinen osa Jinin ajonaikaisia ​​infrastruktuureja, tarjoaa Jini-asiakkaille joustavan ja tehokkaan tavan löytää Jini-palvelut. Se antaa palveluntarjoajille mahdollisuuden mainostaa palveluitaan ja antaa asiakkaille mahdollisuuden etsiä ja käyttää palvelujen apua.

Voidakseen olla yhteydessä hakupalveluun, asiakkaan on ensin hankittava palvelun rekisteröijä esine kautta löytö, verkkotason protokolla, jota Jinin ajonaikainen infrastruktuuri käyttää. Discoveryn avulla asiakkaat ja palvelut voivat etsiä hakupalvelut. (Lisätietoja löytämisestä on kohdassa Resurssit.) palvelun rekisteröijä esine, joka toteuttaa net.jini.core.lookup.ServiceRegisterar käyttöliittymän avulla asiakas voi olla vuorovaikutuksessa hakupalvelun kanssa. Haluttujen palveluiden löytämiseksi asiakkaat rakentavat a ServiceTemplate, luokan esiintymä net.jini.core.lookup.ServiceTemplateja välitä se toiselle Katso ylös() - ilmoitetut menetelmät Palvelurekisteri käyttöliittymä. Jokainen Katso ylös() method lähettää palvelumallin hakupalvelulle, joka suorittaa kyselyn ja palauttaa vastaavat palveluobjektit asiakkaalle.

Yleensä asiakas etsii palvelua Java-tyypin mukaan, yleensä käyttöliittymän mukaan. Esimerkiksi, jos asiakkaan on käytettävä tulostinta, se luo palvelumallin, joka sisältää a Luokka esine tunnetulle käyttöliittymälle tulostinpalveluihin. Kaikki tulostinpalvelut toteuttavat käyttöliittymän. Hakupalvelu palauttaa palveluobjektin (tai objektit), jotka toteuttavat tämän käyttöliittymän. Voit sisällyttää määritteitä palvelumalliin kaventaaksesi vastaavuuksien määrää tällaiselle tyyppipohjaiselle haulle. Asiakas käyttää tulostinpalvelua kutsumalla palveluobjektiin tunnetulla käyttöliittymällä ilmoitetut menetelmät.

ServiceTemplate-luokka

Kanssa ServiceTemplate luokassa, voit ilmaista Jini-hakujen hakukriteerit. Luokka koostuu yksinomaan näistä kolmesta julkisesta kentästä:

public Entry [] attributeSetTemplates; public ServiceID serviceID; public Class [] serviceTypes; 

ServiceTemplate ei ole menetelmiä, ja sen esiintymät toimivat vain "struct" kaltaisina säilöinä hakupalvelukyselyihin. Ottelut suoritetaan seuraavan otteen kuvaamalla tavalla ServiceTemplatejavadoc-sivu:

Hakupalvelun kohteet sovitetaan käyttämällä [ServiceTemplate]. Palveluerä (kohde) vastaa palvelumallia (tmpl) jos:

  • item.serviceID on yhtä suuri tmpl.serviceID (tai jos tmpl.serviceID On tyhjä)
  • item.service [palveluobjekti] on kaiken tyyppinen esiintymä tmpl.serviceTypes
  • item.attributeSets sisältää ainakin yhden vastaavan merkinnän kutakin hakemistomallia varten tmpl.attributeSetTemplates

Merkintä vastaa merkintämallia, jos mallin luokka on sama kuin merkinnän luokka tai yliluokka, ja jokainen ei-nolla-kenttä mallissa on sama kuin vastaava kenttä. Jokaista merkintää voidaan käyttää vastaamaan useampaa kuin yhtä mallia. Huomaa, että palvelumallissa serviceTypes ja attributeSetTemplates, tyhjä kenttä vastaa tyhjää taulukkoa; molemmat edustavat jokerimerkkiä.

Kuten tässä on kuvattu, palvelumalli voi sisältää viittauksen ryhmään Luokka esineitä. Nämä objektit ilmoittavat hakupalvelulle asiakkaan haluaman palveluobjektin Java-tyypin (tai tyypit). Palvelumalli voi sisältää myös a palvelun tunnus, joka yksilöi yksilöllisesti palvelun, ja määritteet, joiden on vastattava täsmälleen palveluntarjoajan palvelukohteeseen lataamia ominaisuuksia. Palvelumalli voi sisältää myös villikortteja mille tahansa näistä kentistä. Esimerkiksi villi kortti palvelun ID-kentässä vastaa mitä tahansa palvelun tunnusta.

Haku () -menetelmät

Palvelurekisterion Katso ylös() menetelmillä on kaksi ylikuormitettua muotoa. Nämä kaksi lomaketta eroavat toisistaan ​​lähinnä otteluiden ja palattujen tuotteiden määrän mukaan. Kahden parametrin lomake voi palauttaa useita kyselyssä ilmaistuja vastaavuuksia ServiceTemplate, kun taas yhden parametrin lomake palauttaa vain yhden vastaavuuden. Lisäksi kahden parametrin lomake palauttaa kokonaiset palvelut; yhden parametrin muoto palauttaa vain palveluobjektin.

Kahden parametrin hakumuoto ()

Tässä on javadoc-ote, joka selittää kahden parametrin muodon Katso ylös():

public ServiceMatches -haku (ServiceTemplate tmpl, int maxMatches) heittää java.rmi.RemoteException; 

[Se] palauttaa korkeintaan maxMatches mallia vastaavat kohteet plus mallia vastaavien tuotteiden kokonaismäärä. Palautusarvo ei ole koskaan tyhjä, ja palautettujen tuotteiden taulukko on vain tyhjä jos maxMatches on nolla. Jos palveluobjektia ei voida poistaa käytöstä jokaiselle palautetulle tuotteelle, kohteen palvelukentäksi asetetaan tyhjä eikä mitään poikkeusta heitetä. Vastaavasti, jos määriteryhmää ei voida deserialisoida, kyseisen elementin attributeSets taulukon arvoksi on asetettu tyhjä eikä mitään poikkeusta heitetä.

Tässä on ServiceMatches luokka:

paketti net.jini.core.lookup;

public class ServiceMatches laajentaa java.lang.Object toteuttaa java.io.Serializable {

public ServiceItem [] -tuotteet; public int totalMatches; }

Ja tässä on ServiceItem luokka:

paketti net.jini.core.lookup;

public class ServiceMatches laajentaa java.lang.Object toteuttaa java.io.Serializable {

public Entry [] attributeSets; julkinen java.lang.objektipalvelu; public ServiceID serviceID; }

Kuten aiemmin mainittiin, kukin kohteita Kahden parametrin lomakkeen palauttama taulukko on täydellinen palvelukohde, joka sisältää palveluobjektin, palvelun tunnuksen ja kaikki määriteryhmät. maxMatches -kenttä auttaa asiakkaita hallitsemaan tällä palautettujen objektien määrää Katso ylös().

Pituus kohteita taulukko palautetussa ServiceMatches objekti on pienempi tai yhtä suuri kuin siirretty arvo Katso ylös() sisään maxMatches. Vastaavien palvelun kohteiden kokonaismäärä (palautettu vuonna 2003) totalMatches) on suurempi tai yhtä suuri kuin pituus kohteita taulukko.

Esimerkiksi jos maxMatches on 50 ja palvelumalli vastaa 25 tuotetta, palautetun pituuden kohteita taulukko ja arvo totalMatches ovat molemmat 25. Vaihtoehtoisesti, jos maxMatches on 50, mutta palvelumalli vastaa 100 tuotetta, palautetun pituuden kohteita taulukko on 50 ja arvo totalMatches on 100. Kun palvelumalli vastaa enemmän kuin maxMatches palvelun kohteet, kahden parametrin palauttamat palvelut Katso ylös() valitaan satunnaisesti täsmäävän palveluvalikoiman joukosta.

Haun yhden parametrin muoto ()

Yksi parametri Katso ylös() method palauttaa yhden satunnaisesti valitun palveluobjektin kaikista vastaavuuksista. Tässä on javadoc-ote, joka selittää tämän lomakkeen:

public Object lookup (ServiceTemplate tmpl) heittää java.rmi.RemoteException; 
Palauttaa palveluobjektin (eli vain ServiceItem.service) mallia vastaavasta tuotteesta, tai tyhjä jos ottelua ei ole. Jos useita kohteita vastaa mallia, palautuspalveluobjekti on mielivaltainen. Jos palautettua objektia ei voida deserialisoida, Poikkeuksellinen heitetään normaalin RMI-semantiikan kanssa.

Koska yksi parametri Katso ylös() palauttaa vain yhden vastaavan palveluobjektin, asiakkaat voivat minimoida ladattujen objekti- ja luokkatiedostojen määrän. Mutta koska palautettu palveluobjekti valitaan mielivaltaisesti, eikä sitä tunnista palvelun tunnuksella tai sitä kuvataan liittyvillä attribuuttisarjoilla, asiakkaan on oltava vakuuttunut siitä, että minkä tahansa vastaava palveluobjekti riittää.

Selausmenetelmät

Näiden kahden lisäksi Katso ylös() menetelmiä, Palvelurekisteri on kolme selausmenetelmät, jotka tuottavat tietoja rekisteröidyistä palvelueristä Kolme menetelmää - getServiceTypes (), getEntryClasses ()ja getFieldValues ​​() -- kutsutaan selausmenetelmät koska ne mahdollistavat asiakkaiden selata palveluja ja määritteitä hakupalvelussa.

getServiceTypes () menetelmä vie a ServiceTemplate (sama ServiceTemplate joka välitetään Katso ylös() menetelmät) ja a Merkkijono etuliite. Se palauttaa ryhmän Luokka ilmentymiä, jotka edustavat erityisimpiä palveluobjektien tyyppejä (luokkia tai rajapintoja), jotka vastaavat mallia. Nämä palveluobjektit eivät ole yhtä suuria kuin minkä tahansa mallissa määritetyn tyypin eivätkä yliluokka, ja niillä on nimiä, jotka alkavat määritetyllä etuliitteellä. Palveluobjekti tai objektit, joille Luokka Palautetut esiintymät ovat kaikki mallissa välitetyt tyypit (jos sellaisia ​​on), mutta Luokka instanssit ovat kaikki spesifisempiä kuin (ja ovat alaluokkia tai alipintoja). Jokainen luokka näkyy vain kerran palautetussa taulukossa mielivaltaisessa järjestyksessä.

Tässä mitä getServiceTypes () näyttää:

public java.lang.Class [] getServiceTypes (ServiceTemplate tmpl, java.lang.String-etuliite) heittää java.rmi.RemoteException; 

getEntryTypes () menetelmä vie a ServiceTemplate ja palauttaa taulukon Luokka ilmentymiä, jotka edustavat mallia vastaavien palvelukohteiden tarkimpia merkintäluokkia, jotka joko eivät vastaa mitään merkintämallia tai ovat yhden alaluokka. Jokainen luokka näkyy vain kerran palautetussa taulukossa, jälleen mielivaltaisessa järjestyksessä.

Tässä mitä getEntryClasses () näyttää:

public java.lang.Class [] getEntryClasses (ServiceTemplate tmpl) heittää java.rmi.RemoteException; 

getFieldValues ​​() menetelmä vie a ServiceTemplate, kokonaislukuindeksi ja a Merkkijono kenttä nimi. Se palauttaa ryhmän Esines kaikkien kentässä näkyvän merkinnän nimettyjen kenttien kohdalla ServiceTemplateon Merkintä [] taulukko minkä tahansa vastaavan palvelutuotteen läpäissyssä hakemistossa. Jokainen tietyn luokan ja arvon objekti näkyy vain kerran palautetussa taulukossa mielivaltaisessa järjestyksessä.

Tässä mitä getFieldValues ​​() näyttää:

public java.lang.Object [] getFieldValues ​​(ServiceTemplate tmpl, int setIndex, java.lang.String-kenttä) heittää java.lang.NoSuchFieldException, java.rmi.RemoteException; 

Näiden selaustapojen käyttäytyminen ja tarkoitus voivat olla epäselviä. Voit ajatella niitä työkaluina, jotka kaventavat vähitellen hakupalvelun kyselyitä.

Esimerkiksi asiakas, kuten graafinen hakupalveluselain, voisi ensin vedota getServiceTypes () tyhjällä mallilla. getServiceTemplate () method palauttaa kaikki mahdolliset hakupalveluun rekisteröidyt palvelutyypit, jotka selain voisi näyttää. Käyttäjä voi valita yhden tai useamman tyypin ja painaa sitten Kysely-painiketta. Selain lisäisi kyseisen tyypin (tai tyypit) palvelumalliin ja kutsui getServiceTypes () uudelleen. Selain palauttaa ja näyttää pienemmän luettelon tyypeistä. Käyttäjä voi valita yhden ja painaa Enter-painiketta. Selain muodostaa mallin, jossa on viimeksi valittu palvelutyyppi tai tyypit, ja käynnistää sitten getEntryTypes (). getEntryTypes () method palauttaisi joukon syöttöluokkia, jotka selain voisi sitten näyttää.

Käyttäjä voi valita joitain merkintöjä - ja valitun merkinnän kentän - ja painaa Kentät-painiketta. Selain rakentaa mallin käyttämällä tällä hetkellä valittuja palvelu- ja merkintätyyppejä. Sitten se välittäisi sen merkintäluokan indeksin, jossa käyttäjä valitsi kentän, ja valitun kentän nimen getFieldValues ​​(). Selain näyttää kaikki arvot getFieldValues ​​() palasi. Näiden arvojen avulla käyttäjä voisi edelleen kaventaa palvelun hakua ja lopulta valita tietyn palvelun. Siten nämä menetelmät auttavat asiakkaita, riippumatta siitä, onko mukana ihmiskäyttäjä, selaamaan hakupalveluun rekisteröityjä palveluja. Selausmenetelmistä palautetut taulukot voivat auttaa asiakasta tarkentamaan kyselyjään edelleen, mikä johtaa lopulta a ServiceTemplate että kun se siirretään Katso ylös(), palauttaa sopivimman palveluobjektin.

Ilmoitus () -menetelmä

Haku- ja selausmenetelmien lisäksi Palvelurekisteri käyttöliittymässä on myös a ilmoittaa() menetelmä, joka ilmoittaa asiakkaille, kun uudet palvelut rekisteröidään tai rekisteröinti poistetaan hakupalvelusta:

julkinen EventRegistration-ilmoitus (ServiceTemplate tmpl, int-siirtymät, RemoteEventListener-kuuntelija, MarshalledObject-takaisinkytkentä, pitkä vuokrausDuration) heittää RemoteExceptionin; 

Sinä vedot ilmoittaa() rekisteröidä itsesi (tai toinen kuuntelija) vastaanottamaan hajautettu tapahtuma aina, kun palvelut, jotka vastaavat hyväksyttyä ServiceTemplate tehdään tilamuutos, joka kuvataan siirtymien parametrilla.

Siirtymäparametri on bittisuuntainen TAI näistä kolmesta arvosta, jotka on määritelty vakioiksi Palvelurekisteri:

TRANSITION_MATCH_MATCH TRANSITION_MATCH_NOMATCH TRANSITION_NOMATCH_MATCH 

Rakennat ServiceTemplate varten ilmoittaa() samalla tavalla kuin rakennat sen Katso ylös(). Voit ilmoittaa yksiselitteiset tyypit, palvelutunnuksen, määritteet (joiden on oltava täsmälleen yhteensopivia) tai jokerikortit (jotka vastaavat mitä tahansa) missä tahansa näistä kentistä. Siirtymät perustuvat muutoksiin (tai muutoksiin) minkä tahansa tilaasi vastaavan tilassa ServiceTemplate ennen ja jälkeen minkä tahansa hakupalvelun toiminnon.

Esimerkiksi, TRANSITION_MATCH_MATCH ilmaisee, että ainakin yksi palvelun kohde vastasi malliasi ennen operaatiota ja sen jälkeen. TRANSITION_MATCH_NOMATCH ilmaisee, että vaikka ainakin yksi tietty palveluerä vastasi malliasi ennen operaatiota, se ei enää vastaanut mallia operaation jälkeen. Jos haluat saada ilmoituksen, kun uusia palveluja lisätään hakupalveluun, määritä vain malli, joka vastaa mitä tahansa palvelua ja läpäisyä TRANSITION_NOMATCH_MATCH siirtymänä ilmoittaa() menetelmä.

SUBHEAD_BREAK: Hakupalvelu vs. nimipalvelimet