Jakarta ee QueueConnectionFactory查找时发生NameNotFoundException

Jakarta ee QueueConnectionFactory查找时发生NameNotFoundException,jakarta-ee,glassfish,activemq,jndi,Jakarta Ee,Glassfish,Activemq,Jndi,我有一个运行的GlassFish服务器(版本4.1)。现在我感兴趣的是使用jms和独立的消息传递客户端创建一个简单的消息传递服务。(这应该在单独JVM中的远程计算机上运行。)不幸的是,当我尝试初始化QueueConnectionFactory时,仍然会出现NameNotFoundException 这是我的代码: import java.util.Properties; import javax.naming.InitialContext; import javax.jms.*; import

我有一个运行的GlassFish服务器(版本4.1)。现在我感兴趣的是使用jms和独立的消息传递客户端创建一个简单的消息传递服务。(这应该在单独JVM中的远程计算机上运行。)不幸的是,当我尝试初始化QueueConnectionFactory时,仍然会出现NameNotFoundException

这是我的代码:

import java.util.Properties;
import javax.naming.InitialContext;
import javax.jms.*;
import javax.naming.Context;

public class TestJMSQueue {

  public static void main(String[] args) throws Exception{
    String msg = "Hello from remote JMS Client";

    test.sendMessage2Queue(msg);

    System.exit(0);
  }

  private void sendMessage2Queue(String msg) throws Exception {

    props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    props.put(Context.PROVIDER_URL, "mq://localhost:7676");
    props.put("connectionFactoryNames" , "TestQueueConnectionFactory");
    props.put("queue." + "TestQueue", "TestQueue");

    InitialContext ctx = new InitialContext(props);
    System.out.println("Context created");

    ConnectionFactory qFactory = (ConnectionFactory) ctx.lookup("TestQueueConnectionFactory");

    Connection connection = qFactory.createConnection();

    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    TextMessage message = session.createTextMessage();
    message.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
    message.setText(msg);

    Queue queue = (Queue) ctx.lookup("TestQueue");

    MessageProducer mp = session.createProducer(queue);

    mp.send(message);
    System.out.println("Message sent: " + msg);

    mp.close();
    session.close();
    ctx.close();
  }
}
服务器上存在工厂和队列

我正在跟踪并已经为服务器创建了侦听器。 我花了几个小时查看各种资源,试图解决问题,但没有找到解决方案

你能告诉我哪里出错了吗

非常感谢

以下是我一直在寻找的一些资源:

编辑:

我还尝试使用jndi.properties文件,而不是props.put(…)和InitialContext(props)。在InitialContext实例化之前添加以下内容:

properties.put("org.omg.CORBA.ORBInitialHost", "<IP>");
properties.put("org.omg.CORBA.ORBInitialPort", "3700");
//as found [here...][2]
//But as I understand it the solution with 3700 is not for JMS so I also tried it with 7676
试一试


发生了另一个错误:
线程“main”javax.jms.JMSException中出现异常:无法创建传输。原因:java.io.IOException:无法识别传输方案:[mq]
它发生在
连接=qFactory.createConnection()处我已经更新了我的答案,是的,这是什么mq传输??您使用的是独立的ActiveMQ??在本例中,您的url是tcp://localhost:61616Standalone AMQ是性能更好的解决方案!但是您可以很容易地嵌入它,但它最好是独立的。它很容易安装,只需解压缩和启动它
Exception in thread "main" javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [mq]
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:33)
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:232)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:245)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:214)
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:161)
    at testjmsqueue.TestJMSQueue.sendMessage2Queue(TestJMSQueue.java:60)
    at testjmsqueue.TestJMSQueue.main(TestJMSQueue.java:30)
Caused by: java.io.IOException: Transport scheme NOT recognized: [mq]
    at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:25)
    at org.apache.activemq.transport.TransportFactory.findTransportFactory(TransportFactory.java:171)
    at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:76)
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:230)
    ... 5 more
Caused by: java.io.IOException: Could not find factory class for resource: META-INF/services/org/apache/activemq/transport/mq
    at org.apache.activemq.util.FactoryFinder.doFindFactoryProperies(FactoryFinder.java:90)
    at org.apache.activemq.util.FactoryFinder.newInstance(FactoryFinder.java:58)
    at org.apache.activemq.util.FactoryFinder.newInstance(FactoryFinder.java:47)
    at org.apache.activemq.transport.TransportFactory.findTransportFactory(TransportFactory.java:167)
    ... 7 more
    props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    props.put(Context.PROVIDER_URL, "mq://localhost:7676");
    props.put("connectionFactoryNames" , "TestQueueConnectionFactory");
    props.put("queue." + "TestQueue", "TestQueue");
    InitialContext ic = new InitialContext(props);
    ConnectionFactory qFactory = (ConnectionFactory) ic.lookup("TestQueueConnectionFactory");
    Queue  queue  = (Queue ) ic.lookup("TestQueue");