package flow.subflow.HandleSCI; import java.io.IOException; import com.alinma.GlobalConstants; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageOptions; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import org.apache.log4j.*; public class MQConnection { private static Logger _log = Logger.getLogger(MQConnection.class); protected MQQueue messageInputQueue; protected MQQueue messageOutputQueue; protected MQQueueManager queueManager; String sResponseMessage = ""; public String sMQError = ""; String sessionId=""; MQConnection(String sessionId) { this.sessionId = "MQConnection |"+sessionId; } //Path Declaration for the properties files String sFilePath = System.getenv("IVR_APP_DATA"); //String sFilePath = "D:/iDev/IDEV_IVR_PROPERTY_FILES/"; //Logger Intiation protected Logger initLog() { String filePath = sFilePath + "mqlogger.properties"; Logger logger = Logger.getLogger(MQConnection.class); PropertyConfigurator.configure(filePath); return logger; } Logger mqLogger = initLog(); //Opening the MQ Connection public boolean OpenMQConnection (String sQManager, String sQManagerHost, int iMQPort,String strMqEnvironmentChannel, int iCCSID, String sEnvironment){ mqLogger.info(sessionId+"MQConnection->OpenMQConnection() Called"); try { if (sEnvironment != null && !sEnvironment.equals(GlobalConstants.PRODUCTION)){ System.out.println("sEnvironment1:"+sEnvironment); MQEnvironment.channel = strMqEnvironmentChannel; MQEnvironment.hostname = sQManagerHost; } MQEnvironment.port=iMQPort; MQEnvironment.CCSID=1208; queueManager = new MQQueueManager(sQManager); mqLogger.info(sessionId+"Created MQConnection on host - " + MQEnvironment.hostname + " on port - " + MQEnvironment.port); return true; } catch (MQException mqe) { mqLogger.info(sessionId+"MQ Error - MQConnection->OpenMQConnection() - while opening the MQ Connection on host - " + MQEnvironment.hostname + " on port - " + MQEnvironment.port +"- Reason Code "+mqe.reasonCode); sMQError = "MQE" + String.valueOf(mqe.reasonCode); return false; } catch (Exception err) { mqLogger.fatal("Exception Error - MQConnection->OpenMQConnection() - with Error Message - " + err.getMessage()); sMQError = "MQA0005"; return false; } } //Close the MQConnection public boolean CloseMQConnection () { mqLogger.info(sessionId+"MQConnection->CloseMQConnection() Called"); try { queueManager.disconnect(); mqLogger.info(sessionId+"Closed MQConnection"); return true; } catch (MQException mqe) { mqLogger.info(sessionId+"MQ Error - MQConnection->CloseMQConnection() - while closing the MQ Connection on host - " + MQEnvironment.hostname + " on port - " + MQEnvironment.port +"- Reason Code "+mqe.reasonCode); sMQError = "MQE" + String.valueOf(mqe.reasonCode); return false; } catch (Exception err) { mqLogger.info(sessionId+"Exception Error - MQConnection->CloseMQConnection() - with Error Message - " + err.getMessage()); sMQError = "MQA0006"; return false; } } //Send and get the data from the MQ backend public boolean SendReceiveData (String sWriteQueName, String sReadQueName, String sRequestMessage, int iWaitInterval, int iExpiryInterval ){ mqLogger.info(sessionId+"MQConnection->SendReceiveData() Called"); int iQueOpenOptions; int iMessageLength; int iCounter; try { //Open the write queue and put the message iQueOpenOptions = MQC.MQOO_OUTPUT; messageInputQueue = queueManager.accessQueue(sWriteQueName, iQueOpenOptions); mqLogger.debug(sessionId+"Opened the queue - " + sWriteQueName); MQPutMessageOptions putMessageObject = new MQPutMessageOptions(); MQMessage mqSendMessage = new MQMessage(); mqSendMessage.format = MQC.MQFMT_STRING; mqSendMessage.expiry = iExpiryInterval; mqSendMessage.write(sRequestMessage.getBytes()); mqSendMessage.originalLength = sRequestMessage.length(); mqSendMessage.replyToQueueName = sReadQueName; mqSendMessage.characterSet = 1208; messageInputQueue.put(mqSendMessage,putMessageObject); mqLogger.info(sessionId+"Message put on the queue - " + sWriteQueName); messageInputQueue.close(); mqLogger.debug(sessionId+"Closed the queue - " + sWriteQueName); //Open the read queue and get the message iQueOpenOptions = MQC.MQGMO_WAIT | MQC.MQGMO_CONVERT; messageOutputQueue = queueManager.accessQueue(sReadQueName, iQueOpenOptions); mqLogger.debug(sessionId+"Opened the queue - " + sReadQueName); MQGetMessageOptions getMessageObject = new MQGetMessageOptions(); MQMessage mqReadMessage = new MQMessage(); mqReadMessage.write(sResponseMessage.getBytes()); getMessageObject.waitInterval = 500; mqReadMessage.correlationId = mqSendMessage.messageId; getMessageObject.matchOptions = MQC.MQMO_MATCH_CORREL_ID; mqReadMessage.encoding = 546; mqReadMessage.characterSet = 1208; for (iCounter = iWaitInterval / 500; iCounter > 0; iCounter--) { try { mqLogger.debug("Inside the for loop to read the data from queue - " + sReadQueName); Thread.sleep(500); messageOutputQueue.get(mqReadMessage,getMessageObject); mqLogger.info(sessionId+"Message read from the queue - " + sReadQueName); iMessageLength = mqReadMessage.getDataLength(); byte[] btTempMessage = new byte[iMessageLength]; mqReadMessage.readFully(btTempMessage,0,iMessageLength); sResponseMessage =new String(btTempMessage); messageOutputQueue.close(); mqLogger.debug(sessionId+"Closed the queue - " + sReadQueName); return true; } catch (MQException mqe) { if (mqe.reasonCode != 2033) { mqLogger.info(sessionId+"MQ Error - MQConnection->SendReceiveData() - while reading data from queue - " + sReadQueName + " with reason code - " + String.valueOf(mqe.reasonCode)); sMQError = "MQE" + String.valueOf(mqe.reasonCode); return false; } } catch (InterruptedException err) { mqLogger.info(sessionId+"Interrupted Exception Error - MQConnection->SendReceiveData() - with error message - " + err.getMessage()); sMQError = "MQA0007"; return false; }catch (Exception err){ mqLogger.info(sessionId+"1 Exception Error - MQConnection->SendReceiveData() - with error message - " + err.getMessage()); sMQError = "MQA0009"; return false; } } if (iCounter == 0) // Timeout Condition { mqLogger.fatal("MQ Error - MQConnection->SendReceiveData() - Timed out while reading data from queue - " + sReadQueName + " with reason code - 2033"); sMQError = "MQE2033"; //MQ Reason code for no response in the mq response queue return false; } } catch(MQException mqe) { mqLogger.info(sessionId+"MQ Error - MQConnection->SendReceiveData() - with reason code - " + String.valueOf(mqe.reasonCode)); sMQError = "MQE" + String.valueOf(mqe.reasonCode); return false; } catch (IOException err) { mqLogger.info(sessionId+"IO Exception Error - MQConnection->SendReceiveData() - with error message - " + err.getMessage()); sMQError = "MQA0008"; return false; } catch (Exception err) { mqLogger.info(sessionId+"Exception Error - MQConnection->SendReceiveData() - with error message - " + err.getMessage()); sMQError = "MQA0009"; return false; } return true; } }