Monday, February 23, 2009

Dynamic Messsage Routing in JCAPS


In JCAPS, if you want to send the messages to different remote JMS IQ managers in dynamic. Here is the sample code for dynamic loading Integration JMS servers and sending the messages.

 

package prjUserseglitlxcprjTest;

import java.util.List;

import java.util.HashMap;

import java.util.ArrayList;

import java.util.Iterator;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.jms.QueueConnectionFactory;

import javax.jms.QueueConnection;

import javax.jms.QueueSession;

import javax.jms.Session;

import javax.jms.Queue;

import javax.jms.QueueSender;

 

 

public class jcdEReceiveDeadLetterMsgs

{

 

    public com.stc.codegen.logger.Logger logger;

 

    public com.stc.codegen.alerter.Alerter alerter;

 

    public com.stc.codegen.util.CollaborationContext collabContext;

 

    public com.stc.codegen.util.TypeConverter typeConverter;

 

    private static final HashMap hashMap = new HashMap(){

        {

            List list = new ArrayList();

            list.add( "stcms://egluproactd01.eaglegl.com:20357" );

            list.add( "quOne" );

            put( "quOneDeadLetter", list );

            list = new ArrayList();

            list.add( "stcms://egluproactd01.eaglegl.com:21047" );

            list.add( "quTwo" );

            put( "quTwoDeadLetter", list );

        }

    };

 

    private static final long lTimeout = 5 * 1000;

 

    private static final String cCONNECTION_FACTORY = "connectionfactories/queueconnectionfactory";

 

    private static final String cINITIAL_CONTEXT_FACTORY = "com.stc.jms.jndispi.InitialContextFactory";

 

    private static final boolean cTRANSACTED = true;

 

    public void start( com.stc.schedulerotd.appconn.scheduler.FileTextMessage input, com.stc.connectors.jms.JMS quOrginDeadLetter, com.stc.connectors.jms.JMS quDestinationDeadLetter )

        throws Throwable

    {

        QueueConnection myConnection = null;

        QueueSession mySession = null;

        QueueSender quSender = null;

        javax.jms.Message msg = null;

        javax.jms.TextMessage txtMsg = null;

        java.util.Set keys = hashMap.keySet();

        for (Iterator iterator = keys.iterator(); iterator.hasNext();) {

            String quOriginName = (String) iterator.next();

            logger.info( "########## Orgin Queue Name :" + quOriginName );

            ArrayList values = (ArrayList) hashMap.get( quOriginName );

            String destServerURL = (String) values.get( 0 );

            String destinationQu = (String) values.get( 1 );

            logger.info( "########## Destination Queue Name :" + destinationQu );

            logger.info( "########## Destination Queue URL :" + destServerURL );

            quOrginDeadLetter.setDestination( quOriginName );

            String payLoad = (String) quOrginDeadLetter.receive( lTimeout ).getTextMessage();

            try {

                java.util.Hashtable env = new java.util.Hashtable();

                env.put( Context.INITIAL_CONTEXT_FACTORY, cINITIAL_CONTEXT_FACTORY );

                env.put( Context.PROVIDER_URL, destServerURL );

                InitialContext jndiContext = new InitialContext( env );

                QueueConnectionFactory QCFactory = (QueueConnectionFactory) jndiContext.lookup( cCONNECTION_FACTORY );

                myConnection = QCFactory.createQueueConnection();

                Queue myQueue = (Queue) jndiContext.lookup( "queues/" + destinationQu );

                mySession = myConnection.createQueueSession( cTRANSACTED, Session.AUTO_ACKNOWLEDGE );

                quSender = mySession.createSender( myQueue );

                myConnection.start();

                if (null != payLoad) {

                    com.stc.connectors.jms.Message msgOut = quDestinationDeadLetter.createTextMessage();

                    msgOut.setTextMessage( payLoad );

                    quDestinationDeadLetter.send( msgOut );

                }

            } catch ( Exception e ) {

                e.printStackTrace();

                throw new Exception( "\n===>>> Exception from jndi processing", e );

            } finally {

                mySession.commit();

                mySession.close();

                myConnection.stop();

                myConnection.close();

            }

        }

    }

 }