Необходимо указать имя класса в среде или системном свойстве, либо в качестве параметра апплета, либо в файле ресурсов приложения. - PullRequest
2 голосов
/ 10 августа 2011

Я новичок в JMS и изучаю следующий пример

public class SendRecvClient
{
    static CountDown done = new CountDown(1);
    QueueConnection conn;
    QueueSession session;
    Queue que;

public static class ExListener 
    implements MessageListener
{
    public void onMessage(Message msg)
    {
        done.release();
        TextMessage tm = (TextMessage) msg;
        try {
            System.out.println("onMessage, recv text=" + tm.getText());
        } catch(Throwable t) {
            t.printStackTrace();
        }
    }
}

public void setupPTP()
    throws JMSException, 
           NamingException
{
    InitialContext iniCtx = new InitialContext();
    Object tmp = iniCtx.lookup("ConnectionFactory");
    QueueConnectionFactory qcf = (QueueConnectionFactory) tmp;
    conn = qcf.createQueueConnection();
    que = (Queue) iniCtx.lookup("queue/testQueue");
    session = conn.createQueueSession(false,
                                      QueueSession.AUTO_ACKNOWLEDGE);
    conn.start();
}

public void sendRecvAsync(String text)
    throws JMSException,
           NamingException
{
    System.out.println("Begin sendRecvAsync");
    // Setup the PTP connection, session
    setupPTP();

    // Set the async listener
    QueueReceiver recv = session.createReceiver(que);
    recv.setMessageListener(new ExListener());

    // Send a text msg
    QueueSender send = session.createSender(que);
    TextMessage tm = session.createTextMessage(text);
    send.send(tm);
    System.out.println("sendRecvAsync, sent text=" + tm.getText());
    send.close();
    System.out.println("End sendRecvAsync");
}

public void stop()
    throws JMSException
{
    conn.stop(); 
    session.close();
    conn.close();
}

public static void main(String args[])
    throws Exception
{
    SendRecvClient client = new SendRecvClient();
    client.sendRecvAsync("A text msg");
    client.done.acquire();
    client.stop();
    System.exit(0);
}

}

Я запустил это в JBoss, и он выдал следующее исключение

Начать sendRecvAsync Исключение в потоке "основной" в javax.naming.spi.NamingManager.getInitialContext (NamingManager.java:645) в javax.naming.InitialContext.getDefaultInitCtx (InitialContext.java:288) в javax.naming.InitialContext.getURLOrDefaultInitCtx (InitialContext.java:325) в javax.naming.InitialContext.lookup (InitialContext.java:392) в se.cambio.jms.SendRecvClient.setupPTP (SendRecvClient.java:53) at se.cambio.jms.SendRecvClient.sendRecvAsync (SendRecvClient.java:68) at se.cambio.jms.SendRecvClient.main (SendRecvClient.java:95)

Я думаю, что это ошибка с именем JNDI, но я не смог найти какой XML-файл для редактирования в JBOSS, чтобы преодолеть эту проблему. Пожалуйста, кто-нибудь, помогите мне.

...