结合 MDB、JPA 和 JTA

Combining MDB, JPA and JTA

我正在开发一个系统来处理消息并相应地更新数据库,但我需要在层之间保持一定程度的隔离。我想到了以下内容。

MyMdb.onMessage() 的一次执行需要对数据库执行多次访问,包括读取和写入。

什么是正确的场景?我错过了什么吗?

以您描述的方式注入无状态 EJB 的实体管理器正是您应该做的。 这种类型的注入提供了 'Container-Managed Entity Manager' 即 'transaction scoped'。 所以在你描述的场景中。

  1. onMessage MDB 调用将创建一个事务
  2. 对无状态 bean 的调用将发生在相同的事务上下文中,创建一个实体管理器,该管理器通常在 MDB 方法 returns.
  3. 时一直存在到事务完成为止

同一 EJB 实例的特定类型的注入实体管理器不会存在,并且不会在不同的事务中重复使用。