JMS-производитель в компоненте Session для JBoss AS 6 создает исключение - PullRequest
3 голосов
/ 01 апреля 2012

Использование JBoss AS 6.1.0 Final с профилем развертывания «по умолчанию».

Мне нравится отправлять сообщение JMS из сессионного компонента. Я установил следующее:

/ сервер / по умолчанию / развернуть / My-hornetq-JMS:

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

    <queue name="queue/DummyMDBean">
        <entry name="jms/DummyMDBean"/>
    </queue>
</configuration>

В бобе у меня есть:

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class Demo implements DemoRemote, DemoLocal {
    ...
    @Resource(mappedName = "java:/ConnectionFactory")
    private static QueueConnectionFactory queueConnectionFactory;

    @Resource(mappedName = "/jms/DummyMDBean")
    private static Queue queue;

    public void example() {
        QueueConnection queueConnection = null;
        try {
            queueConnection = queueConnectionFactory.createQueueConnection();
        } catch (JMSException e) {
            System.out.println("Exception occurred: " + e.toString());
            e.printStackTrace();
        }

        try {
            QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            QueueSender queueSender = queueSession.createSender(queue);

            // Send a text message:
            TextMessage textMessage = queueSession.createTextMessage();
            textMessage.setText("Hello World");

            queueSender.send(textMessage);
        } catch (JMSException e) {
            System.out.println("Exception occurred: " + e.toString());
            e.printStackTrace();
        } finally {
            closeConnection(queueConnection);
        }
    }

Я получаю следующую ошибку:

15:46:05,011 INFO  [STDOUT] Exception occurred: javax.jms.JMSException: Failed to create session factory
15:46:05,661 ERROR [STDERR] javax.jms.JMSException: Failed to create session factory
15:46:05,666 ERROR [STDERR]     at    org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:605)
15:46:05,667 ERROR [STDERR]     at org.hornetq.jms.client.HornetQConnectionFactory.createQueueConnection(HornetQConnectionFactory.java:131)
15:46:05,668 ERROR [STDERR]     at org.hornetq.jms.client.HornetQConnectionFactory.createQueueConnection(HornetQConnectionFactory.java:126)
15:46:05,669 ERROR [STDERR]     at com.demo.Demo.example(Demo.java:109)

...

15:46:05,782 ERROR [STDERR]     at java.lang.Thread.run(Thread.java:722)
15:46:05,783 ERROR [STDERR] Caused by: java.lang.NullPointerException
15:46:05,784 ERROR [STDERR]     at org.hornetq.core.client.impl.ServerLocatorImpl.removeFromConnecting(ServerLocatorImpl.java:682)
15:46:05,784 ERROR [STDERR]     at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:751)
15:46:05,785 ERROR [STDERR]     at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:601)
15:46:05,785 ERROR [STDERR]     ... 180 more

строка 109 - это "queueConnection = queueConnectionFactory.createQueueConnection ();".

Я не изменил ничего по умолчанию, кроме XML выше. Есть идеи по поводу проблемы и как ее исправить?

1 Ответ

2 голосов
/ 01 апреля 2012

Соответствует ли строка 109 в файле Demo.java следующей строке?

QueueSender queueSender = queueSession.createSender(queue);

Я думаю, что queue может быть нулевым. Вы можете попытаться объявить свою очередь следующим образом:

<queue name="queue/DummyMDBean">
    <entry name="/jms/DummyMDBean"/>
</queue>

Обновление:

Использованная фабрика соединений также может создавать проблемы в среде EJB. В AS 6.10 /ConnectionFactory это своего рода неуправляемая фабрика, которая работает в управляемых bean-компонентах Servlets и JSF для создания слушателей прямого назначения (что в контейнере запрещено).

Для использования в EJB кажется, что теперь вы действительно должны использовать java:/jmsXA (в 6.0 и 5.x это отличалось). Э.Г.

@Resource(mappedName = "java:/JmsXA")
private ConnectionFactory queueConnectionFactory;
...