2013-07-04 4 views
4

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

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

Конфигурация управления транзакциями 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-файл/весна/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 configuration - how to set TransactionManager?

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

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

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

+0

Каково имя класса менеджера транзакций, предоставленного JTA по умолчанию? Я замечаю, что дистрибутив TomEE + включает в себя geronimo-транзакцию и openejb-core, оба из которых имеют справедливый бит транзакций в них. –

ответ

3

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

+0

Юкка, спасибо, да, я попробовал java: comp/env/TransactionManager. Я просмотрел страницу документации, на которую вы ссылались, но она говорит об объявлении источников данных и диспетчера транзакций в tomee.xml, который, как я понимаю, настраивает весь экземпляр сервера для всех приложений; Я просто хочу настроить datasoure и диспетчер транзакций для одного приложения. (отредактированный вопрос, чтобы уточнить это) –

+0

Spring не создаст для вас базовый менеджер транзакций, управляемый контейнером или источники данных, поэтому вам нужно объявить их в файле tomee.xml (или в другом конфигурационном файле для конкретного контейнера). Я не знаю, позволяет ли TomEE ограничить сферу охвата одним приложением. – Jukka

+0

Но если вам действительно нужно, вы можете объявить диспетчер транзакций TomEE и источники данных в виде beans в вашей конфигурации spring. Но лично мне просто нужно было управлять контейнером и не беспокоиться о деталях. – Jukka