Zum Inhalt springen

Java Naming and Directory Interface

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 16. August 2009 um 19:17 Uhr durch Sebastian.Dietrich (Diskussion | Beiträge) (JNDI Lookup). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Java Naming and Directory Interface (JNDI) ist eine Programmierschnittstelle (API) innerhalb der Programmiersprache Java für Namensdienste und Verzeichnisdienste. Mit Hilfe dieser Schnittstelle können Daten und Objektreferenzen anhand eines Namens abgelegt und von Nutzern der Schnittstelle abgerufen werden.

Die Schnittstelle ist dabei unabhängig von der tatsächlichen Implementierung. Vielmehr ist JNDI ein sogenanntes Service Provider Interface (SPI), das Herstellern erlaubt, eigene Lösungen in dieses Framework einzubinden.

In der Praxis wird JNDI vor allem dazu benutzt, im Rahmen von Java-Enterprise-Anwendungen (Java-EE-Anwendungen) verteilte Objekte in einem Netzwerk zu registrieren und sie für Remote-Aufrufe (RMI) weiteren Java-Programmteilen zur Verfügung zu stellen.

Die API enthält:

  • einen Mechanismus zur Bindung eines Objekts an einen Namen
  • Methoden für den Abruf von Informationen anhand eines Namens
  • ein Ereigniskonzept, über das Clients von Änderungen informiert werden
  • spezielle Erweiterungen für LDAP-Funktionalitäten

JNDI erlaubt die Unterstützung praktisch aller Arten von Namens- und Verzeichnisdiensten, insbesondere von:

JNDI Lookup

In JNDI werden die Namen hierarchisch angeordnet. Namen sind üblicherweise Strings wie "com.mydomain.MyBean", können aber auch beliebige Objekte sein, die das Interface Name implementieren. Im Namens- bzw. Verzeichnisdienst sind den Namen Objekte zugeordnet, entweder indem das Objekt selbst gespeichert ist, oder eine JNDI Referenz auf das Objekt. Die JNDI API definiert wo nach dem Objekt zu suchen ist. Der initiale Kontext ist dafür üblicherweise der Startpunkt.

Im einfachsten Fall genügt ein initialer Kontext um nach einem Namen zu suchen:

Hashtable args = new Hashtable();

//zunächst muss die Kontext-Factory und somit die
//Implementierung des JNDI-Providers definiert werden:
args.put( Context.INITIAL_CONTEXT_FACTORY, "com.jndiprovider.TheirContextFactory" );

//dann die URL, die definiert wo die Daten zu finden sind:
args.put( Context.PROVIDER_URL, "jndiprovider-database" );

//damit bekommt man im einfachsten Fall den initialen Kontext:
Context myCurrentContext = new InitialContext( args );

//mit Hilfe dieses Kontext kann man dann Objekte,
//die zuvor an den Kontext gebunden wurden, finden:
Object reference = myCurrentContext.lookup( "com.mydomain.MyBean" );