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.
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.
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]](ngjm30.gif)
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]](ngjms20.gif)
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);
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 LDAPfile:/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 LDAPcom.sun.jndi.fscontext.RefFSContextFactory, per un servizio di directory basato sul file system locale
environment.put(Context.REFERRAL, "throw");
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.