В данный момент я пытаюсь выучить 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)
Я думаю, что попробовал все, чтобы заставить его работать, и все же это все еще ускользает от меня, что я делаю неправильно. Любые предложения по этому вопросу с благодарностью!