gpt4 book ai didi

java - 确定 BMT 或 CMT

转载 作者:行者123 更新时间:2023-11-30 04:42:26 34 4
gpt4 key购买 nike

环境:Java EE 6

如何在Interceptor中判断调用的bean是容器管理的(CMT)还是bean管理的(BMT)?

最佳答案

根据定义,Bean 始终由容器管理。

您可能想知道当前事务是 CMT 还是 BMT。因为@AroundInvoke拦截器方法与拦截的业务方法在同一事务中执行,您可以通过以下方式检查事务类型:

public class SomeInterceptor {
@Resource
private javax.ejb.SessionContext sessionContext;

@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception {
if (isCMT()) {

}
...
}

private boolean isCMT() {
try {
//throws IllegalStateException if not BMT
sessionContext.getUserTransaction();
return false;
}
catch (IllegalStateException ise) {
return true;
}
}
}

当然,使用异常来控制流程是不好的,但我不知道区分 BMT 和 CMT 的替代方法。

关于java - 确定 BMT 或 CMT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11949357/

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