Programovanie

Prehľad JNDI, časť 3: Pokročilé JNDI

Tento mesiac musím pokryť veľa pôdy, takže vynechám páperie a strihám presne po guľkách. Po prvé, rozhranie Java Naming and Directory Interface hrá dôležitú úlohu v niekoľkých technológiách Java. Pozrime sa na túto úlohu, aby sme lepšie pochopili strategickú pozíciu JNDI v celkovom obraze Javy. Ďalej ako uznanie vašej potreby fungujúcej služby JNDI vám predstavím voľne dostupnú prenosnú implementáciu LDAP a naučím vás, ako sa pripojiť a používať poskytovateľa služieb JNDI. Na záver vás podrobne preskúmam väzbou objektov na záznamy v JNDI.

TEXTOVÉ POLE:

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, s aplikáciou podporovanou JNDI

: END_TEXTBOX

Skôr ako začnem, je potrebné urobiť trochu doublethink. Za posledné dva mesiace som sa vás snažil presvedčiť, že pomenovanie a adresárové služby sú zhruba elektronickým ekvivalentom kartových katalógov nájdených v knižniciach. Teraz, keď začíname našu prehliadku pokročilých funkcií JNDI, chcem, aby ste úplne zabudli na túto analógiu - hrubo nedostatočne ilustruje silu JNDI.

Začnime pohľadom na to, ako sa JNDI objavuje v iných technológiách Java.

JNDI všade

JNDI hrá rolu v rade Java technológií. Zvážme tri z nich: JDBC (balík Java Database Connectivity), JMS (Java Messaging Service) a EJB (Enterprise JavaBeans).

JDBC je technológia Java pre relačné databázy. JNDI sa prvýkrát objavilo vo voliteľnom balíku JDBC 2.0 (pozri Zdroje) v spojení s Dátový zdroj rozhranie. A Dátový zdroj inštancia, ako už z jej názvu vyplýva, predstavuje zdroj údajov - často z databázy, ale nie vždy. A Dátový zdroj inštancia ukladá informácie o zdroji údajov - napríklad jeho názov, ovládač, ktorý sa má načítať a používať, a jeho umiestnenie - a umožňuje aplikácii získať pripojenie k zdroju údajov bez ohľadu na základné podrobnosti. Špecifikácia JDBC odporúča na ukladanie použiť JNDI Dátový zdroj predmety.

JMS je technológia Java na zasielanie správ. Špecifikácia JMS popisuje spravované objekty - objekty, ktoré obsahujú informácie o konfigurácii JMS a používajú ich klienti JMS na vyhľadanie konkrétnych frontov správ a tém. Rovnako ako v prípade JDBC, špecifikácia odporúča lokalizovať spravované objekty JMS prostredníctvom JNDI.

Nakoniec zvážte Enterprise JavaBeans. Všetky podnikové fazule zverejňujú domáce rozhranie - jediné miesto, prostredníctvom ktorého klienti nájdu konkrétnu podnikovú fazuľu - prostredníctvom JNDI.

Čo prináša JNDI na stôl, kvôli ktorému je tak vysoko cenený?

Po prvé, JNDI podporuje predstavu centrálne riadeného zdroja informácií - kľúčovú požiadavku pre podnikové aplikácie. Centrálne riadený informačný zdroj sa spravuje ľahšie ako distribuovaná zbierka informačných zdrojov. Pre klientov je tiež jednoduchšie vyhľadať potrebné informácie, ak sa musia pozerať iba na jedno miesto.

Po druhé, ako uvidíte, schopnosť JNDI priamo ukladať objekty Java umožňuje takmer transparentnú integráciu do aplikácií Java.

Bod poskytovateľa

Ak chcete používať JNDI, potrebujete službu pomenovania a adresárov a poskytovateľa služieb JNDI. Spoločnosť Sun poskytuje niekoľko poskytovateľov bežných pomenovacích a adresárových služieb (pomenovanie COS, NIS, register RMI, LDAP a ďalší). Dohodol som sa na LDAP.

LDAP (Lightweight Directory Access Protocol) má dve výhody spočívajúce v tom, že je široko implementovaný (v komerčnej aj bezplatnej forme) a je primerane ľahko použiteľný. Jeho vlastnosti dobre podporuje aj poskytovateľ služieb LDAP spoločnosti Sun a JNDI.

Pretože získanie a konfigurácia servera LDAP nie je v skutočnosti predmetom Javy, prinútim vás iba nasmerovať správny smer a poskytnúť vám odkazy na internetové zdroje.

K dispozícii je množstvo implementácií LDAP. Mnohé z nich sú komerčné produkty, ako napríklad Netscape Directory Server a IBM Secure Way Directory. Niektoré sú zabalené ako súčasť väčších ponúk (služba Active Directory spoločnosti Microsoft je súčasťou systému Windows 2000). Ak máte prístup k takejto implementácii, môžete väčšinu tejto časti preskočiť. Inak popíšem OpenLDAP - voľne dostupnú implementáciu LDAP založenú na referenčnej implementácii University of Michigan - ako aj jej inštaláciu a konfiguráciu.

OpenLDAP je k dispozícii od nadácie OpenLDAP (pozri Zdroje). Jeho licencia je založená na „umeleckej licencii“ spoločnosti Perl, čo znamená, že OpenLDAP je bezplatný (alebo open source) softvér. Predbalené binárne súbory sú k dispozícii pre rôzne verzie systému Linux (Debian, Red Hat) a BSD Unix. V súčasnosti sa pracuje na porte systému Windows NT.

Ak plánujete inštaláciu OpenLDAP, mali by ste si prečítať Príručka správcu SLAPD a SLURPD (slapd je názov spustiteľného servera LDAP a slurpd je názov replikačného servera LDAP; pozrite si Zdroje pre umiestnenie).

Mám jeden posledný návrh, aby bola celá vaša skúsenosť príjemnejšia: bez ohľadu na to, akú implementáciu LDAP používate, obráťte sa na kontrolu schémy vypnutý. Schéma LDAP, podobne ako schéma databázy, definuje obmedzenia uložených informácií. Pri bežnom používaní pomáha kontrola schémy zabezpečiť, aby položky (myslím na položky z adresára) zodpovedali správnemu formátu. Pretože však pravdepodobne budete hrať skôr ako stavať niečo trvalého významu, kontrola schém vám bude len prekážať. Dajte mi slovo.

Pripojenie k kontextu JNDI

V predchádzajúcich článkoch som sa snažil vyhnúť podrobnému vysvetľovaniu spôsobu interakcie s poskytovateľom služieb JNDI, ako je poskytovateľ služieb LDAP. Spomenul som, že na vykonávanie operácií JNDI potrebujete počiatočný kontext, ale nestrávil som veľa času rozprávaním, ako ich získať. Dovoľte mi vyplniť medzery. (Viac informácií o počiatočných kontextoch nájdete v prvých dvoch článkoch tejto série.)

Predtým, ako budete môcť s JNDI niečo robiť, potrebujete počiatočný kontext. Všetky operácie sa vykonávajú vzhľadom na kontext alebo jeden z jeho podkontextov.

Získanie počiatočného kontextu si vyžaduje tri kroky:

  1. Najskôr vyberte poskytovateľa služieb. Ak budete používať OpenLDAP alebo inú implementáciu LDAP, Sun dodáva referenčného poskytovateľa služieb LDAP (pozri Zdroje). Pridajte názov poskytovateľa služieb do sady vlastností prostredia (uložených v a Hashtable inštancia):

     Hashtable hashtableEnvironment = new Hashtable (); hashtableEnvironment.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
  2. Pridajte ďalšie informácie, ktoré poskytovateľ služieb vyžaduje. V prípade protokolu LDAP to zahŕňa adresu URL, ktorá identifikuje službu, koreňový kontext a meno a heslo, ku ktorým sa chcete pripojiť:

     // služba: ldap: // localhost: 389 / // koreňový kontext: dc = etcee, dc = com hashtableEnvironment.put (Context.PROVIDER_URL, "ldap: // localhost: 389 / dc = etcee, dc = com "); hashtableEnvironment.put (Context.SECURITY_PRINCIPAL, "meno"); hashtableEnvironment.put (Context.SECURITY_CREDENTIALS, "heslo"); 
  3. Nakoniec získajte počiatočný kontext. Ak chcete iba vykonať operácie pomenovania, budete potrebovať iba a Kontext inštancia. Ak chcete vykonať aj operáciu s adresárom, budete potrebovať a DirContext inštancie. Nie všetci poskytovatelia dodávajú oboje:

     Kontextový kontext = nový InitialContext (hashtableEnvironment); 

    Alebo:

     DirContext dircontext = nový InitialDirContext (hashtableEnvironment); 

To je všetko. Teraz sa pozrime na to, ako aplikácie ukladajú objekty a načítajú objekty z JNDI.

Práca s predmetmi

Schopnosť ukladať objekty Java je užitočná: úložisko objektov poskytuje vytrvalosť a umožňuje zdieľanie objektov medzi aplikáciami alebo medzi rôznymi spusteniami tej istej aplikácie.

Z hľadiska použitého kódu je ukladanie objektov prekvapivo jednoduché:

 context.bind ("meno", objekt) 

The bind () operácia naviaže meno na objekt Java. Syntax príkazu pripomína RMI, ale sémantika nie je tak jasne definovaná. Je to prípustné pre bind () operácia na uloženie napríklad snímky objektu alebo odkazu na „živý“ objekt.

Uvedomte si, že bind () operácia hodí a NamingException ak sa počas vykonávania operácie vyskytne výnimka.

Teraz sa pozrime na bind () doplnok operácie - vyhľadať():

 Objekt objekt = context.lookup ("meno") 

The vyhľadať() operácia získa objekt viazaný na zadaný názov. Syntax opäť pripomína RMI, ale sémantika metódy nie je tak jasne definovaná.

Rovnako ako s bind (), vyhľadať() operácia hodí a NamingException ak sa počas vykonávania operácie vyskytne výnimka.

Ukladanie objektov

Čo to znamená uložiť objekt do pomenovacej a adresárovej služby JNDI? Už sme spomenuli, že presná sémantika bind () a vyhľadať() operácie nie sú presne definované; je na poskytovateľovi služieb JNDI, aby definoval ich sémantiku.

Podľa špecifikácie JNDI sa poskytovateľom služieb odporúča (ale nevyžaduje sa), aby podporovali ukladanie objektov v jednom z nasledujúcich formátov:

  • Serializované údaje
  • Odkaz
  • Atribúty v kontexte adresára

Ak všetci poskytovatelia služieb JNDI podporujú tieto štandardné mechanizmy, programátori v jazyku Java môžu voľne vyvíjať všeobecné riešenia, ktoré fungujú, aj keď sa zmení základná vrstva poskytovateľa služieb.

Každá z vyššie uvedených metód má svoje výhody a nevýhody. Najlepšia metóda bude závisieť od požiadaviek vyvíjanej aplikácie.

Zvážme každú z nich postupne.

Ako serializované údaje

Najzrejmejším prístupom k ukladaniu objektu do adresára je ukladanie serializovanej reprezentácie objektu. Jedinou požiadavkou je, aby trieda objektu implementovala Serializovateľné rozhranie.

Keď je objekt serializovaný, jeho stav sa transformuje na prúd bajtov. Poskytovateľ služieb prevezme prúd bajtov a uloží ho do adresára. Keď klient vyhľadá objekt, poskytovateľ služieb ho rekonštruuje z uložených údajov.

Nasledujúci kód ukazuje, ako viazať a LinkedList k záznamu v službe JNDI:

 // vytvorenie prepojeného zoznamu LinkedList linkedlist = nový LinkedList (); . . . // bind context.bind ("cn = foo", linkedlist); . . . // lookup linkedlist = (LinkedList) context.lookup ("cn = foo"); 

Je to také ľahké!

Bohužiaľ, ďalšie dve metódy sú komplikovanejšie. Popíšem ich stručne, ale podrobnú diskusiu si vyhradzujem na neskôr.

Ako referencia

Niekedy nie je vhodné (alebo možné) serializovať objekt. Ak objekt poskytuje napríklad službu v sieti, nemá zmysel ukladať stav samotného objektu. Zaujímajú nás informácie potrebné na nájdenie a komunikáciu s objektom.

Príkladom je pripojenie k externému prostriedku (jednému mimo rozsahu Java Virtual Machine), ako je napríklad databáza alebo súbor. Zjavne nemá zmysel pokúšať sa uložiť databázu alebo samotný súbor do služby JNDI. Namiesto toho chceme uložiť informácie potrebné na rekonštrukciu spojenia.

V takom prípade by mal programátor naviazať a Odkaz inštancia, ktorá zodpovedá objektu, alebo aby trieda objektu implementovala Odkázateľný rozhranie (v ktorom objekt generuje a poskytuje a Odkaz napríklad na požiadanie poskytovateľa služieb).

The Odkaz inštancia obsahuje dostatok informácií na opätovné vytvorenie referencie. Ak bol odkaz na súbor uložený, obsahuje odkaz dostatok informácií na vytvorenie a Súbor objekt, ktorý ukazuje na správny súbor.

Ako atribúty

Ak používate poskytovateľa služieb, ktorý poskytuje funkčnosť adresára namiesto iba pomenovania, môžete objekt uložiť aj ako kolekciu atribútov na DirContext objekt (a DirContext inštancia sa líši od a Kontext napríklad v tom, že môže mať atribúty).

Ak chcete použiť túto metódu, musíte vytvoriť objekty, ktoré implementujú DirContext rozhranie a obsahujú kód potrebný na zápis ich vnútorného stavu ako Atribúty objekt. Musíte tiež vytvoriť továreň na objekty, aby ste objekt rekonštituovali.

Tento prístup je užitočný, keď musí byť objekt prístupný pomocou aplikácií, ktoré nie sú Java.

Záver

Ak ste sériu čítali, mali by ste pochopiť a oceniť silu a dôležitosť JNDI - veľa o nej nepočujete, ale je tam pod krytmi.

Budúci mesiac sa pozrieme na aplikáciu založenú na JNDI. Medzitým by ste sa mali pokúsiť spustiť JNDI na serveri LDAP.

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

  • Voliteľný balík JDBC 2.0

    //java.sun.com/products/jdbc/articles/package2.html

  • Prejdite do nadácie OpenLDAP a stiahnite si OpenLDAP

    //www.openldap.org/

  • Stiahnuť Sprievodca správou SLAPD a SLURPD, ísť do

    //www.umich.edu/~dirsvcs/ldap/doc/guides/

  • Informácie o JNDI, poskytovatelia služieb atď

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

Tento príbeh, „Prehľad JNDI, časť 3: Pokročilé JNDI“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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