Wie können Sie die Verwendung von JNDI, mit einem Beispiel wenn möglich, realisieren?Was ist der Zweck von JNDI
Antwort
JNDI ist die Java Naming und Directory Interface. Es wird verwendet, um die Bedenken der Anwendung Entwickler und die Anwendung Deployer zu trennen. Wenn Sie eine Anwendung schreiben, die auf einer Datenbank basiert, sollten Sie sich nicht um den Benutzernamen oder das Kennwort für die Verbindung zu dieser Datenbank kümmern müssen. JNDI ermöglicht es dem Entwickler, einer Datenbank einen Namen zu geben und sich auf den Deployer zu verlassen, um diesen Namen einer tatsächlichen Instanz der Datenbank zuzuordnen.
Zum Beispiel, wenn Sie Code schreiben, die in einem Java EE Container ausgeführt wird, können Sie dies schreibe halten, die Datenquelle erhalten mit JNDI-Namen „Datenbank“:
DataSource dataSource = null;
try
{
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("Database");
}
catch (NamingException e)
{
// Couldn't find the data source: give up
}
Hinweis gibt es nichts hier über den Datenbanktreiber oder den Benutzernamen oder das Passwort. Das ist im Container konfiguriert.
JNDI ist nicht auf Datenbanken beschränkt (JDBC); Alle Arten von Dienstleistungen können mit Namen versehen werden. Für weitere Details sollten Sie sich die Sun tutorial zum Thema ansehen.
Also wie unterscheidet sich JNDI von diesem Beispiel in Bild von dem Einfügen von Datenbanknamen in eine XML-Konfigurationsdatei oder eine Eigenschaftendatei und dann Lesen Sie es von dort? – Ajay
Zuerst müssen Sie das Passwort in Klartext in Ihrer Konfigurationsdatei speichern. Zweitens, wenn mehrere Apps auf dieselbe Datenbank verweisen und sich etwas an der Datenbankkonfiguration ändert, müssen Sie die Konfiguration an mehreren Stellen aktualisieren. –
nun, wie hilft JNDI hier? – Ajay
JNDI ist ein sehr leistungsfähiger Mechanismus zum Organisieren von Konfigurationsinformationen und Entdecken und Abhören von Diensten über die EventContext
. In JNDI können Sie irgendein Objekt suchen und hören (nicht nur DataSource
s), vorausgesetzt Ihr JNDI-Dienstanbieter unterstützt es.
Natürlich ist das einzige Problem, einen JNDI-Dienstanbieter tatsächlich zu haben; Das Tolle daran ist, dass es überraschend einfach ist, selbst zu rollen. Schließlich können Sie jede Java-Instanz in XML
mit den JavaBeans XMLEncoder
und XMLDecoder
codieren: Sie müssen nicht darauf angewiesen sein, innerhalb eines Anwendungsservers zu laufen!
Was ist der Unterschied zwischen diesen Konfigurationsdateien? Nun, es kann viel sauberer sein, weil alle Ihre Anwendungen ihre Konfiguration von am gleichen Ort bekommen können. Wenn sie Konfigurationsinformationen (z. B. Datenbankstandorte) teilen müssen, dann kann dies einmal in JNDI definiert werden. Angenommen, Sie haben Datenbankserver verschoben: Sie müssen sich nicht an die unzähligen Konfigurationsdateien mit dem Speicherort erinnern. Sie gehen nur zu dem einen Ort: JNDI.
JNDI ermöglicht die Vereinfachung eines Ressourcenkonstrukts in nur Name. So, es ist viele Details Gruppe in 1 für die Bequemlichkeit/Sicherheit/etc. (Auch bekannt als Abstraktionsschicht)
zu realisieren: setzen eine Eigenschaftsliste auf, die Schnittstelle zu den vordefinierten Feldern in dem JNDI-Kontext entspricht.(Diese Eigenschaften die Einstellungen für die jndi Ausführung angeben, aber * nicht die Suche Name)
Properties props = new Properties();
//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial
//field Context.PROVIDER_URL => property name java.naming.provider.url
props.load(new FileInputStream("*properties file*")); //prop file in this case
Context ctx = new InitialContext(props);
Object o = ctx.lookup("*name of resource*");
ideal, eine spezialisierte Funktion existieren würde ein LDAP-Verzeichnis zu halten, DNS, usw., die in Ihrer Organisation (so eine einheitliche Single Mapping gesetzt Dienste alle, die Verringerung Diskrepanzen)
Liste der JNDI Dienstleister: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm
JNDI ist eine API verwendet, um das Verzeichnis zugreifen und Namensdienste (dh die Mittel, mit denen Namen zugeordnet sind, Objekte). Die Zuordnung eines Namens zu einem Objekt wird Bindung genannt.
Ein grundlegendes Beispiel für einen Namensdienst ist DNS, der Computernamen IP-Adressen zuordnet.
Mithilfe von 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 keine Umgebungsvariablen fest programmiert werden sollen.
Frühling Beispiel:
Frühling Kontextdatei
<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl">
<property name="protocol">
<jee:jndi-lookup jndi-name="java:comp/env/protocol" />
</property>
<property name="endpoint">
<jee:jndi-lookup jndi-name="java:comp/env/endpoint" />
</property>
<property name="requestPath">
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />
</property>
Tomcat Kontextdatei
<Environment name="protocol" type="java.lang.String" value="https://"/>
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/>
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>
- 1. Was ist der Zweck von. * \\?
- 2. Was ist der Zweck von Membership.ValidateUser ist()
- 3. Was ist der Zweck von PDB-Dateien?
- 4. Was ist der Zweck von layout.xml?
- 5. Was ist der Zweck von $ _POST?
- 6. Was ist der Zweck von git-mv?
- 7. Was ist der Zweck von jquery.mobile.structure?
- 8. Was ist der Zweck von character_set_connection?
- 9. Was ist der Zweck von Instanzvariablen?
- 10. Was ist der Zweck von Microsoft.Net.Compilers?
- 11. Was ist der Zweck von: nach?
- 12. Was ist der Zweck von UIWindow?
- 13. Was ist der Zweck von Durandal?
- 14. Was ist der Zweck von javax StreamSource
- 15. Was ist der Zweck von VertexAttribPointer?
- 16. Was ist der Zweck von glClear (GL_DEPTH_BUFFER_BIT)
- 17. Was ist der Zweck von `Data.Proxy`?
- 18. Was ist der Zweck von :: in C#?
- 19. Was ist der Zweck von requestWindowFeature()?
- 20. Was ist der Zweck von Thread.holdsLock (lock)?
- 21. Was ist der Zweck von Objects # requireNonNull
- 22. Was ist der Zweck von Anorms Pk?
- 23. Was ist der Zweck von wmemcpy?
- 24. Was ist der Zweck von features.h Header?
- 25. Was ist der Zweck von IAsyncStateMachine.SetStateMachine?
- 26. Was ist der Zweck von tsconfig.json?
- 27. Was ist der Zweck von __name__?
- 28. Was ist der Zweck von Jasmin-Knoten?
- 29. Was ist der Zweck von .git/log
- 30. Was ist der Zweck von precompiledApp.config?
Sie können für Anwendungsfälle einen persönlichen Blog-Post überprüfen: http : // tshikatshikaaa.blogspot.com/2013/01/what-is-jndi-spi-cci-ldap-and-jca.html – JVerstry
@JVerstry +1 für den Hinweis auf einen Artikel, der über verwandte LDAP, JCA und CCI spricht. – Ajay
Auschecken [dieser SO-Thread] (http://StackOverflow.com/A/21227726/2396539) –