锁定老帖子 主题:activemq 事务问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-31
最近项目中用到activemq,有个事务问题搞得很烦。 activemq版本:5.4.2 spring版本:2.5.6
配置JMS连接工厂bean如下:
配置目的地如下:
然后在代码中有如下代码: Object rO = jmsTemplate.receiveSelectedAndConvert(messageSelector);
按道理,应该可以参与到JTA事务中来。但是事实没有,然后跟踪dug跟踪spring代码,发现在JmsTemplate在接收消息的时候,会创建Session,这个时候调用以下这个方法: protected Session createSession(Connection con) throws JMSException { 红色的方法返回的是true,按照JMS规范,创建的session应该是带事务的。
然后在接收消息的方法中有以下代码: if (session.getTransacted()) { 红色代码返回的却是false,因此导致没有参与到jta事务中来
不知道这个问题是不是activemq的bug,请大家帮忙!!谢谢了!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-01-31
con.createSession(isSessionTransacted(), getSessionAcknowledgeMode());
这一句在用XA的时候,参数都是没有意义的。 XA必须用在一个事务管理器、事务上下文中。 |
|
返回顶楼 | |
发表时间:2012-02-01
kimmking 写道 con.createSession(isSessionTransacted(), getSessionAcknowledgeMode());
这一句在用XA的时候,参数都是没有意义的。 XA必须用在一个事务管理器、事务上下文中。 事务管理器我也配置了,配置如下:(我的容器是weblogic10) <bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"> <property name="transactionManagerName" value="javax.transaction.TransactionManager" /> </bean> 程序中,我是先接受消息,然后记录接收日志入库,这2个操作包含在一个方法里,这个方法外面包了事务的。当出现异常时,数据库操作回滚了(库里没有记录接收日志),但是消息却真正被消费了,没有回滚。 |
|
返回顶楼 | |
发表时间:2012-02-02
容器jndi的UserTransation怎么配置的。
------------------ 这个简单的场景不用xa都可以。 session确认模式设置为 CLIENT_ACKNOWLEDGE, jdbc事务commit以后,consumer再acknowledge |
|
返回顶楼 | |
浏览 6615 次