Apache Camel - хранимые процедуры JDBC и сомнения при обработке транзакций

Я пытаюсь создать небольшое доказательство концепции, приложение на основе Camel (работающее на FuseESB), которое, возможно, заменит часть нашей существующей системы интеграции, построенной на EJB. Прямо сейчас я пытаюсь выяснить, как лучше всего справиться со следующим сценарием с apache camel:

  1. Приходит текстовое сообщение JMS
  2. Мне нужно выполнить ряд операций с базой данных на основе содержимого сообщения, вызывая в основном сохраненные процедуры / функции.
  3. из результатов, полученных с помощью вызовов db, я должен создать ответное сообщение и отправить его в конкретную очередь jms.
  4. В случае ошибки / исключения я хотел бы использовать механизм обработки канала мертвой буквы.

Я могу создавать простые маршруты верблюда, обработка ошибок и исключений в верблюде тоже выглядит легко, чего я не понимаю, так это того, как использовать компонент Camel SQL (я понимаю, что компонент JDBC не может быть транзакционным клиентом), чтобы делать все мои вызовы db как часть разовой транзакции. Из того, что я нашел в сети, компонент Camel SQL нельзя использовать для выполнения хранимых процедур - это правда? Если это так, следует ли мне использовать процессоры или простые классы pojo для выполнения вызовов jdbc? А как насчет транзакций в случае использования типов pojo или процессоров? Я был бы очень признателен за любые указатели на ресурсы, описывающие, как обрабатывать такой вариант использования.


person Kris    schedule 21.12.2011    source источник


Ответы (1)


Я бы предложил использовать Java Bean для взаимодействия с JDBC, поскольку вы хотите выполнять несколько вызовов и использовать хранимые процедуры. Иногда код Java проще.

Например, Spring JdbcTemplate имеет хорошую абстракцию по сравнению с JDK JDBC API и позволяет довольно легко вызывать хранимые процедуры.

Альтернатива MyBatis также поддерживает вызов хранимых процедур. http://loianegroner.com/2011/03/ibatis-mybatis-working-with-stored-procedures/

И еще есть компонент camel-mybatis.

person Claus Ibsen    schedule 21.12.2011
comment
Спасибо, Клаус, как насчет транзакции для всего маршрута, допустим, у меня есть моя логика в нескольких bean-компонентах, каждый из которых выполняет код jdbc, если в одном из них произойдет исключение, будет свернут весь маршрут (изменения во всех bean-компонентах, выполняемых на db) назад? - person Kris; 21.12.2011
comment
Затем вам нужно настроить диспетчер TX и заставить его управлять вызовами JDBC. например, обычно, если вы получаете от него соединение с источником данных / jdbc. Если вы используете диспетчер Spring TX, вы можете настроить маршрут Camel для транзакции, а затем Camel выполнит маршрутизацию в TX. И в конце делаем коммит / откат. Просто убедитесь, что вы просматриваете соединение datasource / jdbc с помощью TX API из ваших bean-компонентов, чтобы они могли участвовать в одном TX. - person Claus Ibsen; 21.12.2011