-
Was ist JNDI ?
-
Wozu dient er grundsätzlich?
-
Wann wird sie eingesetzt?
Antworten
Zu viele Anzeigen?Anhand eines Beispiels möchte ich erklären, wie JNDI zur Konfiguration von Datenbanken verwendet werden kann, ohne dass ein Anwendungsentwickler den Benutzernamen und das Passwort der Datenbank kennt.
1) Wir haben die Datenquelle in den JBoss Server's konfiguriert standalone-full.xml . Zusätzlich können wir auch Details zum Pool konfigurieren.
<datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
<connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>
<security>
<user-name>usname</user-name>
<password>pass</password>
</security>
<security>
<security-domain>encryptedSecurityDomain</security-domain>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</pool>
</statement>
</datasource>
Nun stehen dieser jndi-Name und das zugehörige Datenquellenobjekt für unsere application.application zur Verfügung.
2) Wir können dieses Datenquellenobjekt mit der Klasse JndiDataSourceLookup abrufen.
Spring wird die Datenquellen-Bean instanziieren, nachdem wir den Jndi-Namen angegeben haben.
Jetzt können wir die Größe des Pools, den Benutzernamen oder das Kennwort je nach Umgebung oder Anforderung ändern, aber das hat keine Auswirkungen auf die Anwendung.
備考 : encryptedSecurityDomain müssen wir im JBoss-Server separat konfigurieren, z. B.
<security-domain name="encryptedSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="<usernamefordb>"/>
<module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
</login-module>
</authentication>
</security-domain>
Dies ist einer der Anwendungsfälle. Ich hoffe, es ist klarer.
Die beste Erklärung für mich ist die folgende aquí
Was ist JNDI?
Es handelt sich um eine API für den Zugang zu einem Verzeichnisdienst, d. h. einem Dienstabbildungsname (Strings) mit Objekten, Verweis auf entfernte Objekte oder einfache Daten . Dies wird als Bindung. Die Menge der Bindungen wird als Kontext bezeichnet . Anwendungen verwenden die JNDI-Schnittstelle für den Zugriff auf Ressourcen.
Vereinfacht ausgedrückt handelt es sich um eine Hash-Map mit einem String-Schlüssel und Objektwerten, die Ressourcen im Web darstellen.
Welche Probleme werden mit JNDI gelöst?
Ohne JNDI müssten die Standort- oder Zugriffsinformationen von Remote-Ressourcen in Anwendungen hart kodiert oder in einer Konfiguration verfügbar gemacht werden. Die Pflege dieser Informationen ist recht mühsam und fehleranfällig.
Wenn eine Ressource beispielsweise auf einen anderen Server mit einer anderen IP-Adresse verlagert wurde, müssten alle Anwendungen, die diese Ressource verwenden, mit diesen neuen Informationen aktualisiert werden. Mit JNDI ist dies nicht notwendig. Lediglich die entsprechende Ressourcenbindung muss aktualisiert werden. Die Anwendungen können weiterhin mit dem Namen auf die Ressource zugreifen, und die Verlagerung ist transparent.
Ein Namensdienst ordnet Objekten Namen zu und findet Objekte anhand ihrer Namen (die RMI-Registrierung ist ein gutes Beispiel für einen Namensdienst). JNDI bietet eine gemeinsame Schnittstelle zu vielen bestehenden Namensdiensten, wie LDAP und DNS.
Ohne JNDI müssten die Standort- oder Zugriffsinformationen von Remote-Ressourcen in Anwendungen hart kodiert oder in einer Konfiguration verfügbar gemacht werden. Die Pflege dieser Informationen ist recht mühsam und fehleranfällig.
Ich bin nur neugierig, warum die offizielle Dokumente werden so ignoriert, die die Details bereits minutiös ausarbeiten.
Aber wenn Sie die Fälle verstehen wollen, lesen Sie bitte duffymo's Antwort .
Die Java-Schnittstelle für Namen und Verzeichnisse TM (JNDI) ist eine Anwendungsprogrammierschnittstelle (API), die Namens- und Verzeichnisfunktionen für Anwendungen bietet, die mit der Java TM Programmiersprache. Sie ist so definiert, dass sie unabhängig von einer bestimmten Verzeichnisdienstimplementierung ist. So kann auf eine Vielzahl von Verzeichnissen - neue, aufkommende und bereits eingesetzte - auf eine gemeinsame Weise zugegriffen werden.
Und seine Architektur
Und normalerweise wie Sie es verwenden .
Das Java Naming and Directory InterfaceTM (JNDI) ist eine Anwendungsprogrammierschnittstelle (API), die Anwendungen, die mit der Programmiersprache JavaTM geschrieben wurden, Namens- und Verzeichnisfunktionen zur Verfügung stellt. Sie ist so definiert, dass sie unabhängig von einer bestimmten Verzeichnisdienstimplementierung ist. Auf diese Weise kann auf eine Vielzahl von Verzeichnissen - neue, aufkommende und bereits eingesetzte - auf eine gemeinsame Weise zugegriffen werden.
Während JNDI in leichtgewichtigen, containerisierten Java-Anwendungen wie Spring Boot eine geringere Rolle spielt, gibt es andere Verwendungsmöglichkeiten. Drei Java-Technologien, die immer noch JNDI verwenden, sind JDBC, EJB und JMS. Alle haben eine breite Palette von Verwendungen in Java-Unternehmensanwendungen.
So kann beispielsweise ein separates DevOps-Team Umgebungsvariablen wie Benutzername und Kennwort für eine sensible Datenbankverbindung in allen Umgebungen verwalten. Eine JNDI-Ressource kann im Webanwendungscontainer erstellt werden, wobei JNDI als konsistente Abstraktionsebene verwendet wird, die in allen Umgebungen funktioniert.
Auf diese Weise können Entwickler eine lokale Definition für Entwicklungszwecke erstellen und kontrollieren, während sie über denselben JNDI-Namen eine Verbindung zu sensiblen Ressourcen in einer Produktionsumgebung herstellen.
Hinweis : https://docs.oracle.com/javase/tutorial/jndi/overview/index.html
- See previous answers
- Weitere Antworten anzeigen