Как интегрировать поддержку предоставление ресурсов связи и ССТ сделок в моем J2SE приложения?
Привет Крис
Есть два элемента этой проблемы:
1) Создание API JTA, в основном UserTransaction, доступный для кода приложения, так что он может начать и конец транзакции. В среде Java EE он публикуется в известном месте в JNDI. Если у вас есть реализация JNDI, это путь (используйте класс JNDIManager JBossTS, чтобы помочь вам с настройкой). В противном случае вам нужен какой-либо заводской объект или механизм впрыска. Конечно, вы также можете разоблачить класс реализации непосредственно перед конечным пользователем, но это несколько неприятно, поскольку это ограничивает возможность замены JTA в будущем.
public javax.transaction.UserTransaction getUserTransaction() {
return new com.arjuna.ats.internal.jta.transaction.UserTransactionImple();
}
Все права защищены. Все права защищены. Все права защищены. Все права защищены. Некоторые контейнеры также публикуют класс TransactionManager для приложений аналогичным образом, но он действительно предназначен для использования самим контейнером и редко требуется кодом приложения.
2) Автоматический ввод в действие XAResources автоматически. Менеджеры ресурсов, т. Е. Базы данных и очереди сообщений, имеют драйверы, реализующие XAResource. Каждый раз, когда приложение получает соединение с менеджером ресурсов, соответствующий XAR-источник должен быть передан в реализацию JTA, чтобы он мог управлять диспетчером ресурсов как часть 2PC. На большинстве серверов приложений есть JCA, который обрабатывает это автоматически. В средах без одного вам нужна альтернатива, чтобы сохранить код приложения от необходимости выполнять эту утомительную задачу вручную. TransactionalDriver в комплекте с JBossTS обрабатывает это для соединений JDBC. XAPool также заслуживает рассмотрения.
JBossTS был встроен во многие среды на протяжении многих лет. Некоторые из уроков описаны в Руководстве по интеграции http://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/atsintegration/docs/], и если вы хотите, проработанный пример можно посмотреть на TOMCAT интеграционной работе http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/tomcat-integration/] ТМ
JBoss является ужасным. По крайней мере, если вы надеетесь на транзакции ACID.
Привет Эриксон
Я не думаю, что я бы так далеко, как «ужасно». Это невероятно мощная и настраиваемая конфигурация, которая может привести к тому, что внешний вид устройства станет немного сложным для новичков. Правильная конфигурация восстановления особенно сложна, поэтому я полностью одобряю ваш комментарий о тщательном тестировании. Кроме того, я не знаю каких-либо документированных тестовых примеров, в которых в настоящее время он не может обеспечить результаты ACID при использовании с совместимыми с спецификациями менеджерами ресурсов. Если у вас есть такой случай или просто более конструктивные предложения по улучшению, сообщите JBoss, чтобы проблема могла быть решена.
Не изобретайте велосипед. Используйте весеннюю рамку . Он уже предоставляет эту функциональность и многое другое.
-1 Весна не обеспечивает реализацию JTA, просто обертка для различных сторонних производителей. Это распространенное недоразумение.
JTA поддерживает локальные транзакции и глобальные транзакции.
Другое заблуждение, я боюсь. Спецификация JTA имеет дело только с XA, то есть с глобальными транзакциями. Существуют различные известные методы для создания менеджера транзакций JTA для локальных транзакций. Обычно это связано с завершением соединения в XAResource. Хотя большинство реализаций поддерживают это, это фактически выходит за рамки спецификации, и поэтому вы должны проверить у поставщика, прежде чем выбирать реализацию JTA, если вам нужно это поведение.
JBoss's TM ужасно. По крайней мере, если вы надеетесь на транзакции ACID. Лучшее, что можно сказать об этом, это то, что он, вероятно, не испортится, пока ему не придется бороться с любыми отказами. И это не одно ... большинство менеджеров транзакций (даже некоторых коммерческих) действительно не работают. Вы должны проверить их строго, как я сказал в своем предыдущем ответе. http://stackoverflow.com/questions/777636/what-is-a-good-open-source-j2se-jta-transactionmanager-implementation – erickson
Если это так плохо, мне придется рассмотреть альтернативы. Битроникс смутил меня, когда я попытался понять, как его использовать, так что ... ну, следовательно, этот вопрос. –
@erickson, если вы собираетесь сделать заявление вроде JBossTM, это ужасно - по крайней мере, дайте несколько причин. –