Programavimas

JNDI apžvalga, 1 dalis. Įvadas į vardų teikimo paslaugas

Tie, kurie lankėtės bibliotekoje ir vis dar galite prisiminti šią patirtį, gali prisiminti bibliotekos knygos suradimo procesą. Jei nesusisieksite su savo antikvarine puse, ši situacija atrodys nepažįstama; bet kas kartą nuklystu į vietinę biblioteką ieškoti tikros, neprisijungusios knygos. Bibliotekos užpildytos tūkstančiais daiktų - jos dulkėtos, pagamintos iš medienos masės ir karvės odos, tačiau jos savaip žavi. Bet kokiu atveju, kai atsiranda prievarta surasti tam tikrą, aš išvengiu naivaus žingsnio eidamas bibliotekos praėjimais aukštyn ir žemyn, ieškodamas jo, o atsiverčiu kortelių katalogą.

TEXTBOX: TEXTBOX_HEAD: JNDI apžvalga: Perskaitykite visą seriją!

  • 1 dalis. Įvadas į vardų teikimo paslaugas
  • 2 dalis. Norėdami geriau valdyti paskirstytas programas, naudokite JNDI katalogų paslaugas

  • 3 dalis. Naudokite JNDI, kad išsaugotumėte paskirstytos programos objektus

  • 4 dalis. Suimkite tai, ko išmokote naudodami programą, įgalinančią JNDI: END_TEXTBOX

Neišmintingųjų kortelių katalogas atvaizduoja knygų pavadinimus pagal jų vietą bibliotekoje. Pirmiausia eidamas į kortelių katalogą ir ieškodamas knygos vietos sutaupau sau nemažą vaikščiojimo laiką. (Beje, girdėjau, kad kai kurios bibliotekos iš tikrųjų leidžia mecenatams naudoti kompiuterius, o ne kortelių katalogą. Jie tai suprato pusiau teisingai - dabar, jei knygose esančią informaciją tiesiog įdės į kompiuterį, kuriam ji priklauso. ..)

Kad ir kaip keista, kortelių katalogo idėja yra gana patogi ir skaičiavimo pasaulyje. Skaičiuodami tai vadiname a vardų tarnyba, kuris susieja pavadinimus su paslaugų teikimo vietomis ir informacija. Jis teikia kompiuterių programas vienoje vietoje, kur jie gali rasti reikalingus išteklius. Be to, programos nešvaisto laiko atlikdamos elektroninį ėjimo aukštyn ir žemyn praėjimų atitikmenį ir nereikalauja, kad vietos būtų aiškiai užkoduotos jų logikoje.

Išteklių paieška yra ypač svarbi didelio masto verslo aplinkoje, kur jūsų kuriamos programos gali priklausyti nuo kitų grupių kitų grupių parašytų programų teikiamų paslaugų. Gerai suplanuota pavadinimų infrastruktūra leidžia tokius projektus įgyvendinti - o jų trūkumas daro juos neįmanomus. Tiesą sakant, daugybė verslo procesų pertvarkymo pastangų prasideda suprojektuojant ir įgyvendinant tvirtą visos įmonės pavadinimų ir katalogų infrastruktūrą.

Šį mėnesį pristatau „Java Naming and Directory Interface“ (JNDI). JNDI teikia bendro vardiklio sąsają daugeliui esamų vardų suteikimo paslaugų. Taigi JNDI nebuvo sukurta siekiant pakeisti esamą technologiją; vietoj to, ji suteikia bendrą sąsają su esamomis vardų teikimo paslaugomis. Pradėkime nuo kai kurių iš šių paslaugų.

Įvadas į vardų teikimo paslaugas

Žemiau pateiktame paveikslėlyje pavaizduota bendros vardų suteikimo paslaugos organizavimas.

Vardų suteikimo tarnyba palaiko rinkinį apkaustai. Įrišimai sieja pavadinimus su objektais. Visi pavadinimų sistemos objektai pavadinami vienodai (tai yra, jie prenumeruoja tą patį įvardijimo konvencija). Klientai naudoja pavadinimų paslaugą, norėdami surasti objektus pagal pavadinimą.

Yra keletas esamų vardų suteikimo paslaugų, kurias aprašysiu žemiau. Kiekvienas iš jų laikosi pirmiau pateikto modelio, tačiau skiriasi detalėmis.

  • COS („Common Object Services“) pavadinimai: CORBA programų vardų suteikimo paslauga; leidžia programoms saugoti ir pasiekti nuorodas į CORBA objektus.

  • DNS (domenų vardų sistema): Interneto vardų teikimo paslauga; žmonėms pritaikytus vardus (pvz., www.etcee.com) suskirsto į kompiuteriui tinkamus IP (interneto protokolo) adresus taškinėmis keturkampėmis (207.69.175.36). Įdomu tai, kad DNS yra a platinamas vardų suteikimo paslauga, tai reiškia, kad paslauga ir jos pagrindinė duomenų bazė yra išplitę daugelyje interneto kompiuterių.

  • LDAP (lengvas prieigos prie katalogo protokolas): Sukūrė Mičigano universitetas; kaip rodo jo pavadinimas, tai yra lengva DAP (Directory Access Protocol) versija, kuri savo ruožtu yra tinklo katalogų paslaugų standarto X.500 dalis. Šiuo metu LDAP pritaria daugiau nei 40 įmonių.

  • NIS (tinklo informacinė sistema) ir NIS +: „Sun Microsystems“ sukurtos tinklo pavadinimo paslaugos. Abiem atvejais vartotojai gali pasiekti bet kurio kompiuterio failus ir programas su vienu ID ir slaptažodžiu.

Bendrų bruožų

Kaip jau minėjau anksčiau, pagrindinė pavadinimų sistemos funkcija yra susieti vardus su objektais (arba kai kuriais atvejais su nuorodomis į objektus - daugiau apie tai per akimirką). Kad būtų pavadinimų paslauga, paslauga turi bent jau suteikti galimybę susieti vardus su objektais ir ieškoti objektų pagal pavadinimus.

Daugelyje pavadinimų sistemų objektai nėra tiesiogiai saugomi. Vietoj to, jie saugo nuorodas į objektus. Kaip iliustraciją, apsvarstykite DNS. Adresas 207.69.175.36 yra nuoroda į kompiuterio vietą internete, o ne patį kompiuterį.

JNDI suteikia sąsają, palaikančią visas šias įprastas funkcijas. Šią sąsają pateiksiu vėliau šiame straipsnyje.

Jų skirtumai

Taip pat svarbu suprasti, kuo skiriasi esamos vardų teikimo paslaugos, nes JNDI turi pateikti veiksmingą abstrakciją, kuri apeina tuos skirtumus.

Be funkcinių skirtumų, pastebimiausias skirtumas yra tai, kaip kiekviena vardų teikimo tarnyba reikalauja nurodyti pavadinimus - jos pavadinimo tvarką. Keli pavyzdžiai turėtų iliustruoti problemą.

DNS vardai yra kuriami iš komponentų, kurie yra atskirti taškais ("."). Jie skaito iš dešinės į kairę. Pavadinimas „www.etcee.com“ domene „etcee.com“ pavadina mašiną, vadinamą „www“. Panašiai ir pavadinimas „etcee.com“ pavadina „etcee“ domeną aukščiausio lygio domene „com“.

LDAP padėtis yra šiek tiek sudėtingesnė. Vardai sudaromi iš komponentų, atskiriamų kableliais (","). Kaip ir DNS vardus, jie skaito iš dešinės į kairę. Tačiau LDAP pavadinimo komponentai turi būti nurodyti kaip pavadinimo / vertės poros. Pavadinimas „cn = Todd Sundsted, o = ComFrame, c = US“ organizacijoje pavadina asmenį „cn = Todd Sundsted“ „o = ComFrame, c = US“. Lygiai taip pat pavadinimas „o = ComFrame, c = US“ organizaciją šalyje pavadina „o = ComFrame“ šalyje „c = US“.

Kaip iliustruoja aukščiau pateikti pavyzdžiai, vien pavadinimų tarnybos vardų suteikimo tvarka gali įnešti į JNDI didelį kiekį pagrindinės pavadinimų paslaugos skonio. Tai nėra funkcija, kurią turėtų turėti nepriklausoma sąsaja.

JNDI išsprendžia šią problemą vardas klasė ir jos poklasiai bei pagalbininkų klasės. vardas klasė reiškia vardą, susidedantį iš sutvarkytų pavardžių sekų, ir pateikia metodus, kaip dirbti su vardais, nepriklausomais nuo pagrindinės pavadinimų paslaugos.

Žvilgsnis į JNDI vardus

Kaip jau minėjau aukščiau, svarbu atsiminti, kad JNDI yra sąsaja o ne an įgyvendinimas. Šis faktas turi tam tikrų trūkumų - jums reikia prieigos prie esamos vardų suteikimo paslaugos (pvz., LDAP paslaugos) ir jūs turite ką nors suprasti, kaip ji veikia, kad galėtumėte žaisti su JNDI. Kita vertus, tai leidžia JNDI sklandžiai integruotis į esamą skaičiavimo aplinką, kurioje nusistovėjusi vardų teikimo paslauga gali veikti.

JNDI vardai sukasi apie nedidelį klasių rinkinį ir keletą operacijų. Pažvelkime į juos.

Kontekstas ir InitialContext

Kontekstas sąsaja vaidina pagrindinį vaidmenį JNDI. Kontekstas rodo pavadinimų tarnybos susiejimų rinkinį, kuriam visiems būdinga ta pati pavadinimų suteikimo tvarka. A Kontekstas objektas pateikia metodus, kaip susieti vardus su objektais ir atsieti vardus nuo objektų, pervardyti objektus ir surašyti susiejimus.

Kai kurios vardų teikimo paslaugos taip pat teikia potekstės funkcionalumą. Panašiai kaip katalogas failų sistemoje, potekstė yra kontekstas kontekste. Ši hierarchinė struktūra leidžia geriau organizuoti informaciją. Jei norite pavadinti paslaugas, palaikančias potekstes, Kontekstas klasėje taip pat pateikiami potekstių kūrimo ir naikinimo metodai.

JNDI atlieka visas pavadinimo operacijas, palyginti su kontekstu. Kad būtų lengviau rasti vietą pradėti, JNDI specifikacijoje apibrėžiamas InitialContext klasė. Ši klasė yra supaprastinta naudojant ypatybes, apibrėžiančias naudojamų vardų suteikimo paslaugų tipą, o vardą suteikiančioms paslaugoms, kurios teikia saugumą, - ID ir slaptažodį, kuriuos reikia naudoti prisijungiant.

Tiems, kurie yra susipažinę su RMI Pavadinimas klasės, daugelis metodų, kuriuos teikia Kontekstas žemiau aprašyta sąsaja atrodys pažįstama. Pažvelkime Kontekstasmetodai:

  • void bind (String stringName, Object object): Susieja vardą su objektu. Pavadinimas neturi būti susietas su kitu objektu. Visi tarpiniai kontekstai jau turi egzistuoti.

  • void rebind (String stringName, Object object): Susieja vardą su objektu. Visi tarpiniai kontekstai jau turi egzistuoti.

  • Objekto paieška (eilutė stringName): Grąžina nurodytą objektą.

  • void unbind (String stringName): Atsieja nurodytą objektą.

Kontekstas sąsajoje taip pat pateikiami susiejimų pervadinimo ir įtraukimo į sąrašą metodai.

  • negaliojantis pervardijimas (String stringOldName, String stringNewName): Pakeičia pavadinimą, su kuriuo susietas objektas.
  • „NamingEnumeration listBindings“ (String stringName): Pateikia sąrašą, kuriame yra pavadinimai, susieti su nurodytu kontekstu, kartu su objektais ir prie jų susietų objektų klasių pavadinimais.

  • „NamingEnumeration“ sąrašas (String stringName): Pateikia sąrašą, kuriame yra pavadinimai, susieti su nurodytu kontekstu, kartu su prie jų susietų objektų klasių pavadinimais.

Kiekvienas iš šių metodų turi brolį ar seserį, kuris imasi a vardas objektas vietoj a Stygos objektas. A vardas objektas reiškia bendrinį pavadinimą. vardas klasė leidžia programai manipuliuoti vardais, nereikia tiek žinoti apie konkrečią naudojamą vardų teikimo paslaugą.

Pavyzdys

Žemiau pateiktame pavyzdyje pavaizduota, kaip prisijungti prie vardų suteikimo paslaugos, išvardyti visus susiejimus arba nurodyti konkretų susiejimą. Ji naudoja failų sistemos paslaugų teikėją, kuris yra vienas iš „Sun“ teikiamų JNDI paslaugų teikėjų pavyzdinių diegimų. Failų sistemos paslaugų teikėjas daro failų sistemą panašią į pavadinimo paslaugą (kuri yra daugeliu atžvilgių - panašūs į failų pavadinimus) / foo / bar / baz yra pavadinimai ir susieti su tokiais objektais kaip failai ir katalogai). Pasirinkau, nes visi turi prieigą prie failų sistemos (priešingai nei, tarkime, LDAP serveris).

importuoti javax.naming.Context; importuoti javax.naming.InitialContext; importuoti javax.naming.Binding; importuoti javax.naming.NamingEnumeration; importuoti javax.naming.NamingException; importuoti java.util.Hashtable; public class Main {public static void main (String [] rgstring) {try {// Sukurti pradinį kontekstą. Aplinka // informacija nurodo JNDI teikėją, kuris turi naudoti //, ir pradinį URL, kurį naudosite (mūsų atveju // katalogą URL forma - failas: /// ...). Hashtable hashtableEnvironment = new Hashtable (); hashtableEnvironment.put (kontekstas.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); hashtableEnvironment.put (kontekstas.PROVIDER_URL, rgstring [0]); Konteksto kontekstas = new InitialContext (hashtableEnvironment); // Jei nepateikiate jokių kitų komandinės eilutės argumentų, // išvardykite visus nurodytame kontekste esančius pavadinimus ir // objektus, prie kurių jie yra susieti. if (rgstring.length == 1) {NamingEnumeration namingenumeration = context.listBindings (""); while (namingenumeration.hasMore ()) {Privalomas įpareigojimas = (Privalomas) namingenumeration.next (); System.out.println (įrišimas.getName () + "" + įrišimas.getObject ()); }} // Kitu atveju nurodykite // nurodytų argumentų pavadinimus ir susiejimus. else {for (int i = 1; i <rgstring.length; i ++) {Object object = context.lookup (rgstring [i]); System.out.println (rgstring [i] + "" + objektas); }} context.close (); } pagauti (NamingException namingexception) {namingexception.printStackTrace (); }}} 

Pirmiau pateiktame sąraše esanti programa pirmiausia sukuria pradinį kontekstą iš nurodyto JNDI teikėjo (šiuo atveju „Sun“ failų sistemos teikėjo) ir URL, nurodančio vietinį katalogą. Jei nenurodomi jokie papildomi komandinės eilutės argumentai, programoje išvardijami kiekvieno objekto ir pavadinimai nurodytame kataloge. Kitu atveju jame pateikiami tik tų komandų eilutėje nurodytų elementų objektai ir pavadinimai.

Išvada

Dabar turėtumėte suprasti ir įvertinti paslaugų pavadinimą apskritai ir ypač JNDI. Paskirstytoje aplinkoje jie yra vertingi įrankiai ieškant informacijos ir išteklių. JNDI leidžia dirbti su įvairiomis vardų teikimo paslaugomis, nesuvaldant daugybės API. Kitą mėnesį apžvelgsime kitą JNDI pusę - jos katalogo funkcijas.

Toddas Sundstedas rašė programas nuo tada, kai kompiuteriai tapo prieinami patogiais darbalaukio modeliais. Nors Toddas iš pradžių domėjosi platinamų programų kūrimu C ++ formatu, Toddas perėjo prie „Java“ programavimo kalbos, kai tai tapo akivaizdžiu pasirinkimu tokiems dalykams. Be rašymo, Toddas taip pat dirba kaip „Java“ architektas su „ComFrame Software“.

Sužinokite daugiau apie šią temą

  • Atsisiųskite visą šio straipsnio šaltinio kodą ZIP formatu

    //images.techhive.com/downloads/idge/imported/article/jvw/2000/01/jw-01-howto.zip

  • Visa tai JNDI

    //java.sun.com/products/jndi/

  • JNDI dokumentacija

    //java.sun.com/products/jndi/docs.html

  • Šiuo metu prieinami paslaugų teikėjai

    //java.sun.com/products/jndi/serviceproviders.html

  • Visas ankstesnių sąrašas Kaip „Java“ stulpeliai

    //www.javaworld.com/javaworld/topicalindex/jw-ti-howto.html

Šią istoriją „JNDI apžvalga, 1 dalis: Įvadas į vardų teikimo paslaugas“ iš pradžių paskelbė „JavaWorld“.