четверг, января 17, 2013

Apache Camel on ServiceMix XA Transaction with database and JMS

Перейдем к одной из самых серьезных задач, без которой не может обойтись ни одна серьезная интеграционная платформа, к XA транзакциям. Для примера возьмем ситуацию близкую к реальности описанную как маршрут Apache Camel.
<camelContext xmlns="http://camel.apache.org/schema/spring">
 <!-- Transactional route -->
 <route>
  <from uri="jmstx:queue:giro" />
  <to uri="jmstx:queue:statusLog" />
  <bean ref="accountService" method="credit" />
  <bean ref="accountService" method="debit" />
 </route>
 <!-- Feeder route -->
 <route>
  <from uri="jmstx:queue:statusLog" />
  <to uri="file:Success" />
 </route>
</camelContext>
В этом маршруте описывается следующее:
  1. Принимает сообщение из JMS-очереди giro
  2. Перенаправляет сообщение в JMS-очередь statusLog, в которой должны быть только успешные сообщения
  3. Меняем состояние базы данных  
Второй маршрут описывает следующее:
  1. Принимает сообщение из JMS-очереди statusLog
  2. Сохраняет сообщение в папке Success
В ходе работы в итоговой папке Success должны находиться только успешные сообщения. При возникновении исключения, состояние в базе не меняется, и файла с транзакцией не оказывается в папке успешных сообщений. В этом примере участвуют 3 транзакционные системы JMS, database и filesystem. Как это заставить работать на ServiceMix и Apache Camel?...

среда, января 16, 2013

JDBC XA DataSource as OSGI Service

В данной заметке я расскажу как использовать базу данных в связке Apache Camel и Apache ServiceMix. Да, конечно можно описать все необходимы и бины и источники данных в конфиге Camel, но тут мы заглянем дальше. Описанные ресурсы будут участвовать в XA-транзации, и все это добро будет крутиться на ServiceMix. Это первая часть большого примера.