2009-05-08 2 views
4

Предположим, что я хочу реализовать контейнер приложения. Не полный стек Java EE, но мне нужно предоставить доступ к ресурсам и транзакциям JDBC к стороннему коду, который будет развернут в приложении, которое я пишу.Что мне нужно сделать, чтобы интегрировать JTA в приложение Java SE?

Предположим, что я рассматриваю JBossTS для транзакций. Насколько я могу судить, я не согласен с этим, но, похоже, это лучше всего подходит для того, что мне нужно делать.

Как интегрировать поддержку для , предоставляя ресурсы подключения и транзакции JTA в мое приложение Java SE?

+2

JBoss's TM ужасно. По крайней мере, если вы надеетесь на транзакции ACID. Лучшее, что можно сказать об этом, это то, что он, вероятно, не испортится, пока ему не придется бороться с любыми отказами. И это не одно ... большинство менеджеров транзакций (даже некоторых коммерческих) действительно не работают. Вы должны проверить их строго, как я сказал в своем предыдущем ответе. http://stackoverflow.com/questions/777636/what-is-a-good-open-source-j2se-jta-transactionmanager-implementation – erickson

+0

Если это так плохо, мне придется рассмотреть альтернативы. Битроникс смутил меня, когда я попытался понять, как его использовать, так что ... ну, следовательно, этот вопрос. –

+0

@erickson, если вы собираетесь сделать заявление вроде JBossTM, это ужасно - по крайней мере, дайте несколько причин. –

ответ

1

Я решила использовать Bitronix Transaction Manager, чтобы решить эту проблему, хотя, по-видимому, есть по крайней мере один другой вариант, который не был очевидным для меня в то время (Atomikos).

Решение этого вопроса потребовало от меня использовать также JNDI-провайдера Tomcat, чтобы связать транзакцию с именем JNDI. Из-за ограничения этого провайдера я не мог использовать имя по умолчанию для JTA UserTransaction, которое не сразу видно из документации.

Спасибо всем за полезные ответы в любом случае!

2

Не изобретайте велосипед. Используйте Spring Framework. Он уже обеспечивает эту функциональность и многое другое.

+0

«намного больше» не обязательно хорошо. – erickson

+1

erickson, вы прибили его там. Весна несет модель программирования, которая не работает с тем, что я хочу сделать. –

+0

Ну, вы можете просто использовать нужные функции и игнорировать остальные, но если вы не можете использовать модель программирования стиля DI, я согласен, что нет смысла использовать ее. Похоже, что это довольно пустая трата для создания сопоставимой структуры, если только это не та бизнес, в котором вы находитесь. – Robin

2

Вы можете использовать Весну, так как я не настолько увлечен.

Пример того, что вы можете это here

+1

Spring не предоставляет TransactionManager, он имеет только тезисы для транзакций. –

2

JTA поддерживает локальные транзакции и глобальные транзакции.

Локальные транзакции могут быть легко обработаны пружиной, JPA или даже ручной фиксацией соединений.

Глобальные сделки REQUIRE координатор транзакций. Это отдельный продукт/библиотека, которая недоступна в открытом доступе (или, по крайней мере, я не знаю об этом).

Итак, если я смотрю на заголовок вашего сообщения («JTA»), то ответ NO SIMPLE WAY.

Если я прочитал вашу публикацию («предоставить доступ к ресурсам и транзакциям JDBC»), я бы сказал, что Весна, JPA и Hibernate будут покрывать ваши потребности (как я их понял).

P.S. Исправление: JTA не действительно поддерживает локальные транзакции (так как люди указали на меня), но случай, когда вам нужно только одно соединение, по существу, является локальной транзакцией, даже если она контролируется JTA, особенно когда Transaction Manager расположенный в той же JVM (как это часто бывает).

7

Как интегрировать поддержку предоставление ресурсов связи и ССТ сделок в моем 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, если вам нужно это поведение.

+0

Вы правы, JTA только для XA. Тем не менее, некоторые люди используют его для одного соединения, и в этом случае он вряд ли отличается от локальной транзакции. Извините за неряшливое объяснение. –

3

Пробег: Atomikos TransactionsEssentials.

В отличие от конкурирующих реализаций JTA/XA с открытым исходным кодом, этот был написан с самого начала для JSE. Следовательно, он предлагает премиальные JDBC и JMS-пулы, а также функциональность JTA/XA, и вам будет очень легко интегрироваться в ваши приложения.

Лучшие Guy

2

«JBoss's TM ужасно. По крайней мере, если вы надеетесь на транзакции ACID. Лучшее, что можно сказать об этом, это то, что он, вероятно, не испортит, пока ему не придется бороться с любыми отказами И это не одно ... большинство управляющих транзакциями (даже некоторые коммерческие) действительно не работают ».

Не знаете, какую домашнюю работу вы сделали, чтобы сделать вышеуказанное утверждение, но JBossTS (TM в JBoss с 2006 года, когда он был приобретен) действительно обеспечивает полную семантику ACID. Он также был первоначально частью набора HP NetAction, где он был развернут в более важных приложениях, чем любые другие TM с открытым исходным кодом.

+0

+1 Я всегда слышал хорошие вещи об ArjunaTS (для тех, кто заинтересован, есть хорошая [нить] (http://www.theserverside.com/news/thread.tss?thread_id=37941) на TSS). –

Смежные вопросы