Как мне получить доступ к диспетчеру транзакций JTA TomEE?

У меня есть приложение, использующее декларативное управление транзакциями Spring. Как я могу развернуть это в контейнере TomEE +, чтобы приложение использовало диспетчер транзакций TomEE JTA?

В частности, как я могу обратиться к встроенному диспетчеру транзакций из файла Spring application-context.xml?

Конфигурация управления транзакциями Spring, похоже, хочет искать диспетчер транзакций либо по ссылке на bean-компонент, либо с помощью поиска JNDI; Я потратил день на изучение этого и просмотр исходного кода; Я нашел много дискуссий по этой проблеме (ссылки ниже), но не нашел исчерпывающих инструкций.

Вот что у меня в META-INF / persistence.xml приложения:

<persistence-unit name="myPersistenceUnit" transaction-type="JTA">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <jta-data-source>myDs-managed</jta-data-source>
    <non-jta-data-source>myDs-unmanaged</non-jta-data-source>
    <properties>
        <property name="openjpa.jdbc.DBDictionary" 
            value="org.apache.openjpa.jdbc.sql.PostgresDictionary"/>       
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
        <property name="openjpa.Run
        <property name="openjpa.Log" value="slf4j" />
    </properties>
</persistence-unit>

И в файле приложений META-INF / spring / applicationContext.xml у меня есть следующее: (Я пробовал различные значения для transactionManagerName, как предлагалось в различных обсуждениях темы, так как это кажется нестандартным для серверов приложений

<tx:annotation-driven mode="aspectj" transaction-manager="txManager" />
<bean class="org.springframework.transaction.jta.JtaTransactionManager"
        id="txManager">
        <property name="transactionManagerName" 
                       value=" java:comp/TransactionManager"/>
</bean>

Вот пример, который, как утверждается, работает для JBoss: Конфигурация Spring JTA - как установить TransactionManager?

Вот возможный промах, который не будет работать в файле конфигурации xml: https://issues.apache.org/jira/browse/TOMEE-38.

Вот как это сделать в Java-коде, если у вас есть в руках initialContext: http://osdir.com/ml/users.openejb.apache.org/2012-11/msg00110.html

[Изменить: в документации Tomee говорится о том, как объявить диспетчер транзакций, но в нем говорится, что это нужно делать в Tomee.xml, который принадлежит серверу, а не отдельному веб-приложению; Я хочу настроить диспетчер транзакций для одного приложения, а не для всего сервера: http://tomee.apache.org/containers-and-resources.htmlpting


person Chris Owens    schedule 04.07.2013    source источник
comment
Какое имя класса диспетчера транзакций предоставляет JTA по умолчанию? Я заметил, что дистрибутив TomEE + включает в себя geronimo-transaction и openejb-core, оба из которых содержат довольно много встроенных транзакций.   -  person Chris Owens    schedule 04.07.2013


Ответы (1)


Вы пробовали java:comp/env/TransactionManager для параметра transactionManagerName? , Вы также объявили TransactionManager и DataSource, как описано здесь: http://tomee.apache.org/containers-and-resources.html?

person Jukka    schedule 04.07.2013
comment
Юкка, спасибо, да, попробовал java: comp / env / TransactionManager. Я просмотрел страницу документации, на которую вы ссылались, но там говорится об объявлении источников данных и менеджера транзакций в tomee.xml, который, как я понимаю, настраивает весь экземпляр сервера для всех приложений; Я просто хочу настроить хранилище данных и диспетчер транзакций для одного приложения. (отредактированный вопрос, чтобы прояснить это) - person Chris Owens; 04.07.2013
comment
Spring не будет создавать для вас базовый диспетчер транзакций или источники данных, управляемые контейнером, поэтому вам необходимо объявить их в tomee.xml (или другом конфигурационном файле для конкретного контейнера). Я не знаю, позволяет ли TomEE ограничить их область действия одним приложением. - person Jukka; 04.07.2013
comment
Но если вам ДЕЙСТВИТЕЛЬНО нужно, вы можете объявить диспетчер транзакций TomEE и источники данных как beans в конфигурации Spring. Но лично я хотел бы, чтобы контейнер управлял ими и не беспокоился о деталях. - person Jukka; 04.07.2013
comment
Юкка, просто пусть контейнер ими управляет и не волнуется о деталях - это именно то, чего я пытаюсь достичь. Не могли бы вы мне помочь? - person Chris Owens; 07.07.2013
comment
Оказалось проще, чем ожидалось: <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManagerName" value="java:comp/env/comp/TransactionManager"/> </bean> - person Chris Owens; 25.07.2013