我正在尝试制作我的第一个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
答案 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>
解决了问题。