1

以下是我的要求: 1. MDB 收到一条消息

  1. 在另一个会话 bean 中触发异步方法 - 异步,因为此方法将是一个长时间运行的线程,我们不想长时间持有 MDB 线程。异步方法从数据库中读取记录,处理它们并调用#3。

  2. 写入另一个 MQ,然后将一些数据插入 DB。POSTING TO MQDB INSERT应该在一个事务中。

这是实现:

对于 #1 - 使用 MDB - 没有任何事务属性的容器管理事务。

对于 #2 - 无状态会话 bean -容器管理,异步,但事务属性为NOT_SUPPORTED(不支持,因为这是一个长时间运行的线程,所以不希望事务超时)。

For# 3 - 无状态会话 bean(从 #2 调用,用于在 2 中读取的每条记录 - 在循环中执行) - 事务属性 - REQUIRES_NEW,因为此方法发布到 MQ 并插入到数据库中。

问题:

  1. 运行时异常 - 当我从 #3 抛出运行时异常时,不会处理下一个记录 - 会话 bean 刚刚退出。

  2. 异常 - 抛出自定义异常时,当数据库插入失败时,队列上的消息不会恢复。

实施或解决此问题的最佳方法是什么。

我尽我所能提供细节 - 感谢任何帮助。

4

0 回答 0