Programovanie

Vyhľadajte služby pomocou vyhľadávacej služby Jini

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.ServiceTemplatea 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 ServiceTemplatestrá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á sa tmpl.serviceID (alebo ak tmpl.serviceID je nulový)
  • item.service [objekt služby] je inštanciou každého typu v tmpl.serviceTypes
  • sady položiek. atribút obsahuje najmenej jeden zodpovedajúci záznam pre každú šablónu záznamu v priečinku tmpl.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 ServiceRegistrarje 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 Objekts pre pomenované pole všetkých inštancií záznamu, ktorý sa zobrazuje v ServiceTemplateje 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

$config[zx-auto] not found$config[zx-overlay] not found