Могу ли я установить нетранзакционную фабрику соединений JMS в WebSphere? - PullRequest
1 голос
/ 12 октября 2011

Завод будет основан на Поставщик сообщений по умолчанию .

Причина для этого в том, что вместо внешней системы, обычно подключенной через Websphere MQ, используется фиктивный MDB Макет и тестируемое приложение установлены на одном сервере, поэтому мне нужно убедиться, что в цикле

request -> mock listener -> mock reply -> response

request и reply - две отдельные транзакции.

Я не вижу никакой опции в консоли, чтобы удалить фабрику из-под контроля менеджера транзакций.

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

Вы правы, отметив, что фабрика соединений JMS не может быть настроена так, чтобы не подключаться к текущей транзакции.Я немного не уверен в том, чего вы пытаетесь добиться здесь, но я собираюсь сделать следующее предположение:

  1. Клиент отправляет сообщение
  2. Слушатель принимает сообщение и отправляет ответ
  3. Клиент получает ответ

В этом случае клиент должен отправить и зафиксировать сообщение, прежде чем слушатель получит его для отправки ответа.Слушатель может получать и отвечать за одну транзакцию, но клиенту нужны две.Кроме того, я предполагаю, что клиент является EJB.

Одним из решений этой проблемы было бы использование управляемых компонентом транзакций.В этом случае вы можете вручную начать транзакцию и зафиксировать ее около 1, а затем около 3. Это приведет к отправке сообщения.

Другим решением было бы выполнить метод EJB с помощью requireNew иполучить в другом EJB-методе с RequNew.Затем клиент вызывает метод EJB отправки, а затем метод EJB получения, и каждый метод имеет свою собственную транзакцию.

0 голосов
/ 12 октября 2011

Разве вы не можете сделать это из ejb-jar.xml?

<enterprise-beans>
    <message-driven id="MDB">
        <ejb-name>MDB</ejb-name>
        <ejb-class>com.myapp.listener.MDB</ejb-class>
        <messaging-type>javax.jms.MessageListener</messaging-type>
        <transaction-type>Container</transaction-type>
        <message-destination-type>javax.jms.Queue</message-destination-type>
    </message-driven>
</enterprise-beans>

<assembly-descriptor>
    <container-transaction>
        <method>
            <ejb-name>MDB</ejb-name>
            <method-name>onMessage</method-name>
            <method-params>
                <method-param>javax.jms.Message</method-param>
            </method-params>
        </method>
        <trans-attribute>Never</trans-attribute>
    </container-transaction>
</assembly-descriptor>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...