John Smith [https://community.jboss.org/people/dramaticbanana] created the 
discussion

"JBoss 5.1 with Websphere MQ Resource Adapter: Infinite redeliveries"

To view the discussion, visit: https://community.jboss.org/message/746175#746175

--------------------------------------------------------------
Hello,

I'm currently having a problem where messages are redelivered infinitely if an 
exception is thrown in my MDB (and it thus rolls back). This despite my 
messaging-service.xml explicitly limiting redeliveries to 3 
(DefaultMaxDeliveryAttempts = 3). When no exceptions occur (which is the normal 
case), everything runs fine. I've looked around for answers but this one keeps 
boggling my mind.

My JBoss 5.1 server is connected to a Websphere MQ server using a resource 
adapter (similar to  https://community.jboss.org/it is illegal to call 
setRollbackOnly from BMT: BEAN these steps). My MDB is all defined in XML (and 
not using annotations) as I'd like to keep the code as JBoss-independent as 
possible.

Any help is appreciated! I'd be happy to provide more information if needed.

Here are snippets from relevant files:

*jboss.xml*
{code:xml}
<message-driven> 
          <ejb-name>MQChannelListener</ejb-name>
          <destination-jndi-name>queue/ReplyQueue</destination-jndi-name>
          <resource-adapter-name>wmq.jmsra.rar</resource-adapter-name>
</message-driven>
{code:xml}


*ejb-jar.xml*
{code:xml}
    <message-driven>
      <ejb-name>MQChannelListener</ejb-name>
      <ejb-class>path.to.class.MQChannelListener</ejb-class>
      <messaging-type>javax.jms.MessageListener</messaging-type>
      <transaction-type>Container</transaction-type>
      <activation-config>
         <activation-config-property>
               
<activation-config-property-name>destinationType</activation-config-property-name>
               
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>destination</activation-config-property-name>
               
<activation-config-property-value>XXX</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>channel</activation-config-property-name>
               
<activation-config-property-value>XXX</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>hostName</activation-config-property-name>
               
<activation-config-property-value>XXX</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>port</activation-config-property-name>
               
<activation-config-property-value>XXX</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>queueManager</activation-config-property-name>
               
<activation-config-property-value>XXX</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>transportType</activation-config-property-name>
               
<activation-config-property-value>CLIENT</activation-config-property-value>
         </activation-config-property>
         <activation-config-property>
               
<activation-config-property-name>useJNDI</activation-config-property-name>
               
<activation-config-property-value>false</activation-config-property-value>
         </activation-config-property>
     </activation-config>
    </message-driven>
 ...
           <container-transaction>
                    <method>
                              <ejb-name>MQChannelListener</ejb-name>
                              <method-name>*</method-name>
                    </method>
                    <trans-attribute>RequiresNew</trans-attribute>
          </container-transaction>
{code:xml}

*MQChannelListener.java*
{code:java}
public class MQChannelListener implements MessageListener {

          @PersistenceContext(unitName = "persistence-context")
          private EntityManager entityManager;

          @Resource
          private MessageDrivenContext sessionContext;

          @Override
          public void onMessage(Message msg) {
                    String textMsg = null, messageId = null;
                    long timestamp = -1;
                    boolean redelivered = false;
                    try {
                              textMsg = ((TextMessage) msg).getText();
                              messageId = msg.getJMSMessageID();
                              timestamp = msg.getJMSTimestamp();
                              redelivered = msg.getJMSRedelivered();
                              // perform code
                    } catch (Throwable t) {
                              sessionContext.setRollbackOnly(); 
                    }
          }
}
{code:java}

*wmq.jmsra-ds.xml*
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<connection-factories>
  <tx-connection-factory>
    <jndi-name>queue/WMSRACF</jndi-name>
    <xa-transaction />
    <rar-name>wmq.jmsra.rar</rar-name>
    <connection-definition>javax.jms.ConnectionFactory</connection-definition>
    <config-property name="channel" 
type="java.lang.String">XXX</config-property>
    <config-property name="hostName" 
type="java.lang.String">XXX</config-property>
    <config-property name="port" type="java.lang.String">XXX</config-property>
    <config-property name="queueManager" 
type="java.lang.String">XXX</config-property>
    <config-property name="transportType" 
type="java.lang.String">CLIENT</config-property>
    <config-property name="xaEnabled" 
type="java.lang.String">true</config-property>
    <max-pool-size>100</max-pool-size>
    <track-connection-by-tx>true</track-connection-by-tx>
  </tx-connection-factory>
  <mbean code="org.jboss.resource.deployment.AdminObject" 
name="jca.wmq:name=RequestQueue">
      <attribute name="JNDIName">queue/RequestQueue</attribute>
    <depends optional-attribute-name="RARName">
      jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'
    </depends>
    <attribute name="Type">javax.jms.Queue</attribute>
    <attribute name="Properties">
      baseQueueManagerName=XXX
      baseQueueName=XXX
    </attribute>
  </mbean>
</connection-factories>
{code:xml}

*messaging-service.xlm*
{code:xml}
<server>
   <mbean code="org.jboss.jms.server.ServerPeer"
      name="jboss.messaging:service=ServerPeer"
      xmbean-dd="xmdesc/ServerPeer-xmbean.xml">
      <attribute name="ServerPeerID">0</attribute>
      <attribute name="DefaultQueueJNDIContext">/queue</attribute>
      <attribute name="DefaultTopicJNDIContext">/topic</attribute>
      <attribute 
name="PostOffice">jboss.messaging:service=PostOffice</attribute>
      <attribute 
name="DefaultDLQ">jboss.messaging.destination:service=Queue,name=DLQ</attribute>
      <attribute name="DefaultMaxDeliveryAttempts">3</attribute>
      <attribute 
name="DefaultExpiryQueue">jboss.messaging.destination:service=Queue,name=ExpiryQueue</attribute>
      <attribute name="DefaultRedeliveryDelay">5000</attribute>
      <attribute name="MessageCounterSamplePeriod">5000</attribute>
      <attribute name="FailoverStartTimeout">60000</attribute>
      <attribute name="FailoverCompleteTimeout">300000</attribute>
      <attribute name="StrictTck">false</attribute>
      <attribute name="DefaultMessageCounterHistoryDayLimit">-1</attribute>
      <attribute 
name="ClusterPullConnectionFactoryName">jboss.messaging.connectionfactory:service=ClusterPullConnectionFactory</attribute>
      <attribute name="DefaultPreserveOrdering">false</attribute>
      <attribute name="RecoverDeliveriesTimeout">300000</attribute>
      <attribute name="EnableMessageCounters">false</attribute>
      <depends 
optional-attribute-name="PersistenceManager">jboss.messaging:service=PersistenceManager</depends>
      <depends 
optional-attribute-name="JMSUserManager">jboss.messaging:service=JMSUserManager</depends>
      <depends>jboss.messaging:service=Connector,transport=bisocket</depends>
      <depends optional-attribute-name="SecurityStore"
          
proxy-type="org.jboss.jms.server.SecurityStore">jboss.messaging:service=SecurityStore</depends>
   </mbean>
</server>
{code:xml}

Note: Snippets were modified slightly for compression and security.

Can anyone spot what I'm doing wrong/missing?

Thanks!
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/746175#746175]

Start a new discussion in JBoss Messaging at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2042]

_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to