【问题标题】:jms unresolved message-destination-refjms 未解析的消息-目标-ref
【发布时间】:2011-01-19 08:14:10
【问题描述】:

我正在使用 netbeans 6.8 和 glassfish v3,并制作了一个简单的 jms 应用程序来工作。 我得到了这个:

com.sun.enterprise.container.common.spi.util.InjectionException: 
Exception attempting to inject Unresolved Message-Destination-Ref 
jms/myQueue@java.lang.String@null into class enterpriseapplication4.Main

代码:

public class Main {
@Resource(name = "jms/myQueue")
private static Topic myQueue;
@Resource(name = "jms/myFactory")
private static ConnectionFactory myFactory;
...
// the rest is just boiler plate created by netbeans
}

在我的 Glassfish v3 管理控制台中, 我有 jms/myFactory 作为我的 ConnectionFactory 和 jms/myQueue 作为我的目标资源。

我错过了什么?

全栈:

警告:enterprise.deployment.backend.invalidDescriptorMappingFailure com.sun.enterprise.container.common.spi.util.InjectionException:尝试将 Unresolved Message-Destination-Ref jms/myQueue@java.lang.String@null 注入到类 enterpriseapplication4.Main 中的异常 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:210) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:202) 在 org.glassfish.appclient.client.acc.AppClientContainer$ClientMainClassSetting.getClientMainClass(AppClientContainer.java:599) 在 org.glassfish.appclient.client.acc.AppClientContainer.getMainMethod(AppClientContainer.java:498) 在 org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:397) 在 org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:311) 在 org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:264) 在 org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:75) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323) 在 sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338) 原因:javax.naming.NamingException:在 SerialContext targetHost=localhost,targetPort=3700 中查找“java:comp/env/jms/myQueue”失败 [根异常是 javax.naming.NameNotFoundException:没有对象绑定到 java:comp/ env/jms/myQueue [根异常是 java.lang.NullPointerException]] 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442) 在 javax.naming.InitialContext.lookup(InitialContext.java:392) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:513) ... 15 更多 原因:javax.naming.NameNotFoundException:没有对象绑定到 java:comp/env/jms/myQueue [根异常是 java.lang.NullPointerException] 在 com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:218) 在 com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:428) ... 17 更多 引起:java.lang.NullPointerException 在 javax.naming.InitialContext.getURLScheme(InitialContext.java:269) 在 javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318) 在 javax.naming.InitialContext.lookup(InitialContext.java:392) 在 com.sun.enterprise.naming.util.JndiNamingObjectFactory.create(JndiNamingObjectFactory.java:75) 在 com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:688) 在 com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:657) 在 com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:148) ... 18 更多

问候

【问题讨论】:

    标签: netbeans glassfish jms glassfish-3


    【解决方案1】:

    主题jms/myQueue查找失败:

    javax.naming.NameNotFoundException: No object bound for java:comp/env/jms/myQueue
    

    也许您确实创建了一个主题,但它很可能在 JNDI 名称 jms/myQueue 下不可用(顺便说一下,命名一个 主题 jms/myQueue 可能不是最佳选择,但这是附注)。

    要浏览 JDNI 树以查找您的主题,请使用以下命令(GlassFish v3 不附带管理控制台中的 JDNI 浏览器):

    asadmin list-jndi-entries
    

    在列表中找到你的上下文,然后使用:

    asadmin list-jndi-entries --context <your context>
    

    【讨论】:

      【解决方案2】:

      尝试删除静态声明。

      【讨论】:

        【解决方案3】:

        在遵循“Java EE 5 Development with Netbeans 6”中的 JMS 教程后,我遇到了与 OP 相同的问题。使用全新安装的 Glassfish 3.0.1 和 Netbeans 6.9.1。

        解决方案是从以下位置更改资源注释(Netbeans 生成的)的属性:

        @Resource(name = "jms/myQueue")

        到:

        @Resource(mappedName = "jms/myQueue")

        (连接工厂也是如此)

        [编辑:当然,现在我重新阅读了我看到作者在侧边栏中明确提到这一点的章节。我真的应该 RTFM!]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-11
          • 2011-10-09
          • 1970-01-01
          相关资源
          最近更新 更多