Programavimas

Suraskite paslaugas naudodami „Jini“ paieškos paslaugą

„Jini“ paieškos paslauga, pagrindinis „Jini“ vykdymo laiko infrastruktūros komponentas, siūlo „Jini“ klientams lankstų ir galingą būdą rasti „Jini“ paslaugas. Tai suteikia paslaugų teikėjams galimybę reklamuoti savo paslaugas, o klientams - rasti ir pasinaudoti šių paslaugų pagalba.

Norėdami bendrauti su paieškos paslauga, klientas pirmiausia turi įsigyti paslaugų registratorius objektas per atradimas, tinklo lygio protokolas, kurį naudoja „Jini“ vykdymo laiko infrastruktūra. „Discovery“ leidžia klientams ir tarnyboms rasti paieškos paslaugas. (Norėdami gauti daugiau informacijos apie atradimą, žr. Ištekliai.) paslaugų registratorius objektas, kuris įgyvendina net.jini.core.lookup.ServiceRegistrar sąsaja, leidžia klientui bendrauti su paieškos paslauga. Norėdami rasti norimas paslaugas, klientai sukuria „ServiceTemplate“, klasės egzempliorius net.jini.core.lookup.ServiceTemplateir perduokite jį vienam iš dviejų ieškoti () metodais, deklaruotais „ServiceRegistrar“ sąsaja. Kiekvienas ieškoti () metodas siunčia paslaugos šabloną paieškos tarnybai, kuri atlieka užklausą ir grąžina klientui atitinkančius paslaugų objektus.

Apskritai klientas ieško paslaugos pagal „Java“ tipą, paprastai sąsają. Pavyzdžiui, jei klientui reikia naudoti spausdintuvą, jis sukuria paslaugų šabloną, kuriame yra Klasė objektas gerai žinomai spausdintuvo paslaugų sąsajai. Sąsają įdiegia visos spausdintuvo paslaugos. Paieškos paslauga pateikia paslaugos objektą (ar objektus), įgyvendinančius šią sąsają. Galite įtraukti atributus į paslaugų šabloną, kad susiaurintumėte tokio tipo paieškos atitikčių skaičių. Klientas naudojasi spausdintuvo paslauga, naudodamasis paslaugos objektu metodus, deklaruotus gerai žinomoje sąsajoje.

„ServiceTemplate“ klasė

Su „ServiceTemplate“ klasėje, galite išreikšti „Jini“ paieškų paieškos kriterijus. Klasę sudaro tik šios trys viešosios sritys:

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

„ServiceTemplate“ neturi metodų, o jo egzemplioriai yra tik „struktūros“ tipo talpyklos, susijusios su paieškos paslaugų užklausomis. Rungtynės atliekamos taip, kaip aprašyta toliau pateiktoje ištraukoje „ServiceTemplate“javadoko puslapis:

Paieškos paslaugos elementai sulyginami naudojant [„ServiceTemplate“]. Paslaugos elementas (elementą) atitinka paslaugos šabloną (tmpl), jei:

  • item.serviceID lygu tmpl.serviceID (arba jeigu tmpl.serviceID yra niekinis)
  • punktas.paslauga [paslaugos objektas] yra visų tipų egzempliorius tmpl.serviceTypes
  • item.attributeSets yra bent vienas atitinkantis įrašas kiekvienam įrašo šablonui tmpl.attributeSetTemplates

Įrašas sutampa su įvesties šablonu, jei šablono klasė yra tokia pati kaip įrašo klasė arba jos klasė yra superklasė, o kiekvienas nulio nulinis laukas šablone yra lygus atitinkamam įrašo laukui. Kiekvieną įrašą galima naudoti norint suderinti daugiau nei vieną šabloną. Atminkite, kad paslaugos šablone, skirtas serviceTypes ir attributeSetTemplates, nulinis laukas yra lygus tuščiam masyvui; abu reiškia pakaitos simbolį.

Kaip aprašyta čia, paslaugos šablone gali būti nuoroda į masyvą Klasė objektai. Šie objektai paieškos tarnybai nurodo kliento pageidaujamo paslaugos objekto „Java“ tipą (ar tipus). Paslaugos šablone taip pat gali būti a paslaugos ID, kuris unikaliai identifikuoja paslaugą, ir atributus, kurie turi tiksliai atitikti paslaugų teikėjo įkeltus atributus paslaugos elemente. Paslaugos šablone taip pat gali būti bet kurio iš šių laukų pakaitinės kortelės. Pakaitinė kortelė, esanti paslaugos ID lauke, atitiks bet kurį paslaugos ID.

Paieškos () metodai

„ServiceRegistrar“'s ieškoti () metodai pasireiškia dviem perkrautomis formomis. Šios dvi formos daugiausia skiriasi dėl rungtynių skaičiaus ir kiekvienos grąžintos paslaugos. Dviejų parametrų forma gali pateikti kelias užklausos, išreikštos „ServiceTemplate“, o vieno parametro forma pateikia tik vieną atitiktį. Be to, dviejų parametrų forma grąžina visus paslaugų elementus; vieno parametro forma pateikia tik paslaugos objektą.

Dviejų parametrų paieškos forma ()

Štai javadoco ištrauka, paaiškinanti dviejų parametrų formą ieškoti ():

viešoji „ServiceMatches“ peržiūra („ServiceTemplate tmpl“, „int maxMatches“) meta java.rmi.RemoteException; 

[Tai] grąžina daugiausia „maxMatches“ elementai, atitinkantys šabloną, pridėjus bendrą šabloną atitinkančių elementų skaičių. Grąžinimo vertė niekada nėra niekinis, o grąžinamų daiktų masyvas yra tik niekinis jei „maxMatches“ yra nulis. Kiekvienai grąžintai prekei, jei paslaugos objekto negalima deserializuoti, nustatomas prekės aptarnavimo laukas niekinis ir nėra išimties. Panašiai, jei atributų rinkinio negalima deserializuoti, tas elementas attributeSets masyvas nustatytas į niekinis ir nėra išimties.

Čia yra „ServiceMatches“ klasė:

paketas net.jini.core.lookup;

viešosios klasės „ServiceMatches“ išplečia java.lang.Object įgyvendina java.io.Serializable {

public ServiceItem [] elementai; public int totalMatches; }

Ir čia yra „ServiceItem“ klasė:

paketas net.jini.core.lookup;

viešosios klasės „ServiceMatches“ išplečia java.lang.Object įgyvendina java.io.Serializable {

public Entry [] atributų rinkiniai; vieša java.lang.Object service; public ServiceID serviceID; }

Kaip minėta anksčiau, kiekvienas daiktų masyvas, kurį grąžino dviejų parametrų forma, yra visas paslaugos elementas, kuriame yra paslaugos objektas, paslaugos ID ir visi atributų rinkiniai. „maxMatches“ laukas padeda klientams valdyti objektų, kuriuos grąžina tai, skaičių ieškoti ().

Ilgis daiktų masyvas grąžintame „ServiceMatches“ objektas yra mažesnis arba lygus jai perduotai vertei ieškoti () į „maxMatches“. Bendras atitinkančių paslaugų elementų skaičius (grąžintas 2008 m.) totalMatches) yra didesnis arba lygus ilgiui daiktų masyvas.

Pavyzdžiui, jei „maxMatches“ yra 50, o paslaugos šablonas atitinka 25 daiktus, grąžinamo ilgio daiktų masyvas ir vertė totalMatches yra abu 25. Arba, jei „maxMatches“ yra 50, bet paslaugos šablonas atitinka 100 elementų, grąžinamo ilgio daiktų masyvas yra 50 ir vertė totalMatches yra 100. Kai paslaugos šablonas atitinka daugiau nei „maxMatches“ paslaugų elementai, paslaugų parametrai, kuriuos grąžina du parametrai ieškoti () yra atrinkti atsitiktinai iš viso suderinamų paslaugų elementų rinkinio.

Vieno parametro paieškos forma ()

Vieno parametro ieškoti () metodas pateikia vieną atsitiktinai iš visų atitikmenų pasirinktą suderinamą paslaugos objektą. Štai javadoko ištrauka, paaiškinanti šią formą:

viešas objekto ieškojimas („ServiceTemplate tmpl“) meta java.rmi.RemoteException; 
Grąžina paslaugos objektą (t. Y. Tiesiog ServiceItem.service) iš elemento, atitinkančio šabloną, arba niekinis jei nėra rungtynių. Jei keli elementai atitinka šabloną, nesvarbu, kuris paslaugos objektas grąžinamas. Jei grąžinto objekto negalima deserializuoti, an UnmarshalException metamas su standartine RMI semantika.

Nes vieno parametro ieškoti () pateikia tik vieną atitinkantį paslaugos objektą, klientai gali sumažinti atsisiųstų objekto būsenos ir klasės failų skaičių. Kadangi grąžinamas paslaugos objektas yra pasirinktas savavališkai ir nėra identifikuojamas pagal paslaugos ID arba neapibūdinamas susietais atributų rinkiniais, klientas turi būti tikras, kad bet koks pakaks atitikimo paslaugos objekto.

Naršymo metodai

Be šių dviejų ieškoti () metodai, „ServiceRegistrar“ turi tris naršymo metodai, kurie pateikia informaciją apie registruotas paslaugas. Trys metodai - „getServiceTypes“ (), getEntryClasses ()ir „getFieldValues“ () -- yra vadinami naršymo metodai nes jie suteikia galimybę klientams naršyti paslaugas ir atributus per paieškos paslaugą.

„getServiceTypes“ () metodas trunka a „ServiceTemplate“ (tas pats „ServiceTemplate“ kad perduodama ieškoti () metodai) ir a Stygos priešdėlis. Tai pateikia masyvą Klasė egzemplioriai, reprezentuojantys konkretiausius paslaugų objektų tipus (klases ar sąsajas), atitinkančius šabloną. Šie paslaugų objektai nėra lygūs nei šablone nurodytų tipų, nei jų superklasei, ir jie turi pavadinimus, prasidedančius nurodytu priešdėliu. Tarnybos objektas ar objektai, kuriems Klasė grąžinami pavyzdžiai yra visi visų tipų (jei yra) egzemplioriai, perduoti šablone, bet Klasė egzemplioriai visi yra konkretesni nei šie tipai (ir yra poklasiai ar jų sąsajos). Kiekviena klasė grąžinamame masyve pasirodo tik vieną kartą ir savavališkai.

Štai ką getServiceTypes () atrodo kaip:

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

getEntryTypes () metodas trunka a „ServiceTemplate“ ir grąžina masyvą Klasė egzemplioriai, kurie žymi tiksliausias šabloną atitinkančių paslaugų elementų įrašų klases, kurios arba neatitinka jokio įvesties šablono, arba yra jo poklasis. Kiekviena klasė grąžinamame masyve pasirodo tik vieną kartą, vėl savavališkai.

Štai ką getEntryClasses () atrodo kaip:

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

„getFieldValues“ () metodas trunka a „ServiceTemplate“, sveiko skaičiaus indeksas ir a Stygos lauko pavadinimas. Jis pateikia masyvą Objektass - visų lauke rodomų įrašų egzempliorių pavadintam laukui „ServiceTemplate“'s Įrašas [] masyvas prie bet kurio suderinto paslaugos elemento išlaikyto indekso. Kiekvienas tam tikros klasės ir vertės objektas grąžinamame masyve pasirodo tik vieną kartą ir savavališkai.

Štai ką „getFieldValues“ () atrodo kaip:

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

Šių naršymo metodų elgesys ir tikslas gali būti neaiškūs. Galite galvoti apie juos kaip apie įrankius, kurie palaipsniui susiaurina paieškos paslaugos užklausas.

Pvz., Klientas, pvz., Grafinės paieškos paslaugos naršyklė, galėtų pirmiausia pasinaudoti „getServiceTypes“ () tuščiu šablonu. „getServiceTemplate“ () metodas grąžina visus galimus paslaugų tipus, užregistruotus peržvalgos tarnyboje, kuriuos naršyklė galėtų rodyti. Vartotojas galėjo pasirinkti vieną ar daugiau tipų, tada paspausti mygtuką Užklausa. Naršyklė tą tipą (ar tipus) pridės prie paslaugos šablono ir iškvies „getServiceTypes“ () vėl. Mažesnį tipų sąrašą grąžins ir parodys naršyklė. Vartotojas galėjo pasirinkti vieną ir paspausti mygtuką Įrašai. Naršyklė suformuos šabloną su paskutiniuoju pasirinktu paslaugos tipu ar tipais ir tada iškvies getEntryTypes (). getEntryTypes () metodas grąžins įvesties klasių masyvą, kurį naršyklė galėtų tada parodyti.

Vartotojas galėjo pasirinkti keletą įrašų - ir pasirinkto įrašo lauką - ir paspausti laukų mygtuką. Naršyklė sukurs šabloną naudodama šiuo metu pasirinktus paslaugų ir įrašų tipus. Tada jis perduos įvesties klasės, kurioje vartotojas pasirinko lauką, rodyklę ir pasirinkto lauko pavadinimą „getFieldValues“ (). Naršyklėje būtų rodomos visos reikšmės „getFieldValues“ () grįžo. Turėdamas šias vertes, vartotojas galėtų dar labiau susiaurinti paslaugos paiešką, galiausiai pasirinkdamas tam tikrą paslaugą. Taigi šie metodai padeda klientams, nesvarbu, ar dalyvauja žmogus, ar ne, naršyti per paieškos tarnybą registruotas paslaugas. Masyvai, grąžinti iš naršymo metodų, gali padėti klientui toliau tobulinti savo užklausas, galiausiai gaunant a „ServiceTemplate“ kad, kai perduota ieškoti (), grąžina tinkamiausią paslaugų objektą.

Pranešimo () metodas

Be paieškos ir naršymo metodų, „ServiceRegistrar“ sąsaja taip pat turi pranešti () metodas, kuris praneša klientams, kai naujos paslaugos registruojasi arba išregistruojamos peržvalgos tarnyboje:

viešas pranešimas apie „EventRegistration“ („ServiceTemplate“ tmpl, int perėjimai, „RemoteEventListener“ klausytojas, „MarshalledObject“ rankinis perdavimas, „long rentalDuration“) išmeta „RemoteException“; 

Tu kreipiesi pranešti () norėdami užregistruoti save (ar kitą klausytoją), kad gautumėte platinamą renginį, kai tik paslaugos atitiks praeitą „ServiceTemplate“ atliekamas būsenos pokytis, aprašytas perėjimo parametru.

Perėjimų parametras yra bitų ARBA iš visų šių trijų verčių, apibrėžtų kaip konstantos, „ServiceRegistrar“:

TRANSITION_MATCH_MATCH TRANSITION_MATCH_NOMATCH TRANSITION_NOMATCH_MATCH 

Jūs statote „ServiceTemplate“ dėl pranešti () taip pat, kaip jūs jį kuriate ieškoti (). Bet kuriame iš šių laukų galite nurodyti aiškius tipus, paslaugos ID, atributus (kurie turi tiksliai sutapti) arba pakaitos korteles (kurios atitinka bet ką). Perėjimai pagrįsti bet kokio jūsų būsenos būsenos pasikeitimu (arba nepakeitimu) „ServiceTemplate“ prieš ir po bet kokių operacijų atlikimo paieškos tarnyboje.

Pavyzdžiui, TRANSITION_MATCH_MATCH rodo, kad bent vienas paslaugos elementas atitiko jūsų šabloną prieš ir po operacijos. TRANSITION_MATCH_NOMATCH rodo, kad nors prieš operaciją bent vienas konkretus paslaugos elementas atitiko jūsų šabloną, po operacijos jis nebeatitiko jūsų šablono. Norėdami gauti pranešimą, kai į paieškos paslaugą įtraukiamos naujos paslaugos, tiesiog nurodykite šabloną, atitinkantį bet kurią paslaugą ir leidimą TRANSITION_NOMATCH_MATCH kaip perėjimas prie pranešti () metodas.

SUBHEAD_BREAK: Paieškos paslauga, palyginti su vardų serveriais

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