ActiveMQ JNDI 查找问题

Posted

技术标签:

【中文标题】ActiveMQ JNDI 查找问题【英文标题】:ActiveMQ JNDI Lookup Issues 【发布时间】:2012-01-21 14:55:28 【问题描述】:

尝试让 ActiveMQ 与 JNDI 运行以下 (http://activemq.apache.org/jndi-support.html),我的 jboss/server/node/lib 文件夹中有所有必需的 activeMQ jar,我的 jndi.properties 看起来像:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory

# use the following property to configure the default connector
java.naming.provider.url = vm://localhost

# use the following property to specify the JNDI name the connection factory
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry
connectionFactoryNames = connectionFactory

# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = TESTQUEUE


# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic

并在生产者中有以下代码,它实际上产生了调用:

InitialContext ic = null;
ConnectionFactory factory = null;
Connection con = null;
Session session = null;
Queue queue = null;
MessageProducer producer = null;

ic = new InitialContext();
factory = (ConnectionFactory) ic.lookup("connectionFactoryNames");
con = factory.createConnection();
session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
queue = (Queue)ic.lookup("queue/TESTQUEUE");
producer = session.createProducer(queue);
// Then... send the message.
producer.send(session.createObjectMessage(new Long(Id)));

这是一个例外,不知道scheme java not recognized是什么意思

WARN org.jboss.system.ServiceController - Problem starting service jboss:service=Naming
javax.naming.NamingException: scheme java not recognized
    at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:221)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at org.jboss.naming.NamingService.startService(NamingService.java:274)
    at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
    at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
    at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
    at $Proxy0.start(Unknown Source)
    at org.jboss.system.ServiceController.start(ServiceController.java:417)
    at org.jboss.system.ServiceController.start(ServiceController.java:435)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
    at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
    at $Proxy4.start(Unknown Source)
    at org.jboss.deployment.SARDeployer.start(SARDeployer.java:302)
    at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
    at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
    at $Proxy5.deploy(Unknown Source)
    at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
    at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
    at org.jboss.Main.boot(Main.java:200)
    at org.jboss.Main$1.run(Main.java:490)
    at java.lang.Thread.run(Thread.java:662)

这个问题让我朝着正确的方向前进:ActiveMQInitialContextFactory vs. NamingContextFactory

【问题讨论】:

如果需要更多信息,请告诉我 【参考方案1】:

我能够启动并运行它,问题是我有一个 jndi.properties 文件,并且在该文件中我有标准,

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

并且由于我们已经在我们的应用程序中使用了 jndi,我无法继续修改​​此处存在的文件,也无法在此处添加我的 activemq 相关更改,因此解决方案是为 @987654326 创建不同的 jndi.properties 文件@ 并得到新的initialcontext ,如ActiveMQInitialContextFactory vs. NamingContextFactory 中提到的那样,其他事情必须确保我对生产者和发送者端都有相同的经纪人信息,这很明显并且工作正常。

添加信息,以便下次有人提出这个问题时,他或她不必花费我已经花时间弄清楚这件事的时间。希望这会有所帮助。

【讨论】:

以上是关于ActiveMQ JNDI 查找问题的主要内容,如果未能解决你的问题,请参考以下文章

基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

ActiveMQ 的安装

ActiveMQ安装使用

SpringBoot------ActiveMQ安装

从入门到精通的ActiveMQ

消息中间件之ActiveMQ