Java Naming and Directory Interface
La Java Naming and Directory Interface (JNDI) que significa Interfície d'Anomenament i Directori de Java, és una API per proveir un servei de directori que permeti la descoberta i el lookup d'objectes a partir d'un nom. Com totes les APIs de Java que accedeixen a altres sistemes a través d'una interfície, JNDI és independent de la implementació sobre la qual corre. A més, especifica una Interfície Proveïdora de Servei (SPI) que permet que les implementacions de serveis de directori siguin endollades a l'entorn. Les implementacions poden fer ús del servidor, un fitxer pla o una base de dades; la tria la fa el venedor.
Bases
[modifica]L'API JNDI és usada per les APIs de RMI i Java EE per encarnar objectes en una xarxa. Jini té el seu propi servei d'encarnació i no usa l'API JNDI.
L'API aporta:
- un mecanisme per enllaçar un objecte i un nom
- una interfície per encarnar el directori, per poder fer queries generals
- una interfície d'event que permet als clients determinar quan les entrades de directori han estat modificades
- extensions LDAP per suportar les capacitats addicionals d'un servei LDAP
La porció SPI permet el suport per pràcticament qualsevol tipus d'anomenament o servei de directori, incloent-hi:
L'especificació JNDI va ser llençada per primer cop per Sun Microsystems el 10 de març de 1997. Des de 2006, l'actual versió és JNDI 1.2.
Lookup bàsic
[modifica]JNDI organitza els seus noms en una jerarquia. Un nom pot ser qualsevol string com ara "com.domini.ejb.ElBean". Un nom també pot ser un objecte que suporta la interfície Name
, malgrat que un string és la forma més comuna d'anomenar un objecte. Un nom està enllaçat a un objecte del directori emmagatzemant o l'objecte o una referència a l'objecte al servei de directoi identificada pel seu nom.
L'API JNDI defineix un context que especifica on fer el lookup d'un objecte. El context inicial és usat típicament com un punt de partida.
En el cas més simple, un context inicial ha de ser creat usant la implemntació específica i els paràmetres exrra requerits per la implementació. El context inicial serà usat per fer el lookup d'un nom. El context inicial és anàleg al de l'arrel o el cap d'amunt d'un arbre de directoris d'un sistema de fitxers. El de sota és un exemple de creació d'un context inicial:
Hashtable args = new Hashtable();
//Primer cal especificar el context factory.
//Així és com es tria entre implementació JBoss
// o una implementació de Sun o altres fabricants.
args.put(Context.INITIAL_CONTEXT_FACTORY, "com.jndiprovider.UnContextFactory");
//L'argument següent és la URL que especifica on és emmagatzemada la dada:
args.put(Context.PROVIDER_URL, "jndiprovider-database");
//També caldrà indicar les credencials de seguretat
//en acabat es crea el context inicial
Context contextActual = new InitialContext(args);
Un context és usat llavors per fer lookup de noms prèviament enllaçats al context. Per exemple:
Object referencia = contextActual·lookup("com.domini.ElBean");
//aquest pas cal per beans EJB
ElBean unBean = (ElBean) PortableRemoteObject.narrow(referencia, ElBean.class);
Cerca
[modifica]Els atributs poden ser adjuntats per entrades especials anomenades directoris. Els directoris calen per poder habilitar cerques d'objectes pels seus atributs associats. Els directoris són un tipus de context, restringeixen l'espai de noms prou semblant a com ho fa una estructura de directori sobre un sistema de fitxers.