Existujú tri základné spôsoby, ako je možné nastaviť environment properties, respektíve premenné prostredia pri JNDI. Prvý spôsob predpokladá použitie špeciálneho konfiguračného objektu, ktorý predáme konštruktoru objektu triedy InitialContext. Druhý spôsob využíva zadanie aplikačných parametrov pri štarte aplikácie využívajúcej JNDI. Tretí spôsob je v uložení premenných do konfiguračného súboru *.properties.

Externý konfiguračný súbor nám umožňuje nastaviť premenné vo formáte definovanom v java.util.Properties. Tento spôsob jednoducho odstraňuje nutnosť modifikácie zdrojového kódu pri zmene hodnôt premenných. Zdá sa, že ide jednoznačne o najvhodnejšiu variantu, ale nie vždy to tak musí byť.

Využitie Hashtable na nastavenie premenných prostredia

Táto metóda umožňuje nastaviť environment properties v rámci vášho aplikačného klienta prostredníctvom objektu triedy java.util.Hashtable, ktorý je predaný konštruktoru objektu triedy InitialContext. Nasledujúci fragment kódu zobrazuje príklad nastavenia dvoch základných premenných potrebných pre lokalizáciu JNDI služby:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,“com.sun.jndi.ldap.LdapCtxFactory“);
env.put(Context.PROVIDER_URL,“ldap://localhost:389/o=JNDI“);
Context ctx = new InitialContext(env);

Tento postup má jedno podstatné negatívum. Ak by ste totiž potrebovali zmeniť umiestnenie JNDI služby alebo nastaviť inú initial context factory triedu, museli by ste kvôli tomu modifikovať a rekompilovať zdrojový kód aplikačného klienta. Práve z tohto dôvodu je toto najmenej odporúčaný spôsob.

Využitie aplikačných parametrov

Druhým spôsobom, ako nastaviť premenné prostredia, je zadať ich prostredníctvom aplikačných parametrov pri štarte Java aplikácie. Runtime jazyka Java nám totiž umožňuje špecifikovať štartovacie parametre príkazového riadku pomocou prepínača „D“. Daný parameter sa zadá v tvare kľúč=hodnota. JNDI však bude akceptovať iba nasledovné premenné prostredia:

  • java.naming.factory.initial
  • java.naming.factory.object
  • java.naming.factory.state
  • java.naming.factory.control
  • java.naming.factory.url.pkgs
  • java.naming.provider.url
  • java.naming.dns.url

Uveďme si teraz príklad, ako by mohol vyzerať štart aplikácie so zadaním parametrov pre využitie JNDI:

java
-D
java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
-D
java.naming.provider.url=ldap://localhost:389/o=JNDI
MyJNDIApp

Využitie aplikačných parametrov poskytuje jednoduchý spôsob, ako nastaviť premenné prostredia bez nutnosti editovať zdrojový kód. Avšak vyžaduje si to vždy pri štarte zadať potrebné parametre. Iste, môžete vytvoriť štartovací skript a tým si čiastočne zjednodušiť život. Tento skript je však nutné pridať ku všetkým klientom a pri zmene parametrov je nutné editovať všetky skripty. Napriek tomu si myslím, že tento spôsob je vhodnejší ako predchádzajúci. Avšak ešte stále existuje lepší spôsob.

Ak by ste chceli využívať možnosti JNDI z Java apletov, najlepším spôsobom bude využiť štandardné parametre apletu. Tu je príklad:

<param name=java.naming.factory.initial
value=com.sun.jndi.ldap.LdapCtxFactory>
<param name=java.naming.provider.url
value=ldap://localhost:389/o=JNDI>

Je to z toho dôvodu, že aplety vo všeobecnosti nemôžu čítať systémové premenné, respektíve systémové súbory.

Využitie konfiguračných súborov

Tretí spôsob spočíva vo využití konfiguračného súboru vo formáte, ktorý je čitateľný pre objekty triedy java.util.Properties. Tento súbor obsahuje na jednotlivých riadkoch potrebné premenné v tvare kľúč=hodnota. Výhodou tohto riešenia je, že úplne oddeľuje aplikačný kód od potreby editovania. Tu je príklad JNDI konfiguračného súboru:

java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
java.naming.provider.url=ldap://localhost:389/o=JNDI

Kľúč je v podstate názov premennej prostredia a jeho hodnota je reťazec vo formáte definovanom pre danú premennú. Tento formát býva obvykle daný poskytovateľom služby, preto si treba vždy skontrolovať príslušnú dokumentáciu konkrétnej implementácie JNDI. Z pohľadu JNDI rozlišujeme dva typy konfiguračných súborov. Sú to súbory, ktorých obsah definuje poskytovateľ JNDI služby (provider files) a štandardné aplikačné JNDI súbory (application files).

JNDI rozhranie, respektíve služba, ako aj JNDI knižnice vyhľadávajú a čítajú tieto súbory automaticky a hodnoty jednotlivých premenných sú automaticky k dispozícii, bez nutnosti čítať ich programovo. Táto črta je hlavným dôvodom, prečo je tento spôsob ukladania premenných prostredia najpoužívanejší.

Provider files

Každý poskytovateľ JNDI služby môže mať vlastný konfiguračný súbor, ktorý obsahuje premenné špecifické práve pre danú implementáciu. Mala by sa dodržovať nasledovná konvencia, čo sa týka označovania týchto súborov: [prefix/]jndiprovider.properties, kde prefix je názov balíčka (package name) v ktorom sa nachádza daná implementácia.

Napríklad predpokladajme, že máme implementáciu, ktorej kontext sa nachádza v triede com.sun.jndi.ldap.LdapCtx. Konfiguračný súbor poskytovateľa potom bude com/sun/jndi/ldap/jndiprovider.properties. Ak by sa spomenutá trieda nenachádzala v balíčku, potom by bol názov jndiprovider.properties.

Poskytovateľ implementácie JNDI môže umiestniť svoje vlastné špecifické nastavenia do spomínaného properties súboru, ale zároveň môže „prepísať“ niektoré zo štandardných premenných prostredia svojimi hodnotami. Jedná sa o tieto premenné prostredia:

  • java.naming.factory.object
  • java.naming.factory.url.pkgs
  • java.naming.factory.state
  • java.naming.factory.control

Application files

Ako sme už spomenuli, druhou skupinou sú konfiguračné súbory, ktoré môžeme označiť ako štandardné JNDI konfiguračné zdroje. Jediný rozdiel v porovnaní s prvým typom súboru je v tom, že jeho názov je pevne daný a je jndi.properties. Tento súbor obvykle obsahuje niekoľko štandardných premenných prostredia, ktoré môžu ale nemusia byť závislé od poskytovateľa implementácie. Čo sa týka umiestnenia, tak súbor sa musí nachádzať niekde v classpath, alebo ho môžeme vložiť do <JAVA_HOME>/lib. Súborov môže byť niekoľko na rôznych miestach.

V prípade, že týchto konfiguračných súborov bude niekoľko a budú obsahovať aj spoločné premenné, JNDI služba automaticky po načítaní hodnôt tieto spoločné hodnoty spojí. Týka sa to samozrejme len tých premenných, ktoré môžu obsahovať viac hodnôt. Pri ostatných bude použitá prvá hodnota v poradí. Keďže hodnoty jednotlivých premenných budú načítané a uložené automaticky, už nie je nutné manuálne ich predávať konštruktoru triedy InitialContext.

Žádný příspěvek v diskuzi

Odpovědět