我使用JTA,两阶段提交,JMS和JDBC事务处理结构。这个想法是(简称)以如何在提交时使用JTA确认JMS消息?
- 收到一条消息在队列上
- 执行一些数据库操作
- 确认该消息,当数据库操作已经成功
所以我就XAQueueConnectionFactory
,创建XAQueueSession
,从会话创建接收器并设置消息监听器。
在侦听器内部,在onMessage
方法中,我开始我的用户事务,执行jdbc的东西并提交事务或执行回滚,如果出现错误。现在,我期望(又称“希望”)在用户事务提交时确认该消息。
但是,这并没有发生,消息仍然在队列中,并一次又一次地重新递送。
我错过了什么?我仔细检查了会话,确认模式确实是“SESSION_TRANSACTED
”,getTransacted
返回true。
我没有Java EE容器,没有弹簧,没有消息驱动的bean。我使用独立的JTA bitronix。