[jboss-user] [Messaging, JMS & JBossMQ] - MDB that makes a nested asynchronous request/reply times out

avernon do-not-reply at jboss.com
Wed Apr 16 14:59:25 EDT 2008

I have for several days been trying to get this scenaio to work...
MDB 1 receives a message
   MDB 1 sends a message and waits for a reply

       MDB 2 receives the message, determines the response
       MDB 2 replies on the reply to queue specified.

       The message is posted on the queue that same second
            (I checked the WSMQ Explorer to confirm the exact time)

   MDB 1 times out several seconds later (timeout period)

This is shown below with JBoss DEBUG logging enabled.

If I run the exact same code as a simple Java application to obtain the reply MDB 1 is expecting then it works fine... What could possibly be wrong? Can anyone suggest anything?

22:49:33,296 DEBUG [BaseMDB]
Reply ID: (ID:414d5120484254657374514d332020200089054820024402)
        <?xml version="1.0" encoding="UTF-8"?><HB_EAI_REPLY><HB_EAI_HEADER version="1.0" created="2008-04-16T22:49:33" r

22:49:33,296 DEBUG [RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.HeirarchicalLoaderRepository3@
18c28a, cl=org.jboss.mx.loading.HeirarchicalLoaderRepository3$CacheClassLoader at bccad2{ url=null ,addedOrder=0}
22:49:33,296 INFO  [STDOUT]  >>>>>>>>>>>>>>>>>>>> the message has been placed on queue:///BANK_REPLY.QL
22:49:33,296 INFO  [STDOUT] DONE ON MEssage>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
22:49:33,296 DEBUG [ManagedEntityManagerFactory] ************** closing entity managersession **************
22:49:37,218 INFO  [STDOUT] Where is my message? It should have been onqueue:///BANK_REPLY.QL
22:49:37,218 WARN  [XmlHelper] Service: CustomerRetrievalReply timeout occurred for service: CustomerRetrieval. JMS ID:
22:49:37,218 INFO  [IvrAccountHandler] [0002] Missing account for userID: 1
22:49:37,218 INFO  [STDOUT] ***********class ae.hilal.j2ee.mdb.ProductionMDB-3686138 connection: 12455934

Here is the test code that works...
package ae.hilal.eai.spi;

import java.util.Properties;

import javax.jms.JMSException;
import javax.jms.QueueConnection;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.TextMessage;

import org.apache.log4j.Logger;

import com.ibm.mq.jms.JMSC;
import com.ibm.mq.jms.MQQueue;
import com.ibm.mq.jms.MQQueueConnectionFactory;

public class TestMQ {

    private static final long serialVersionUID = -7743081529785780978L;

    private static final Logger log = Logger.getLogger(TestMQ.class);

    private TestMQ() {

    public static void main(String[] args) throws JMSException
        System.out.println("What is it? " + JMSC.MQJMS_EXP_UNLIMITED);
        System.out.println("What is it? " + JMSC.MQJMS_EXP_APP);
        MQQueueConnectionFactory qcf =new MQQueueConnectionFactory();
        Properties props = new Properties();
        props.put("ConnectionFactory.ConnectionMode", "Client");
        props.put("ConnectionFactory.Client.HostName", "localhost");
        props.put("ConnectionFactory.Client.QueueManagerName", "HBTestQM3");
        props.put("ConnectionFactory.Client.Channel", "HILALBANKCLIENTCONN");
        props.put("ConnectionFactory.Client.Port", "1513");
            String connectionMode = props
            if ("Bind".equals(connectionMode)) {
                log.info("Using Bind mode for MQ connection.");
            } else {
                String hostname = props
                String queueManagerName = props
                String channel = props
                String port = props

                Integer portNo = null;
                if (port != null)
                    portNo = Integer.parseInt(port);
                catch (NumberFormatException ex)
                    System.out.println("Invalid port number: " + port);
                System.out.println("Using Client mode for MQ connection. host: "
                        + hostname + " QMName: " + queueManagerName
                        + " Channel: " + channel + " Port: " + port);

//                qcf.setQueueManager(queueManagerName);
//                qcf.setChannel(channel);
                if (portNo != null)

            QueueConnection connection = qcf.createQueueConnection();

            QueueSession s = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
            QueueReceiver receiver = s.createReceiver(new MQQueue("BANK_REPLY.QL"));

            System.out.println(":Reading off " + receiver.getQueue());
            TextMessage msg = (TextMessage) receiver.receive(3);


        } catch (JMSException e) {
//            e.printStackTrace();
            throw e;



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4144615#4144615

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4144615

More information about the jboss-user mailing list