JNDI ist die Java-Namens- und Verzeichnisschnittstelle. Es wird verwendet , um die Anliegen der Anwendung zu trennen Entwickler und die Anwendung deployer . Wenn Sie eine Anwendung schreiben, die auf einer Datenbank basiert, sollten Sie sich keine Gedanken über den Benutzernamen oder das Kennwort machen müssen, um eine Verbindung zu dieser Datenbank herzustellen. Mit JNDI kann der Entwickler einer Datenbank einen Namen geben und sich darauf verlassen, dass der Bereitsteller diesen Namen einer tatsächlichen Instanz der Datenbank zuordnet.
Wenn Sie beispielsweise Code schreiben, der in einem Java EE-Container ausgeführt wird, können Sie diesen schreiben, um die Datenquelle mit dem JNDI-Namen "Database" abzurufen:
DataSource dataSource =null;try{Context context =newInitialContext();
dataSource =(DataSource) context.lookup("Database");}catch(NamingException e){// Couldn't find the data source: give up}
Beachten Sie, dass hier nichts über den Datenbanktreiber, den Benutzernamen oder das Kennwort steht. Das ist im Container konfiguriert.
JNDI ist nicht auf Datenbanken (JDBC) beschränkt. Alle Arten von Diensten können benannt werden. Weitere Informationen finden Sie im Oracle- Tutorial .
Wie unterscheidet sich JNDI in diesem Beispiel im Bild davon, Datenbanknamen in eine XML-Konfigurationsdatei oder eine Eigenschaftendatei zu setzen und von dort aus zu lesen?
Ajay
11
Zunächst müssten Sie das Kennwort in Ihrer Konfigurationsdatei im Klartext speichern. Zweitens müssen Sie die Konfiguration an mehreren Stellen aktualisieren, wenn mehrere Apps auf dieselbe Datenbank verweisen und sich etwas an der Datenbankkonfiguration ändert.
@ SimonNickerson Hi!. Ich lerne etwas über JNDI. Dies ist eine gute Antwort, aber wenn Sie die Frage "Wie können Sie die Verwendung von JNDI realisieren?" Bemerken. dann sieht es unvollendet aus. Sie haben die Realisierung aus Sicht des Entwicklers beschrieben. Wie wäre es mit der Perspektive des Bereitstellers?
lxknvlk
30
JNDI ist ein sehr leistungsfähiger Mechanismus zum Organisieren von Konfigurationsinformationen sowie zum Erkennen und Abhören von Diensten mithilfe von EventContext. In JNDI können Sie jedes Objekt (nicht nur DataSources) suchen und anhören , vorausgesetzt, Ihr JNDI-Dienstanbieter unterstützt es.
Das einzige Problem ist natürlich, einen JNDI-Dienstanbieter zu haben. Das Tolle daran ist, dass es überraschend einfach ist, seine eigenen zu rollen. Schließlich können Sie kodieren jede Java - Instanz in XMLVerwendung der Java Beans XMLEncoderund XMLDecoder: Sie müssen nicht auf Lauf innerhalb eines Anwendungsservers verlassen!
Was ist der Unterschied zwischen Konfigurationsdateien? Nun, es kann viel sauberer sein, da alle Ihre Anwendungen ihre Konfiguration vom selben Ort erhalten können . Wenn sie Konfigurationsinformationen (z. B. Datenbankspeicherorte) gemeinsam nutzen müssen, kann dies einmal in JNDI definiert werden . Angenommen, Sie haben Datenbankserver verschoben: Sie müssen sich nicht die Millionen Konfigurationsdateien mit dem Speicherort darin merken. Sie gehen einfach zu dem einen Ort: JNDI.
Dies ist bei weitem die rundeste Klarstellung - Danke oxbow_lakes! Übrigens, hätten Sie Codezeiger, in denen eine Java-Instanz wie vorgeschlagen codiert wurde?
Rohan Kumar
13
JNDI ist eine API, die für den Zugriff auf die Verzeichnis- und Namensdienste verwendet wird (dh die Mittel, mit denen Namen Objekten zugeordnet werden). Die Zuordnung eines Namens zu einem Objekt wird als Bindung bezeichnet.
Ein grundlegendes Beispiel für einen Namensdienst ist DNS, das Computernamen IP-Adressen zuordnet.
Mit JNDI können Anwendungen benannte Java-Objekte eines beliebigen Typs speichern und abrufen.
Im Kontext von Java kann dies in Konfigurationsdateien verwendet werden, in denen Sie keine umgebungsspezifischen Variablen fest codieren möchten.
JNDI ermöglicht die Vereinfachung eines Ressourcenkonstrukts in nur einen Namen . Aus Gründen der Bequemlichkeit / Sicherheit / etc. Sind viele Details zu einer Gruppe zusammengefasst . (auch bekannt als Abstraktionsschicht)
zu realisieren:
Richten Sie eine Eigenschaftsliste ein, die den vordefinierten Feldern in der Jndi-Kontextschnittstelle entspricht. (Diese Eigenschaften geben die Einstellungen für die JNDI-Ausführung an, * jedoch nicht den Suchnamen.)
Properties props =newProperties();//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial//field Context.PROVIDER_URL => property name java.naming.provider.url
props.load(newFileInputStream("*properties file*"));//prop file in this caseContext ctx =newInitialContext(props);Object o = ctx.lookup("*name of resource*");
Im Idealfall gibt es eine spezielle Funktion zum Verwalten eines LDAP-Verzeichnisses, von DNS usw. in Ihrer Organisation (ein einheitlicher einzelner Zuordnungssatz bietet also alle Dienste, wodurch Diskrepanzen verringert werden).
Antworten:
JNDI ist die Java-Namens- und Verzeichnisschnittstelle. Es wird verwendet , um die Anliegen der Anwendung zu trennen Entwickler und die Anwendung deployer . Wenn Sie eine Anwendung schreiben, die auf einer Datenbank basiert, sollten Sie sich keine Gedanken über den Benutzernamen oder das Kennwort machen müssen, um eine Verbindung zu dieser Datenbank herzustellen. Mit JNDI kann der Entwickler einer Datenbank einen Namen geben und sich darauf verlassen, dass der Bereitsteller diesen Namen einer tatsächlichen Instanz der Datenbank zuordnet.
Wenn Sie beispielsweise Code schreiben, der in einem Java EE-Container ausgeführt wird, können Sie diesen schreiben, um die Datenquelle mit dem JNDI-Namen "Database" abzurufen:
Beachten Sie, dass hier nichts über den Datenbanktreiber, den Benutzernamen oder das Kennwort steht. Das ist im Container konfiguriert.
JNDI ist nicht auf Datenbanken (JDBC) beschränkt. Alle Arten von Diensten können benannt werden. Weitere Informationen finden Sie im Oracle- Tutorial .
quelle
JNDI ist ein sehr leistungsfähiger Mechanismus zum Organisieren von Konfigurationsinformationen sowie zum Erkennen und Abhören von Diensten mithilfe von
EventContext
. In JNDI können Sie jedes Objekt (nicht nurDataSource
s) suchen und anhören , vorausgesetzt, Ihr JNDI-Dienstanbieter unterstützt es.Das einzige Problem ist natürlich, einen JNDI-Dienstanbieter zu haben. Das Tolle daran ist, dass es überraschend einfach ist, seine eigenen zu rollen. Schließlich können Sie kodieren jede Java - Instanz in
XML
Verwendung der Java BeansXMLEncoder
undXMLDecoder
: Sie müssen nicht auf Lauf innerhalb eines Anwendungsservers verlassen!Was ist der Unterschied zwischen Konfigurationsdateien? Nun, es kann viel sauberer sein, da alle Ihre Anwendungen ihre Konfiguration vom selben Ort erhalten können . Wenn sie Konfigurationsinformationen (z. B. Datenbankspeicherorte) gemeinsam nutzen müssen, kann dies einmal in JNDI definiert werden . Angenommen, Sie haben Datenbankserver verschoben: Sie müssen sich nicht die Millionen Konfigurationsdateien mit dem Speicherort darin merken. Sie gehen einfach zu dem einen Ort: JNDI.
quelle
JNDI ist eine API, die für den Zugriff auf die Verzeichnis- und Namensdienste verwendet wird (dh die Mittel, mit denen Namen Objekten zugeordnet werden). Die Zuordnung eines Namens zu einem Objekt wird als Bindung bezeichnet.
Ein grundlegendes Beispiel für einen Namensdienst ist DNS, das Computernamen IP-Adressen zuordnet.
Mit JNDI können Anwendungen benannte Java-Objekte eines beliebigen Typs speichern und abrufen.
Im Kontext von Java kann dies in Konfigurationsdateien verwendet werden, in denen Sie keine umgebungsspezifischen Variablen fest codieren möchten.
Frühlingsbeispiel:
Spring-Kontextdatei
Tomcat-Kontextdatei
quelle
JNDI ermöglicht die Vereinfachung eines Ressourcenkonstrukts in nur einen Namen . Aus Gründen der Bequemlichkeit / Sicherheit / etc. Sind viele Details zu einer Gruppe zusammengefasst . (auch bekannt als Abstraktionsschicht)
zu realisieren: Richten Sie eine Eigenschaftsliste ein, die den vordefinierten Feldern in der Jndi-Kontextschnittstelle entspricht. (Diese Eigenschaften geben die Einstellungen für die JNDI-Ausführung an, * jedoch nicht den Suchnamen.)
Im Idealfall gibt es eine spezielle Funktion zum Verwalten eines LDAP-Verzeichnisses, von DNS usw. in Ihrer Organisation (ein einheitlicher einzelner Zuordnungssatz bietet also alle Dienste, wodurch Diskrepanzen verringert werden).
Liste der JNDI-Dienstanbieter: https://www.ibm.com/support/knowledgecenter/de/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm
quelle