Che cos'è JNDI ?
Qual è il suo uso di base?
Quando viene usato?
Che cos'è JNDI ?
Qual è il suo uso di base?
Quando viene usato?
Risposte:
Che cos'è JNDI?
Sta per Java Naming and Directory Interface .
Qual è il suo uso di base?
JNDI consente alle applicazioni distribuite di cercare servizi in modo astratto, indipendente dalle risorse.
Quando viene utilizzato?
Il caso d'uso più comune è impostare un pool di connessioni al database su un server delle applicazioni Java EE. Qualsiasi applicazione distribuita su quel server può ottenere l'accesso alle connessioni necessarie utilizzando il nome JNDI java:comp/env/FooBarPool
senza dover conoscere i dettagli sulla connessione.
Questo ha diversi vantaggi:
devl->int->test->prod
ambienti, è possibile utilizzare lo stesso nome JNDI in ciascun ambiente e nascondere il database effettivo utilizzato. Le applicazioni non devono cambiare mentre migrano da un ambiente all'altro.Che cos'è JNDI?
Java Naming and Directory Interface TM (JNDI) è un'API (Application Programming Interface) che fornisce funzionalità di denominazione e directory alle applicazioni scritte utilizzando il linguaggio di programmazione Java TM . È definito come indipendente da qualsiasi implementazione specifica del servizio di directory. In questo modo è possibile accedere a una varietà di directory (nuove, emergenti e già distribuite) in modo comune.
Qual è il suo uso di base?
La maggior parte è trattata nella risposta sopra, ma vorrei fornire qui un'architettura in modo che sopra abbia più senso.
Per utilizzare JNDI, è necessario disporre delle classi JNDI e di uno o più fornitori di servizi. Java 2 SDK, v1.3 include tre provider di servizi per i seguenti servizi di denominazione / directory:
Quindi, fondamentalmente, crei oggetti e li registri sui servizi di directory che puoi successivamente cercare ed eseguire operazioni.
JNDI in parole povere è fondamentalmente un'interfaccia per essere in grado di ottenere istanze di risorse interne / esterne come
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
o qualsiasi altro tipo definito da un adattatore di risorse JCA. Fornisce una sintassi per poter creare l'accesso sia interno che esterno. cioè (comp / env in questo caso significa dove componente / ambiente, ci sono molte altre sintassi):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
per le informazioni di configurazione.
Panoramica di JNDI
JNDI è un'API specificata nella tecnologia Java che fornisce funzionalità di denominazione e directory alle applicazioni scritte nel linguaggio di programmazione Java. È progettato appositamente per la piattaforma Java utilizzando il modello a oggetti di Java. Utilizzando JNDI, le applicazioni basate sulla tecnologia Java possono archiviare e recuperare oggetti Java di qualsiasi tipo. Inoltre, JNDI fornisce metodi per eseguire operazioni di directory standard, come associare attributi con oggetti e cercare oggetti usando i loro attributi.
JNDI è anche definito indipendentemente da qualsiasi specifica denominazione o implementazione del servizio di directory. Consente alle applicazioni di accedere a servizi di denominazione e directory diversi, possibilmente multipli, utilizzando un'API comune. Diversi fornitori di servizi di denominazione e directory possono essere collegati senza soluzione di continuità dietro questa API comune. Ciò consente alle applicazioni basate sulla tecnologia Java di sfruttare le informazioni in una varietà di servizi di denominazione e directory esistenti, come LDAP, NDS, DNS e NIS (YP), oltre a consentire alle applicazioni di coesistere con software e sistemi legacy.
Utilizzando JNDI come strumento, è possibile creare nuove applicazioni potenti e portatili che non solo sfruttano il modello a oggetti di Java, ma sono anche ben integrate con l'ambiente in cui vengono distribuite.
Che cos'è JNDI?
JNDI è l'acronimo di Java Naming and Directory Interface. Viene fornito di serie con J2EE.
Qual è il suo uso di base?
Con questa API, puoi accedere a molti tipi di dati, come oggetti, dispositivi, file di denominazione e servizi di directory, ad es. viene utilizzato da EJB per trovare oggetti remoti. JNDI è progettato per fornire un'interfaccia comune per accedere a servizi esistenti come DNS, NDS, LDAP, CORBA e RMI.
Quando viene utilizzato?
È possibile utilizzare JNDI per eseguire operazioni di denominazione, incluse operazioni di lettura e operazioni per l'aggiornamento dello spazio dei nomi. Le seguenti operazioni sono descritte qui .
Un servizio di denominazione associa i nomi agli oggetti e trova gli oggetti in base ai loro nomi (il registro RMI è un buon esempio di servizio di denominazione). JNDI fornisce un'interfaccia comune a molti servizi di denominazione esistenti, come LDAP, DNS.
Senza JNDI, la posizione o le informazioni di accesso delle risorse remote dovrebbero essere codificate nelle applicazioni o rese disponibili in una configurazione. Il mantenimento di queste informazioni è piuttosto noioso e soggetto a errori.
Sono solo curioso di sapere perché i documenti ufficiali sono così ignorati che elaborano meticolosamente i dettagli.
Ma se desideri comprendere i casi, fai riferimento alla risposta di Duffymo .
Java Naming and Directory Interface TM (JNDI) è un'API (Application Programming Interface) che fornisce funzionalità di denominazione e directory alle applicazioni scritte utilizzando il linguaggio di programmazione Java TM . È definito come indipendente da qualsiasi implementazione specifica del servizio di directory. Pertanto, è possibile accedere a una varietà di directory - nuove, emergenti e già distribuite - in modo comune.
E la sua architettura
E normalmente come lo usi .
I am just curious why the official docs are so ignored which elaborate the details meticulously already
Forse perché non spiegano in modo sufficiente che le persone normali possono capire?
Userò un esempio per spiegare come JNDI può essere usato per configurare il database senza che nessuno sviluppatore di applicazioni conosca nome utente e password del database.
1) Abbiamo configurato l'origine dati in standalone-full.xml del server JBoss . Inoltre, possiamo configurare anche i dettagli del pool.
<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>
Ora, questo nome jndi e l'oggetto origine dati associato saranno disponibili per la nostra applicazione.applicazione.
2) È possibile recuperare questo oggetto origine dati utilizzando la classe JndiDataSourceLookup.
Spring istanzerà il bean di origine dati, dopo aver fornito il nome jndi.
Ora, possiamo modificare le dimensioni del pool, il nome utente o la password in base al nostro ambiente o ai requisiti, ma ciò non influirà sull'applicazione.
Nota :cryptedSecurityDomain, dobbiamo configurarlo separatamente nel server JBoss come
<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>
Questo è uno dei casi d'uso. Spero che chiarisca.
La migliore spiegazione per me è data qui
Cos'è JNDI
È un'API per fornire l'accesso a un servizio di directory, ovvero un nome di mapping del servizio (stringhe) con oggetti, riferimento a oggetti remoti o dati semplici . Questo si chiama legame. L'insieme di associazioni è chiamato contesto . Le applicazioni utilizzano l'interfaccia JNDI per accedere alle risorse.
Per dirla in parole povere, è come una hashmap con una chiave String e valori Object che rappresentano risorse sul web.
Quali problemi risolve JNDI
Senza JNDI, la posizione o le informazioni di accesso delle risorse remote dovrebbero essere codificate nelle applicazioni o rese disponibili in una configurazione. Il mantenimento di queste informazioni è piuttosto noioso e soggetto a errori.
Se una risorsa è stata trasferita su un altro server, con un altro indirizzo IP, ad esempio, tutte le applicazioni che utilizzano questa risorsa dovrebbero essere aggiornate con queste nuove informazioni. Con JNDI, questo non è necessario. È necessario aggiornare solo l'associazione delle risorse corrispondente. Le applicazioni possono ancora accedervi con il suo nome e il trasferimento è trasparente.