2009-01-17 13 views
6

estoy tratando de crear simplemente conectar con ActiveMQ utilizando JNDI. Uso de ActiveMQ a través de JNDI


que tienen

  1. cola llamado 'example.A'.

  2. Según ActiveMQ documentation touching JNDI, si quiero utilizar ConectionFactories y Colas (Temas) a través de JNDI, tengo que colocar el archivo jndi.properties en mi classpath. Según tengo entendido, es activemq ruta de clase% directorio%/conf activemq por defecto. No lo he cambiado Así que tienen esta propiedad para mi cola:

    queue.MyQueue = example.A

  3. He creado la clase cliente en java para ActiveMQ que utiliza JNDI de la siguiente manera:

    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"); 
    

pero no puede encontrar mi cola, se lanza una excepción: javax.naming.NameNotFoundException: MyQueue

¿Dónde están mis misstakes?

+0

Tengo un problema similar, puedo configurar la dirección URL JNDI y fábrica de conexiones, pero no puedo proporcionar propiedades adicionales. De esta forma, parece que el punto final de la cola no está definido. Funciona si uso dynamicQueue/prueba, pero debe también ser posible abordar destinos staticly nombre? – eckes

Respuesta

5

El problema es que se está creando de forma explícita las propiedades y pasarlos al constructor InitialContext. Esto significa que jndi.properties en la ruta de clase no se leerá.

El código debería ser algo como:

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

Puede establecer las propiedades estáticas, así como recuperarlas de un archivo como tal:

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); 
... 

Esto funciona siempre y cuando se establece la estática accesorios después de cargar el recurso. Útil si está cargando la URL del proveedor desde otro lugar, por ejemplo.