Запуск HornetQ в качестве примера автономного сервера - PullRequest
1 голос
/ 09 декабря 2011

В данный момент я пытаюсь выучить HornetQ. Вещи кажутся довольно простыми в теории, но мне тяжело запустить даже самый простой пример.

До сих пор я пытался запустить HornetQ в качестве автономного сервера и подключить простой клиент, который отправляет сообщение, а затем получает его обратно.

Шаги, которые я выполнил: (в соответствии с документами HornetQ http://hornetq.sourceforge.net/docs/hornetq-2.0.0.GA/user-manual/en/html/using-jms.html)

- Скачал последнюю версию HornetQ (2.2.5) и распаковал ее. Модифицированный файл INSTALL_DIRECTORY \ config \ stand-alone \ non-clustertered \ hornetq-jms.xml для создания нужных мне объектов. Ниже приведено содержимое:

<configuration xmlns="urn:hornetq"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="urn:hornetq ../schemas/hornetq-jms.xsd ">
        <connection-factory name="ConnectionFactory">
            <connectors>
                <connector-ref connector-name="netty"/>
            </connectors>
            <entries>
                <entry name="ConnectionFactory"/>
            </entries>
        </connection-factory>

        <queue name="OrderQueue">
            <entry name="queues/OrderQueue"/>
        </queue>
</configuration>

-Файл INSTALL_DIRECTORY \ config \ stand-alone \ non-clustertered \ hornetq-beans.xml содержит компонент, необходимый для запуска службы JNDI.

-Имеется также файл с именем jndi.properties в папке INSTALL_DIRECTORY \ config \ автономный \ не кластеризованный \ 1014 *

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

Код клиента следующий:

public void test()
    {
        try
        {
            ic = new InitialContext();

            cf = (ConnectionFactory)ic.lookup("/ConnectionFactory");

            orderQueue = (Queue)ic.lookup("/queues/OrderQueue");

            connection = cf.createConnection();

            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            producer = session.createProducer(orderQueue);
            consumer = session.createConsumer(orderQueue);

            connection.start();

            TextMessage message = session.createTextMessage("This is an order");
            producer.send(message);

            TextMessage receivedMessage = (TextMessage)consumer.receive();
            System.out.println("Got order: " + receivedMessage.getText());
        }
        catch (Exception e)
        {
           e.printStackTrace();
        }
    }

Тем не менее, всякий раз, когда я запускаю его, он падает со следующим исключением:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)

Я думаю, что попробовал все, чтобы заставить его работать, и все же это все еще ускользает от меня, что я делаю неправильно. Любые предложения по этому вопросу с благодарностью!

Ответы [ 3 ]

1 голос
/ 10 декабря 2011

Прежде всего, я бы начал с документации , которая напрямую связана с версией HornetQ, которую вы используете.

Я думаю, что в вашем клиентском коде отсутствуют библиотеки.Пожалуйста, убедитесь, что вы добавили $HORNETQ_HOME/lib содержимое к вашим клиентским зависимостям и посмотрите, работает ли это.В противном случае обновите свой вопрос и постарайтесь помочь снова:)

0 голосов
/ 30 мая 2012

Также вы можете поместить информацию в контекст программно, для попытки, определив хеш-таблицу со значениями для PROVIDER_URL, INITIAL_CONTEXT_FACTORY и URL_PKG_PREFIXES; и передать его конструктору InitialContext

Context ctxt = InitalContext(hashtable_w_values);

Это хорошо для меня.

0 голосов
/ 12 декабря 2011

Ваш файл jndi.properties находится в вашем пути к классам?Похоже, это в пути к конфигурации сервера, но ваш клиентский код не может его найти.

...