2011-05-29 53 views
2

我在這個問題,因爲很長一段時間,我真的不明白問題來了,也許你可以幫助我。異常null當試圖設置值jms /主題

我正在使用JMS主題爲異步消息創建J2EE Web應用程序。問題是,與在InitialContext的查詢檢索我的主題時,我的話題總是被設置爲null,並且此異常被拋出:

ATTENTION: RAR7096: Exception null while trying to set the value jms/Topic on property Name 
GRAVE: enterprise_naming.serialctx_communication_exception 
GRAVE: com.sun.appserv.connectors.internal.api.PoolingException 
     at com.sun.enterprise.resource.beans.AdministeredObjectResource.createAdministeredObject(AdministeredObjectResource.java:199) 
     at com.sun.enterprise.resource.naming.AdministeredObjectFactory.getObjectInstance(AdministeredObjectFactory.java:128) 
     at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) 
     at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:472) 
     at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:437) 
     at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at org.apache.jsp.index_jsp.jspInit(index_jsp.java from :36) 
     at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:90) 
     at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:208) 
     at org.apache.jasper.servlet.JspServletWrapper.getDependants(JspServletWrapper.java:317) 
     at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:615) 
     at org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:483) 
     at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:618) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) 
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) 
     at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) 
     at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) 
     at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) 
     at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 
     at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 
     at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) 
     at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 
     at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
     at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
     at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
     at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
     at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
     at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 
     at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 
     at java.lang.Thread.run(Thread.java:680) 
Caused by: java.security.PrivilegedActionException: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.enterprise.resource.beans.AdministeredObjectResource.createAdministeredObject(AdministeredObjectResource.java:176) 
     ... 41 more 
Caused by: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException 
     at com.sun.enterprise.connectors.util.SetMethodAction.handleException(SetMethodAction.java:140) 
     at com.sun.enterprise.connectors.util.SetMethodAction.run(SetMethodAction.java:126) 
     ... 43 more 
Caused by: java.lang.reflect.InvocationTargetException 
     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 com.sun.enterprise.connectors.util.SetMethodAction.run(SetMethodAction.java:99) 
     ... 43 more 
Caused by: java.lang.IllegalArgumentException: MQ:Topic:Invalid Topic Name - jms/Topic 
     at com.sun.messaging.Topic.setName(Topic.java:90) 
     ... 48 more 

這裏是我的代碼,有問題的行是「主題=(主題) ic.lookup( 「JMS /話題」);」

<%! 
@Resource(mappedName = "jms/ConnectionFactory") 
ConnectionFactory connectionFactory; 
@Resource(mappedName = "jms/Topic") 
Topic topic; 
Connection connection = null; 
Session jmsSession = null; 
MessageProducer messageProducer = null; 

public void jspInit() { 
    try { 
     InitialContext ic = new InitialContext(); 
     connectionFactory = (ConnectionFactory) ic.lookup("jms/ConnectionFactory"); 
     topic = (Topic) ic.lookup("jms/Topic"); 
     connection = connectionFactory.createConnection(); 
     jmsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
     messageProducer = jmsSession.createProducer(topic); 
     connection.start(); 
    } catch (Exception e) { 
     System.out.println("Couldn't create nsl : " + e.getMessage()); 
    } 
} 

我希望你能幫我弄清楚這個文件有什麼問題!

謝謝!

編輯:服務器ressources The jms/Topic seem's OK ?

回答

1

幾件事情:

  • 你注入連接工廠和主題,然後你也試着找一找。我看到你使用的是Glassfish服務器,至少是JEE5,所以不需要查找。現在,如果注射劑沒有被吸收,那可能與我的第二點有關。
  • 爲什麼你要在JSP中完成所有這些工作?這種代碼應該(至少)進入一個servlet。

我可以保證你在servlet中的@Resource注入被正確拾取,放下Initialcontext的東西。並將您的代碼移動到一個servlet :-)

其他事情:如果工廠和主題存在,您可能需要檢查服務器...如果他們不存在,您可以手動創建它們或添加它們到您的項目創建部署,雖然我個人不喜歡後者。

在Glassfish 2中,至少JMS資源是通過資源,JMS資源,目標資源在服務器控制檯中列出和定義的。

編輯:檢出this article,它提到了完全相同的錯誤,並且在那種情況下,它被鏈接到sun-ejb-jar.xml中的條目 - 項目定義的資源所在的地方。可能是檢查你的sun-ejb-jar.xml部署描述符的好主意

+0

嗨,感謝您的意見,我正在關注我的老師之一的幻燈片,它並不完美。首先,我刪除了查找,因爲我有@Resource,但它仍然不起作用。然後,我的工廠和我的主題存在,我追溯到這條線的例外:topic =(Topic)ic.lookup(「jms/Topic」);所以工廠沒有問題。 – Cyril 2011-05-29 23:11:38

+0

當您注入資源時,您不必再查看它們。它是查找或注入,而不是兩者。 – fvu 2011-05-29 23:16:07

+0

是的,如果我刪除了@Reference,那麼connectionFactory和topic都是空的。如果我刪除查找,可以很好地檢索connectionFactory,但主題變量爲空,並且查找會引發異常... – Cyril 2011-05-29 23:19:56

3

不要在物理目標中使用斜槓字符,「jms/Topic」對於Glassfish是錯誤的。

ATTENTION: 
RAR7096: 
Exception null while trying to set the value jms/Topic on property Name 

此處引用的「名稱」屬性是「物理目標名稱」。 Glassfish對該領域有嚴格的命名約定。在截圖中,即「Nom de la destination physique」。嘗試將其更新爲「jmsTopic」並查看結果如何。 PS:我知道這是一個老問題,但其他人可能會遇到這個問題。希望能幫助到你。

鏈接到類似的問題:https://developer.jboss.org/thread/205474