我有一个JavaEE应用程序,该应用程序使用REST API初始化长时间运行的事务(请求返回202 accepted)。
我正在使用JMS将进度消息发送到已启动这些过程的客户端。但是,直到长时间运行的过程终止,才发送任何消息。我相信这是因为JMS正在等待一次提交,并且(默认情况下)容器在进程结束之前不会发出一个提交。
大多数EJB是@Stateless
,包括运行时间长的EJB和发送消息的EJB。
我通过在发送JMS消息的方法上添加@TransactionAttribute(REQUIRES_NEW)
来“解决”此问题。我尝试将REQUIRES_NEW
添加到长时间运行的任务代码中的选定方法中,但这似乎不起作用。
我担心大量提交会对性能产生不利影响。有更好的方法吗?