В JBoss 5.1.0 у меня есть источник данных (PostgreSQL 8.3.11), настроенный с использованием *-ds.xml (стандартный jboss DS). Он использует XADataSource (PGXADataSource). У меня также есть брокер ActiveMQ (сейчас он работает как в виртуальной машине под JBoss, но последний будет на отдельном сервере).
Что я хочу сделать, так это заставить фабрику соединений ActiveMQ и источник данных участвовать в транзакциях XA. Например, я хочу обновить запись БД и отправить сообщение JMS как UOW. Вы поняли идею.
Я настроил PGXADataSource в файле my-pg-ds.xml, и он работает (я могу отслеживать выполнение до метод запуска PGXAConnection). Я попытался настроить ActiveMQXAConnectionFactory. непосредственно в Spring (я использую Spring 3.0.2.RELEASE), но это не работает, потому что в этом случае менеджер транзакций Spring (я использую аннотацию, чтобы позволить Spring настроить JtaTransactionManager, который просто делегирует всю работу диспетчеру транзакций Jboss) не зачисляет XAResource для данного ActiveMQXAConnection. Всякий раз, когда я пытаюсь отправить сообщение, я получаю исключение JMSException, говорящее: «XAResource сеанса не был включен в распределенную транзакцию». выброшено из ActiveMQXASession.
Поскольку это не сработало, я переключился на конфигурацию JCA ActiveMQ ConnectionFactory (на основе этот документ), и он работает для обычных ConnectionFactory, но я не понимаю, как настроить его для использования XAConnectionFactory. Похоже, что адаптер ресурсов просто не имеет надлежащего ManagedConnectionFactory , ManagedConnection и т. д. реализации для фабрики соединений XA.
Я что-то упустил или у меня нет другого выбора, кроме как написать XA-оболочки для адаптера ресурсов?