JNDI – environment properties (možnosti nastavenia)
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
.
Mohlo by vás také zajímat
-
9 nejzajímavějších doménových koncovek
19. srpna 2024 -
Co je to DNSSEC, jak funguje a jak si ho nastavit?
14. srpna 2024
Nejnovější
-
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024 -
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024