0

我正在尝试制作我的第一个 Java 企业应用程序并使用UserTransactions. 因此,我使用 JNDI Lookupjava:comp/UserTransaction来获取我的 UserTransaction 对象。

public void myMethod(MyEntity e) throws ApplicationException {
    try {
        this.ut = getUserTransaction();
        this.ut.begin();
        this.myStatefulBean.myBusinessMethod(e);
    } catch ...

当我开始我的事务.begin()并尝试调用我的有状态 Bean 中的任何方法(在启动 UserTransaction之前EJBTransactionRolledbackException正常工作)时,我得到一个导致我出现以下错误的错误:

java.lang.IllegalStateException: cannot add non-XA Resource to global JTS transaction

我正在使用的 Bean 带有注释,@DataSourceDefinition因此className = "org.apache.derby.jdbc.ClientXADataSource"没有非 XA 资源。我究竟做错了什么?

我正在使用 openjpa 2.2.1,Java EE 版本 6

4

1 回答 1

0

自己解决了问题。我在我的 DataSourceDefinitionname = "java:global/jdbc/testDB"中用作名称,但在我persistence.xml的 DataSource 名称中定义为<jta-data-source>testDB</jta-data-source>

这似乎适用于 CMT,但不适用于 UserTransaction。更正 persistence.xml 中的条目以<jta-data-source>java:global/jdbc/testDB</jta-data-source>解决问题。

于 2013-06-13T11:46:09.297 回答