容器管理的事务-异步方法调用

时间:2019-03-10 01:53:01

标签: java transactions websphere-liberty transactionmanager container-managed

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

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

  2. 写入另一个MQ,然后将一些数据插入DB。 POST到MQ DB INSERT 应该处于一项事务中。

这是实现:

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

对于#2-无状态会话Bean-容器托管的异步,但事务属性为 NOT_SUPPORTED (不支持,因为这是一个长期运行的线程,因此请不要这样做)不想让交易超时)。

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

问题:

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

  2. 异常-引发自定义异常时,如果数据库插入失败,队列中的消息将不会恢复。

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

我会尽力提供详细信息-感谢您的帮助。

0 个答案:

没有答案