回滚在使用Spring和JBOSS eap-6.1引发异常时不适用于WMQ 我正在使用JBOSS eap-6.1,wmq和spring。当我回滚消息时,它不会退出,甚至不会留在队列中。但它与ActiveMq一起工作。下面是我的配置文件,如果我做错了什么,请帮助我。 jboss/standalone.xml配置为 wmq.jmsra.rar X交易 ${queue.port} ${queue.host} ${queue.server.username} ${queue.server.channel} ${queue.transporttype} ${queue.manager} ${queue.name.in} ${queue.name.backout} Spring配置文件jms.xml是 侦听器文件是 @命名为(“VehiclerReplyMDP”) @TransactionAttribute(不支持TransactionAttribute类型) 公共类vGlistenerMDP实现vGlistenerMDP服务{ @凌驾 public void onMessage(消息消息、会话会话)引发JMSException{ LOG.debug(“-----------------QueueIN侦听器-----------------”; 试一试{ 如果(文本消息的消息实例){ 布尔值=processInComingMessage(消息,会话); 如果(!val){ 抛出新JMSException(“JMSException”); } } }捕获(JME){ 错误(“异常处理mesage:{}”,例如toString()); 抛出新的运行时异常(e); }捕获(NamingE例外){ e、 printStackTrace(); } } 公共布尔processInComingMessage(消息消息、会话) 抛出JMSException、NamingException{ InitialContext ctx=新的InitialContext(); NamingEnumeration list=ctx.list(“”); 布尔isActiveMQFlg=假; while(list.hasMore()){ NameClassPair next=list.next(); if(next.getName().contains(ACTIVE_MQ_JNDI_REF)){ isActiveMQFlg=真; 打破 } } 试一试{ //检查数据库连接 jurisdictionService.getJurisdictionCount(); }捕获(例外情况除外){ if(isActiveMQFlg){ session.rollback(); }否则{ 例如printStackTrace(); } 返回false; }
当我使用session.rollback时,它对activemq有效;对于WMQ,当我抛出异常时,它不回滚,并且用于回滚的事件触发器阈值无效。阈值为3次,它仅第一次触发回滚在使用Spring和JBOSS eap-6.1引发异常时不适用于WMQ 我正在使用JBOSS eap-6.1,wmq和spring。当我回滚消息时,它不会退出,甚至不会留在队列中。但它与ActiveMq一起工作。下面是我的配置文件,如果我做错了什么,请帮助我。 jboss/standalone.xml配置为 wmq.jmsra.rar X交易 ${queue.port} ${queue.host} ${queue.server.username} ${queue.server.channel} ${queue.transporttype} ${queue.manager} ${queue.name.in} ${queue.name.backout} Spring配置文件jms.xml是 侦听器文件是 @命名为(“VehiclerReplyMDP”) @TransactionAttribute(不支持TransactionAttribute类型) 公共类vGlistenerMDP实现vGlistenerMDP服务{ @凌驾 public void onMessage(消息消息、会话会话)引发JMSException{ LOG.debug(“-----------------QueueIN侦听器-----------------”; 试一试{ 如果(文本消息的消息实例){ 布尔值=processInComingMessage(消息,会话); 如果(!val){ 抛出新JMSException(“JMSException”); } } }捕获(JME){ 错误(“异常处理mesage:{}”,例如toString()); 抛出新的运行时异常(e); }捕获(NamingE例外){ e、 printStackTrace(); } } 公共布尔processInComingMessage(消息消息、会话) 抛出JMSException、NamingException{ InitialContext ctx=新的InitialContext(); NamingEnumeration list=ctx.list(“”); 布尔isActiveMQFlg=假; while(list.hasMore()){ NameClassPair next=list.next(); if(next.getName().contains(ACTIVE_MQ_JNDI_REF)){ isActiveMQFlg=真; 打破 } } 试一试{ //检查数据库连接 jurisdictionService.getJurisdictionCount(); }捕获(例外情况除外){ if(isActiveMQFlg){ session.rollback(); }否则{ 例如printStackTrace(); } 返回false; },jboss,spring-jms,Jboss,Spring Jms,当我使用session.rollback时,它对activemq有效;对于WMQ,当我抛出异常时,它不回滚,并且用于回滚的事件触发器阈值无效。阈值为3次,它仅第一次触发 I am using JBOSS eap-6.1 ,wmq with spring.when I am rolling back the messages , its not going to backout and even its not staying inqueue.But its working with Active
I am using JBOSS eap-6.1 ,wmq with spring.when I am rolling back the messages , its not going to backout and even its not staying inqueue.But its working with ActiveMq.Below are my configuration files,Please help me if I am doing anything wrong.
jboss/standalone.xml configuration is
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
<resource-adapters>
<resource-adapter id="wmq.jmsra.rar">
<archive>
wmq.jmsra.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<connection-definitions>
<connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/MQ.CONNECTIONFACTORY.NAME" pool-name="MQ.CONNECTIONFACTORY.NAME">
<config-property name="port">
${queue.port}
</config-property>
<config-property name="hostName">
${queue.host}
</config-property>
<config-property name="UserName">
${queue.server.username}
</config-property>
<config-property name="channel">
${queue.server.channel}
</config-property>
<config-property name="transportType">
${queue.transporttype}
</config-property>
<config-property name="queueManager">
${queue.manager}
</config-property>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/MQ.QUEUE.NAME.IN" pool-name="MQ.QUEUE.NAME.IN">
<config-property name="baseQueueName">
${queue.name.in}
</config-property>
</admin-object>
<admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/MQ.QUEUE.NAME.BACKOUT" pool-name="MQ.QUEUE.NAME.BACKOUT">
<config-property name="baseQueueName">
${queue.name.backout}
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
Spring configuration file jms.xml is
<jee:jndi-lookup id="AVTConnectionFactory"
jndi-name="java:jboss/MQ.CONNECTIONFACTORY.NAME" />
<jee:jndi-lookup id="AVTMessageQueue" jndi-name="java:jboss/MQ.QUEUE.NAME.IN" />
<jee:jndi-lookup id="driverIdRequestQueue" jndi-name="java:jboss/MQ.QUEUE.NAME.OUT" />
<jee:jndi-lookup id="backOutQueue" jndi-name="java:jboss/MQ.QUEUE.NAME.BACKOUT" />
<bean id="vehiclePositionReplyListener"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="AVTConnectionFactory" />
<property name="destination" ref="AVTMessageQueue" />
<property name="messageListener" ref="vehicleReplyMdp" />
<property name="sessionTransacted" value="true" />
</bean>
listener file is
@Named("vehicleReplyMdp")
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class VCGListenerMDP implements VCGListenerMDPService {
@Override
public void onMessage(Message message, Session session) throws JMSException {
LOG.debug("----------------- QueueIN Listener--------------");
try {
if (message instanceof TextMessage) {
boolean val=processInComingMessage(message, session);
if(!val){
throw new JMSException("JMSException");
}
}
} catch (JMSException e) {
LOG.error("Exception processing mesage: {}", e.toString());
throw new RuntimeException(e);
} catch (NamingException e) {
e.printStackTrace();
}
}
public boolean processInComingMessage(Message message, Session session)
throws JMSException, NamingException {
InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("");
boolean isActiveMQFlg = false;
while (list.hasMore()) {
NameClassPair next = list.next();
if (next.getName().contains(ACTIVE_MQ_JNDI_REF)) {
isActiveMQFlg = true;
break;
}
}
try {
// Checking database connectivity
jurisdictionService.getJurisdictionCount();
} catch (Exception ex) {
if (isActiveMQFlg) {
session.rollback();
} else {
ex.printStackTrace();
}
return false;
}