ejb3-используя 2-сохраняемость-единица-в-транзакция - PullRequest
0 голосов
/ 01 сентября 2010

У меня проблемы с подключением к 2 единицам сохранения из одной транзакции с использованием следующего стека технологий,

WLS 10.3.x, Eclipselink 2.1, Oracle 11g JDBC driver, Informix 10 JDBC driver

Используя входные данные этого SO post Я сделал XA-источник данных Oracle совместимым, а Informix ds "Emulate 2-phase commit" - и все заработало. Однако теперь у меня странная проблема.

Я использую автономный Java-клиент для вызова моей SLSB ejb 3, которая в свою очередь вызывает сущности JPA. Проблема, с которой я сталкиваюсь, заключается в том, что она работает в первый раз, во второй раз она не выдает никаких исключений, но не обновляет данные ни в одной из баз данных, а в третий раз выдает исключение, в котором говорится, что «транзакция уже была принята», как если бы приложение Диспетчер транзакций сервера JTA удерживает исходный контекст транзакции. Обратите внимание, что эти 3 вызова являются отдельными и последовательными, при этом каждый вызов завершается, когда клиент выходит из процесса клиента. Проблема очень постоянна и возникает в той же последовательности каждый раз, когда я перезагружаю сервер приложений.

Цените любой вклад!

1 Ответ

0 голосов
/ 02 сентября 2010
<persistence-unit name="TopLinkDB" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/oracleDS</jta-data-source>
    <class>com.home.domain.Property</class>
    <properties>
        <property name="eclipselink.target-server" value="WebLogic_10" />
    </properties>
</persistence-unit>     
<persistence-unit name="TopLinkINFO" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/infoDS</jta-data-source>
    <class>com.home.domain.GlobalNumber</class>
    <properties>
        <property name="eclipselink.target-server" value="WebLogic_10" />
    </properties>
</persistence-unit>
...