大家好,我需要一些关于下一个问题的帮助:我有一个完美运行的JPA/无状态EJB项目,它只执行简单的查询和持久化操作,但现在我需要执行一组持久化操作,如果有任何一个操作失败,我必须执行回滚操作,所以我找到了JTA可以完成这项工作,使用下面的源代码:
@Stateless
public class ProjectBean implements IProject {
@Resource
javax.transaction.UserTransaction utx;
@PersistenceContext(unitName = "JPADB")
private EntityManager entityManager;
...
//more code
//this is part of a method
try{
utx.begin();
entityManager.joinTransaction();
for(Project p:projectResultList){
entityManager.persist(p);
}
utx.commit();
}catch(Exception e){
e.printStackTrace();
if(utx != null)
try {
utx.rollback();
} catch (IllegalStateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SystemException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//tx.rollback();
}
这个功能根本不起作用,以下是persistence.xml的内容:
<persistence-unit name="JPADB">
<jta-data-source>java:jboss/datasources/OracleBic</jta-data-source>
<properties>
<property name="hibernate.show_sql" value ="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
</properties>
</persistence-unit>
我希望有人能给我一些提示或建议,我是一个对JPA/JTA概念不熟悉的新手,我尝试了很多在网上找到的代码,但总是会出现不同的错误(线程上的错误事务:期望TransactionImple usertransaction begin,同时使用JTA时无法使用EntityTransaction)。提前感谢。
@Resource private SessionContext context;
,并在异常捕获块中调用context.setRollbackOnly();
。 - remigio