Java 在JBoss6中找不到JMS?

Java 在JBoss6中找不到JMS?,java,jboss6.x,Java,Jboss6.x,我已经使用JBoss6运行了示例JMS应用程序 这是hornetq-jms.xml文件 <configuration xmlns="urn:hornetq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd"> <connection-factory na

我已经使用JBoss6运行了示例JMS应用程序

这是hornetq-jms.xml文件

<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">

   <connection-factory name="NettyConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/ConnectionFactory"/>
         <entry name="/XAConnectionFactory"/>
      </entries>
   </connection-factory>

   <connection-factory name="NettyThroughputConnectionFactory">
       <connectors>
         <connector-ref connector-name="netty-throughput"/>
       </connectors>
        <entries>
            <entry name="/ThroughputConnectionFactory"/>
            <entry name="/XAThroughputConnectionFactory"/>
        </entries>
    </connection-factory>

   <connection-factory name="InVMConnectionFactory">
      <connectors>
         <connector-ref connector-name="in-vm"/>
      </connectors>
      <entries>
         <entry name="java:/ConnectionFactory"/>
         <entry name="java:/XAConnectionFactory"/>
      </entries>
   </connection-factory>

   <queue name="DLQ">
      <entry name="/queue/DLQ"/>
   </queue>

   <queue name="ExpiryQueue">
      <entry name="/queue/ExpiryQueue"/>
   </queue>
  <queue name="testQueue">
    <entry name="queue/queueA"/>
  </queue>

  <topic name="testTopic">
    <entry name="/topic/topicA"/>
   </topic>
</configuration>
这是一个示例程序

import java.util.Properties;
import java.util.Scanner;

import javax.jms.*;

import javax.naming.Context;

public class QueueExample implements MessageListener  
{

    public void example() throws Exception
    {
        String destinationName = "queue/queueA";

        Context ic = null;
        ConnectionFactory cf = null;
        Connection connection =  null;

        try
        {         
            ic = getInitialContext();

            cf = (ConnectionFactory)ic.lookup("/ConnectionFactory");
            Queue queue = (Queue)ic.lookup(destinationName);

            connection = cf.createConnection();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            MessageProducer publisher = session.createProducer(queue);
            MessageConsumer subscriber = session.createConsumer(queue);

            subscriber.setMessageListener(this);
            connection.start();

            TextMessage message = session.createTextMessage("Hello!");
            publisher.send(message);

            Scanner keyIn = new Scanner(System.in); 

            System.out.print("JMS Server listening. Type a Key + CR to exit\n");
            keyIn.next();

        }
        finally
        {         
            if(ic != null)
            {
                try
                {
                    ic.close();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    //throw e;
                }
            }

            // ALWAYS close your connection in a finally block to avoid leaks.
            // Closing connection also takes care of closing its related objects e.g. sessions.
            closeConnection(connection);
        }
    }
    public synchronized void onMessage(Message message)
    {
        TextMessage text = (TextMessage)message;
        String strMessage = null;
        try {
            strMessage = text.getText();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Message received: "+strMessage);
    }

    private void closeConnection(Connection con)
    {      
        try
        {
            if (con != null)
            {
                con.close();
            }         
        }
        catch(JMSException jmse)
        {
            System.out.println("Could not close connection " + con +" exception was " + jmse);
        }
    }

    protected boolean isQueueExample()
    {
        return true;
    }

    public static void main(String[] args) throws Exception
    {
        new QueueExample().example();
    }
    public static Context getInitialContext( )
    throws javax.naming.NamingException {

        Properties p = new Properties( );
        p.put(Context.INITIAL_CONTEXT_FACTORY,
                "org.jnp.interfaces.NamingContextFactory");
        p.put(Context.URL_PKG_PREFIXES,
        " org.jboss.naming:org.jnp.interfaces");
        p.put(Context.SECURITY_PRINCIPAL, "testuser");
        p.put(Context.SECURITY_CREDENTIALS, "test");
        p.put(Context.PROVIDER_URL,"jnp://localhost:1099");
        return new javax.naming.InitialContext(p);
        /*Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        props.put(Context.PROVIDER_URL, "remote://localhost:4447");
        props.put(Context.SECURITY_PRINCIPAL, "testuser");
        props.put(Context.SECURITY_CREDENTIALS, "password");
        InitialContext context = new InitialContext(props);*/
    }  
}
如何解决此错误?配置有什么问题吗?
请有人帮帮我。

您的程序似乎想在路径“jms”中从jndi查找某个对象。您可以在JBoss JNDI树中查看绑定对象的位置。也许是“排队”。 我会尝试使用

String destinationName = "/queue/queueA";


而不是“queue/queueA”,将队列放入全局命名空间。
从JMS开始,我将尝试使用servlet作为生产者,使用MDB作为消费者。我想那会更容易。

谢谢siegi。你说得对,我没有找到绑定对象。我不明白你在说什么?。我还在hornetq-jms.xml中配置了相同的名称,并将pgm命名为queue/queueA。我还想做什么?是否可以提供示例应用程序链接?是否尝试了“/queue/queueA”而不是“queue/queueA”?如果您编写“queue/queueA”,JBoss将把队列放入java名称空间(java:/queue/queueA,甚至java:/jms/queue/queueA,我不确定)您无法从JBoss外部访问java名称空间,因此您应该将队列放入全局名称空间,从“/”开始。为了避免名称空间问题,首先从JBoss中访问JMS更容易。因此,我建议使用servlet和MDB来学习JMS。我不使用JBoss6(这是一个死胡同),您可以查看JBoss7示例。它应该也适用于JBoss6,但您可能会在web上找到JBoss6的MDB示例。
String destinationName = "/queue/queueA";
<queue name="testQueue">
  <entry name="/queue/queueA"/>
</queue>