1

我正在使用 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 更多

问候

4

3 回答 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>
于 2010-02-21T21:40:53.913 回答
1

尝试删除静态声明。

于 2010-05-03T12:21:36.797 回答
1

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

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

@Resource(name = "jms/myQueue")

到:

@Resource(mappedName = "jms/myQueue")

(连接工厂也是如此)

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

于 2010-09-26T13:42:06.480 回答