Predtým, ako klient bude môcť využiť služby ponúkané JNDI, musí túto službu vyhľadať na sieti a získať spojenie. Znie to ako paradox, pretože klient potrebuje JNDI, aby mohol vyhľadať požadované služby, ale JNDI samotné je v podstate tiež vzdialená služba. Takže ako môže klient použiť menné služby, ak ich predtým musí vyhľadať? Odpoveďou je využitie environment properties.

Environment properties (EP) je jednoduchý spôsob, ako klientská aplikácia môže použiť rôzne vlastnosti a nastavenia potrebné na vytvorenie spojenia s mennou službou. Samozrejme, že v EP môže byť špecifikované ďaleko viac, ako iba údaje potrebné na vyhľadanie JNDI mennej služby. Napríklad tu môžete stanoviť bezpečnostné pravidlá, prihlasovacie údaje, potrebné na pripojenie k službám. Tieto vlastnosti sú špecifické pre konkrétneho klienta. Každá implementácia technológie JNDI môže mať niektoré spoločné environment properties, ale aj niektoré špeciálne, určené len pre danú implementáciu.

Každá JNDI menná služba môže využívať spomínané EP rôznym spôsobom. Naozaj je to tak, že každý JNDI provider má svoje špecifické environment properties, ktoré používa iba on. Tieto špecifické nastavenia musí klient poznať, aby sa mohol pripojiť k ponúkanej službe. Napríklad pre BEA WebLogic EJB server musíte klientskej aplikácii „povedať“, že bude používať WebLogic JNDI službu a kde ju nájde.

Na začiatku je treba konzultovať dokumentáciu k implementácii JNDI, aby bolo možné identifikovať dôležité nastavenia. Môžete sa čudovať, ako je možné zachovať prenositeľnosť klientských aplikácií medzi rôznymi JNDI službami. Riešenie je v použití externého konfiguračného súboru, ako uvidíme neskôr.

Je možné, že k správnemu nastaveniu bude treba ešte ďalšie informácie, v závislosti od SPI. Typicky bude treba vytvoriť niekoľko párov kľúč=hodnota, kde kľúč je textový reťazec definujúci konkrétnu property. Napríklad jeden z používaných kľúčov je java.naming.provider.url. Tomuto kľúču sa následne priradí hodnota. Čo môže byť napríklad ldap://ldap.com:389.

Nasledujúca tabuľka obsahuje zoznam štandardných environment properties, ktoré sa môžu použiť v implementáciách JNDI. Všetky majú prefix java.naming, pre úsporu miesta ho neuvádzam. Takže napríklad hneď prvá EP má plný názov java.naming.applet. V konfiguračnom súbore je samozrejme nutné tento prefix uviesť.

Property Popis
applet V prípade, že k JNDI službe chcete pristupovať z appletu, ako hodnotu uvediete plne kvalifikovaný názov vašej triedy, ktorá je potomkom triedy java.applet.Applet.
authoritative Tento kľúč môže nadobúdať dve hodnoty, true alebo false. V prípade, že uvediete true, bude obídená pamäť cache JNDI implementácie. Štandardná hodnota je false.
batchsize Hodnota kľúču určuje veľkosť „dávky“ dát, ktorá bude naraz vrátená službou. Musí sa udávať v celých číslach. Jedná sa obvykle o ignorovaný parameter.
dns.url Používa sa na špecifikovanie DNS názvového servera použitého v súvislosti s JNDI URL kontextom. Tiež nebýva často využívaný.
factory.initial Tento kľúč určuje, ktorá factory trieda bude zodpovedná za vytvorenie takzvaného initial context objektu. Musí ísť o plne kvalifikované meno.
language Špecifikuje preferovaný jazyk. Ak nebude stanovený, použije sa nastavenie od poskytovateľa.
factory.object Zoznam plne kvalifikovaných názvov tried použitých na vytváranie JNDI objektov. Na oddelenie sa používa dvojbodka.
provider.url Tento kľúč definuje URL ukazujúci na informácie potrebné na správne nakonfigurovanie SPI rozhrania.
referral Kľúč špecifikuje, akým spôsobom budú spracované špeciálne kľúčové odkazy poskytnuté providerom. Môže ísť o tieto tri odkazy: „follow“, „ignore“, „throw“.
security.authentication Použije sa na nastavenie bezpečnostnej úrovne. Môže ísť o tieto tri úrovne: „none“, „simple“, „strong“.
security.credentials Špecifikuje bezpečnostné prístupové heslo. Závisí od použitej autentifikačnej schémy. Ak nie je špecifikované, ďalší postup je závislý od poskytovateľa.
security.principal Špecifikuje bezpečnostnú identitu (užívateľské meno) pre autentifikáciu žiadateľa o službu. Opäť jeho použitie je závislé od použitej schémy.
security.protocol Použije sa na stanovenie použitého bezpečnostného protokolu. Jeho označenie je určované poskytovateľom JNDI implementácie. Napríklad to môže byť SSL.
factory.state Táto vlastnosť by mala obsahovať zoznam plne kvalifikovaných názvov tried, ktoré budú použité na vrátenie stavu objektu daného objektom samotným.

Všimnite si prosím, že jednotlivé uvedené environment properties musia mať prefix java.naming. Mohli by ste si to totiž zameniť za JNDI API, ktoré je definované v balíčku javax.naming

Pre každú jednu EP uvedenú v tabuľke definuje rozhranie javax.naming.Context statickú String konštantu, ktorá môže byť použitá priamo vo vašom zdrojovom kóde. Takže ak napríklad potrebujete špecifikovať alebo zmeniť vlastnosť java.naming.initial.context, môžete tak vykonať programovo použitím konštanty Context.INITIAL_CONTEXT_FACTORY. Odporúča sa používať práve tieto konštanty. Samozrejme, že ich nemôžete použiť v konfiguračnom súbore.

Dve EP sú veľmi dôležité, bez ohľadu na poskytovateľa služby. Sú to tieto dve vlastnosti: java.naming.factory.initial a java.naming.provider.url.

java.naming.factory.initial

Hodnota tohto kľúča je textový reťazec špecifikujúci názov triedy, ktorá bude vedená ako initial context factory. Táto trieda bude zodpovedná za vytváranie referencií na objekt triedy InitialContext. Zatiaľ sme sa ešte nezaoberali spomínanými objektmi InitialContext alebo Context. Nateraz si môžete predstaviť, že Context je referencia na prepojenie vo vnútri mennej služby a InitialContext je referencia na najvyššiu úroveň mennej služby.

Nasleduje príklad nastavenia tejto vlastnosti pre BEA WebLogic JNDI rozhranie:

java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory

Ak by ste nešpecifikovali túto EP alebo by ste ju špecifikovali chybne, výsledkom by bolo vyhodenie výnimky NoInitialContextException alebo prípadne NamingException, pri pokuse o pripojenie sa k mennej službe.

java.naming.provider.url

Hodnota tohto kľúča je tiež textový reťazec, uchovávajúci informáciu určenú pre SPI (Service Provider Interface). Hoci syntax hodnoty kľúča je závislá od poskytovateľa služby, obvykle dodržuje formát protokol://host:port.

Pre spomínaný BEA WebLogic potom bude vyzerať nasledovne:

java.naming.provider.url=t3://localhost:7001

Protokol t3 je natívny protokol spoločnosti BEA, ale často sa využívajú aj iiop a ldap protokoly. V skratke povedané, uvedené URL informuje SPI rozhranie o tom, kde sa nachádza JNDI služba, kde sa nachádzajú potrebné objekty, o ktorých vyhľadanie budeme mať záujem.

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

Odpovědět