JNDI без контейнера J2EE (с JNP? Может, какой-нибудь другой провайдер?) - PullRequest
5 голосов
/ 10 октября 2008

Мне нужно запустить провайдера JNDI без издержек на контейнер J2EE. Я пытался следовать указаниям в этой статье , которая описывает (на странице 3), что именно я хочу сделать. К сожалению, эти направления терпят неудачу. Мне также пришлось добавить jboss-common.jar в мой путь к классам. После этого я получаю трассировку стека:

$ java org.jnp.server.Main
0    [main] DEBUG
org.jboss.naming.Naming  - Creating
NamingServer stub, theServer=null,rmiPort=0,clientSocketFactory=null,serverSocketFactory=org.jboss.net.sockets.DefaultSocketFactory@ad093076[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)

Я надеюсь заставить это работать, но я также был бы открыт для других легких автономных провайдеров JNDI. Все это для того, чтобы заставить ActiveMQ работать, и если кто-то может предложить другого облегченного JMS-провайдера, который хорошо работает вне виртуальной машины, клиенты не имеют полноценного сервера приложений, который также работал бы.

Ответы [ 3 ]

6 голосов
/ 13 октября 2008

Apache ActiveMQ уже поставляется с интегрированным облегченным поставщиком JNDI. См. эти инструкции по его использованию .

Обычно вы просто добавляете файл jndi.properties в путь к классам, и все готово.

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
2 голосов
/ 11 октября 2008

Используйте файл jndi.properties, например:

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

Убедитесь, что этот файл находится в вашем пути к классам. Затем вы можете посмотреть тему / очередь следующим образом (за вычетом подходящих try / catches):

context = new InitialContext(properties);

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

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

topic = (Topic) context.lookup("myTopic");
1 голос
/ 10 октября 2008

JBoss JMQ также может быть запущен только с MicroKernel и минимальным набором библиотек. Установщик JBoss AS имеет опции для «профилей», один из которых предназначен для автономного JMQ. Это также позволяет вам выбирать компоненты (хотя это не слишком помогает вам с зависимостями). Вы пробовали запустить установщик?

...