2013-11-08 2 views
2

Я пытаюсь подписаться на экземпляр HornetQ, запущенный на сервере J7SS AS7. Мне удалось подключить и опубликовать/получить сообщения с тестовым приложением, которое существует за пределами сервера приложений, но когда я пытаюсь запустить аналогичный пример, развернутый в пределах, на сервере я получаю следующее исключение при создании InitialContext экземпляр в моем сообщении абонентским класса:Как найти экземпляр HornetQ из приложения, запущенного на том же сервере приложений? (AS7) (Не удалось создать экземпляр InitialContextFactory)

javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory   org.jboss.naming.remote.client.InitialContextFactory from classloader ModuleClassLoader for  Module "deployment.Test.war:main" from Service Module Loader 
    at org.jboss.as.naming.InitialContextFactoryBuilder.createInitialContextFactory(InitialContextFactoryBuilder.java:64) 
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:681) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) 
    at javax.naming.InitialContext.init(InitialContext.java:242) 
    at javax.naming.InitialContext.<init>(InitialContext.java:216) 
    at uk.co.test.MessageSubscriber.startSubscription(MessageSubscriber.java:127) 
    at uk.co.test.MessageSubscriber.access$0(MessageSubscriber.java:114) 
    at uk.co.test.MessageSubscriber$1.run(MessageSubscriber.java:47) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:724) 

И вот код, где я пытаюсь создать контекст (Я исключил реальную подписку, тема код установки и т.д. вне для ясности):

String factoryName = "jms/RemoteConnectionFactory"; 
String topicName = "jms/topic/test"; 

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
props.put(Context.PROVIDER_URL, "remote://server:4447"); 
props.put(Context.SECURITY_PRINCIPAL, "testuser"); 
props.put(Context.SECURITY_CREDENTIALS, "password"); 
props.put("jboss.naming.client.ejb.context", true); 
InitialContext context = new InitialContext(props); // Exception 

Создание контекста отлично работает при подключении удаленно к серверу, поэтому я предполагаю, что существует другой подход к обнаружению HornetQ, который я забыл. Или, может быть, я где-то пропадаю какую-либо зависимость или это проблема общей конфигурации ... В любом случае я изо всех сил пытаюсь найти какие-либо примеры, которые я могу использовать для продвижения вперед.

Любые идеи, в которых я ошибаюсь?

Спасибо.

ответ

3

Я думаю, что следующее должно быть достаточно для подключения локально:

InitialContext jndiContext = new InitialContext(); 
QueueConnectionFactory qf = (QueueConnectionFactory) jndiContext.lookup("java:/ConnectionFactory"); 

когда фабрика соединений определяется как

<jms-connection-factories> 
    <connection-factory name="InVmConnectionFactory"> 
     <connectors> 
      <connector-ref connector-name="in-vm"/> 
     </connectors> 
     <entries> 
      <entry name="ConnectionFactory"/> 
     </entries> 
    </connection-factory> 
    </jms-connection-factories> 
+0

Спасибо! Это работает отлично. – PA001