2009-01-17 16 views
6

Sto provando a creare semplicemente la connessione con ActiveMQ utilizzando JNDI. Utilizzo di ActiveMQ tramite JNDI


devo

  1. Coda di nome 'example.A'.

  2. Secondo ActiveMQ documentation touching JNDI, se desidero utilizzare ConectionFactories e Queues (argomenti) tramite JNDI, devo inserire il file jndi.properties sul mio classpath. Come ho capito, activeMQ classpath è la directory% activemq%/conf per impostazione predefinita. Non l'ho cambiato Così ho questa proprietà per la mia coda:

    queue.MyQueue = example.A

  3. Ho creato classe client java per ActiveMQ che usa JNDI come di seguito:

    Properties jndiParameters = new Properties() ; 
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); 
        Context context = new InitialContext(jndiParameters); 
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); 
        Queue queue = (Queue) context.lookup("MyQueue"); 
    

ma non riesce a trovare la mia coda, genera un'eccezione: javax.naming.NameNotFoundException: MyQueue

Dove sono i miei ritmi?

+0

Ho un problema simile, posso configurare jndi url e factory di connessione ma non posso fornire ulteriori proprietà. In questo modo sembra che l'endpoint della coda non sia definito. Funziona se uso dynamicQueue/Test, ma dovrebbe anche essere possibile indirizzare le destinazioni con nome statico? – eckes

risposta

5

Il problema è che si stanno creando in modo esplicito le proprietà e passandole nel costruttore InitialContext. Ciò significa che jndi.properties sul percorso della classe non verrà letto.

Il codice dovrebbe essere qualcosa del tipo:

Context context = new InitialContext(); 
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory"); 
Queue queue = (Queue) context.lookup("MyQueue"); 
1

È possibile impostare le proprietà statiche e di recuperarli da un file come ad esempio:

InputStream is = getClass().getResourceAsStream("/my.jndi.properties"); 
    Properties jndiParameters = new Properties(); 
    jndiParameters.load(is); 
    jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
    jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616"); 
    Context ctx = new InitialContext(jndiParameters); 
... 

Questo funziona fino a quando si imposta la statica oggetti di scena dopo aver caricato la risorsa. Utile se stai caricando l'URL del provider da qualche altra parte, ad esempio.