Programovanie

Prehľad JNDI, 1. časť: Úvod do pomenovacích služieb

Tí z vás, ktorí ste boli v knižnici a stále si pamätáte tento zážitok, si môžu spomenúť na postup vyhľadania knižničnej knihy. Ak nie ste v kontakte so svojou antikvariátnou stránkou, bude sa vám táto situácia zdať neznáma; ale raz za čas sa zatúlam do miestnej knižnice a hľadám originálnu knihu offline. Knižnice sú plné tisícov vecí - sú zaprášené a vyrobené z drevnej buničiny a kravskej kože, ale sú svojim spôsobom fascinujúce. V každom prípade, keď dôjde k nátlaku na nájdenie určitého človeka, vyhnem sa naivnému kurzu chodenia po chodbách knižnice hore a dole a namiesto toho sa obrátim na kartový katalóg.

TEXTBOX: TEXTBOX_HEAD: Prehľad JNDI: Prečítajte si celú sériu!

  • Časť 1. Úvod do pomenovacích služieb
  • Časť 2. Používajte adresárové služby JNDI na lepšiu správu distribuovaných aplikácií

  • Časť 3. Použite JNDI na uloženie objektov vašej distribuovanej aplikácie

  • Časť 4. Spojte to, čo ste sa naučili, pomocou aplikácie podporujúcej JNDI: END_TEXTBOX

Kartový katalóg pre nezainteresovaných mapuje názvy kníh na ich umiestnenie v knižnici. Tým, že najskôr pôjdem do kartového katalógu a pozriem sa na umiestnenie knihy, ušetrím si značné množstvo chôdze. (Mimochodom, počul som, že niektoré knižnice v skutočnosti umožňujú patrónom používať namiesto katalógov kariet počítače. Majú to polovičné - teraz, keď iba vložia informácie z kníh do počítača, kam patria. ..)

Akokoľvek sa to môže zdať prekvapivé, predstava katalógov kariet je tiež vo svete výpočtovej techniky veľmi užitočná. Pri výpočtoch to nazývame a pomenovacia služba, ktorý spája názvy s umiestnením služieb a s informáciami. Poskytuje počítačové programy na jednom mieste, kde nájdu potrebné prostriedky. Mimochodom, programy nestrácajú čas vykonávaním elektronického ekvivalentu chôdze hore a dole uličkami a nevyžadujú ani to, aby boli miesta napevno zakódované do svojej logiky.

Hľadanie zdrojov je obzvlášť dôležité v rozsiahlych podnikových prostrediach, kde aplikácie, ktoré zostavujete, môžu závisieť od služieb poskytovaných aplikáciami napísanými inými skupinami v iných oddeleniach. Kvalitne navrhnutá pomenovacia infraštruktúra umožňuje takéto projekty - a nedostatok jedného znemožňuje ich realizáciu. Mnoho reengineeringov podnikových procesov v skutočnosti začína návrhom a implementáciou robustnej podnikovej pomenovacej a adresárovej infraštruktúry.

Tento mesiac predstavujem rozhranie Java Naming and Directory Interface (JNDI). JNDI poskytuje rozhranie spoločného menovateľa pre mnoho existujúcich pomenovacích služieb. JNDI ako taký nebol navrhnutý tak, aby nahradil existujúcu technológiu; namiesto toho poskytuje spoločné rozhranie k existujúcim pomenovacím službám. Na úvod sa pozrime na niektoré z týchto služieb.

Úvod do pomenovacích služieb

Na nasledujúcom obrázku je znázornená organizácia služby generického pomenovania.

Pomenovacia služba udržiava množinu väzby. Väzby súvisia s názvami objektov. Všetky objekty v pomenovacom systéme sú pomenované rovnako (to znamená, že sa prihlásia na rovnaké meno konvencia pomenovania). Klienti používajú službu pomenovania na vyhľadanie objektov podľa názvu.

Existuje niekoľko existujúcich pomenovacích služieb, z ktorých niektoré popíšem nižšie. Každý z nich postupuje podľa vyššie uvedeného vzoru, ale líšia sa v detailoch.

  • Pomenovanie COS (Common Object Services): Služba pomenovania aplikácií CORBA; umožňuje aplikáciám ukladať a pristupovať k odkazom na objekty CORBA.

  • DNS (systém názvov domén): Služba pomenovania na internete; mapuje mená prístupné ľuďom (napríklad www.etcee.com) na adresy IP (internetový protokol), ktoré sú priateľské k počítaču, v tvare bodkovaného štvorca (207.69.175.36). Je zaujímavé, že DNS je a distribuovaný služba pomenovania, čo znamená, že služba a jej základná databáza sú rozšírené na mnohých hostiteľoch na internete.

  • LDAP (Lightweight Directory Access Protocol): Vyvinutý univerzitou v Michigane; ako už z jeho názvu vyplýva, jedná sa o odľahčenú verziu DAP (Directory Access Protocol), ktorá je zase súčasťou X.500, štandardu pre sieťové adresárové služby. V súčasnosti podporuje LDAP viac ako 40 spoločností.

  • NIS (sieťový informačný systém) a NIS +: Služby pomenovania sietí vyvinuté spoločnosťou Sun Microsystems. Obe umožňujú používateľom prístup k súborom a aplikáciám na ľubovoľnom hostiteľovi pomocou jediného ID a hesla.

Spoločné znaky

Ako som už spomenul, primárnou funkciou systému pomenovania je viazanie mien na objekty (alebo v niektorých prípadoch na odkazy na objekty - viac o nich za chvíľu). Aby mohla byť pomenovacou službou, musí prinajmenšom poskytovať schopnosť viazať mená na objekty a vyhľadávať objekty podľa názvu.

Mnoho pomenovacích systémov neukladá objekty priamo. Namiesto toho ukladajú odkazy na objekty. Pre ilustráciu zvážte DNS. Adresa 207.69.175.36 je odkaz na umiestnenie počítača v sieti Internet, nie na samotný počítač.

JNDI poskytuje rozhranie, ktoré podporuje všetky tieto bežné funkcie. Toto rozhranie predstavím neskôr v tomto článku.

Ich rozdiely

Je tiež dôležité pochopiť, ako sa líšia existujúce pomenovacie služby, pretože JNDI musí poskytnúť uskutočniteľnú abstrakciu, ktorá tieto rozdiely obíde.

Okrem funkčných rozdielov je najvýraznejším rozdielom spôsob, akým každá služba pomenovania vyžaduje špecifikáciu mien - konvencia pomenovania. Problém by malo ilustrovať niekoľko príkladov.

V serveri DNS sú názvy zostavené z komponentov, ktoré sú oddelené bodkami („.“). Čítali sprava doľava. Názov „www.etcee.com“ pomenuje stroj s názvom „www“ v doméne „etcee.com“. Rovnako názov „etcee.com“ pomenuje doménu „etcee“ v doméne najvyššej úrovne „com“.

V prípade protokolu LDAP je situácia o niečo komplikovanejšia. Názvy sú tvorené z komponentov, ktoré sú oddelené čiarkami („,“). Rovnako ako názvy DNS sa čítajú sprava doľava. Komponenty v názve LDAP však musia byť špecifikované ako páry názov / hodnota. Názov „cn = Todd Sundsted, o = ComFrame, c = US“ pomenuje osobu „cn = Todd Sundsted“ v organizácii „o = ComFrame, c = US“. Rovnako názov „o = ComFrame, c = US“ pomenuje organizáciu „o = ComFrame“ v krajine „c = US“.

Ako ilustrujú vyššie uvedené príklady, samotná konvencia pomenovania pomenovacej služby má potenciál vniesť do JNDI značné množstvo príchuti základnej pomenovacej služby. Toto nie je vlastnosť, ktorú by malo mať rozhranie nezávislé od implementácie.

JNDI rieši tento problém s názov triedy a jej podtried a pomocných tried. The názov trieda predstavuje meno zložené z usporiadaných sekvencií názvov a poskytuje metódy práce s názvami nezávisle od základnej pomenovacej služby.

Pohľad na pomenovanie JNDI

Ako som už spomenul vyššie, je potrebné mať na pamäti, že JNDI je rozhranie skôr ako implementácia. Táto skutočnosť má určité nevýhody - potrebujete prístup k existujúcej pomenovacej službe (napríklad k službe LDAP) a musíte niečo pochopiť o tom, ako to funguje, aby ste mohli hrať s JNDI. Na druhej strane umožňuje JNDI bezproblémovú integráciu do existujúceho výpočtového prostredia, kde má zavedená služba pomenovania vplyv.

Pomenovanie JNDI sa točí okolo malej skupiny tried a niekoľkých operácií. Poďme sa na ne pozrieť.

Context a InitialContext

The Kontext rozhranie hrá v JNDI ústrednú rolu. Kontext predstavuje množinu väzieb v rámci služby pomenovania, ktoré zdieľajú všetky rovnaké pomenovacie konvencie. A Kontext object poskytuje metódy na viazanie mien na objekty a na zrušenie viazania mien z objektov, na premenovanie objektov a na výpis väzieb.

Niektoré pomenovacie služby poskytujú aj funkčnosť podkontextu. Podobne ako adresár v súborovom systéme, aj podkontext je kontext v kontexte. Táto hierarchická štruktúra umožňuje lepšiu organizáciu informácií. Na pomenovanie služieb, ktoré podporujú podkontexty, slúži Kontext trieda tiež poskytuje metódy na vytváranie a ničenie podkontextov.

JNDI vykonáva všetky pomenovacie operácie vo vzťahu ku kontextu. Špecifikácia JNDI definuje ako pomôcku pri hľadaní štartovacieho miesta InitialContext trieda. Táto trieda je inštancovaná s vlastnosťami, ktoré definujú typ používanej pomenovacej služby a pre pomenovacie služby, ktoré poskytujú bezpečnosť, ID a heslo, ktoré sa majú použiť pri pripájaní.

Pre tých, ktorí sú oboznámení s RMI Pomenovanie triedy, mnoho z metód poskytovaných Kontext nižšie uvedené rozhranie bude vyzerať povedome. Poďme sa na to pozrieť Kontextmetódy:

  • void bind (String stringName, Object object): Zviaže meno na objekt. Názov nesmie byť viazaný na iný objekt. Všetky stredné kontexty už musia existovať.

  • void rebind (String stringName, Object object): Zviaže meno na objekt. Všetky stredné kontexty už musia existovať.

  • Vyhľadanie objektu (String stringName): Vráti zadaný objekt.

  • void unbind (String stringName): Odpojí zadaný objekt.

The Kontext rozhranie poskytuje aj metódy na premenovanie a výpis väzieb.

  • void rename (String stringOldName, String stringNewName): Zmení názov, na ktorý je objekt naviazaný.
  • NamingEnumeration listBindings (reťazec stringName): Vráti výčet obsahujúci názvy viazané na zadaný kontext spolu s objektmi a názvami tried objektov viazaných na ne.

  • NamingEnumeration list (reťazec stringName): Vráti výčet obsahujúci názvy viazané na zadaný kontext spolu s názvami tried objektov, ktoré sú na ne naviazané.

Každá z týchto metód má súrodenca, ktorý berie a názov objekt namiesto a String objekt. A názov objekt predstavuje všeobecné meno. The názov trieda umožňuje programu manipulovať s názvami bez toho, aby museli vedieť všetko o konkrétnej používanej pomenovacej službe.

Príklad

Nasledujúci príklad ilustruje, ako sa pripojiť k pomenovacej službe, vymenovať všetky väzby alebo uviesť konkrétnu väzbu. Používa poskytovateľa služieb súborového systému, ktorý je jednou z referenčných implementácií poskytovateľa služieb JNDI poskytovaných spoločnosťou Sun. Vďaka poskytovateľovi služieb súborového systému vyzerá súborový systém ako služba pomenovania (čo v mnohých ohľadoch je - názvy súborov ako / foo / bar / baz sú mená a sú viazané na objekty, ako sú súbory a adresáre). Vybral som ho, pretože každý má prístup k súborovému systému (na rozdiel napríklad od servera LDAP).

import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.Binding; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import java.util.Hashtable; public class Main {public static void main (String [] rgstring) {try {// Vytvorenie počiatočného kontextu. Informácie o prostredí // určujú poskytovateľa JNDI, ktorý má používať //, a počiatočnú adresu URL, ktorá sa má použiť (v našom prípade adresár // vo forme URL - súbor: /// ...). Hashtable hashtableEnvironment = new Hashtable (); hashtableEnvironment.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); hashtableEnvironment.put (Context.PROVIDER_URL, rgstring [0]); Kontextový kontext = nový InitialContext (hashtableEnvironment); // Ak neposkytnete žiadne ďalšie argumenty príkazového riadku, // zoznam všetkých mien v určenom kontexte a // objekty, na ktoré sú viazané. if (rgstring.length == 1) {NamingEnumeration namingenumeration = context.listBindings (""); while (namingenumeration.hasMore ()) {Binding binding = (Binding) namingenumeration.next (); System.out.println (binding.getName () + "" + binding.getObject ()); }} // Inak uveďte zoznam mien a väzieb pre // zadané argumenty. else {for (int i = 1; i <rgstring.length; i ++) {Object object = context.lookup (rgstring [i]); System.out.println (rgstring [i] + "" + objekt); }} context.close (); } catch (NamingException namingexception) {namingexception.printStackTrace (); }}} 

Program vo vyššie uvedenom zozname najskôr vytvorí počiatočný kontext od špecifikovaného poskytovateľa JNDI (v tomto prípade poskytovateľa súborového systému Sun) a adresy URL, ktorá špecifikuje lokálny adresár. Ak nie sú zadané žiadne ďalšie argumenty príkazového riadku, program vypíše objekty a názvy všetkých entít v zadanom adresári. V opačnom prípade obsahuje zoznam objektov a názvov iba tých položiek, ktoré sú uvedené v príkazovom riadku.

Záver

Teraz by ste mali rozumieť a oceniť pomenovanie služieb všeobecne a konkrétne JNDI. V distribuovaných prostrediach sú cennými nástrojmi na vyhľadanie informácií a zdrojov. JNDI umožňuje pracovať s rôznymi menovacími službami bez nutnosti ovládať množstvo API. Budúci mesiac sa pozrieme na druhú polovicu JNDI - jej adresárové funkcie.

Todd Sundsted píše programy od chvíle, keď boli počítače dostupné v pohodlných modeloch pre stolné počítače. Aj keď sa Todd pôvodne zaujímal o vytváranie distribuovaných aplikácií v C ++, prešiel na programovací jazyk Java, keď sa stal jasnou voľbou pre tento druh vecí. Okrem písania Todd pracuje aj ako architekt Java v spoločnosti ComFrame Software.

Získajte viac informácií o tejto téme

  • Stiahnite si kompletný zdrojový kód tohto článku vo formáte zip

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

  • Všetky veci JNDI

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

  • Dokumentácia JNDI

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

  • Poskytovatelia služieb sú momentálne k dispozícii

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

  • Celý zoznam predchádzajúcich Ako na to Java stĺpce

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

Tento príbeh, „Prehľad JNDI, 1. časť: Úvod do pomenovacích služieb“, pôvodne publikoval server JavaWorld.

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