JNDI – využitie environment properties a metóda lookup()
V tomto článku sa detailne pozrieme na to, akým spôsobom môžeme získať informácie obsiahnuté v premenných prostredia. Dozvieme sa, prostredníctvom akého objektu sú tieto informácie dostupné, a v druhej časti sa pozrieme bližšie na možnosti a využitie metódy lookup.
Získanie hodnôt premenných prostredia a objekt Context
Metóda getEnvironment
definovaná v rozhraní Context
, vráti objekt typu Hashtable
obsahujúci všetky premenné prostredia (dvojice kľúč-hodnota), majúce vplyv na objekt Context
. Ak budete potrebovať modifikovať tieto premenné za behu programu, musíte využiť metódu addToEnvironment
, respektíve metódu removeFromEnvironment
.
Vytvorme si teda ukážkový príklad, v ktorom sa pokúsim získať a nejakým jednoduchým spôsobom prečítať hodnoty nastavené v premenných prostredia. Za týmto účelom si vytvoríme konfiguračný súbor jndi.properties, obsahujúci dva záznamy. Nasledujúci výpis zobrazuje spomínaný súbor:
java.naming.factory.initial=
com.sun.jndi.fscontext.RefFSContextFactory
java.naming.provider.url=file:///c:/jndi_root/
Uvedený konfiguračný súbor sa môže nachádzať kdekoľvek v rámci danej classpath. V prípade nejasností sa môžete pozrieť na článok JNDI – environment properties (možnosti nastavenia), v ktorom sú uvedené bližšie informácie.
Nasledovný výpis názorne zobrazuje spôsob, ktorým je možné programovo prečítať a vypísať jednotlivé premenné prostredia.
import javax.naming.*;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
public class ListJNDIEnvironment {
ListJNDIEnvironment(){
super();
}
public void listEnvironmentProperties(){
Context initCtx = null;
try {
/*
* Vytvoríme InitialContext. Súbor jndi.properties
* bude použitý pre uloženie premenných prostredia
*/
initCtx = new InitialContext();
/*
* Vytvoríme zoznam všetkých premenných prostredia
* pre tento Context
*/
Hashtable env = initCtx.getEnvironment();
Set keys = env.keySet();
Iterator iter = keys.iterator();
while( iter.hasNext() ) {
String key = (String)iter.next();
String value = (String)env.get( key );
System.out.println( key + „=“ + value );
}
} catch( NoInitialContextException ex ){
System.out.println( „Nezadali ste InitialContext“ );
System.out.println( „Skontroluj súbor jndi.properties“ );
} catch( NamingException ex ){
ex.printStackTrace();
} finally {
// Uzatvoríme používané zdroje
closeInitialContext( initCtx );
}
}
// Vždy treba uzatvoriť InitialContext
public void closeInitialContext( Context ctx ){
try {
if ( ctx != null ) {
System.out.println( „Uzatváram InitialContext“ );
ctx.close();
}
} catch ( NamingException ex ) {
ex.printStackTrace();
}
}
public static void main( String[] args ){
ListJNDIEnvironment client = new ListJNDIEnvironment();
// Vypíšeme zoznam použitých premenných prostredia
client.listEnvironmentProperties();
}
}
Keď skompilujete a pustíte uvedenú triedu, mali by ste dostať nasledujúci výpis (v prípade, že použijete iného poskytovateľa JNDI služby, výstup sa môže líšiť):
Výsledok spustenia súboru ListJNDIEnvironment.java (NetBeans 4.1)
Použitie metódy lookup()
Teraz, keď sme sa už naučili ako získať objekt InitialContext
, je načase, aby sme ho aj nejakým spôsobom použili. Spomenuté využitie bude spočívať vo vyhľadávaní objektov a referencií na ne. Pretože používame file system implementáciu, objekt, ktorý budeme vyhľadávať, bude súbor. Konkrétne textový súbor.
Vytvorte si preto prázdny súbor, nazvite ho napríklad something.txt a umiestnite ho do adresára jndi_root. Ak chcete, môžete doň uložiť pár riadkov, ale nie je to vôbec v tejto chvíli nutné. Vytvoríme si teraz triedu, ktorá využije JNDI na vyhľadanie tohto súboru a vypíše zopár informácií o ňom. Nasledujúci výpis zobrazuje obsah triedy, ktorá najprv vytvorí InitialContext
nad spomínaným adresárom a následne vykoná vyhľadanie zdroja podľa mena. Týmto menom bude názov nášho textového súboru.
import java.io.File;
import javax.naming.*;
import java.sql.Timestamp;
import java.util.Hashtable;
import java.util.Properties;
public class JNDILookup {
// Defaultný konštruktor
public JNDILookup(){
super();
}
public void runExample( String fileName ){
Context initCtx = null;
try {
// Vytvoríme InitialContext
initCtx = new InitialContext();
// Vykonáme vyhľadanie cez lookup()
File file = (File)initCtx.lookup( fileName );
// Vypíšeme pár informácií o súbore
long fileSize = file.length();
Timestamp ts = new Timestamp( file.lastModified() );
System.out.println( „Názov súboru: “ + fileName );
System.out.println( „Veľkosť súboru: “ + fileSize );
System.out.println( „Dátum posl. mod.: “ + ts );
}catch (Exception ex ) {
ex.printStackTrace();
}finally{
try{
System.out.println( „Uzatváram InitialContext“ );
if ( initCtx != null ) initCtx.close();
}catch( Exception ex ){
System.out.println( „Nemôžem uzatvoriť InitialContext“ );
}
}
}
public static void main( String[] args ){
if ( args.length != 1 ){
System.out.println( „Použitie: JNDILookup <súbor.txt>“ );
System.exit( 0 );
}
String fileName = args[0];
JNDILookup example = new JNDILookup();
example.runExample( fileName );
}
}
Výsledok spustenia druhého ukážkového programu bude nasledovný:
Výsledok spustenia súboru JNDILookup.java (NetBeans 4.1)
Tento príklad je veľmi jednoduchý a nerobí nič iného, iba že najprv načíta dve premenné prostredia zo súboru jndi.properties (pozor, musí byť v classpath), následne vytvorí InitialContext
a potom prostredníctvom metódy lookup()
vyhľadá súbor s daným menom. Tento súbor sa musí nachádzať niekde v rámci adresára jndi_root. Ak by ste chceli umiestniť testovací súbor niekde hlbšie (napríklad C:\jndi_root\test\), treba to zohľadniť pri zadávaní parametru programu. Treba takto:
java JNDILookup test/something.txt
Na záver vám ponúkam tu uvedené príklady na stiahnutie.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024 -
Responzivní design: Proč by ho neměl ignorovat žádný vývojář?
27. listopadu 2023
Nejnovější
-
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 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024