Показаны сообщения с ярлыком XA. Показать все сообщения
Показаны сообщения с ярлыком XA. Показать все сообщения

вторник, апреля 26, 2016

ServiceMix Atomikos XA transaction JDBC JMS

Снова вернемся к важному вопросу о XA транзакциях. Рассмотрим реализацию XA транзакций с использованием популярного менеджера распределенных транзакций Atomikos. Это широко используемый диспетчер транзакций JTA с открытым исходным кодом, который предназначен для сред отличных от J2EE. Это как раз наш случай.
В данном примере будет представлена готовая конфигурация транзакций.
Приложение разделено на модули, которые разделяют настройку ресурсов, от бизнес логики. Фактически вы можете установить модули в ServiceMix и заняться разработкой, не разгребая как во многих других примерах системную и бизнес логику.
Итак модули:
  1. ts - поднимает транзакционные артефакты JtaTransactionManager, UserTransactionManager, UserTransactionImp
  2. ds - поднимает транзакционный источник данных на примере БД Oracle OracleXADataSource, AtomikosDataSourceBean
  3. amq - поднимает транзакционные артефакты для работы с JMS на примере ActiveMQ, ActiveMQXAConnectionFactory, AtomikosConnectionFactoryBean
  4. testXA - приложение для ServiceMix демонстрируещее работающие транзакции 
Контекст модуля ts определяет два бина txMgr и userTransaction. Классы реализации предоставляются Atomikos и реализуют интерфейсы TransactionManager и UserTransaction из стандарта J2EE. После этого определяется бин jtaTxMgr с классом реализации JtaTransactionManager и внедряются два бина транзакций предоставляемые Atomikos. Это информирует Spring о необходимости использования Atomikos JTA для управления транзакциями. Далее сконфигурированный менеджер транзакций выставляется как osgi-сервис, чтобы позволить другим модулям его переиспользовать.

четверг, января 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. Это первая часть большого примера.