Продолжение. См. предыдущую часть.
(см. продолжение)
Транзакции и SOA-платформа JBossESB
OK, все это интересно, но выглядит так, как будто больше подходит для баз данных, нежели чем для сервис-ориентированной архитектуры. Как транзакционная модель соотносится с SOA-платформой JBossESB, в которой есть только сообщения и сервисы?
Вот как это выглядит: транспортный уровень платформы (InVM[3] и JMS) поддерживает транзакционную доставку сообщений. Фактическая доставка сообщения не произойдет, пока транзакция не будет зафиксирована. Как можно произвести откат транзакции в командном потоке сообщений (action pipeline)? Для этого нужно сконфигурировать приложение и его сервисы на использование транзакций, а затем вбросить исключение RuntimeException в командный поток сообщений. Лучшим способом объяснить и проиллюстрировать это - будет пример программы, который послужит "быстрым стартом" в SOA-платформу.
Быстрый старт
Одной из хороших особенностей SOA-платформы является постоянно развивающаяся база наработок простых примеров, "быстрые старты", иллюстрирующие ее различный функционал. Все это является хорошим ресурсом для создания собственных приложений. В нашем примере мы рассмотрим "быстрый старт", который называется "jms_transacted".
Данный "быстрый старт" иллюстрирует использование транспорта JMS в SOA-платформе JBossESB для обработки транзакций. "Быстрый старт" так же показывает обратное получение сообщений, на базе транспорта JMS. Прежде чем мы исследуем код "быстрого старта", конфигурационные файлы и получаемый результат, будет важным остановиться на использовании в "быстром старте" - JCA (Java Connector Architecture) [4]. JCA обеспечивает стандартизированный способ подключения к провайдерам JMS. В SOA-платформе JBossESB - JMS-JCA-провайдеры предоставляют поддержку транзакций командного потока сообщений, заключая их в JTA-транзакции[5]. Эти транзакции гарантируют обработку сообщений в пределах транзакции. Если что-то пойдет не так, сообщения будут помещены в очередь JMS для повтора операции. Мы увидим все это, когда запустим пример из "быстрого старта".
Последовательность действий в примере из "быстрого старта":
- Как и во многих "быстрых стартах" по SOA-платформе, все начнется с JMS-сообщения, отправленного к сервису, что и послужит стартом командного потока сообщений.
- При старте командного потока сообщений - в базу данных HSQLDB из "быстрого старта" - вставится новая строка. Обратите внимание, что для данного, полностью функционального примера - мы используем базу данных HSQLDB, хотя все полностью обеспечивается и для других баз данных, например и для MySQL, и для Oracle, и для PostgreSQL, и т.д.
- Затем, для вброса исключения, мы используем класс org.jboss.soa.esb.samples.quickstart.jmstransacted.test.ThrowExceptionAction. Этот класс сконфигурирован так, чтобы 5 раз вбросить исключение, для принудительного осуществления отката транзакции (roll back), которая охватывает и запись в базу данных. Каждый раз, когда будет вкидываться исключение, JCA-адаптер будет осуществлять откат транзакции. Исключение так же распространится до самого JCA-адаптера и сообщение об ошибке запишется в лог.
- После того, как будет достигнуто 5 сконфигурированных откатов транзакций, выполнит свою работу класс org.jboss.soa.esb.samples.quickstart.jmstransacted.test.DBInsertAction и транзакция зафиксируется в классе SOA-платформе JBossESB org/jboss/soa/esb/common/JBossESBTransactionService таким образом, чтобы конечным результатом стало помещение только одной строки в базу данных.
Теперь мы подробно рассмотрим, как сконфигурировать транзакцию и как все это будет выглядеть после запуска.
(см. продолжение)
Комментариев нет:
Отправить комментарий