繁体   English   中英

尝试发送JMS消息时出错

[英]Error in trying to send JMS message

当我运行我的应用程序时,我遇到有关JNDI连接的错误。 精确地,该错误发生在lookup 这是代码:

   public static final String PROPERTIES_FILE = "jms-server"; //$NON-NLS-1$

   private static Logger logger = Logger.getLogger(JmsMessageProducer.class);

   private static final ResourceBundle res = ResourceBundle.getBundle(PROPERTIES_FILE);

   private static final String JBOSS_JNDI_PROVIDER_URL = res.getString("JBOSS_JNDI_PROVIDER_URL");

   private static final String JBOSS_JNDI_INITIAL_CONTEXT_FACTORY = res
         .getString("JBOSS_JNDI_INITIAL_CONTEXT_FACTORY");

   private static final String JBOSS_JMS_CONNECTION_FACTORY = res
         .getString("JBOSS_JMS_CONNECTION_FACTORY");

   private static final String JNDI_INPUT_JMS_QUEUE = res.getString("JNDI_INPUT_JMS_QUEUE");


   /**
    * Send JMS Text Message
    * 
    * @param myString
    */
   @SuppressWarnings({"unchecked", "rawtypes"})
   public void sendJmsTextMessage(String myString) {

      Context jndiContext = null;
      ConnectionFactory connectionFactory = null;
      Connection connection = null;
      Session session = null;
      Queue queue = null;
      MessageProducer messageProducer = null;

      try {
         // [1] Create a JNDI API InitialContext object.
         Hashtable properties = new Hashtable(2);
         properties.put(Context.INITIAL_CONTEXT_FACTORY, JBOSS_JNDI_INITIAL_CONTEXT_FACTORY);
         properties.put(Context.PROVIDER_URL, JBOSS_JNDI_PROVIDER_URL);
         logger.debug("Create Jndi Context with :" + Context.INITIAL_CONTEXT_FACTORY + "="
               + JBOSS_JNDI_INITIAL_CONTEXT_FACTORY + " " + Context.PROVIDER_URL + "="
               + JBOSS_JNDI_PROVIDER_URL);
         jndiContext = new InitialContext(properties);

         // [2] Look up connection factory and queue.
         logger.debug("Create connexion factory :" + JBOSS_JMS_CONNECTION_FACTORY);
         connectionFactory = (ConnectionFactory) jndiContext.lookup(JBOSS_JMS_CONNECTION_FACTORY);
         logger.debug("Create queue :" + JNDI_INPUT_JMS_QUEUE);
         queue = (Queue) jndiContext.lookup(JNDI_INPUT_JMS_QUEUE);

因此,他正在寻找jms-server.properties文件:

JBOSS_JNDI_PROVIDER_URL = jnp://localhost:1199
JBOSS_JNDI_INITIAL_CONTEXT_FACTORY = org.jnp.interfaces.NamingContextFactory
JBOSS_JMS_CONNECTION_FACTORY = ConnectionFactory

JNDI_INPUT_JMS_QUEUE = queue/Incoming1JobsQueue

我得到的整个错误是:

12:36:35,198错误JmsMessageProducer:90-尝试发送JMS消息javax.naming.NameNotFoundException时出错:Incoming1JobsQueue在org.jnp.server的org.jnp.server.NamingServer.getBinding(NamingServer.java:771)处未绑定。 org.jnp.server上的NamingServer.getBinding(NamingServer.java:779)org.jnp.server上的NamingServer.getObject(NamingServer.java:785)org.jnp.server上的NamingServer.lookup(NamingServer.java:443) .sun.reflect.NativeMethodAccessorImpl.invoke.NamingServer.lookup(NamingServer.java:399)> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)处> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces) sorImpl.java:43),位于java.lang.reflect.Method.invoke(Method.java:606),位于sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322),位于sun.rmi.transport.Transport $ 2。在sun处运行(Transport.java:202)在sun.rmi.transport.Transport $ 2。在Run处运行(Transport.java:199)在java.security.AccessController.doPrivileged(本机方法)在s 在> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:5 67)处的un.rmi.transport.Transport.serviceCall(Transport.java:198)在> sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler .run0(TCPTranspor t.java:828)在> sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.access $ 400(TCPTr ansport.java:619)在> sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler $ 1.run (TCPTranspo rt.java:684)在> sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler $ 1.run(TCPTranspo rt.java:681)在java.security.AccessController.doPrivileged(本机方法)在> sun.rmi。在> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor)上的transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport .java:681)。 java:1145)位于> java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor .java:615)位于java.lang.Thread.run(Thread.java:745)在> sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (流RemoteCall.java:275)在> sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252)在org.jnp.server的sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)处。 org.jnp.interfaces.NamingContext.lookup(NamingContext.java:728)处的NamingServer_Stub.lookup(未知源)org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688)处的javax.naming.InitialContext.lookup( > fr.inra.grignon.persyst.web.jms.JmsMessageProducer.sendJmsTextMessage(JmsMessageProducer.java:74)处的InitialContext.java:411)> fr.inra.grignon.persyst.web.servlet.DoResultats.doPost(DoResultats。 ja va:407),位于javax.servlet.http.HttpServlet.service(HttpServlet.java:650),位于javax.servlet.http.HttpServlet.service(HttpServlet.java:731),位于> org.apache.catalina.core.ApplicationFilterChain .internalDoF ilter(Appl icationFilterChain.java:303)位于> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:208)位于> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 52)在> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:241)在> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:208)在> org.apache。在org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:122)处的catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:220)在org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve .org:.java:44)在> org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica torBase.java:505)在> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:170)在> org .org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:103)在> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)在> o rg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:116)在> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav a:423)在> org.apache.coyote.http11。 > org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:620)上的AbstractHttp11Processor.process(AbstractHttp 11Processor.java:1079)在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoin t .java:316),网址为> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor。 Java:1145),位于> org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskTh read.java:61),位于> java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor .java:615),位于java.lang.Thread.run(Thread.java:745)

由于某些原因,我同时使用了JBoss和Tomcat。 在JBoss jmx控制台中,我有:(我将其作为缩进的图像插入)

在此输入图像描述

我不知道问题出在哪里以及为什么连接没有绑定。 在此先感谢您的帮助 !

如果您在JEE环境中运行,则容器将期望使用JNDI名称,因为您希望容器管理资源不是本机执行,因此请为您感兴趣的队列创建JMS资源,然后使用适当的队列。要访问它的JNDI名称,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM