import javax.jms.*;
import javax.jms.ConnectionConsumer;
import javax.jms.Queue;
import javax.jms.TextMessage;
import javax.naming.*;

import org.apache.log4j.Category;
import org.apache.log4j.PropertyConfigurator;
import org.jboss.jms.asf.StdServerSessionPoolFactory;
import org.jboss.jms.asf.ServerSessionPoolFactory;

public class jmsQueueMultipleReceiver implements MessageListener
{
	private static Category cat = Category.getInstance(jmsQueueMultipleReceiver.class);

	{
		PropertyConfigurator.configure("log4j.properties");
	}

	String[]	queues = {
	    	"queue/A",
	    	"queue/B",
	    	"queue/C",
    };

    public jmsQueueMultipleReceiver(String[] args) {

        for (int i=0; i < queues.length; i++)
	        cat.debug("Receiving from queue: "+ queues[i]);

        try
        {
            /* Init JNDI context */
            Context jndiContext = new InitialContext();

            QueueConnectionFactory factory =
                (QueueConnectionFactory)jndiContext.lookup("QueueConnectionFactory");

            QueueConnection connection = factory.createQueueConnection();

            //QueueSession session = connection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);

            /*
             * Use createQueue() to enable receiving from dynamic queues.
             * JNDI lookup only allows access to static queues.
             */
            Queue queA = (Queue) jndiContext.lookup(queues[0]);
            Queue queB = (Queue) jndiContext.lookup(queues[1]);
            Queue queC = (Queue) jndiContext.lookup(queues[2]);

            connection.start();

            // create connection factory

            StdServerSessionPoolFactory serverSessionPoolFactory = (StdServerSessionPoolFactory)jndiContext.lookup("java:/StdJMSPool");
            ServerSessionPool serverSessionPool = serverSessionPoolFactory.getServerSessionPool(
                                                connection,
                                                4,
                                                false,
                                                Session.AUTO_ACKNOWLEDGE,
                                                this);
            ConnectionConsumer consumer = connection.createConnectionConsumer(queA, "TRUE", serverSessionPool, 10);
        }
        catch(JMSException e)
        {
            e.printStackTrace();
            System.exit(0);
        }
        catch(NamingException e)
        {
            e.printStackTrace();
            System.exit(0);
        }
    }

    // -------------------------------------------------------------------------- Message Listener interface methods

    public void onMessage(Message msg) {
        cat.debug("onMessage(): received (" + msg + ")");
    }

    public static void main(String args[]) {
        jmsQueueMultipleReceiver t = new jmsQueueMultipleReceiver(args);
    }
}


