2014-04-13 8 views
6

Ho difficoltà a comprendere la parte JNDI del seguente esempio JMS.Come funziona la ricerca JNDI in questo esempio JMS?

public static void main(String[] args) { 
    try { 
     // Gets the JNDI context 
     Context jndiContext = new InitialContext(); 
     // Looks up the administered objects 
     ConnectionFactory connectionFactory = (ConnectionFactory) 
       jndiContext.lookup("jms/javaee7/ConnectionFactory"); 
     Destination queue = (Destination) jndiContext.lookup("jms/javaee7/Queue"); 
     // Sends a text message to the queue 
     try (JMSContext context = connectionFactory.createContext()) { 
      context.createProducer().send(queue, "Text message sent at " + new Date()); 
     } 
    } catch (NamingException e) { 
     e.printStackTrace(); 
    } 
} 

Il libro in cui ho preso questo esempio non ha menzionato l'installazione per rendere possibile questa ricerca JNDI. Per esempio, in

ConnectionFactory connectionFactory = (ConnectionFactory) 
     jndiContext.lookup("jms/javaee7/ConnectionFactory"); 

ci dovrebbe essere una sorta di server che esegue in modo che il jndiContext può ottenere una sospensione di un oggetto ConnectionFactory? In generale, quale tipo di installazione è necessaria per la ricerca JNDI sopra per funzionare?

Grazie mille.

+0

Non funzionerà affatto senza ulteriori impostazioni, a meno che non sia destinato a far parte di un'applicazione Web anziché di un programma autonomo. Dovresti definire. Una fabbrica di contesto iniziale e un URL di contesto per un inizio. Vedi l'Esercitazione JBDI Oracle per gli esempi. – EJP

+0

@EJP in che modo 'ConnectionFactory' carica' jndi.properties'? Mentre c'è un [esempio ldap] (https://docs.oracle.com/javase/jndi/tutorial/ldap/misc/url.html#MULTI) non ho visto una soluzione nel tutorial JNDI che risponde a questa domanda. – Thufir

risposta

8

In generale, JNDI è un servizio che fornisce un insieme di oggetti da utilizzare dall'applicazione. Questo servizio viene solitamente fornito dal server delle applicazioni o dal server Web o da un server LDAP dedicato. Se il tutorial che si sta tentando di seguire spiega il tutorial JMS nel contesto dell'applicazione Web, molto probabilmente ci sono alcune configurazioni da fare nel server delle applicazioni (ad es. Glassfish, JBoss) o server web (ad esempio Tomcat). Il modo di accedere a JNDI dipende anche dal provider. Di solito, ciò implica un file di configurazione (file delle proprietà o file XML). Un'altra alternativa all'utilizzo di JMS consiste nell'utilizzare un provider JMS dedicato come ActiveMQ. In questo modo, non è necessario alcun server delle applicazioni. La tua applicazione può essere solo un'applicazione Java autonoma (ovvero non necessariamente un'applicazione web). L'accesso agli oggetti forniti da ActiveMQ tramite JNDI è spiegato qui: https://activemq.apache.org/jndi-support.html. Tutorial JNDI generale: http://docs.oracle.com/javase/tutorial/jndi/