使用UserTransaction时出现IllegalStateException(Java EE)

时间:2013-06-12 11:58:02

标签: java-ee-6 openjpa illegalstateexception

我正在尝试制作我的第一个Java企业应用程序并使用UserTransaction。 因此,我使用JNDI Lookup和java: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 Version 6

1 个答案:

答案 0 :(得分:0)

自己解决问题。我在我的DataSourceDefinition name = "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>解决了问题。