Programmēšana

Atrodiet pakalpojumus, izmantojot meklēšanas pakalpojumu Jini

Jini uzmeklēšanas pakalpojums, kas ir Jini izpildlaika infrastruktūras centrālā sastāvdaļa, piedāvā Jini klientiem elastīgu un spēcīgu veidu, kā atrast Jini pakalpojumus. Tas ļauj pakalpojumu sniedzējiem reklamēt savus pakalpojumus un ļauj klientiem atrast un izmantot šo pakalpojumu palīdzību.

Lai mijiedarbotos ar uzmeklēšanas pakalpojumu, klientam vispirms jāiegūst pakalpojumu reģistrators objekts caur atklājums, tīkla līmeņa protokols, ko izmanto Jini izpildlaika infrastruktūra. Atklāšana ļauj klientiem un pakalpojumiem atrast uzmeklēšanas pakalpojumus. (Lai iegūtu vairāk informācijas par atklāšanu, skatiet resursus.) pakalpojumu reģistrators objekts, kas īsteno net.jini.core.lookup.ServiceRegistrar interfeiss, ļauj klientam mijiedarboties ar uzmeklēšanas pakalpojumu. Lai atrastu vēlamos pakalpojumus, klienti izveido ServiceTemplate, klases instance net.jini.core.lookup.ServiceTemplateun nododiet to vienam no diviem uzmeklēšana () - deklarētās metodes ServiceRegistrar interfeiss. Katrs uzmeklēšana () metode nosūta pakalpojuma veidni uzmeklēšanas pakalpojumam, kurš veic vaicājumu un klientam atdod atbilstošos pakalpojuma objektus.

Parasti klients meklē pakalpojumu pēc Java veida, parasti interfeisa. Piemēram, ja klientam ir jāizmanto printeris, tas sastāda pakalpojuma veidni, kas ietver a Klase objekts labi pazīstamam printera pakalpojumu interfeisam. Visi printera pakalpojumi nodrošina saskarni. Uzmeklēšanas pakalpojums atgriež pakalpojuma objektu (vai objektus), kas ievieš šo saskarni. Pakalpojuma veidnē varat iekļaut atribūtus, lai sašaurinātu atbilstību skaitu šādai meklēšanai pēc veida. Klients izmanto printera pakalpojumu, pakalpojuma objektā izsaucot metodes, kas deklarētas plaši pazīstamajā saskarnē.

Klase ServiceTemplate

Ar ServiceTemplate klasē, varat izteikt Jini uzmeklēšanas meklēšanas kritērijus. Nodarbība sastāv tikai no šīm trim publiskajām jomām:

public Entry [] atribūtsSetTemplates; public ServiceID serviceID; public Class [] serviceTypes; 

ServiceTemplate nav metožu, un tās gadījumi tikai tiek izmantoti kā "struct" līdzīgi konteineri uzmeklēšanas pakalpojumu vaicājumiem. Spēles tiek veiktas tā, kā aprakstīts nākamajā fragmentā no ServiceTemplatejavadoc lapa:

Uzmeklēšanas pakalpojuma vienumi tiek saskaņoti, izmantojot [ServiceTemplate]. Pakalpojuma vienums (lieta) atbilst pakalpojumu veidnei (tmpl), ja:

  • item.serviceID ir vienāds tmpl.serviceID (vai ja tmpl.serviceID ir nulle)
  • item.service [pakalpojuma objekts] ir jebkura veida gadījums tmpl.serviceTypes
  • item.attributeSets satur vismaz vienu atbilstošu ierakstu katrai ieejas veidnei tmpl.attributeSetTemplates

Ieraksts atbilst ieraksta veidnei, ja veidnes klase ir tāda pati kā vai tās klases superklase, un visi lauki, kas nav nulle, veidnē ir vienāds ar atbilstošo ieraksta lauku. Katru ierakstu var izmantot, lai saskaņotu vairākas veidnes. Ņemiet vērā, ka pakalpojuma veidnē domēna serviceTypes un attributeSetTemplates, nulles lauks ir vienāds ar tukšu masīvu; abi apzīmē aizstājējzīmi.

Kā aprakstīts šeit, pakalpojuma veidnē var būt atsauce uz masīvu Klase objektiem. Šie objekti uzmeklēšanas pakalpojumam norāda klienta vēlamā pakalpojuma objekta Java tipu (vai tipus). Pakalpojuma veidnē var būt arī a pakalpojuma ID, kas unikāli identificē pakalpojumu, un atribūti, kuriem precīzi jāatbilst atribūtiem, kurus pakalpojuma sniedzējs augšupielādējis pakalpojuma vienumā. Pakalpojuma veidnē var būt arī aizstājējzīmes jebkuram no šiem laukiem. Piemēram, aizstājējzīme pakalpojuma ID laukā atbilst jebkuram pakalpojuma ID.

Uzmeklēšanas () metodes

The ServiceRegistrar's uzmeklēšana () metodēm ir divas pārslogotas formas. Abas veidlapas galvenokārt atšķiras pēc sērkociņu skaita un servisa priekšmetu skaita. Divu parametru forma var atgriezt vairākas vaicājuma atbilstības, kas izteiktas ServiceTemplate, bet viena parametra forma atgriež tikai vienu atbilstību. Turklāt divu parametru forma atgriež visus pakalpojuma vienumus; viena parametra forma atgriež tikai pakalpojuma objektu.

Divu parametru uzmeklēšanas forma ()

Šeit ir javadoc fragments, kas izskaidro divu parametru formu uzmeklēšana ():

publiskā ServiceMatches uzmeklēšana (ServiceTemplate tmpl, int maxMatches) met java.rmi.RemoteException; 

[Tas] atgriež ne vairāk kā maxMatches vienumi, kas atbilst veidnei, kā arī kopējais vienumu skaits, kas atbilst veidnei. Atgriešanās vērtība nekad nav nulle, un atgriezto priekšmetu masīvs ir tikai nulle ja maxMatches ir nulle. Ja pakalpojuma objektu nevar deserializēt par katru atgriezto preci, preces pakalpojumu lauks tiek iestatīts uz nulle un netiek izmests neviens izņēmums. Līdzīgi, ja atribūtu kopu nevar deserializēt, šis attributeSets masīvs ir iestatīts uz nulle un netiek izmests neviens izņēmums.

Šeit ir ServiceMatches klase:

pakete net.jini.core.lookup;

public class ServiceMatches paplašina java.lang.Object ievieš java.io.Serializable {

public ServiceItem [] preces; public int totalMatches; }

Un šeit ir ServiceItem klase:

pakete net.jini.core.lookup;

public class ServiceMatches paplašina java.lang.Object ievieš java.io.Serializable {

public Entry [] atribūtu komplekti; publiskais java.lang.objektu serviss; public ServiceID serviceID; }

Kā minēts iepriekš, katrs preces masīvs, ko atdeva divu parametru forma, ir pilnīgs pakalpojuma vienums, kas ietver pakalpojuma objektu, pakalpojuma ID un visas atribūtu kopas. The maxMatches lauks palīdz klientiem pārvaldīt objektu skaitu, ko tas atgriež uzmeklēšana ().

Garums preces masīvs atgrieztajā ServiceMatches objekts ir mazāks vai vienāds ar vērtību, kas nodota uzmeklēšana () iekšā maxMatches. Kopējais atbilstošo pakalpojumu vienību skaits (atgriezts totalMatches) ir lielāks vai vienāds ar garumu preces masīvs.

Piemēram, ja maxMatches ir 50, un pakalpojuma veidne atbilst 25 vienumiem, atdodamā garuma preces masīvs un vērtība totalMatches ir abi 25. Alternatīvi, ja maxMatches ir 50, bet pakalpojuma veidne atbilst 100 vienumiem, atdodamā garuma preces masīvs ir 50 un vērtība totalMatches ir 100. Ja pakalpojuma veidne atbilst vairāk nekā maxMatches pakalpojuma vienības, pakalpojuma preces, ko atdod divi parametri uzmeklēšana () tiek atlasīti nejauši no visa atbilstošo pakalpojumu vienumu komplekta.

Viena parametra uzmeklēšanas forma ()

Viena parametra uzmeklēšana () metode atgriež vienu atbilstošu pakalpojumu objektu, kas nejauši izvēlēts no visām spēlēm. Šeit ir javadoc fragments, kas izskaidro šo veidlapu:

publiskā objekta meklēšana (ServiceTemplate tmpl) izmet java.rmi.RemoteException; 
Atgriež pakalpojuma objektu (t.i., tikai ServiceItem.service) no vienuma, kas atbilst veidnei, vai nulle ja nav spēles. Ja veidnei atbilst vairāki vienumi, tiek patvaļīgi noteikts, kurš pakalpojuma objekts tiek atgriezts. Ja atgriezto objektu nevar deserializēt, an UnmarshalException tiek izmests ar standarta RMI semantiku.

Jo viens parametrs uzmeklēšana () atgriež tikai vienu atbilstošu pakalpojuma objektu, klienti var samazināt lejupielādēto objektu stāvokļa un klases failu skaitu. Tā kā atgrieztais pakalpojuma objekts tiek izvēlēts patvaļīgi un nav identificēts ar pakalpojuma ID vai aprakstīts ar saistītajām atribūtu kopām, klientam jābūt pārliecinātam, ka jebkurš pietiks ar atbilstoša pakalpojuma objektu.

Pārlūkošanas metodes

Papildus abiem uzmeklēšana () metodes ServiceRegistrar ir trīs pārlūkošanas metodes, kas sniedz informāciju par reģistrētiem pakalpojuma priekšmetiem. Trīs metodes - getServiceTypes (), getEntryClasses (), un getFieldValues ​​() - tiek saukti pārlūkošanas metodes jo tie ļauj klientiem pārlūkot pakalpojumus un atribūtus uzmeklēšanas pakalpojumā.

The getServiceTypes () metode prasa a ServiceTemplate (tas pats ServiceTemplate kas tiek nodots uzmeklēšana () metodes) un a Stīga priedēklis. Tas atgriež masīvu Klase gadījumi, kas apzīmē pakalpojuma objektu viskonkrētākos veidus (klases vai saskarnes), kas atbilst veidnei. Šie pakalpojuma objekti nav vienādi vai nevienam no veidnē norādītajiem veidiem, un tiem nav virsklases, un tiem ir nosaukumi, kas sākas ar norādīto prefiksu. Pakalpojuma objekts vai objekti Klase tiek atgriezti, visi veidnē nodotie visu veidu gadījumi (ja tādi ir), bet Klase gadījumi visi ir specifiskāki par šiem tipiem (un ir šo apakšklases vai apakšsaskarnes). Katra klase atgrieztajā masīvā parādās tikai vienu reizi un patvaļīgā secībā.

Lūk, ko getServiceTypes () izskatās kā:

publiskais java.lang.Class [] getServiceTypes (ServiceTemplate tmpl, java.lang.String prefikss) met java.rmi.RemoteException; 

The getEntryTypes () metode prasa a ServiceTemplate un atgriež masīvu Klase gadījumi, kas apzīmē visprecīzākos veidnei atbilstošo pakalpojumu vienumu ierakstu klases, kas vai nu neatbilst nevienai ieraksta veidnei, vai arī ir vienas apakšklase. Katra klase atgrieztajā masīvā parādās tikai vienu reizi, atkal patvaļīgā secībā.

Lūk, ko getEntryClasses () izskatās kā:

publiskais java.lang.Class [] getEntryClasses (ServiceTemplate tmpl) met java.rmi.RemoteException; 

The getFieldValues ​​() metode prasa a ServiceTemplate, vesela skaitļa indekss un a Stīga lauka nosaukums. Tas atgriež masīvu Objektss nosauktajam laukam visiem ierakstā, kas parādās ServiceTemplate's Ieraksts [] masīvs pie jebkura atbilstoša pakalpojuma vienuma nodotā ​​indeksa. Katrs noteiktas klases un vērtības objekts atgrieztajā masīvā parādās tikai vienu reizi un patvaļīgā secībā.

Lūk, ko getFieldValues ​​() izskatās kā:

publiskais java.lang.Object [] getFieldValues ​​(ServiceTemplate tmpl, int setIndex, java.lang.String lauks) met java.lang.NoSuchFieldException, java.rmi.RemoteException; 

Šo pārlūkošanas metožu uzvedība un mērķis var būt neskaidrs. Jūs tos varētu domāt par rīkiem, kas pakāpeniski sašaurina uzmeklēšanas pakalpojuma vaicājumus.

Piemēram, vispirms varētu izsaukt tādu klientu kā grafiskā uzmeklēšanas pakalpojuma pārlūks getServiceTypes () ar tukšu veidni. The getServiceTemplate () metode atgriež visus iespējamos uzmeklēšanas pakalpojumā reģistrētos pakalpojumu veidus, kurus pārlūks varētu parādīt. Lietotājs varēja izvēlēties vienu vai vairākus veidus, pēc tam nospiediet pogu Pieprasīt. Pārlūkprogramma pievienotu šo veidu (vai veidus) pakalpojuma veidnei un izsauktu getServiceTypes () atkal. Pārlūkprogramma atgriezīs un parādīs mazāku veidu sarakstu. Lietotājs varēja izvēlēties vienu un nospiest pogu Enter. Pārlūkprogramma izveidos veidni ar pēdējo izvēlēto pakalpojuma veidu vai veidiem un pēc tam izsauks getEntryTypes (). The getEntryTypes () metode atgrieztu ierakstu klašu masīvu, kuru pārlūkprogramma pēc tam varētu parādīt.

Lietotājs varēja atlasīt dažus ierakstus - un izvēlētā ieraksta lauku - un nospiest pogu Laukumi. Pārlūkprogramma veidos veidni, izmantojot pašlaik atlasītos pakalpojumu un ierakstu veidus. Pēc tam tas nodos ierakstu klasei, kurā lietotājs ir atlasījis lauku, un izvēlētā lauka nosaukumu getFieldValues ​​(). Pārlūkprogrammā tiktu parādītas visas vērtības getFieldValues ​​() atgriezās. Ar šīm vērtībām lietotājs varētu vēl vairāk sašaurināt pakalpojuma meklēšanu, galu galā izvēloties konkrētu pakalpojumu. Tādējādi šīs metodes palīdz klientiem, neatkarīgi no tā, vai ir iesaistīts cilvēks, pārlūkot uzmeklēšanas pakalpojumā reģistrētos pakalpojumus. Masīvi, kas atgriezti no pārlūkošanas metodēm, var palīdzēt klientam vēl vairāk precizēt savus vaicājumus, kā rezultātā galu galā tiek iegūts ServiceTemplate ka, kad nodots uzmeklēšana (), atgriež vispiemērotāko pakalpojuma objektu.

Paziņošanas () metode

Papildus uzmeklēšanas un pārlūkošanas metodēm, ServiceRegistrar interfeisam ir arī paziņot() metode, kas paziņo klientiem, kad jaunie pakalpojumi reģistrējas vai tiek reģistrēti, izmantojot uzmeklēšanas pakalpojumu:

publisks EventRegistration paziņojums (ServiceTemplate tmpl, int transitions, RemoteEventListener klausītājs, MarshalledObject handback, long rentalDuration) izmet RemoteException; 

Jūs piesaucat paziņot() reģistrēt sevi (vai citu klausītāju), lai saņemtu izplatītu notikumu ikreiz, kad pakalpojumi atbilst nokārtotajam ServiceTemplate iziet stāvokļa maiņu, kas aprakstīta ar pārejas parametru.

Pārejas parametrs ir bitveidīgs VAI no visām šīm trim vērtībām, kas definētas kā konstantes ServiceRegistrar:

TRANSITION_MATCH_MATCH TRANSITION_MATCH_NOMATCH TRANSITION_NOMATCH_MATCH 

Jūs veidojat ServiceTemplate priekš paziņot() tāpat kā jūs to veidojat uzmeklēšana (). Jebkurā no šiem laukiem varat norādīt nepārprotamus veidus, pakalpojuma ID, atribūtus (kuriem precīzi jāatbilst) vai aizstājējzīmes (kas atbilst jebko). Pārejas ir balstītas uz izmaiņām (vai nemainīšanu) tā, kas atbilst jūsu statusam ServiceTemplate pirms un pēc jebkādas meklēšanas pakalpojuma darbības.

Piemēram, TRANSITION_MATCH_MATCH norāda, ka vismaz viens pakalpojuma vienums atbilst jūsu veidnei pirms un pēc operācijas. TRANSITION_MATCH_NOMATCH norāda, ka, kaut arī vismaz viens konkrēts pakalpojuma vienums pirms operācijas atbilst jūsu veidnei, pēc operācijas tas vairs neatbilst jūsu veidnei. Lai saņemtu paziņojumu par jaunu pakalpojumu pievienošanu uzmeklēšanas pakalpojumam, jums vienkārši jānorāda veidne, kas atbilst jebkuram pakalpojumam un caurlaidei TRANSITION_NOMATCH_MATCH kā pāreja uz paziņot() metodi.

SUBHEAD_BREAK: Uzmeklēšanas pakalpojums pret vārdu serveriem

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