请勿使用来自 CMT Bean 的 UserTransaction 接口

Java EE 规范表明,容器管理的事务 (CMT) Bean 不能访问 UserTransaction 对象。但是,WebLogic 支持 UserTransaction 查询。

此规则标记以下类型代码:

WebLogic UserTransaction 查询
UserTransaction xact = ctx.lookup("javax.transaction.UserTransaction");

UserTransaction xact = ctx.lookup("weblogic.transaction.UserTransaction");

对于正在其中标记 UserTransaction 的 bean,不允许在该 Bean 中访问 UserTransaction。 解决方案取决于代码尝试通过 UserTransaction 执行的操作。 请检查是否使用了 UserTransaction,以确定必须如何更改代码,或者确定是否可以除去该引用。

用来替代 UserTransaction 的备选方法包含使用 UOWManager。 针对此管理器的查询还使用 JNDI 查询;例如:

UOWManager 查询

UOWManager uowMgr = ctx.lookup("java:comp/websphere/UOWManager");

另一方法可能是使用 SessionSynchronization 接口,它允许您访问 afterBegin、beforeCompletion 和 afterCompletion 方法。 方法 beforeCompletion 使您能够在遇到错误时恢复至事务的先前版本。