package com.hzboy.weixin.jms.listener;
import java.util.Date;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import com.hzboy.weixin.jms.dao.TestDao;
/**
* jta事务回滚测试
* <property name="transactionManager" ref="jtaTransactionManager"/>
* @author Administrator
*
*/
@Component
public class JdbcConsumerMessageListener implements MessageListener {
@Autowired
@Qualifier("testDao")
private TestDao testDao;
private int count = 0;
@SuppressWarnings("deprecation")
public void onMessage(Message message) {
//这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换,或者直接把onMessage方法的参数改成Message的子类TextMessage
TextMessage textMsg = (TextMessage) message;
try {
String text = textMsg.getText();
System.out.println(new Date().toLocaleString() + "接收到一个纯文本消息,消息内容是:" + text);
testDao.insert(text + count);
if (count % 2 == 0) {
count ++;
System.out.println("接收到消息,但出现异常");
throw new RuntimeException("Error! 出错啦!");
} else {
count ++;
}
} catch (JMSException e) {
e.printStackTrace();
count ++;
System.out.println("接收到消息,但出现异常");
throw new RuntimeException("Error! 出错啦!");
}
}
}
catch里少了 throw new RuntimeException("Error! 出错啦!"); 导致异常被处理,没有抛出异常,数据库操作没有回滚