Utilizzo di JNDI per richiamare oggetti gestiti in un'applicazione JMS o Jakarta Messaging

Per richiamare gli oggetti gestiti da uno spazio dei nomi JNDI ( Java Naming and Directory Interface), un'applicazione JMS o Jakarta Messaging deve creare un contesto iniziale e utilizzare il metodo lookup () per richiamare gli oggetti.

Prima che un'applicazione possa richiamare gli oggetti gestiti da uno spazio nomi JNDI, un amministratore deve prima creare gli oggetti gestiti.

[ JMS 2.0]PerJMS 2.0 , l'amministratore può utilizzare il fileIBM® MQJMS strumento di amministrazione,JMSAmin , OIBM MQ Explorer per creare e mantenere oggetti amministrati in uno spazio dei nomi JNDI. Per ulteriori informazioni, consultare Configurazione di factory di connessione e destinazioni in uno spazio dei nomi JNDI.

[ Jakarta Messaggistica 3.0]PerJakarta Messaging 3.0 , non è possibile amministrare JNDI utilizzandoIBM MQ Explorer . L'amministrazione JNDI è supportata daJakarta Messaging 3.0 variante diJMSAdmin , che èJMS30Admin .

Un server delle applicazioni, generalmente fornisce il proprio repository per gli oggetti gestiti e i propri strumenti per la creazione e la gestione degli oggetti.

Per richiamare gli oggetti gestiti da un namespace JNDI, un'applicazione deve prima creare un contesto iniziale, come mostrato nel seguente esempio:

[ Jakarta Messaggistica 3.0]

import jakarta.jms.*;
import javax.naming.*;
import javax.naming.directory.*;
.
.
.
String url = "ldap://server.company.com/o=company_us,c=us";
String icf = "com.sun.jndi.ldap.LdapCtxFactory";
.
java.util.Hashtable environment = new java.util.Hashtable();
environment.put(Context.PROVIDER_URL, url);
environment.put(Context.INITIAL_CONTEXT_FACTORY, icf);
Context ctx = new InitialDirContext(environment);
[ JMS 2.0]

import javax.jms.*;
import javax.naming.*;
import javax.naming.directory.*;
.
.
.
String url = "ldap://server.company.com/o=company_us,c=us";
String icf = "com.sun.jndi.ldap.LdapCtxFactory";
.
java.util.Hashtable environment = new java.util.Hashtable();
environment.put(Context.PROVIDER_URL, url);
environment.put(Context.INITIAL_CONTEXT_FACTORY, icf);
Context ctx = new InitialDirContext(environment);
In questo codice, le variabili stringa url e icf hanno i seguenti significati:
URL
Il localizzatore uniforme di risorse URL ) del servizio di directory. L' URL può avere uno dei seguenti formati:
  • ldap://hostname/contextName , per un servizio di directory basato su un server LDAP
  • file:/directoryPath , per un servizio di directory basato sul file system locale
ICF
Il nome classe del factory di contesto iniziale, che può essere uno dei seguenti valori:
  • com.sun.jndi.ldap.LdapCtxFactory, per un servizio di directory basato su un server LDAP
  • com.sun.jndi.fscontext.RefFSContextFactory, per un servizio di directory basato sul file system locale
Notare che alcune combinazioni di un package JNDI e di un fornitore di servizi LDAP (Lightweight Directory Access Protocol) possono causare l'errore LDAP 84. Per risolvere questo problema, inserire la seguente riga di codice prima della chiamata a InitialDirContext():
environment.put(Context.REFERRAL, "throw");
Dopo aver ottenuto un contesto iniziale, l'applicazione può recuperare gli oggetti gestiti dallo spazio nomi JNDI utilizzando il metodo lookup (), come mostrato nel seguente esempio:
ConnectionFactory factory;
Queue queue;
Topic topic;
.
.
.
factory = (ConnectionFactory)ctx.lookup("cn=myCF");
queue = (Queue)ctx.lookup("cn=myQ");
topic = (Topic)ctx.lookup("cn=myT");
Questo codice richiama i seguenti oggetti da un namespace basato su LDAP:
  • Un oggetto ConnectionFactory collegato con il nome myCF
  • Un oggetto Queue collegato con il nome myQ
  • Un oggetto Argomento collegato con nome myT

Per ulteriori informazioni sull'utilizzo di JNDI, consultare la documentazione JNDI fornita da Oracle Corporation.