Задача
Реализовать прокси-сервис, который:
- принимает по http входящее сообщение, являющееся "пакетным", т.е. состоящим из составных частей, которые должны обрабатываться отдельно друг от друга (Splitter EIP)
- разбивает "пакет" на отдельные сообщения, складывает их по одному в JMS-очедерь
- если все сообщения положились успешно, отвечает на входящий запрос успехом
- если при помещении в JMS хотя бы одного из сообщений возникла ошибка, вся jms-транзакция должны быть откачена и в ответ на входящий запрос должен быть отправлен soapFault
Проблема
Вроде бы, реализация очевидна: iterate-медиатор для итерации по отдельным частям "пакета" и отправка этих "частей" на jms-endpoint посредством send-медиатора. Но проблема заключается в том, что JMSSender (входит в axis2-transport-jms) не умеет работать с jms-транзакциями. Т.е., если посмотреть в исходники, видим:
session = ((QueueConnection) connection).
createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
, где false говорит об отсутствии поддержки транзакций. Т.е. не то что распределенные транзакции, а даже локальные транзакции не поддерживаются при записи в jms с помощью send-медиатора.
Другой вариант - использовать store-медиатор и JMSMessageStore. Однако, открыв исходники JMSMessageStore, видимо практически тоже самое:
return connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Т.о., для реализации указанных требований придется что-то пилить руками, используя напрямую JMS-API.
Добрый день! Не давно начал изучать WSO ESB шину, есть проблемы конвертации SOAP на входе прокси сервиса в обычный текст на выходе (Content-Type: text/plain), с последующей отправкой на сервер. Могу ли я с вами связаться и как то обобщаться на эту тему?
ОтветитьУдалитьДа, можете писать на aspirin.spb@gmail.com
Удалить