java - 如何从同一应用程序服务器上运行的应用程序中查找 HornetQ 实例? (AS7)(无法实例化InitialContextFactory)

标签 java jms jboss7.x jndi hornetq

我正在尝试订阅在 JBoss AS7 服务器上运行的 HornetQ 实例。我已经成功地使用存在于应用程序服务器外部的测试应用程序进行连接和发布/接收消息,但是当我尝试运行部署在服务器内部的类似示例时在消息订阅者类中创建 InitialContext 实例时出现以下异常:

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。或者也许我在某个地方缺少依赖项,或者这是一个一般配置问题......无论哪种方式,我都在努力寻找任何可以用来插入这一点的示例。

有什么想法我哪里出错了吗?

谢谢。

最佳答案

我认为以下内容足以进行本地连接:

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>

关于java - 如何从同一应用程序服务器上运行的应用程序中查找 HornetQ 实例? (AS7)(无法实例化InitialContextFactory),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856836/

相关文章:

java - 加载相关实体时实体图被忽略

java - 不显示 Jtable 上数据库中的列名

java - 将浮点型转换为带逗号的字符串,不进行四舍五入或小数点更改

jms - 仅在 JPA 事务提交后才发送 JMS 消息

java - EJB 依赖于另一个 EJB?

sql-server-2008 - JBoss 7.1 - SQL Server - 数据源配置 (JTDS)

java - 使用 JAXB&MOXy 将 JPA 实体转换为 XML 并再次转换回来

java - 如果Onmessage()方法出现异常,是否将消息保留在Queue中并稍后再次调用MDB

spring - 从 Web 应用程序和 Apache Camel/并使用 MQ,您是否使用 jsessionid 添加 JMS 消息?

java - HornetQ 与 Artemis ActiveMQ 转移