Programování

Vyhledejte služby pomocí vyhledávací služby Jini

Vyhledávací služba Jini, hlavní součást běhové infrastruktury Jini, nabízí klientům Jini flexibilní a účinný způsob, jak najít služby Jini. Umožňuje poskytovatelům služeb inzerovat jejich služby a umožňuje klientům vyhledat a získat pomoc s těmito službami.

Pro interakci s vyhledávací službou musí klient nejprve získat a servisní registrátor objekt prostřednictvím objev, protokol na úrovni sítě používaný běhovou infrastrukturou Jini. Discovery umožňuje klientům a službám vyhledávat vyhledávací služby. (Další informace o zjišťování najdete v části Zdroje.) servisní registrátor objekt, který implementuje net.jini.core.lookup.ServiceRegistrar rozhraní, umožňuje klientovi komunikovat s vyhledávací službou. K vyhledání požadovaných služeb si klienti sestaví a Šablona služby, instance třídy net.jini.core.lookup.ServiceTemplatea předejte ji jednomu ze dvou vzhlédnout() metody deklarované v ServiceRegistrar rozhraní. Každý vzhlédnout() metoda odešle šablonu služby vyhledávací službě, která provede dotaz a vrátí odpovídající objekty služby klientovi.

Obecně platí, že klient vyhledává službu podle typu Java, obvykle rozhraní. Například pokud klient potřebuje použít tiskárnu, vytvoří šablonu služby, která obsahuje a Třída objekt známého rozhraní se službami tiskárny. Rozhraní implementují všechny tiskové služby. Vyhledávací služba vrací servisní objekt (nebo objekty), které implementují toto rozhraní. Můžete zahrnout atributy do šablony služby, abyste zúžili počet shod pro takové vyhledávání podle typu. Klient používá tiskovou službu vyvoláním na objektu služby metody deklarované ve známém rozhraní.

ServiceTemplate Třída

S Šablona služby třídy, můžete vyjádřit kritéria vyhledávání pro vyhledávání Jini. Třída se skládá pouze z těchto tří veřejných polí:

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

Šablona služby nemá žádné metody a jeho instance slouží pouze jako kontejnery typu „struct“ pro dotazy vyhledávací služby. Shody se provádějí, jak je popsáno v následujícím výňatku z Šablona službystránka javadoc:

Položky ve vyhledávací službě jsou spárovány pomocí instance [Šablona služby]. Servisní položka (položka) odpovídá šabloně služby (tmpl) pokud:

  • item.serviceID se rovná tmpl.serviceID (nebo když tmpl.serviceID je nula)
  • item.service [objekt služby] je instancí každého typu tmpl.serviceTypes
  • item.attributeSets obsahuje alespoň jednu odpovídající položku pro každou vstupní šablonu v tmpl.attributeSetTemplates

Záznam odpovídá šabloně záznamu, pokud je třída šablony stejná jako třída záznamu nebo nadtřída třídy a každé nenulové pole v šabloně se rovná odpovídajícímu poli záznamu. Každý záznam lze použít k přiřazení více než jedné šablony. Všimněte si, že v šabloně služby pro typy služeb a attributeSetTemplates, pole null je ekvivalentní prázdnému poli; oba představují zástupný znak.

Jak je zde popsáno, šablona služby může obsahovat odkaz na pole Třída předměty. Tyto objekty označují vyhledávací službě typ (typy) Java objektu služby, který si klient přeje. Šablona služby může také obsahovat a ID služby, který jednoznačně identifikuje službu a atributy, které se musí přesně shodovat s atributy nahranými poskytovatelem služby v položce služby. Šablona služby může také obsahovat zástupné karty pro kterékoli z těchto polí. Například zástupná karta v poli ID služby bude odpovídat jakémukoli ID služby.

Metody vyhledávání ()

The ServiceRegistrarje vzhlédnout() metody mají dvě přetížené formy. Tyto dvě formy se liší hlavně v počtu shod a položek služeb, které každá z nich vrátí. Formulář se dvěma parametry může vrátit více shod dotazu vyjádřeného v Šablona služby, zatímco formulář s jedním parametrem vrátí pouze jednu shodu. Dvouparametrový formulář navíc vrací celé servisní položky; formulář s jedním parametrem vrací pouze objekt služby.

Dvouparametrový formulář lookup ()

Zde je ukázka javadoc, která vysvětluje dvouparametrovou formu vzhlédnout():

veřejné vyhledávání ServiceMatches (ServiceTemplate tmpl, int maxMatches) hodí java.rmi.RemoteException; 

[Vrátí se] nanejvýš maxMatches položky odpovídající šabloně plus celkový počet položek, které odpovídají šabloně. Návratová hodnota není nikdy nulaa pole vrácených položek je pouze nula -li maxMatches je nula. Pokud u každé vrácené položky nelze objekt služby deserializovat, je pole služby u položky nastaveno na nula a není vyvolána žádná výjimka. Podobně, pokud sadu atributů nelze deserializovat, tento prvek sady atributů pole je nastaveno na nula a není vyvolána žádná výjimka.

Zde je Servisní shody třída:

balíček net.jini.core.lookup;

public class ServiceMatches rozšiřuje java.lang.Object implementuje java.io.Serializable {

public ServiceItem [] položky; public int totalMatches; }

A tady je ServiceItem třída:

balíček net.jini.core.lookup;

public class ServiceMatches rozšiřuje java.lang.Object implementuje java.io.Serializable {

veřejné položky [] sady atributů; veřejná služba java.lang.Object; public ServiceID serviceID; }

Jak již bylo zmíněno dříve, každý prvek položky pole vrácené dvouparametrovým formulářem je úplná položka služby, která zahrnuje objekt služby, ID služby a všechny sady atributů. The maxMatches pole pomáhá klientům spravovat počet objektů vrácených tímto vzhlédnout().

Délka položky pole ve vráceném Servisní shody objekt je menší nebo roven hodnotě předané vzhlédnout() v maxMatches. Celkový počet odpovídajících položek služby (vráceno v totalMatches) je větší nebo roven délce položky pole.

Například pokud maxMatches je 50 a servisní šablona odpovídá 25 položkám, což je délka vráceného zboží položky pole a hodnota totalMatches jsou oba 25. Alternativně, pokud maxMatches je 50, ale servisní šablona odpovídá 100 položkám, což je délka vrácené položky položky pole je 50 a hodnota totalMatches je 100. Když se šablona služby shoduje s více než maxMatches položky služby, položky služby vrácené dvěma parametry vzhlédnout() jsou náhodně vybrány z celé sady odpovídajících položek služeb.

Jednoparametrová forma vyhledávání ()

Jeden parametr vzhlédnout() metoda vrátí jeden odpovídající objekt služby vybraný náhodně ze všech shod. Zde je výňatek z javadocu vysvětlující tento formulář:

veřejné vyhledávání objektů (ServiceTemplate tmpl) vyvolá java.rmi.RemoteException; 
Vrátí objekt služby (tj. Jen ServiceItem.service) z položky odpovídající šabloně nebo nula pokud neexistuje shoda. Pokud šabloně odpovídá více položek, je libovolné, který objekt služby se vrátí. Pokud vrácený objekt nelze deserializovat, an UnmarshalException je vyvolána standardní sémantikou RMI.

Protože jeden parametr vzhlédnout() vrátí pouze jeden odpovídající objekt služby, klienti mohou minimalizovat počet stažených souborů stavu a souborů tříd. Ale protože vrácený objekt služby je vybrán libovolně a není identifikován ID služby nebo popsán přidruženými sadami atributů, klient musí mít jistotu, že žádný odpovídající servisní objekt bude stačit.

Metody procházení

Kromě těch dvou vzhlédnout() metody, ServiceRegistrar má tři metody procházení, které poskytují informace o registrovaných službách. Tyto tři metody - getServiceTypes (), getEntryClasses (), a getFieldValues ​​() -- se nazývají metody procházení protože umožňují klientům procházet služby a atributy ve vyhledávací službě.

The getServiceTypes () metoda trvá a Šablona služby (stejný Šablona služby který je předán vzhlédnout() metody) a a Tětiva předpona. Vrací pole Třída instance představující nejkonkrétnější typy (třídy nebo rozhraní) objektů služby, které odpovídají šabloně. Tyto objekty služby nejsou ani stejné, ani nadtřídy žádného z typů uvedených v šabloně, a mají názvy, které začínají zadanou předponou. Objekt služby nebo objekty, pro které Třída jsou vráceny instance jsou všechny instance všech typů (pokud existují) předaných v šabloně, ale Třída instance jsou konkrétnější než (a jsou to podtřídy nebo podrozhraní) těchto typů. Každá třída se ve vráceném poli objeví pouze jednou a v libovolném pořadí.

Tady je co getServiceTypes () vypadá jako:

public java.lang.Class [] getServiceTypes (ServiceTemplate tmpl, prefix java.lang.String) hodí java.rmi.RemoteException; 

The getEntryTypes () metoda trvá a Šablona služby a vrátí pole Třída instance, které představují nejkonkrétnější třídy položek pro položky služby, které odpovídají šabloně, které buď neodpovídají žádné šabloně položky, nebo jsou podtřídou jedné. Každá třída se ve vráceném poli objeví pouze jednou, opět v libovolném pořadí.

Tady je co getEntryClasses () vypadá jako:

public java.lang.Class [] getEntryClasses (ServiceTemplate tmpl) hodí java.rmi.RemoteException; 

The getFieldValues ​​() metoda trvá a Šablona služby, celočíselný index a Tětiva název pole. Vrací pole Objekts pro pojmenované pole všech instancí položky, která se objeví v Šablona službyje Vstup[] pole u libovolného vyhovujícího indexu položky služby. Každý objekt konkrétní třídy a hodnoty se v vráceném poli zobrazí pouze jednou a v libovolném pořadí.

Tady je co getFieldValues ​​() vypadá jako:

public java.lang.Object [] getFieldValues ​​(ServiceTemplate tmpl, int setIndex, pole java.lang.String) hodí java.lang.NoSuchFieldException, java.rmi.RemoteException; 

Chování a účel těchto metod procházení mohou být nejasné. Můžete si je představit jako nástroje, které postupně zužují dotazy vyhledávací služby.

Například klient, jako je grafický prohlížeč vyhledávací služby, by se mohl nejdříve vyvolat getServiceTypes () s prázdnou šablonou. The getServiceTemplate () metoda vrací všechny možné typy služeb registrované ve vyhledávací službě, které by prohlížeč mohl zobrazit. Uživatel může vybrat jeden nebo více typů a poté stisknout tlačítko Požadavek. Prohlížeč by přidal tento typ (nebo typy) do šablony služby a vyvolal getServiceTypes () znovu. Prohlížeč vrátí a zobrazí menší seznam typů. Uživatel si může jednu vybrat a stisknout tlačítko Záznamy. Prohlížeč by vytvořil šablonu s naposledy vybraným typem nebo typy služeb a poté by vyvolal getEntryTypes (). The getEntryTypes () metoda vrátí pole vstupních tříd, které by pak prohlížeč mohl zobrazit.

Uživatel může vybrat některé položky - a pole vybrané položky - a stisknout tlačítko Pole. Prohlížeč by vytvořil šablonu pomocí aktuálně vybrané služby a typů záznamů. Poté by předal index vstupní třídy, ve které uživatel pole vybral, a název vybraného pole getFieldValues ​​(). Prohlížeč by zobrazil všechny hodnoty, které getFieldValues ​​() vrátil. S těmito hodnotami by uživatel mohl dále zúžit hledání služby, případně zvolit konkrétní službu. Tyto metody tedy pomáhají klientům bez ohledu na to, zda se jedná o lidského uživatele, procházet služby registrované ve vyhledávací službě. Pole vrácená z metod procházení mohou klientovi pomoci dále upřesnit jeho dotazy, což nakonec povede k Šablona služby to, když je předáno vzhlédnout(), vrátí nejvhodnější objekt služby.

Metoda oznámit ()

Kromě metod vyhledávání a procházení, ServiceRegistrar rozhraní má také oznámit() metoda, která upozorní klienty, když se nové služby zaregistrují nebo zruší registraci ve vyhledávací službě:

veřejné upozornění EventRegistration (ServiceTemplate tmpl, int přechody, posluchač RemoteEventListener, předání MarshalledObject, dlouhý pronájemDuration) vyvolá RemoteException; 

Vyvoláváte oznámit() zaregistrovat sebe (nebo jiného posluchače), abyste obdrželi distribuovanou událost, kdykoli služby, které odpovídají předaným Šablona služby podstoupit změnu stavu popsanou parametrem přechody.

Parametr přechody je bitový NEBO jakékoli neprázdné sady těchto tří hodnot, definované jako konstanty v ServiceRegistrar:

TRANSITION_MATCH_MATCH TRANSITION_MATCH_NOMATCH TRANSITION_NOMATCH_MATCH 

Vy stavíte Šablona služby pro oznámit() stejným způsobem, pro který to stavíte vzhlédnout(). V jakémkoli z těchto polí můžete uvést explicitní typy, ID služby, atributy (které se musí přesně shodovat) nebo divoké karty (které se shodují s čímkoli). Přechody jsou založeny na změně (nebo nezměněném) stavu toho, co odpovídá vašemu Šablona služby před a po provedení jakékoli operace ve vyhledávací službě.

Například, TRANSITION_MATCH_MATCH označuje, že alespoň jedna položka služby odpovídala vaší šabloně před a po operaci. TRANSITION_MATCH_NOMATCH označuje, že ačkoli se alespoň jedna konkrétní položka služby shodovala s vaší šablonou před operací, po operaci již neodpovídala vaší šabloně. Chcete-li dostávat oznámení, když jsou do vyhledávací služby přidány jakékoli nové služby, stačí zadat šablonu, která odpovídá jakékoli službě a předat TRANSITION_NOMATCH_MATCH jako přechod k oznámit() metoda.

SUBHEAD_BREAK: Vyhledávací služba versus jmenné servery

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