Vyhľadávacia služba Jini, ústredná súčasť runtime infraštruktúry Jini, ponúka klientom Jini flexibilný a výkonný spôsob, ako nájsť služby Jini. Umožňuje poskytovateľom služieb inzerovať ich služby a umožňuje klientom vyhľadať a získať pomoc s týmito službami.
Pre interakciu s vyhľadávacou službou musí klient najskôr získať a registrátor služieb objekt cez objav, protokol na úrovni siete používaný runtime infraštruktúrou Jini. Discovery umožňuje klientom a službám vyhľadať vyhľadávacie služby. (Viac informácií o objavení nájdete v časti Zdroje.) registrátor služieb
objekt, ktorým sa realizuje net.jini.core.lookup.ServiceRegistrar
rozhranie, umožňuje klientovi komunikovať s vyhľadávacou službou. Na vyhľadanie požadovaných služieb si klienti zostavia a ServiceTemplate
, inštancia triedy net.jini.core.lookup.ServiceTemplate
a odovzdajte ho jednému z dvoch vyhľadať()
metódy deklarované v ServiceRegistrar
rozhranie. Každý vyhľadať()
metóda pošle šablónu služby vyhľadávacej službe, ktorá vykoná dopyt a vráti zodpovedajúce objekty služby klientovi.
Všeobecne platí, že klient vyhľadáva služby podľa typu Java, zvyčajne podľa rozhrania. Napríklad, ak klient potrebuje používať tlačiareň, zostaví šablónu služby, ktorá obsahuje a Trieda
objekt známeho rozhrania so službami tlačiarne. Rozhranie implementujú všetky tlačiarenské služby. Vyhľadávacia služba vracia objekt služby (alebo objekty), ktoré implementujú toto rozhranie. Môžete zahrnúť atribúty do šablóny služby na zúženie počtu zhôd pre také vyhľadávanie podľa typu. Klient používa tlačiarenskú službu vyvolaním na objekte služby metódy deklarované v známom rozhraní.
Trieda ServiceTemplate
Vďaka ServiceTemplate
triedy, môžete vyjadriť kritériá vyhľadávania pre vyhľadávanie Jini. Trieda sa skladá iba z týchto troch verejných polí:
public Entry [] attributeSetTemplates; public ServiceID serviceID; public Class [] serviceTypes;
ServiceTemplate
nemá žiadne metódy a jeho inštancie slúžia iba ako kontajnery podobné štruktúram pre dotazy vyhľadávacích služieb. Zhody sa uskutočňujú tak, ako je opísané v nasledujúcom výňatku z ServiceTemplate
stránka javadoc:
Položky vo vyhľadávacej službe sa párujú pomocou inštancie [ServiceTemplate
]. Servisná položka (položka
) zodpovedá šablóne služby (tmpl
) ak:
item.serviceID
rovná satmpl.serviceID
(alebo aktmpl.serviceID
jenulový
)item.service
[objekt služby] je inštanciou každého typu vtmpl.serviceTypes
sady položiek. atribút
obsahuje najmenej jeden zodpovedajúci záznam pre každú šablónu záznamu v priečinkutmpl.attributeSetTemplates
Položka sa zhoduje so šablónou záznamu, ak je trieda šablóny rovnaká ako trieda záznamu alebo nadtrieda tejto triedy a každé nenulové pole v šablóne sa rovná zodpovedajúcemu poľu záznamu. Každý záznam je možné použiť na priradenie viacerých šablón. Upozorňujeme, že v šablóne služby pre typy služieb
a attributeSetTemplates
, nulové pole je ekvivalentné prázdnemu poľu; obidva predstavujú zástupný znak.
Ako je tu opísané, šablóna služby môže obsahovať odkaz na pole Trieda
predmety. Tieto objekty označujú vyhľadávacej službe typ (typy) Java objektu služby, ktorý si klient želá. Šablóna služby môže obsahovať aj a ID služby, ktorý jedinečne identifikuje službu a atribúty, ktoré sa musia presne zhodovať s atribútmi nahranými poskytovateľom služby v položke služby. Šablóna služby môže tiež obsahovať zástupné znaky pre ktorékoľvek z týchto polí. Divoká karta v poli ID služby sa napríklad bude zhodovať s akýmkoľvek ID služby.
Metódy vyhľadávania ()
The ServiceRegistrar
je vyhľadať()
metódy majú dve preťažené formy. Tieto dve formy sa líšia hlavne počtom zhôd a servisnými položkami, ktoré každá vráti. Dvojparametrový formulár môže vrátiť viac zhôd dotazu vyjadrených v ServiceTemplate
, zatiaľ čo formulár s jedným parametrom vráti iba jednu zhodu. Okrem toho dvojparametrový formulár vracia celé servisné položky; formulár s jedným parametrom vráti iba objekt služby.
Dvojparametrový formulár lookup ()
Tu je výňatok z javadocu, ktorý vysvetľuje formu dvoch parametrov vyhľadať()
:
verejné vyhľadávanie ServiceMatches (ServiceTemplate tmpl, int maxMatches) hodí java.rmi.RemoteException;
[It] sa vracia najviac maxMatches
položky zodpovedajúce šablóne plus celkový počet položiek, ktoré zodpovedajú šablóne. Návratová hodnota nie je nikdy nulový
a pole vrátených položiek je iba nulový
ak maxMatches
je nula. Ak pre každú vrátenú položku nie je možné objekt služby rekonštruovať, pole služby pre položku je nastavené na nulový
a nehádže sa žiadna výnimka. Podobne, ak nie je možné deserializovať množinu atribútov, tento prvok prvku množiny atribútov
pole je nastavené na nulový
a nehádže sa žiadna výnimka.
Tu je Servisné zhody
trieda:
balíček net.jini.core.lookup;
public class ServiceMatches rozširuje java.lang.Object implementuje java.io.Serializable {
položky public ServiceItem []; public int totalZhody; }
A tu je ServiceItem
trieda:
balíček net.jini.core.lookup;
public class ServiceMatches rozširuje java.lang.Object implementuje java.io.Serializable {
sady súborov public Entry []; verejná služba java.lang.Object; public ServiceID serviceID; }
Ako už bolo spomenuté vyššie, každý prvok položky
pole vrátené dvojparametrovým formulárom je úplná položka služby, ktorá obsahuje objekt služby, ID služby a všetky sady atribútov. The maxMatches
pole pomáha klientom spravovať počet vrátených objektov vyhľadať()
.
Dĺžka položky
pole vo vrátenom Servisné zhody
objekt je menší alebo rovný hodnote odovzdanej vyhľadať()
v maxMatches
. Celkový počet zodpovedajúcich položiek služby (vrátených v totalMatches
) je väčšia alebo rovná dĺžke položky
pole.
Napríklad ak maxMatches
je 50 a šablóna služby sa zhoduje s 25 položkami, čo je dĺžka vráteného tovaru položky
pole a hodnota totalMatches
sú obaja 25. Prípadne, ak maxMatches
je 50, ale šablóna služby sa zhoduje so 100 položkami, čo je dĺžka vrátenej položky položky
pole je 50 a hodnota totalMatches
je 100. Keď sa šablóna služby zhoduje s viac ako maxMatches
položky služby, položky služby vrátené dvojparametrom vyhľadať()
sú náhodne vybrané z celej sady zodpovedajúcich servisných položiek.
Jednoparametrová forma vyhľadávania ()
Jeden parameter vyhľadať()
metóda vráti jeden zodpovedajúci objekt služby vybraný náhodne zo všetkých zhôd. Tu je úryvok z javadocu, ktorý vysvetľuje tento formulár:
verejné vyhľadávanie objektov (ServiceTemplate tmpl) hodí java.rmi.RemoteException;Vráti objekt služby (t.j. iba
ServiceItem.service
) z položky zodpovedajúcej šablóne, alebo nulový
ak nie je zhoda. Ak šablóne zodpovedá viac položiek, je ľubovoľné, ktorý objekt služby sa vráti. Ak vrátený objekt nie je možné deserializovať, an UnmarshalException
je vrhnutá so štandardnou sémantikou RMI.Pretože jeden parameter vyhľadať()
vráti iba jeden zodpovedajúci objekt služby, klienti môžu minimalizovať počet stiahnutých súborov stavu a súborov triedy. Ale pretože vrátený objekt služby je vybraný svojvoľne a nie je identifikovaný ID služby alebo opísaný v pridružených množinách atribútov, klient si musí byť istý, že akýkoľvek vyhovujúci objekt služby bude stačiť.
Metódy prehliadania
Okrem tých dvoch vyhľadať()
metódy, ServiceRegistrar
má tri metódy prehliadania, ktoré poskytujú informácie o registrovaných položkách služieb. Tieto tri metódy - getServiceTypes ()
, getEntryClasses ()
a getFieldValues ()
-- sa volajú metódy prehliadania pretože umožňujú klientom prehliadať služby a atribúty vo vyhľadávacej službe.
The getServiceTypes ()
metóda vyžaduje a ServiceTemplate
(rovnaký ServiceTemplate
ktorý sa odovzdáva vyhľadať()
metódy) a a String
predpona. Vráti pole Trieda
inštancie predstavujúce najšpecifickejšie typy (triedy alebo rozhrania) servisných objektov, ktoré sa zhodujú so šablónou. Tieto objekty služby sa nerovnajú ani nie sú nadtriedou žiadneho z typov uvedených v šablóne, a majú názvy, ktoré sa začínajú zadanou predponou. Služobný objekt alebo objekty, pre ktoré Trieda
Vrátené inštancie sú všetky inštancie všetkých typov (ak existujú) odovzdaných v šablóne, ale Trieda
inštancie sú všetky konkrétnejšie ako (a sú to podtriedy alebo podrozhrania) týchto typov. Každá trieda sa vo vrátenom poli objaví iba raz a v ľubovoľnom poradí.
Tu je čo getServiceTypes ()
vyzerá ako:
public java.lang.Class [] getServiceTypes (ServiceTemplate tmpl, java.lang.String prefix) hodí java.rmi.RemoteException;
The getEntryTypes ()
metóda vyžaduje a ServiceTemplate
a vráti pole Trieda
inštancie, ktoré predstavujú najšpecifickejšie triedy položiek pre položky služby, ktoré sa zhodujú so šablónou, ktoré sa nezhodujú so žiadnou šablónou záznamu alebo sú podtriedou jednej. Každá trieda sa vo vrátenom poli objaví iba raz, opäť v ľubovoľnom poradí.
Tu je čo getEntryClasses ()
vyzerá ako:
public java.lang.Class [] getEntryClasses (ServiceTemplate tmpl) hodí java.rmi.RemoteException;
The getFieldValues ()
metóda vyžaduje a ServiceTemplate
, celočíselný index a String
názov poľa. Vráti pole Objekt
s pre pomenované pole všetkých inštancií záznamu, ktorý sa zobrazuje v ServiceTemplate
je Vstup []
pole v ľubovoľnom vyhovujúcom indexe položky služby. Každý objekt konkrétnej triedy a hodnoty sa vo vrátenom poli zobrazí iba raz a v ľubovoľnom poradí.
Tu je čo getFieldValues ()
vyzerá ako:
public java.lang.Object [] getFieldValues (ServiceTemplate tmpl, int setIndex, java.lang.String pole) hodí java.lang.NoSuchFieldException, java.rmi.RemoteException;
Chovanie a účel týchto metód prehliadania môžu byť nejasné. Môžete si ich predstaviť ako nástroje, ktoré postupne zužujú dotazy vyhľadávacej služby.
Napríklad klient, napríklad grafický prehliadač vyhľadávacej služby, by sa mohol najskôr dovolať getServiceTypes ()
s prázdnou šablónou. The getServiceTemplate ()
metóda vráti všetky možné typy služieb zaregistrované vo vyhľadávacej službe, ktoré by prehliadač mohol zobraziť. Používateľ môže zvoliť jeden alebo viac typov a potom stlačiť tlačidlo Požiadavka. Prehliadač by pridal tento typ (alebo typy) do šablóny služby a vyvolal ich getServiceTypes ()
ešte raz. Prehliadač vráti a zobrazí menší zoznam typov. Užívateľ si môže jednu zvoliť a stlačiť tlačidlo Vstupy. Prehliadač by vytvoril šablónu s naposledy vybraným typom alebo druhmi služieb a potom by sa mohol odvolať getEntryTypes ()
. The getEntryTypes ()
metóda vráti pole vstupných tried, ktoré by potom prehliadač mohol zobraziť.
Používateľ by mohol vybrať niektoré položky - a pole vybratej položky - a stlačiť tlačidlo Pole. Prehliadač by vytvoril šablónu pomocou aktuálne vybranej služby a typov vstupu. Potom by prešiel index vstupnej triedy, v ktorej používateľ vybral pole, a názov vybratého poľa do getFieldValues ()
. Prehliadač by zobrazil všetky hodnoty, ktoré getFieldValues ()
vrátený. S týmito hodnotami by používateľ mohol ďalej zúžiť hľadanie služby a nakoniec si zvoliť konkrétnu službu. Tieto metódy teda pomáhajú klientom, bez ohľadu na to, či je alebo nie je zapojený ľudský používateľ, prechádzať služby zaregistrované vo vyhľadávacej službe. Polia vrátené z metód prehliadania môžu pomôcť klientovi ďalej spresniť jeho dotazy, čo nakoniec povedie k ServiceTemplate
že keď prešli na vyhľadať()
, vráti najvhodnejší objekt služby.
Metóda notify ()
Okrem metód vyhľadávania a prehliadania sa zobrazuje aj ikona ServiceRegistrar
rozhranie má tiež a upozorniť ()
metóda, ktorá upozorní klientov, keď sa nové služby zaregistrujú alebo zrušia registráciu vo vyhľadávacej službe:
verejné upozornenie EventRegistration (ServiceTemplate tmpl, int transitions, RemoteEventListener poslucháč, MarshalledObject handback, longeaseDuration) hodí RemoteException;
Vyvolávate upozorniť ()
zaregistrovať sa (alebo iný poslucháč) na príjem distribuovanej udalosti vždy, keď sa služby zhodujú s úspešnosťou ServiceTemplate
podstúpiť zmenu stavu opísanú parametrom prechody.
Parameter prechody je bitový ALEBO
ľubovoľnej neprázdnej množiny týchto troch hodnôt, definovaných ako konštanty v ServiceRegistrar
:
TRANSITION_MATCH_MATCH TRANSITION_MATCH_NOMATCH TRANSITION_NOMATCH_MATCH
Vy budujete ServiceTemplate
pre upozorniť ()
rovnakým spôsobom, ako to staviate pre vyhľadať()
. V ktoromkoľvek z týchto polí môžete uviesť explicitné typy, ID služby, atribúty (ktoré sa musia presne zhodovať) alebo zástupné znaky (ktoré sa zhodujú s čímkoľvek). Prechody sú založené na zmene (alebo nezmenení) stavu toho, čo sa zhoduje s vašim ServiceTemplate
pred a po vykonaní akejkoľvek operácie vo vyhľadávacej službe.
Napríklad, TRANSITION_MATCH_MATCH
označuje, že najmenej jedna položka služby sa zhodovala s vašou šablónou pred a po operácii. TRANSITION_MATCH_NOMATCH
označuje, že hoci sa aspoň jedna konkrétna položka služby zhodovala s vašou šablónou pred operáciou, už sa nezhodovala s vašou šablónou po operácii. Ak chcete dostávať oznámenia o pridaní akýchkoľvek nových služieb do vyhľadávacej služby, stačí zadať šablónu, ktorá sa zhoduje s akoukoľvek službou a prejsť TRANSITION_NOMATCH_MATCH
ako prechod na upozorniť ()
metóda.
SUBHEAD_BREAK: Vyhľadávacia služba oproti menným serverom