Storitev iskanja Jini, osrednja komponenta Jinijeve runtime infrastrukture, strankam Jini ponuja prilagodljiv in zmogljiv način iskanja storitev Jini. Ponudnikom storitev omogoča oglaševanje svojih storitev, strankam pa omogoča iskanje in iskanje pomoči teh storitev.
Za interakcijo s storitvijo iskanja mora stranka najprej pridobiti datoteko registrar storitve objekt prek odkritje, protokol na ravni omrežja, ki ga uporablja Jinijeva izvajalna infrastruktura. Discovery strankam in storitvam omogoča iskanje iskalnih storitev. (Za več informacij o odkritju glejte Viri.) registrar storitve
objekt, ki izvaja net.jini.core.lookup.ServiceRegistrar
vmesnik, omogoča stranki interakcijo s storitvijo iskanja. Za iskanje želenih storitev stranke izdelajo a ServiceTemplate
, primerek razreda net.jini.core.lookup.ServiceTemplate
in ga posredujte enemu od dveh Poglej gor()
metode, navedene v ServiceRegistrar
vmesnik. Vsak Poglej gor()
metoda pošlje predlogo storitve iskalni storitvi, ki izvede poizvedbo in stranki vrne ujemajoče se storitvene predmete.
Na splošno odjemalec išče storitev po tipu Java, običajno vmesniku. Če mora stranka na primer uporabiti tiskalnik, sestavi predlogo storitve, ki vključuje Razred
predmet za dobro znan vmesnik za tiskalniške storitve. Vse storitve tiskalnika izvajajo vmesnik. Storitev iskanja vrne objekt storitve (ali objekte), ki izvaja ta vmesnik. Atribute lahko vključite v predlogo storitve, da zožite število zadetkov za takšno iskanje po vrstah. Naročnik uporablja storitev tiskalnika tako, da na objektu storitve prikliče metode, deklarirane v znanem vmesniku.
Razred ServiceTemplate
Z ServiceTemplate
razreda, lahko izrazite iskalna merila za iskanje Jini. Predavanje je sestavljeno samo iz teh treh javnih polj:
javni vnos [] attributeSetTemplates; javni ServiceID serviceID; javni razred [] vrste storitve;
ServiceTemplate
nima metod in njeni primerki zgolj služijo kot "strukturni" vsebniki za poizvedbe storitev iskanja. Tekme se izvajajo, kot je opisano v naslednjem odlomku iz ServiceTemplate
Javadoc stran:
Elementi v iskalni storitvi se ujemajo s primerkom [ServiceTemplate
]. Postavka storitve (element
) se ujema s predlogo storitve (tmpl
) če:
item.serviceID
enakotmpl.serviceID
(ali četmpl.serviceID
jenič
)item.service
[objekt storitve] je primerek vsake vrste vtmpl.serviceTypes
item.attributeSets
vsebuje vsaj en ujemajoč se vnos za vsako predlogo vnosa vtmpl.attributeSetTemplates
Vnos se ujema s predlogo vnosa, če je razred predloge enak razredu vnosa ali nadrazred razreda in je vsako neveljavno polje v predlogi enako ustreznemu polju vnosa. Vsak vnos lahko uporabimo za ujemanje z več kot eno predlogo. Upoštevajte, da je v predlogi storitve za vrste storitve
in attributeSetTemplates
, nično polje je enakovredno prazni matriki; oba predstavljata nadomestni znak.
Kot je opisano tukaj, lahko predloga storitve vključuje sklic na niz Razred
predmetov. Ti predmeti v iskalni storitvi nakazujejo tip Java (ali tipe) storitvenega predmeta, ki ga želi odjemalec. Predloga storitve lahko vključuje tudi a ID storitve, ki enolično identificira storitev in atribute, ki se morajo natančno ujemati z atributi, ki jih je ponudnik storitve naložil v element storitve. Predloga storitve lahko vsebuje tudi nadomestne znake za katero koli od teh polj. Nadomestni znak v polju ID storitve se bo na primer ujemal s katerim koli ID storitve.
Metode iskanja ()
The ServiceRegistrar
je Poglej gor()
metode imajo dve preobremenjeni obliki. Obrazca se razlikujeta predvsem po številu ujemanj in servisnih postavkah, ki jih vsak vrne. Obrazec z dvema parametroma lahko vrne več ujemanj poizvedbe, izražene v ServiceTemplate
, medtem ko obrazec z enim parametrom vrne samo eno ujemanje. Poleg tega obrazec z dvema parametroma vrne celotne postavke storitev; obrazec z enim parametrom vrne samo objekt storitve.
Dvoparametrska oblika iskanja ()
Tu je javadoc odlomek, ki pojasnjuje dvoparametrsko obliko Poglej gor()
:
iskanje javnih ServiceMatches (ServiceTemplate tmpl, int maxMatches) vrže java.rmi.RemoteException;
[Vrne] kvečjemu maxMatches
elementi, ki se ujemajo s predlogo, skupaj s skupnim številom elementov, ki se ujemajo s predlogo. Vrnjena vrednost ni nikoli nič
, in vrnjeno polje elementov je samo nič
če maxMatches
je nič. Če storitvenega objekta ni mogoče deserializirati, je za vsako vrnjeno postavko nastavljeno servisno polje elementa nič
in nobena izjema ni vržena. Če nabora atributov ni mogoče deserializirati, je ta element attributeSets
polje je nastavljeno na nič
in nobena izjema ni vržena.
Tukaj je Servisne tekme
razred:
paket net.jini.core.lookup;
javni razred ServiceMatches razširja java.lang.Object implementira java.io.Serializable {
predmeti javne storitveItem []; javni int totalMatches; }
In tukaj je ServiceItem
razred:
paket net.jini.core.lookup;
javni razred ServiceMatches razširja java.lang.Object implementira java.io.Serializable {
javni vnos [] attributeSets; javna storitev java.lang.Object; javni ServiceID serviceID; }
Kot smo že omenili, je vsak element predmetov
matrika, ki jo vrne obrazec z dvema parametroma, je popolna postavka storitve, ki vključuje objekt storitve, ID storitve in vse nize atributov. The maxMatches
field pomaga strankam pri upravljanju števila predmetov, ki jih to vrne Poglej gor()
.
Dolžina predmetov
matrika v vrnjenem Servisne tekme
je manjši ali enak vrednosti, ki ji je bila posredovana Poglej gor()
v maxMatches
. Skupno število ujemajočih se storitev (vrnjenih v totalMatches
) je večja ali enaka dolžini predmetov
matriko.
Na primer, če maxMatches
je 50 in predloga storitve se ujema s 25 elementi, dolžina vrnjenega predmetov
matriko in vrednost totalMatches
sta oba 25. Druga možnost je, če maxMatches
je 50, vendar se predloga storitve ujema s 100 elementi, dolžina vrnjenega predmetov
matrika je 50 in vrednost totalMatches
je 100. Ko se predloga storitve ujema z več kot maxMatches
storitvene postavke, storitvene postavke, ki jih vrne dvoparameter Poglej gor()
so naključno izbrani iz celotnega nabora ustreznih storitev.
Enoparametrska oblika iskanja ()
Enotni parameter Poglej gor()
vrne en ujemajoč se objekt storitve, izbran naključno med vsemi ujemanji. Tu je javadoc odlomek, ki pojasnjuje to obliko:
iskanje javnega predmeta (ServiceTemplate tmpl) vrže java.rmi.RemoteException;Vrne objekt storitve (tj. Just
ServiceItem.service
) iz predmeta, ki se ujema s predlogo, ali nič
če ni ujemanja. Če se predlogi ujema več elementov, je poljubno, kateri predmet storitve je vrnjen. Če vrnjenega predmeta ni mogoče deserializirati, se prikaže UnmarshalException
je vržen s standardno semantiko RMI.Ker je en-parameter Poglej gor()
vrne samo en ujemajoč se objekt storitve, odjemalci lahko zmanjšajo število prenesenih datotek stanja in razredov. Ker pa je vrnjeni objekt storitve izbran poljubno in ni identificiran z ID-jem storitve ali opisan s povezanimi nabori atributov, mora biti odjemalec prepričan, da kaj ujemanje storitvenega predmeta bo dovolj.
Načini brskanja
Poleg dveh Poglej gor()
metode, ServiceRegistrar
ima tri metode brskanja, ki dajejo informacije o registriranih storitvah. Tri metode - getServiceTypes ()
, getEntryClasses ()
, in getFieldValues ()
-- se imenujejo metode brskanja ker strankam omogočajo brskanje po storitvah in atributih v iskalni storitvi.
The getServiceTypes ()
metoda traja a ServiceTemplate
(enako ServiceTemplate
ki se posreduje Poglej gor()
metode) in a Vrvica
predpono. Vrne matriko Razred
primerki, ki predstavljajo najbolj specifične vrste (razrede ali vmesnike) storitvenih objektov, ki se ujemajo s predlogo. Ti objekti storitve niso enaki niti nadrazred katere koli vrste, podane v predlogi, in imajo imena, ki se začnejo z določeno predpono. Objekt storitve ali predmeti, za katere Razred
vrnjeni primerki so vsi primerki vseh vrst (če obstajajo), posredovanih v predlogi, vendar Razred
vsi primerki so bolj specifični od (in so podrazredi ali podvmesniki) teh vrst. Vsak razred se v vrnjeni matriki pojavi samo enkrat in v poljubnem vrstnem redu.
Tukaj je kaj getServiceTypes ()
izgleda kot:
javni java.lang.Class [] getServiceTypes (ServiceTemplate tmpl, predpona java.lang.String) vrže java.rmi.RemoteException;
The getEntryTypes ()
metoda traja a ServiceTemplate
in vrne matriko Razred
primerki, ki predstavljajo najbolj specifične razrede vnosov za elemente storitve, ki se ujemajo s predlogo, ki se ne ujemajo z nobeno predlogo vnosa ali pa so njen podrazred. Vsak razred se v vrnjeni matriki pojavi samo enkrat, in sicer v poljubnem vrstnem redu.
Tukaj je kaj getEntryClasses ()
izgleda kot:
javni java.lang.Class [] getEntryClasses (ServiceTemplate tmpl) vrže java.rmi.RemoteException;
The getFieldValues ()
metoda traja a ServiceTemplate
, celoštevilski indeks in a Vrvica
ime polja. Vrne matriko Predmet
s za poimenovano polje vseh primerkov vnosa, ki se pojavi v ServiceTemplate
je Vnos []
matriko pri katerem koli posredovanem indeksu ustreznega elementa storitve. Vsak predmet določenega razreda in vrednosti se v vrnjeni matriki pojavi samo enkrat in v poljubnem vrstnem redu.
Tukaj je kaj getFieldValues ()
izgleda kot:
javni java.lang.Object [] getFieldValues (ServiceTemplate tmpl, int setIndex, polje java.lang.String) vrže java.lang.NoSuchFieldException, java.rmi.RemoteException;
Vedenje in namen teh metod brskanja sta lahko nejasna. Morda boste o njih razmišljali kot o orodjih, ki postopoma ožijo poizvedbe storitve iskanja.
Na primer, odjemalec, kot je brskalnik za grafično iskanje, lahko najprej pokliče getServiceTypes ()
s prazno predlogo. The getServiceTemplate ()
vrne vse možne vrste storitev, registrirane v iskalni storitvi, ki bi jih brskalnik lahko prikazal. Uporabnik je lahko izbral eno ali več vrst, nato pa pritisnil gumb Zahteva. Brskalnik bi to vrsto (ali tipe) dodal v predlogo storitve in poklical getServiceTypes ()
ponovno. Manjši seznam vrst bi vrnil in prikazal brskalnik. Uporabnik ga je lahko izbral in pritisnil gumb Vnosi. Brskalnik bi oblikoval predlogo z nazadnje izbrano vrsto ali vrstami storitev in nato poklical getEntryTypes ()
. The getEntryTypes ()
metoda vrne niz vstopnih razredov, ki jih brskalnik nato prikaže.
Uporabnik je lahko izbral nekaj vnosov - in polje izbranega vnosa - in pritisnil gumb Polja. Brskalnik bi zgradil predlogo s trenutno izbranimi vrstami storitev in vnosov. Nato bi prenesel indeks vstopnega razreda, v katerem je uporabnik izbral polje, in ime izbranega polja getFieldValues ()
. Brskalnik bi prikazal vse vrednosti, ki getFieldValues ()
vrnil. S temi vrednostmi lahko uporabnik še bolj zoži iskanje storitve in sčasoma izbere določeno storitev. Tako te metode strankam, ne glede na to, ali gre za človeškega uporabnika, pomagajo brskati po storitvah, registriranih v iskalni storitvi. Polja, vrnjena iz načinov brskanja, lahko stranki pomagajo pri nadaljnjem izboljšanju poizvedb, kar na koncu povzroči a ServiceTemplate
to, ko se prenese na Poglej gor()
, vrne najprimernejši objekt storitve.
Metoda notify ()
Poleg načinov iskanja in brskanja je tudi ServiceRegistrar
vmesnik ima tudi obvestiti()
metoda, ki obvesti stranke, ko se nove storitve registrirajo ali odjavijo s storitvijo iskanja:
obvestilo o javnem dogodkuRegistracija (ServiceTemplate tmpl, int prehodi, poslušalec RemoteEventListener, predal MarshalledObject, long leaseDuration) vrže RemoteException;
Prikličete obvestiti()
da se registrirate (ali drug poslušalec) za prejem distribuiranega dogodka, kadar koli storitve, ki se ujemajo z opravljenim ServiceTemplate
spremeniti stanje, opisano s parametrom prehoda.
Parameter prehoda je biten ALI
katerega koli nepraznega niza teh treh vrednosti, definiranih kot konstante v ServiceRegistrar
:
TRANSITION_MATCH_MATCH TRANSITION_MATCH_NOMATCH TRANSITION_NOMATCH_MATCH
Vi gradite ServiceTemplate
za obvestiti()
na enak način, za katerega ga gradite Poglej gor()
. V katerem koli od teh polj lahko navedete eksplicitne vrste, ID storitve, atribute (ki se morajo natančno ujemati) ali nadomestne znake (ki se karkoli ujemajo). Prehodi temeljijo na spremembi (ali nespremenitvi) statusa tistega, kar ustreza vašemu ServiceTemplate
pred in po izvedbi kakršne koli operacije storitve iskanja.
Na primer, TRANSITION_MATCH_MATCH
označuje, da se je vsaj en element storitve ujemal z vašo predlogo pred in po operaciji. TRANSITION_MATCH_NOMATCH
označuje, da se je, čeprav se je vsaj en določen element storitve pred operacijo ujemal z vašo predlogo, po operaciji ni več ujemal s vašo predlogo. Če želite prejeti obvestilo o dodajanju novih storitev v storitev iskanja, preprosto določite predlogo, ki se ujema s katero koli storitvijo in dovoljenjem TRANSITION_NOMATCH_MATCH
kot prehod na obvestiti()
metoda.
SUBHEAD_BREAK: Iskalna storitev v primerjavi z imenskimi strežniki