Programiranje

Pregled JNDI, 1. del: Uvod v storitve poimenovanja

Tisti, ki ste bili v knjižnici in se izkušnje še spomnite, se lahko spomnite postopka iskanja knjižnične knjige. Če niste v stiku s svojo starinsko stranjo, se vam zdi ta položaj neznan; toda vsake toliko se odpravim v lokalno knjižnico, da bi poiskal pristno knjigo brez povezave. Knjižnice so napolnjene s tisoči stvari - prašne so in narejene iz lesne kaše in kravje kože, vendar so po svoje fascinantne. V vsakem primeru, ko prisili, da najdem nekoga, se izognem naivnemu načinu hoje po knjižničnih prehodih, ki ga iščejo, in se namesto tega obrnem na katalog kart.

TEXTBOX: TEXTBOX_HEAD: Pregled JNDI: Preberite celotno serijo!

  • Del 1. Uvod v storitve poimenovanja
  • Del 2. Uporabite imeniške storitve JNDI za boljše upravljanje porazdeljenih aplikacij

  • Del 3. Uporabite JNDI za shranjevanje predmetov vaše porazdeljene aplikacije

  • Del 4. Spoznajte, kaj ste se naučili z aplikacijo, ki podpira JNDI: END_TEXTBOX

Katalog kart za nepoznavalce imena knjig preslika na njihovo mesto v knjižnici. S tem, ko najprej odidem do kataloga kart in poiščem lokacijo knjige, si prihranim precejšnjo količino hoje. (Mimogrede, slišal sem, da nekatere knjižnice dejansko dovolijo pokroviteljem, da uporabljajo računalnike namesto kataloga kartic. Polovično so ga že uvedli - zdaj, če bodo samo informacije iz knjig dali v računalnik, kamor spadajo. ..)

Kakor koli presenetljivo se zdi, je pojem kataloga kart tudi v svetu računalništva zelo priročen. Pri računalništvu temu rečemo a storitev poimenovanja, ki imena povezuje z lokacijami storitev in informacijami. Omogoča računalniške programe na enem mestu, kjer lahko najdejo vire, ki jih potrebujejo. Na neki način programi ne izgubljajo časa z izvajanjem elektronskega ekvivalenta hoje gor in dol po prehodih in tudi ne zahtevajo, da so lokacije trdno kodirane v njihovo logiko.

Iskanje virov je še posebej pomembno v velikih podjetniških okoljih, kjer so lahko aplikacije, ki jih gradite, odvisne od storitev, ki jih ponujajo aplikacije, napisane v drugih skupinah drugih oddelkov. Dobro zasnovana poimenovalna infrastruktura omogoča takšne projekte - njihovo pomanjkanje pa onemogoča. Dejansko se številna prizadevanja za prenovo poslovnih procesov začnejo z zasnovo in izvajanjem trdne infrastrukture za poimenovanje in imenike v celotnem podjetju.

Ta mesec predstavljam vmesnik Java Naming and Directory Interface (JNDI). JNDI nudi vmesnik skupnega imenovalca za številne obstoječe storitve poimenovanja. Kot tak JNDI ni bil zasnovan tako, da bi nadomestil obstoječo tehnologijo; namesto tega zagotavlja skupen vmesnik za obstoječe storitve poimenovanja. Začnimo z ogledom nekaterih teh storitev.

Uvod v storitve poimenovanja

Spodnja slika prikazuje organizacijo storitve splošnega poimenovanja.

Storitev poimenovanja ohranja nabor vezi. Vezi povezujejo imena s predmeti. Vsi predmeti v sistemu poimenovanja so poimenovani na enak način (to pomeni, da so naročeni na isto konvencija o poimenovanju). Stranke uporabljajo storitev poimenovanja za iskanje predmetov po imenu.

Obstajajo številne obstoječe storitve poimenovanja, nekatere od njih bom opisal v nadaljevanju. Vsaka sledi zgornjemu vzorcu, vendar se razlikuje v podrobnostih.

  • Poimenovanje COS (Common Object Services): Storitev poimenovanja aplikacij CORBA; omogoča aplikacijam shranjevanje in dostop do referenc na predmete CORBA.

  • DNS (sistem domenskih imen): Storitev poimenovanja interneta; ljudem prijazna imena (na primer www.etcee.com) preslika v računalniško prijazne naslove IP (Internet Protocol) v pikčasti četverici (207.69.175.36). Zanimivo je, da je DNS a razdeljeno storitev poimenovanja, kar pomeni, da so storitev in njena osnovna baza podatkov razporejena po številnih gostiteljih v internetu.

  • LDAP (lahek protokol za dostop do imenika): Razvila Univerza v Michiganu; kot že ime pove, je lahka različica DAP (Protocol Access Protocol), ki pa je del X.500, standarda za omrežne imeniške storitve. Trenutno LDAP podpira več kot 40 podjetij.

  • NIS (omrežni informacijski sistem) in NIS +: Storitve mrežnih poimenovanj, ki jih je razvil Sun Microsystems. Oba omogočata uporabnikom dostop do datotek in aplikacij na katerem koli gostitelju z enim samim ID-jem in geslom.

Skupne lastnosti

Kot sem že omenil, je primarna funkcija sistema poimenovanja vezava imen na predmete (ali v nekaterih primerih na sklicevanja na predmete - več o tem v trenutku). Da bi bila storitev poimenovanja, mora storitev vsaj zagotavljati možnost vezave imen na predmete in iskanje predmetov po imenih.

Številni sistemi poimenovanja predmetov ne shranjujejo neposredno. Namesto tega shranjujejo sklice na predmete. Za ponazoritev si oglejte DNS. Naslov 207.69.175.36 je sklic na lokacijo računalnika v internetu, ne pa na računalnik sam.

JNDI ponuja vmesnik, ki podpira vse te običajne funkcije. Ta vmesnik bom predstavil kasneje v tem članku.

Njihove razlike

Pomembno je tudi razumeti, kako se obstoječe storitve poimenovanja razlikujejo, saj mora JNDI zagotoviti izvedljivo abstrakcijo, ki te razlike zaobide.

Poleg funkcionalnih razlik je najbolj opazna razlika v načinu, kako vsaka storitev poimenovanja zahteva določitev imen - njena konvencija o poimenovanju. Nekaj ​​primerov bi moralo ponazoriti težavo.

V DNS so imena zgrajena iz komponent, ki so ločene s pikami ("."). Berejo od desne proti levi. Ime "www.etcee.com" poimenuje stroj z imenom "www" v domeni "etcee.com". Prav tako ime "etcee.com" imenuje domeno "etcee" v domeni najvišje ravni "com".

V LDAP je situacija nekoliko bolj zapletena. Imena so sestavljena iz komponent, ki so ločene z vejicami (","). Tako kot imena DNS berejo od desne proti levi. Vendar pa je treba komponente v imenu LDAP določiti kot pare ime / vrednost. Ime "cn = Todd Sundsted, o = ComFrame, c = US" poimenuje osebo "cn = Todd Sundsted" v organizaciji "o = ComFrame, c = US." Prav tako ime "o = ComFrame, c = US" poimenuje organizacijo "o = ComFrame" v državi "c = US".

Kot ponazarjajo zgornji primeri, lahko že sama konvencija o poimenovanju storitve poimenovanja v JNDI vnese znatno količino okusa osnovne storitve poimenovanja. To ni funkcija, ki bi jo moral imeti vmesnik, neodvisen od izvedbe.

JNDI rešuje to težavo z Ime razred in njegovi podrazredi in pomožni razredi. The Ime class predstavlja ime, sestavljeno iz urejenih zaporedij podimen, in ponuja metode za delo z imeni, neodvisnimi od osnovne storitve poimenovanja.

Pogled na poimenovanje JNDI

Kot sem že omenil, je pomembno vedeti, da je JNDI vmesnik namesto izvajanje. To dejstvo ima nekaj slabosti - potrebujete dostop do obstoječe storitve poimenovanja (na primer storitve LDAP) in morate razumeti, kako deluje, da se lahko igrate z JNDI. Po drugi strani pa JNDI omogoča nemoteno vključitev v obstoječe računalniško okolje, kjer uveljavljena storitev poimenovanja močno vpliva.

Poimenovanje JNDI se vrti okoli majhnega sklopa razredov in peščice operacij. Oglejmo si jih.

Kontekst in začetni kontekst

The Kontekst vmesnik igra osrednjo vlogo v JNDI. Kontekst predstavlja nabor vezav znotraj storitve poimenovanja, ki si vsi delijo isto konvencijo poimenovanja. A Kontekst object ponuja metode za vezavo imen na predmete in odvezovanje imen iz objektov, za preimenovanje predmetov in za seznam vezi.

Nekatere storitve poimenovanja ponujajo tudi podkontekstne funkcije. Podobno kot imenik v datotečnem sistemu je tudi podkontekst kontekst znotraj konteksta. Ta hierarhična struktura omogoča boljšo organizacijo informacij. Za storitve poimenovanja, ki podpirajo podkontekste, se Kontekst class ponuja tudi metode za ustvarjanje in uničevanje podkontekstov.

JNDI izvaja vse operacije poimenovanja glede na kontekst. Specifikacija JNDI za pomoč pri iskanju kraja za začetek določa InitialContext razred. Ta razred je primeren z lastnostmi, ki določajo vrsto storitve poimenovanja, ki se uporablja, in za storitve poimenovanja, ki zagotavljajo varnost, ID in geslo za uporabo pri povezovanju.

Za tiste, ki poznate RMI Poimenovanje razred, veliko metod, ki jih ponuja Kontekst spodaj opisani vmesnik bo videti znano. Oglejmo si Kontekstmetode:

  • void bind (String stringName, Objekt objekt): Na objekt veže ime. Ime ne sme biti vezano na drug predmet. Vsi vmesni konteksti že morajo obstajati.

  • void rebind (niz stringName, predmet predmeta): Na objekt veže ime. Vsi vmesni konteksti že morajo obstajati.

  • Iskanje predmeta (niz stringName): Vrne navedeni objekt.

  • razveljavi void (String stringName): Razveže navedeni objekt.

The Kontekst Vmesnik ponuja tudi metode za preimenovanje in naštevanje vezi.

  • neveljavno preimenovanje (niz stringOldName, niz stringNewName): Spremeni ime, na katero je predmet vezan.
  • NamingEnumeration listBindings (String stringName): Vrne oštevilčenje, ki vsebuje imena, vezana na določen kontekst, skupaj s predmeti in imeni razredov predmetov, ki so z njimi povezani.

  • NamingEnumeration list (String stringName): Vrne oštevilčenje, ki vsebuje imena, vezana na določen kontekst, skupaj z imeni razredov predmetov, ki so z njimi povezani.

Vsaka od teh metod ima sorojenca, ki potrebuje a Ime namesto a Vrvica predmet. A Ime Predmet predstavlja generično ime. The Ime class omogoča programu, da manipulira z imeni, ne da bi moral vedeti toliko o določeni uporabljeni storitvi poimenovanja.

Primer

Spodnji primer prikazuje, kako vzpostaviti povezavo s storitvijo poimenovanja, našteti vse vezave ali navesti določeno vezavo. Uporablja ponudnika storitev datotečnega sistema, ki je ena od referenčnih izvedb ponudnikov storitev JNDI, ki jih ponuja Sun. Ponudnik storitev datotečnega sistema naredi datotečni sistem videti kot storitev poimenovanja (kar je v mnogih pogledih - na primer imena datotek / foo / bar / baz so imena in so vezani na predmete, kot so datoteke in imeniki). Izbral sem ga, ker imajo vsi dostop do datotečnega sistema (v nasprotju s strežnikom LDAP).

uvoz javax.naming.Context; uvoz javax.naming.InitialContext; uvoz javax.naming.Binding; uvoz javax.naming.NamingEnumeration; uvoz javax.naming.NamingException; uvoz java.util.Hashtable; javni razred Main {public static void main (String [] rgstring) {try {// Ustvari začetni kontekst. Informacije o okolju // določajo ponudnika JNDI za uporabo // in začetni URL za uporabo (v našem primeru // imenik v obliki URL-ja - datoteka: /// ...). Hashtable hashtableEnvironment = novo Hashtable (); hashtableEnvironment.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); hashtableEnvironment.put (Context.PROVIDER_URL, rgstring [0]); Kontekstni kontekst = novo InitialContext (hashtableEnvironment); // Če ne navedete nobenega drugega argumenta ukazne vrstice, // navedite vsa imena v podanem kontekstu in // predmete, na katere so vezani. if (rgstring.length == 1) {NamingEnumeration namingenumeration = context.listBindings (""); while (namingenumeration.hasMore ()) {Binding binding = (Binding) namingenumeration.next (); System.out.println (binding.getName () + "" + binding.getObject ()); }} // V nasprotnem primeru navedite imena in vezi za // podane argumente. else {for (int i = 1; i <rgstring.length; i ++) {Objekt objekt = context.lookup (rgstring [i]); System.out.println (rgstring [i] + "" + objekt); }} context.close (); } catch (NamingException namingexception) {namingexception.printStackTrace (); }}} 

Program na zgornjem seznamu najprej ustvari začetni kontekst iz navedenega ponudnika JNDI (v tem primeru ponudnika Sun-ovega datotečnega sistema) in URL, ki določa lokalni imenik. Če niso podani nobeni dodatni argumenti ukazne vrstice, program navede predmete in imena vseh entitet v podanem imeniku. V nasprotnem primeru so navedeni predmeti in imena le tistih elementov, ki so navedeni v ukazni vrstici.

Zaključek

Zdaj bi morali razumeti in ceniti storitve poimenovanja na splošno in zlasti JNDI. V porazdeljenih okoljih so dragoceno orodje za iskanje informacij in virov. JNDI omogoča delo z različnimi storitvami poimenovanja, ne da bi bilo treba obvladati številne API-je. Naslednji mesec si bomo ogledali drugo polovico JNDI - njegove imeniške funkcije.

Todd Sundsted piše programe, odkar so računalniki na voljo v priročnih namiznih modelih. Čeprav se je Todd prvotno zanimal za izdelavo porazdeljenih aplikacij v jeziku C ++, je Todd prešel na programski jezik Java, ko je postal očitna izbira za takšno stvar. Todd poleg pisanja dela tudi kot arhitekt Java s programsko opremo ComFrame.

Preberite več o tej temi

  • Prenesite celotno izvorno kodo za ta članek v zip obliki

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

  • Vse stvari JNDI

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

  • Dokumentacija JNDI

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

  • Trenutno na voljo ponudniki storitev

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

  • Celoten seznam prejšnjih Kako uporabljati Java stolpci

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

To zgodbo, "Pregled JNDI, 1. del: Uvod v storitve poimenovanja", je prvotno objavil JavaWorld.

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