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.ServiceTemplate
ja 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 ServiceTemplate
javadoc-sivu:
Hakupalvelun kohteet sovitetaan käyttämällä [ServiceTemplate
]. Palveluerä (kohde
) vastaa palvelumallia (tmpl
) jos:
item.serviceID
on yhtä suuritmpl.serviceID
(tai jostmpl.serviceID
Ontyhjä
)item.service
[palveluobjekti] on kaiken tyyppinen esiintymätmpl.serviceTypes
item.attributeSets
sisältää ainakin yhden vastaavan merkinnän kutakin hakemistomallia vartentmpl.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
Palvelurekisteri
on 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 Esine
s kaikkien kentässä näkyvän merkinnän nimettyjen kenttien kohdalla ServiceTemplate
on 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