import com.ibm.msg.client.jms.JmsConnectionFactory
import com.ibm.msg.client.jms.JmsFactoryFactory
import com.ibm.msg.client.wmq.WMQConstants
import javax.jms.Session
import javax.jms.TextMessage
import javax.jms.MessageProducer
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.*
import java.security.KeyStore
import java.io.FileInputStream
// Start of script execution
println("### Script execution started")
// Define connection details
def hostName = "ABC-XYZ88.ind.thefirm.com" // Hostname of the MQ server
def hostPort = 1414 // Port number for the MQ server
def channelName = "IND.QWD.RWDWWE" // MQ channel name
def queueManagerName = "INDSER34" // Queue manager name
def queueName = "IND.RED.REQUEST.FRER" // Queue name
def cipherSuite = "ECDHE_RSA_AES_256_GCM_SHA384" // SSL/TLS cipher suite
// Create a JMS connection factory
def factoryFactoryInstance = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER)
def connectionFactory = factoryFactoryInstance.createConnectionFactory()
try {
// Set connection properties for the factory
connectionFactory.setStringProperty(WMQConstants.WMQ_HOST_NAME, hostName)
connectionFactory.setIntProperty(WMQConstants.WMQ_PORT, hostPort)
connectionFactory.setStringProperty(WMQConstants.WMQ_CHANNEL, channelName)
connectionFactory.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT)
connectionFactory.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, queueManagerName)
// Load the keystore from a file
String keystoreType = "PKCS12" // Keystore format (e.g., PKCS12)
String keystorePath = "mq-keystore.12" // Path to the keystore file
String keystorePassword = "keystorePassword" // Keystore password
// Load the keystore
KeyStore keyStore = KeyStore.getInstance(keystoreType)
FileInputStream fis = new FileInputStream(keystorePath)
keyStore.load(fis, keystorePassword.toCharArray())
// Initialize the KeyManagerFactory with the keystore
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
keyManagerFactory.init(keyStore, keystorePassword.toCharArray())
// Initialize the TrustManagerFactory with the keystore
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
trustManagerFactory.init(keyStore)
// Initialize the SSLContext with key and trust managers
SSLContext sslContext = SSLContext.getInstance("TLS")
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new java.security.SecureRandom())
// Get the SSLSocketFactory and set it in the connection factory
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory()
connectionFactory.setStringProperty(WMQConstants.WMQ_SSL_CIPHER_SUITE, cipherSuite)
connectionFactory.setObjectProperty(WMQConstants.WMQ_SSL_SOCKET_FACTORY, sslSocketFactory)
// Create a JMS connection and session
def jmsConnection = connectionFactory.createConnection()
def jmsSession = jmsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE)
// Create a destination queue
def destinationQueue = jmsSession.createQueue(queueName)
// Log that the setup is complete
println("### MQ setup completed")
// Create a message producer and send a text message
def messageProducer = jmsSession.createProducer(destinationQueue)
def textMessage = jmsSession.createTextMessage("Your message content goes here")
messageProducer.send(textMessage)
// Log that the message was sent successfully
println("### Message sent successfully")
} catch (Exception e) {
// Handle any exceptions that occur
println("Exception: " + e.toString())
e.printStackTrace()
} finally {
// Ensure resources are closed
try {
messageProducer?.close()
jmsSession?.close()
jmsConnection?.close()
} catch (Exception e) {
// Handle exceptions during resource closure
println("Exception during resource closure: " + e.toString())
e.printStackTrace()
}
}