Я пытаюсь создать маршрутизатор для интеграции нескольких тем и очередей JMS. Меня ограничивает тот факт, что клиент, на которого я работаю, не может изменить реализацию JMS (TibCo EMS с некоторыми пользовательскими клиентскими библиотеками), а также тот факт, что они написали свой собственный менеджер транзакций XA, который не совсем соответствует спецификации JTA. . Очень важно, чтобы доставка сообщения была гарантирована.
Я много читал и экспериментировал с Camel, и я понял, что мне, вероятно, нужно написать свой собственный компонент JMS, поскольку стандартный компонент JMS не собирается интегрироваться с клиентскими библиотеками JMS или TM, которые у меня есть.
Мне нужно иметь возможность добавлять крючки в жизненный цикл маршрута в следующих точках:
Во время запуска маршрута мне нужно идентифицировать все соединения JMS и задействовать их как ресурсы XA с реализацией TM.
Когда сообщение получено потребителем, мне нужно начать транзакцию, включающую все соединения JMS на маршруте.
Когда решение о маршрутизации принято, мне нужно отправить сообщение производителю и зафиксировать транзакцию.
Учитывая вышесказанное, я думаю, что могу реализовать очень упрощенную версию компонента camel-jms, которая удаляет все части Spring и содержит только самый минимум, необходимый для взаимодействия с моими библиотеками JMS.
Где лучше всего инициализировать менеджер транзакций? Я просматривал DefaultCamelContext, RoutePolicy и RouteContext, но не могу найти место, где разрешены и инициализированы все конечные точки.