2008-10-10 11 views
5

necesito para ejecutar un proveedor JNDI sin el añadido de un contenedor J2EE. Intenté seguir las instrucciones en este article, que describe (en la página 3) exactamente lo que quiero hacer. Lamentablemente, estas instrucciones fallan. Tuve que agregar el jboss-common.jar a mi classpath también. Una vez que lo hice, me sale un seguimiento de pila:JNDI sin un contenedor J2EE (con JNP? Tal vez algún otro proveedor?)

$ java org.jnp.server.Main 
0 [main] DEBUG 
org.jboss.naming.Naming - Creating 
NamingServer stub, theServer=null,rmiPort=0,clientSocketFactory=null,[email protected]d093076[bindAddress=null] 
Exception in thread "main" 
java.lang.NullPointerException 
    at org.jnp.server.Main.getNamingInstance(Main.java:301) 
    at org.jnp.server.Main.initJnpInvoker(Main.java:354) 
    at org.jnp.server.Main.start(Main.java:316) 
    at org.jnp.server.Main.main(Main.java:104) 

estoy esperando para hacer este trabajo, pero también estaría abierto a otros proveedores independientes JNDI ligeros. Todo esto para hacer que ActiveMQ funcione, y si alguien puede sugerir otro proveedor liviano de JMS que funcione bien fuera de la VM, los clientes no tendrán un servidor de aplicaciones completo que funcione también.

Respuesta

6

Apache ActiveMQ ya viene con un proveedor integrado JNDI ligero. Ver these instructions on using it.

Básicamente, usted sólo tiene que añadir el archivo jndi.properties a la ruta de clase y ya está.

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 

# use the following property to configure the default connector 
java.naming.provider.url = failover:tcp://localhost:61616 

# use the following property to specify the JNDI name the connection factory 
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry 

# register some queues in JNDI using the form 
# queue.[jndiName] = [physicalName] 
queue.MyQueue = example.MyQueue 


# register some topics in JNDI using the form 
# topic.[jndiName] = [physicalName] 
topic.MyTopic = example.MyTopic 
+1

Esto no parece cubrir el hecho de que necesitamos un proveedor TCP JNDI. A menos que esté completamente equivocado, los puntos finales de VM no funcionan en todas las VM. Necesito poder ejecutar procesos separados que hablen a través de JNDI. ¿Es posible con este proveedor JNDI? – Benson

+1

Lo sentimos: problema de cortar y pegar. Acabo de actualizar la entrada * * java.naming.provider.url por lo que utiliza TCP - y utiliza la conmutación por error que se debe utilizar de manera predeterminada para volver a conectar si una toma de falla o un corredor se recuperó –

+0

Muy bien, gracias. Tendré que probar esto y ver si funciona para mí. – Benson

1

El JBoss JMQ también se puede ejecutar con sólo el microkernel y un conjunto muy mínimo de bibliotecas. El instalador JBoss AS tiene opciones para "perfiles", uno de los cuales es para un JMQ independiente. También le permite seleccionar y elegir componentes (aunque no lo ayuda demasiado con las dependencias). ¿Has intentado ejecutar el instalador?

+0

Esa es una buena sugerencia, pero que realmente necesita para alejarse de JBoss, si es posible. Si no puedo evitarlo, definitivamente reduciré todo lo posible como sugirió. Nota – Benson

2

utilice un archivo jndi.properties así:

java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory 

# use the following property to configure the default connector 
java.naming.provider.url=tcp://jmshost:61616 

# use the following property to specify the JNDI name the connection factory 
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry 

# register some queues in JNDI using the form 
# queue.[jndiName] = [physicalName] 
#queue.MyQueue = example.MyQueue 


# register some topics in JNDI using the form 
# topic.[jndiName] = [physicalName] 
topic.myTopic = MY.TOPIC 

Asegúrese de que este archivo está en la ruta de clases. A continuación, puede buscar el tema/cola como esto (menos intentarlo apropiado/capturas):

context = new InitialContext(properties); 

context = (Context) context.lookup("java:comp/env/jms"); 

topicConnectionFactory = (TopicConnectionFactory) context.lookup("ConnectionFactory"); 

topic = (Topic) context.lookup("myTopic"); 
+0

el proveedor JNDI que está utilizando no es simple JNDI - pero el provicder JNDI que viene con ActiveMQ :). Ver el nombre de la clase de la java.naming.factory.initial * * entrada :) –

+0

Wow, tienes razón. Pensé que simple-jndi estaba haciendo que eso funcionara. Ya lo teníamos en el proyecto para búsquedas en JDBC DataSource. He corregido mi entrada. –

Cuestiones relacionadas