回滚在使用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; }

回滚在使用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

当我使用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 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;
    }