|   | 
	 
  
    | 
RSS Feed - WebSphere MQ Support
 | 
RSS Feed - Message Broker Support
 |   
 
  
	     | 
	 | 
   
 
  
	|  [SOLVED]Connection to QueueManager | 
	« View previous topic :: View next topic »  | 
   
  
  	
	  
		
		
		  | Author | 
		  Message
		 |  
		
		  | scar | 
		  
		    
			  
				 Posted: Tue Apr 27, 2010 5:46 am    Post subject: [SOLVED]Connection to QueueManager | 
				     | 
			   
			 
		   | 
		 
		
		   Centurion
 
 Joined: 23 Jun 2004 Posts: 145
  
  | 
		  
		    
			  
				Env : MQ V6, AIX 5.3,java 1.4
 
 
We need to process the messages as soon as we receive them, and we will get a message every 10min or so.
 
 
We have a triggered process to kick a java program to pick up the message as soon as it arrives on the queue.
 
 
My question is how to keep the connection to the queue manager open with out closing the queues for a long time, instead of connecting to the QMGR and opening the queue when ever a message is put on the queue.
 
 
Any help is appreciated.
 
 
Thanks.
  Last edited by scar on Thu Apr 29, 2010 6:48 am; edited 1 time in total | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | fjb_saper | 
		  
		    
			  
				 Posted: Tue Apr 27, 2010 7:48 am    Post subject: Re: Connection to QueueManager | 
				     | 
			   
			 
		   | 
		 
		
		    Grand High Poobah
 
 Joined: 18 Nov 2003 Posts: 20768 Location: LI,NY 
  | 
		  
		    
			  
				
   
	| scar wrote: | 
   
  
	Env : MQ V6, AIX 5.3,java 1.4
 
 
We need to process the messages as soon as we receive them, and we will get a message every 10min or so.
 
 
We have a triggered process to kick a java program to pick up the message as soon as it arrives on the queue.
 
 
My question is how to keep the connection to the queue manager open with out closing the queues for a long time, instead of connecting to the QMGR and opening the queue when ever a message is put on the queue.
 
 
Any help is appreciated.
 
 
Thanks. | 
   
 
 
 
Look at the JMS model with a MessageListener (MDB type).
 
Or run a loop with MQGET with wait....
 
 
Have fun   _________________ MQ & Broker admin | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | scar | 
		  
		    
			  
				 Posted: Wed Apr 28, 2010 12:10 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		   Centurion
 
 Joined: 23 Jun 2004 Posts: 145
  
  | 
		  
		    
			  
				I am using a while loop.
 
 
after processing the first message its not picking up the next messages.
 
this is what the code does:
 
read message
 
call storeprocedure
 
get response
 
write the response to outbound queue.
 
 
its giving the following exception
 
 
MQJE001: Completion Code 2, Reason 2033
 
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2033
 
        at com.ibm.mq.MQQueue.get(MQQueue.java:1041)
 
        at LSTP_Receit.main(LSTP_Receit.java:136)
 
 
 
But there are a bunch of messges in the Queue.
 
 
Plese see the code below
 
 
        try
 
        {
 
 
            System.out.println("************ Start Processing "+new java.util.Date().toString()+"**********");
 
            //Connection to the QMGR
 
            mqQMGR = getQMGRConnection(strQMGR);
 
            System.out.println("mqQMGR.toStrings = "+mqQMGR.toString());
 
            //Open the INBOUND Queue
 
            mqInbounbQueue = openQueue(strInbounbQueue ,mqQMGR);
 
            // Open the BACKOUT Queue
 
            mqBackoutQueue = openQueueforWriting(strBackoutQueue ,mqQMGR);
 
            //Open the OUTBOUND Queue
 
            mqOutboundQueue = openQueueforWriting(strOutboundQueue ,mqQMGR);
 
            // Set up an MQ options object. Specify syncpoint to allow backout
 
            MQGetMessageOptions gmo = new MQGetMessageOptions();
 
            gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_SYNCPOINT;
 
            // Same as MQGMO_DEFAULT
 
            gmo.waitInterval = INITQ_WAIT_INTERVAL;
 
            //get database connection
 
            Class.forName(dbDriver);
 
            dbCon = createdbConnection(dbConnectString,dbUser,dbPwd);
 
            // Pull the message off the queue.
 
            String strMsg = "";
 
            while(mqInbounbQueue.getCurrentDepth() > 0)
 
            {
 
                try
 
                {
 
                    System.out.println("Number of Messages = "+mqInbounbQueue.getCurrentDepth());
 
                    System.out.println("Getting the Message");
 
                    try
 
                    {
 
                        mqInbounbQueue.get(retrievedMessage, gmo);
 
                    }
 
                    catch(Exception e)
 
                    {
 
                        e.printStackTrace();
 
                    }
 
                    System.out.println("Got the Message");
 
                    int intBckOutCount = retrievedMessage.backoutCount;
 
                    if(intBckOutCount > 1)
 
                    {
 
                        System.out.println("Write the message to the backout queue");
 
                        WritetoQueue(mqBackoutQueue,mqQMGR,retrievedMessage);
 
                    }
 
                    else
 
                    {
 
                        System.out.println("Process the message");
 
                        strCorrelID = retrievedMessage.correlationId.toString();
 
                        strMsg =retrievedMessage.readString(retrievedMessage.getMessageLength());
 
                        System.out.println("Message = "+strMsg);
 
                        StringReader reader1 = new StringReader(strMsg);
 
                        String output1=null;
 
                        Reader reader=null;
 
                        String esbReq = "ias_esb_request";
 
                        proc_stmt = dbCon.prepareCall("{ call ias_xml_example(?,?,?) }");
 
                        proc_stmt.setCharacterStream(1,reader1, strMsg.length());
 
                        proc_stmt.setString(2,esbReq);
 
                        proc_stmt.registerOutParameter(3, OracleTypes.VARCHAR);
 
                        rs = proc_stmt.executeQuery();
 
                        output1 = proc_stmt.getString(3);
 
                        System.out.println(proc_stmt.getString(3) );
 
                        //format the response
 
                        outboundMessage.writeString(output1);
 
                        //write to outbound queue
 
                        WritetoQueue(mqOutboundQueue,mqQMGR,outboundMessage);
 
                    }
 
                }
 
                catch(Exception exe)
 
                {
 
                    exe.printStackTrace();
 
                    //Write Message to Backout Queue and commit
 
                    try{WritetoQueue(mqBackoutQueue,mqQMGR,retrievedMessage);}catch(Exception ex){ex.printStackTrace();}
 
                    try{mqQMGR.commit();}catch(Exception ex){ex.printStackTrace();}
 
                }
 
            }
 
            
 
            // Now Commit message to MQSeries Queue.
 
            mqQMGR.commit();
 
            dbCon.commit();
 
            //Close the Queues
 
            mqInbounbQueue.close();
 
            mqOutboundQueue.close();
 
            mqBackoutQueue.close();
 
            //Disconnect from the queue manager
 
            mqQMGR.disconnect();
 
            try{dbCon.commit();dbCon.close();}catch(Exception Ex){Ex.printStackTrace();}
 
                        
 
        }
 
        catch(Exception e)
 
        {
 
            e.printStackTrace();
 
            //Write Message to Backout Queue
 
            //try{WritetoQueue(mqBackoutQueue,mqQMGR,retrievedMessage);}catch(Exception ex){ex.printStackTrace();}
 
            try{mqQMGR.commit();}catch(Exception ex){ex.printStackTrace();}
 
            //try{mqBackoutQueue.close();}catch(Exception ex){ex.printStackTrace();}
 
            //Close the Queue s
 
            try{mqInbounbQueue.close();}catch(Exception ex){ex.printStackTrace();}
 
            try{mqOutboundQueue.close();}catch(Exception ex){ex.printStackTrace();}
 
            try{mqBackoutQueue.close();}catch(Exception ex){ex.printStackTrace();}
 
            //Disconnect from the queue manager
 
            try{mqQMGR.disconnect();}catch(Exception ex){ex.printStackTrace();}
 
            //Close the database connection
 
            try{dbCon.close();}catch(Exception Ex){Ex.printStackTrace();}
 
 
        }
 
    }
 
 
    ///////////////////////////////////////////////////////////////////////////////////////////
 
 
    ///////////////////////////////////////////////////////////////////////////////////////////
 
    
 
    public static MQQueueManager getQMGRConnection(String strQueueManager)
 
    {
 
        final int INITQ_WAIT_INTERVAL = 120000; // 2 minutes.
 
        // Create a connection to the queue manager
 
        MQQueueManager mqQueueManager = null;
 
        MQEnvironment.hostname = "xxxxxxxxxxxxxx";
 
        MQEnvironment.port = 1414;
 
        MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";
 
        try
 
        {
 
            System.out.println("Creating QMGR Object");
 
            mqQueueManager = new MQQueueManager(strQueueManager);
 
            System.out.println("Done Creating QMGR Object");
 
        }
 
        catch (MQException mqex)
 
        {
 
            mqex.printStackTrace();
 
            System.out.println("**************************");
 
        }
 
        return mqQueueManager;
 
    }
 
    public static MQQueue openQueue(String strInputQueue ,MQQueueManager mqQueueManager)
 
    {
 
            //int openInputOptions = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_INQUIRE + MQC.MQOO_SET;
 
            int openInputOptions = MQC.MQOO_INPUT_AS_Q_DEF
 
				 + MQC.MQOO_INQUIRE
 
				 + MQC.MQOO_OUTPUT
 
				 + MQC.MQOO_SET;
 
            // Open the input queue.
 
            MQQueue mqInputQueue = null;
 
            try
 
            {
 
                mqInputQueue = mqQueueManager.accessQueue(strInputQueue, openInputOptions,
 
                               null, // default q manager
 
                               null, // no dynamic q name
 
                               null); // no alternate user id
 
            }
 
            catch (MQException mqex)
 
            {
 
                mqex.printStackTrace();
 
            }
 
            return mqInputQueue;
 
    }
 
    public static MQQueue openQueueforWriting(String strInputQueue ,MQQueueManager mqQueueManager) throws Exception
 
    {
 
        int openInputOptions = MQC.MQOO_OUTPUT | MQC.MQOO_SET_IDENTITY_CONTEXT;
 
 
        // Open the input queue.
 
        MQQueue mqInputQueue = null;
 
        try
 
        {
 
            mqInputQueue = mqQueueManager.accessQueue(strInputQueue, openInputOptions,
 
                           null, // default q manager
 
                           null, // no dynamic q name
 
                           null); // no alternate user id
 
        }
 
        catch (MQException mqex)
 
        {
 
            mqex.printStackTrace();
 
            throw mqex;
 
        }
 
        return mqInputQueue;
 
    }
 
 
    public static boolean WritetoQueue(MQQueue mqqueue,MQQueueManager QMGR,MQMessage retrievedMessage) throws Exception
 
    {
 
        try
 
        {
 
            System.out.println("Writin to Queue");
 
            retrievedMessage.backoutCount=0;
 
            retrievedMessage.putApplicationName="LSTP_Receit";
 
            retrievedMessage.userId="LSTP_ADMIN";
 
            // Specify the message options; Accept the defaults; same as MQPMO_DEFAULT
 
            MQPutMessageOptions pmo = new MQPutMessageOptions();
 
            pmo.options = MQC.MQPMO_SET_IDENTITY_CONTEXT;
 
            // Put the message on the queue
 
            mqqueue.put(retrievedMessage, pmo);
 
            // Close the queue...
 
            //mqqueue.close();
 
        }
 
        catch(Exception e)
 
        {
 
            throw e;
 
        }
 
    return true;
 
    }
 
    
 
} | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | fjb_saper | 
		  
		    
			  
				 Posted: Wed Apr 28, 2010 12:47 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		    Grand High Poobah
 
 Joined: 18 Nov 2003 Posts: 20768 Location: LI,NY 
  | 
		  
		    
			  
				Before processing the MQGET in each iteration of the loop you must reset the values in the MQMD for messageId and correlationId. Use the constants MQC.MQID_NONE and MQC.MQCI_NONE.
 
 
The response you get is correct. The system tries to get the second message with messageId and correlId and returns no messages matching...
 
 
Have fun   _________________ MQ & Broker admin | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | scar | 
		  
		    
			  
				 Posted: Thu Apr 29, 2010 5:33 am    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		   Centurion
 
 Joined: 23 Jun 2004 Posts: 145
  
  | 
		  
		    
			  
				| Its Working. Thanks a lot. | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | 
		    
		   | 
		 
	   
	 | 
   
 
  
	     | 
	 | 
	Page 1 of 1 | 
   
 
 
 
  
  	
	  
		
		  
 
  | 
		  You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
  | 
  		 
	   
	 | 
   
 
  	 | 
	  |