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(ネイティブメソッド)
        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' の検索に失敗しました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: No object bound for 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

I was having the same problem as the OP after following a JMS tutorial from "Java EE 5 Development with Netbeans 6". Using a fresh install of Glassfish 3.0.1 and Netbeans 6.9.1.

The solution was to change the attributes of the Resource annotation (that Netbeans had generated) from:

@Resource(name = "jms/myQueue")

to:

@Resource(mappedName = "jms/myQueue")

(and the same for the Connection Factory too)

[Edit: of course, now I reread the chapter I see the author mentions this explicitly in a sidebar. I really should RTFM!]

于 2010-09-26T13:42:06.480 に答える
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

static 宣言を削除してみてください。

于 2010-05-03T12:21:36.797 に答える