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 interface-t (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 interfész, amely alap lekérdezéseket biztosít esemény interfész, amely segítségével a kliens informálva van, ha a könyvtár bejegyzés megváltozik LDAP kiegészítő, amellyel 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. Jelenleg az 1.2.1-es verzió van érvényben (2012).

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 olyan objektumot is, amely implementálja a Name interfészt, 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éterek az implementációban adhatók meg. 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állí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 Oracle's JNDI page The JNDI Tutorial

Fordítás

Kategória:Java API-k