2010-02-21 2 views
1

Я использую netbeans 6.8 и glassfish v3 и создаю для работы приложение jms. Я получил это:jms unresolved message-destination-ref

com.sun.enterprise.container.common.spi.util.InjectionException: 
Exception attempting to inject Unresolved Message-Destination-Ref 
jms/[email protected]@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 как моего назначения ресурсов.

Что мне не хватает?

Полный стек:

 
WARNING: enterprise.deployment.backend.invalidDescriptorMappingFailure 
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Unresolved Message-Destination-Ref jms/[email protected]@null into class enterpriseapplication4.Main 
     at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614) 
     at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384) 
     at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:210) 
     at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:202) 
     at org.glassfish.appclient.client.acc.AppClientContainer$ClientMainClassSetting.getClientMainClass(AppClientContainer.java:599) 
     at org.glassfish.appclient.client.acc.AppClientContainer.getMainMethod(AppClientContainer.java:498) 
     at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:397) 
     at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:311) 
     at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:264) 
     at org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:75) 
     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 sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323) 
     at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338) 
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/jms/myQueue' in SerialContext targetHost=localhost,targetPort=3700 [Root exception is javax.naming.NameNotFoundException: No object bound for java:comp/env/jms/myQueue [Root exception is java.lang.NullPointerException]] 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442) 
     at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:513) 
     ... 15 more 
Caused by: javax.naming.NameNotFoundException: No object bound for java:comp/env/jms/myQueue [Root exception is java.lang.NullPointerException] 
     at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:218) 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:428) 
     ... 17 more 
Caused by: java.lang.NullPointerException 
     at javax.naming.InitialContext.getURLScheme(InitialContext.java:269) 
     at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:318) 
     at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at com.sun.enterprise.naming.util.JndiNamingObjectFactory.create(JndiNamingObjectFactory.java:75) 
     at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:688) 
     at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:657) 
     at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:148) 
     ... 18 more 

С уважением

ответ

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> 
1

попытаться удалить статическую декларацию.

1

У меня была та же проблема, что и у ОП после выполнения JMS-учебника «Разработка Java EE 5 с помощью Netbeans 6». Использование новой установки Glassfish 3.0.1 и Netbeans 6.9.1.

Решение было изменить атрибуты аннотации ресурсов (которые были Netbeans генерироваться) из:

@Resource (имя = "JMS/myQueue")

к:

@Resource (mappedName = "JMS/myQueue")

(и то же самое для фабрики подключения тоже)

[Edit: конечно, теперь я перечитал главу Я вижу, что автор упоминает это явно на боковой панели. Я действительно должен RTFM!]