Programiranje

Poiščite storitve s storitvijo iskanja Jini

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.ServiceTemplatein 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 ServiceTemplateJavadoc stran:

Elementi v iskalni storitvi se ujemajo s primerkom [ServiceTemplate]. Postavka storitve (element) se ujema s predlogo storitve (tmpl) če:

  • item.serviceID enako tmpl.serviceID (ali če tmpl.serviceID je nič)
  • item.service [objekt storitve] je primerek vsake vrste v tmpl.serviceTypes
  • item.attributeSets vsebuje vsaj en ujemajoč se vnos za vsako predlogo vnosa v tmpl.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 ServiceRegistrarje 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 Predmets za poimenovano polje vseh primerkov vnosa, ki se pojavi v ServiceTemplateje 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

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