JNDI im Griff Teil 1 – JNDI und die Grundlagen von Namens- und Verzeichnisdiensten

Featured

JNDI im Griff Teil 1 – JNDI und die Grundlagen von Namens- und Verzeichnisdiensten

JNDI im Griff Teil 1 – JNDI und die Grundlagen von Namens- und Verzeichnisdiensten

Das Java Naming and Directory Interface ist ein Teil der Java Spezifikation welcher Java Basierten Applikationen eine einheitliche Schnittstelle zu verscheidenen Verzeichnisdiensten bereitstellt.

Was ist Namensdienst?

Ein fundamentaler Bestandteil eines jeden Computersystems sind sogenannte naming services. Diese beantworte die Frage, welche Bezeichnungen mit welchen Objekten verbunden sind. Ein Objekt ist in diesem Zusammenhang entweder ein Objekt aus dem wahren Leben (z.B. ein Mensch oder ein Baum), oder ein Objekt im Sinne der objektorientierten Programmierung. Nahezu jedes Computerprogramm macht solche Zuordnungen. Ein Paar Beispiele:

  • Mailadresse zu Mailaccount
  • Domain zu IP-Adresse
  • Nutzer zu Berechtigung
  • Dateiname zu Dateieinhalt
  • usw.

Der Haupteinsatzzweck liegt also in der Bereitstellung eines Menschenlesbaren Namens zu einem Objekt. Um in einem Naming-Service ein Objekt zu finden übergibt man diesem in der Regel den Namen des Objekts. Dabei definiert der Naming-Service die Syntax, der diese Namen folgen  müssen. Diese Syntax bezeichnet man auch als naming-convention.

Die Kopplung eines Namens an ein Objekt bezeichnet man als binding. Mehrfachzuordnungen sind dabei durchaus Möglich. Ein Objekt kann also mehrere Namen haben. Namen hingegen sind eindeutig. Ein anderes Vorgehen würde die Zuordnung gefährden.

Jetzt wird es etwas abstrakter. Je nach Art des Verzeichnisdienstes können Objekte nicht direkt gespeichert werden, sondern nur der Verweis (reference) darauf. Eine Flugbuchung beispielsweise enthält eine Referenz auf meine Person.

Eine Sammlung von Namens-Objektzuordnungen bezeichnet man als Context. Beispielsweise ist der Verzeichnisname c: der Context für alle Unterverzeichnisse und Dateien die sich innerhalb des Dateisystems befinden. Ein Unterverzeichnis selbst, wie c:dokumente bezeichnet man als SubContext von c:. Übertragen auf das DNS-System bezeichnet in der Adresse buildblog.de das de den Context. buildblog ist dann der SubContext von de.

In diesem Zusammenhang ist noch der Begriff naming-system einzuführen. Ein naming-system ist eine zusammenhängende Sammlung von Contexten die der gleichen Namensreglementierung folgen. Das DNS System ist also ein naming-system. Auch wenn das NS im Namen eigentlich für name-service steht. In jedem naming-system gibt es mindestens einen namespace (dt. Namensraum). Im Falle von DNS ist der Namensraum die Menge aller möglichen Domainnamen.

 

Was ist ein Verzeichnisdienst?

Wikipedia formuliert es wie folgt:

“Ein Verzeichnisdienst (englisch directory service) stellt in einem Netzwerk eine zentrale Sammlung an Daten bestimmter Art zur Verfügung. Die in einer hierarchischen Datenbank gespeicherten Daten können nach dem Client-Server-Prinzip verglichen, gesucht, erstellt, modifiziert und gelöscht werden.”

Im wesentlichen handelt es sich bei Verzeichnisdiensten um eine Erweiterung der meisten Namensdienste. Die Erweiterung besteht hier in zwei Dingen:

  • der Bereitstellung von zusätzlichen Attributen, nach denen gesucht werden kann
  • hierarchischer Aufbau

In der Regel werden Verzeichnisdienste für die zentrale Verwaltung von Benutzerdaten, Daten über Server, Netzwerke und ihre Dienste verwendet. Die Hierarchie ist hierbei der wichtigste Aspekt. Das Bereistellen mehrerer Authentifizierungssysteme (für jede Applikation einen) stellt in der Regel einen Arbeitsaufwand dar, den man sich lieber ersparen möchte. 

Auch im Falle von Verzeichnisdiensten gibt es wieder eine eigene Terminologie:

Ein directory object repräsentiert ein Objekt im Sinne der Informatik. Es kann beispielsweise für die Repräsentation einer Person, eines Computer, eines Druckers, etc. verwendet werden. Innerhalb des direcotry objects sind i.d.R. Attribute enthalten, die das repräsentierte Objekt näher beschreiben.

Ein Objekt, dass einen Drucker repräsentiert könnte z.B. die Attribute Auflösung, Geschwindigkeit, Farbgenauigkeit, Papierkapazität und weitere enthalten. Ein Attribut besteht immer aus einem attribute identifier und mehreren möglichen attribute values. Der attribute identifier Identifiziert ein Objekt unabhängig vom Attributwert. Ein Beispiel zur Verdeutlichung: Mehrere, einen Nutzer repräsentierende Objekte, können ein Attribut namens “mail” haben. “mail” ist dabei der attribute identifier. Der jeweilige Wert von Mail ist das attribute value.

Wir nähern uns etwas der vollständigen Verwirrung an. Ein directory (Vorsicht: oben haben wir von directory object gesprochen. Das ist etwas anderes!) ist eine Sammlung von directory objects. Im übertragenden Sinne: Das Verzeichnis, dass die Datei beinhaltet.

Ein directory service ist ein Dienst der die Operationen zum Erstellen, Hinzufügen, Ändern und Bearbeiten von Attributen eines innerhalb des directories befindlichen directory objects bereitstellt.

Übelicherweise wird ein directory object gefunden indem man seinen Namen an den directory service übergibt. Das Suchen bezeichnet man in diesem Falle als lookup. Nahzu jeder Verzeichnisdienst bietet die Möglichkeit nach einem oder mehreren Attributen zu suchen. Hierbei handelt es sich um den search filter.

 JNDI stellt Methoden mit Standard-Verzeichnisoperationen bereit (lesen, schreiben, löschen, hinzufügen von Attributen zu Objekten und die Suche nach Objekten auf Basis dieser Attribute). Darüber hinaus definiert es eine einheitliche Schnittstelle für den Zugriff auf verschiedene Verzeichnisdienste, wovon es eine Menge gibt.

Java Applikationen bieten mithilfe von JNDI zwei Möglichkeiten an mit Namens und Verzeichnisdiensten zu Arbeiten. Einmal auf traditionellem Wege. Traditionell bedeutet in diesem Zusammenhang auf tatsächlich existierende Verzeichnisdienste (Dateisystem, Mail, etc.) zuzugreifen. Die zweite Möglichkeit, jene von der diese Artikelserie handelt, besteht darin das directory als einen Speicherort und eine Organisationform für die Ablage von Objekten zu verwenden.

Dazu mehr im nächsten Teil.

Diskussion

2 Kommentare zu “JNDI im Griff Teil 1 – JNDI und die Grundlagen von Namens- und Verzeichnisdiensten”

  1. Die Beschreibung haette ich vor ‘nem Jahr gut gebrauchen koennen, als ich meine Tomcat Webapplication an unser LDAP bzw. DSEE koppeln musste :-)
    Freue mich auf den 2ten Teil.

    Posted by Juergen | Januar 23, 2009, 10:24
  2. [...] meinen heiligen Eid, dass ich jeden Tag mindestens einen anständigen Beitrag schreibe. Wie bereits hier, hier, hier, hier und hier gesehen gelingt mir das sogar etwas 100km Luftlinie von Königsberg [...]

    Posted by buildblog | Arbeitsunfähigkeitsbescheinigung | Januar 28, 2009, 00:00

Post a comment