gpt4 book ai didi

java - @ManagedBean 类内回滚失败

转载 作者:行者123 更新时间:2023-11-30 04:12:18 33 4
gpt4 key购买 nike

我在@ManagedBean类中使用Bean管理事务来手动管理事务,

@ManagedBean(name = "clients")
@ViewScoped
@URLMapping(id = "sousc", pattern = "/ccf_sicavs_customers", viewId = "/customers/PgSouscripteurs.jsf")
@TransactionManagement(TransactionManagementType.BEAN)
public class SouscripteursBean extends Referentiel implements Serializable {
@Resource
private UserTransaction ut;
@EJB
private CustomerDaoLocal ejbCust;
public void createCustomer() {
try {
LOGGER.info("Debut de la transaction");
ut.begin();
LOGGER.info("begin() succeded");
currentMorale.setCodeSouscripteur("25");
saved=ejbCust.createCustomer(currentMorale);
ut.commit();
LOGGER.info("commit() succeded");
} catch (Exception e) {
saved=false;
try {
ut.rollback();
LOGGER.info("rollback() succeded");
} catch (Exception ex) {
LOGGER.log(Level.SEVERE,null,ex);
}
}
}
}

但是如果在commit()之前抛出异常,则rollback()失败并抛出这个java.lang.IllegalStateException:

SEVERE: java.lang.IllegalStateException: Transaction is not active in the current thread.
at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.validateTransactionManager(JavaEETransactionManagerJTSDelegate.java:447)
at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.rollbackDistributedTransaction(JavaEETransactionManagerJTSDelegate.java:208)
at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.rollback(JavaEETransactionManagerSimplified.java:899)
at com.sun.enterprise.transaction.UserTransactionImpl.rollback(UserTransactionImpl.java:234)

最佳答案

我认为您有这个异常(exception),因为事务位于 EJB 容器范围之外。JSF 应用程序是 EJB 服务客户端,该应用程序位于 WEB 容器范围内。

通常,您不会在 JSF 托管 bean 中执行任何业务逻辑。托管 bean 只是 JSF ModelViewController 体系结构中的 Controller 。业务逻辑应该在 ejb 内部完成,并将它们注入(inject) JSF 托管 bean 中,并且仅调用具有功能的 EJB 方法。事务、持久性、安全性等应该在 EJB 内部完成。

底线,事务应该在该 EJB 的 createCustomer() 方法内完成,而不是在托管 bean 中完成。

试试吧!

关于java - @ManagedBean 类内回滚失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19313453/

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