Java Naming and Directory Interface
Java Naming and Directory Service (JNDI) egy JAVA API amellyel a JAVA kliens név alapján meg tud találni adatot illetve objektumot. Ahogy minden JAVA API ami a host rendszerrel kommunikál a JNDI is az alatta lévő implementációtól függ. Specifikál egy service provider interfacet (SPI) is amellyel a könyvtár szolgáltatások implementációját lehet beültetni a keretrendszerbe. Az implementációtól függően használhat szervert, fájlt vagy adatbázist.
Háttér
JNDI-t a JAVA RMI és a JAVA EE API-k használják, hogy megtaláljanak egy objektumot a hálózaton. A Jininek saját keresési szolgáltatása van így nem használja a JNDI-t.
Az API a következő szolgáltatásokat biztosítja:
- egy objektum névhez kötése
- könyvtár keresési interface amely alap lekérdezéseket biztosít
- esemény interfacet amely segítségével a kliens informálva van ha a könyvtár bejegyzés megváltozik
- LDAP kiegészítő mellyel az esetleges LDAP szolgáltatás képességei vehetők igénybe
Az SPI rész lehetővé teszi gyakorlatilag bármely elnevezési vagy könyvtár szolgáltatás használatát, többek közt:
- LDAP
- DNS
- NIS
- CORBA elnevezési szolgáltatás
- Fájlrendszer
A JNDI első specifikációját a Sun Microsystems adta ki 1997. március 10.-én.
Alapok
A JNDI nevük szerinti hierarchiába rendezi az adatokat. A név bármilyen string lehet, mint például a "com.mydomain.ejb.MyBean". Névként lehet használni egy objektumot is ami implementálja a Name
interfacet, bár a leggyakrabban stringeket használnak. A név hozzá lesz kötve az objektumhoz azáltal, hogy az objektum vagy egy rámutató referencia eltárolásra kerül a szolgáltatásban a megadott név alatt.
A JNDI API definiál egy kontextust ami megadja hol keressük az objektumot. A kezdeti kontextus szolgál kezdőpontként a keresésnek.
A legegyszerűbb esetben egy kezdő kontextus kerül létrehozásra majd extra paramétereket adunk meg az implementációban. A kezdő kontextusban fogja keresni a szolgáltatás a neveket. A kezdő kontextus ekvivalens a fájlrendszer gyökérkönyvtárával.
Példa a kezdő állapot létrehozására:
Hashtable contextArgs = new Hashtable();
// Először egy context factoryt kell létrehozni.
// A következőképpen lehet választani a jboss implementáció
// vagy a Sun és egyéb szálítók implementációi között.
contextArgs.put( Context.INITIAL_CONTEXT_FACTORY, "com.jndiprovider.TheirContextFactory" );
// A következő argumentum az adatbázisra mutató URL
contextArgs.put( Context.PROVIDER_URL, "jndiprovider-database" );
// Kezdő állapot inicializálása
Context myCurrentContext = new InitialContext(contextArgs);
A kontextusban ezután lehet keresni a már bekötött nevek után:
MyBean myBean = (MyBean) myCurrentContext.lookup("com.mydomain.MyBean");
Egy másik változata a fenti kódnak:
A Context
objektumot egy context factory osztály nevét és a szolgáltató URL címét tartalmazó jndi.properties fájl classpath-hoz való hozzáadásával is lehet konfigurálni. A fenti kód az alábbira rövidül:
// Csak a kezdő kontext objektumot kell létrehozni ami megpróbálja beolvasni a jndi.properties-t
// a classpath-ból.
Context myCurrentContext = new InitialContext();
A kontextus ezután használható az előzőleg benne eltárolt nevek keresésére:
MyBean myBean = (MyBean) myCurrentContext.lookup("com.mydomain.MyBean");
Keresés
Az attribútumok a könyvtár nevű speciális bejegyzésekben tárolódnak. A könyvtárak lehetővé teszik objektumok keresését az attribútumaik alapján. A könyvtárak a kontextusok egy típusa; hasonlóképpen korlátozzák a névteret mint ahogy a könyvtárszerkezet a fájlrendszerben.
Hivatkozások
Ez a szócikk részben vagy egészben a Java Naming and Directory Interface című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.