gpt4 book ai didi

jpa - 将 JTA 事务与 EJB 和 JPA 结合使用

转载 作者:行者123 更新时间:2023-12-04 21:35:56 26 4
gpt4 key购买 nike

大家好,我正在为下一个问题寻求帮助:我有一个 jpa/stateless ejb 的 proyect,它工作得很好,它只做简单的查询和持久化操作,但现在我需要执行一组持久化操作,如果其中任何一个失败,我必须执行回滚,所以我发现 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 概念的新手,我尝试了很多我在网上找到的代码,但我总是得到不同的错误(线程上的错误 tx:预期的 TransactionImple usertransaction开始,在使用 JTA 时不能使用 EntityTransaction)。提前致谢。

最佳答案

您是否指示您的 AS 您将手动处理交易@TransactionManagement(TransactionManagementType.BEAN) 在方法级别?我没有看到类级别的注释。可能你在方法级别上有它,但你的代码片段不足以做出任何猜测。否则所有事务都是容器管理的,您的代码将无法工作。所以你必须要么把@TransactionManagement(TransactionManagementType.BEAN)在方法或类级别上取决于要求,或者您可能希望允许您的容器为您管理事务,而不是您必须按照@remigio 向您建议的进行更改。看来第二种方法更适合你的情况

关于jpa - 将 JTA 事务与 EJB 和 JPA 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com