Create a gist now

Instantly share code, notes, and snippets.

@fsmunoz /mq-send.clj
Last active Dec 18, 2015

What would you like to do?
Simple example of sending a message to IBM Websphere MQ with Clojure and the IBM Websphere MQ JMS classes.
;; Simple example of sending a message to Websphere MQ with Clojure
;; Uses the Websphere MQ JMS classes (i.e. JMS-like in API, but
;; submits to a MQ queue)
;; Author: Frederico Munoz <>
;; Date: 20-Jun-2013
;; Keywords: mq, websphere, messaging, jms
;; Copying and distribution of this file, with or without modification,
;; are permitted in any medium without royalty provided the copyright
;; notice and this notice are preserved. This file is offered as-is,
;; without any warranty.
;; See for all the
;; client downloads available; the following jar files should be in
;; the classpath:
;; -
;; - jms.jar
;; This is just a quick example that tries to keep it as simple as
;; possible; this means no error checking, catch/try, or even any
;; degree of optimisation that could make the example less obvious, no
;; checking return codes.
;; Use of leiningen is recommended for any more advanced use, but
;; assuming all the jars are in the current directory the following
;; should work
;; $ java -cp clojure.main mqm.clj
;; Sat Jun 22 17:53:49 WEST 2013 : Sent
;; JMSMessage class: jms_text
;; JMSType: null
;; JMSDeliveryMode: 2
;; JMSExpiration: 0
;; JMSPriority: 4
;; JMSMessageID: ID:414d5120494f432e4d422e514d202020ad7cc45102c30f20
;; JMSTimestamp: 1371920029641
;; JMSCorrelationID: null
;; JMSDestination: queue:///PT.TEST.IN
;; JMSReplyTo: null
;; JMSRedelivered: false
;; JMSXAppID: WebSphere MQ Client for Java
;; JMSXDeliveryCount: 0
;; JMSXUserID: mqmconn
;; JMS_IBM_PutApplType: 28
;; JMS_IBM_PutDate: 20130622
;; JMS_IBM_PutTime: 16534966
;; My soul is like a shepherd. It knows wind and sun, walking hand in hand with the Seasons
;; Delivered to queue:///PT.TEST.IN
;; $
(import '
(import '
(import '
(import '
(import '
(import '
(import '
(import '
(import '
(import 'javax.jms.Session)
;; Main variables, most likely candidates for additional command line arguments
;; Change them according to your environment (the message can be supplied in the cli)
(def mq-qm "IOC.MB.QM") ; MQ queue manager name
(def mq-channel "JAVA.IN.CHANNEL") ; MQ channel name
(def mq-port 1414) ; MQ port
(def mq-queue "PT.TEST.IN") ; MQ queue name
(def mq-host "iocptevent") ; MQ server
(def mq-message (if (seq (first *command-line-args*)) ; Message, either the first
(first *command-line-args*) ; command line argument of a snippet from Pessoa's
"My soul is like a shepherd. It knows wind and sun, walking hand in hand with the Seasons"))
(defn- mq-connection-factory
"Sets and returns a CONNECTION-FACTORY using the provided options"
[{:keys [host port transport qm channel]}]
(let [connection-factory (MQQueueConnectionFactory.)]
(doto connection-factory
(.setHostName host)
(.setTransportType transport)
(.setQueueManager qm)
(.setChannel channel))
(defn- mq-send-message [connection-factory queue message]
"Sends MESSAGE, a string, to the QUEUE using CONNECTION-FACTORY"
(let [conn (.createQueueConnection connection-factory)
session (.createQueueSession conn false Session/AUTO_ACKNOWLEDGE)
queue (.createQueue session (str "queue:///" queue))
sender (.createSender session queue)
message (.createTextMessage session message)]
(.start conn)
(.send sender message)
(.close sender)
(.close conn)
(println (str (java.util.Date.) " : Sent message follows" message "\nDelivered to " queue))))
(defn mq-example
"Oracle MQ Demo function"
[& args]
(let [mq-connection (mq-connection-factory {:host mq-host
:port mq-port
:qm mq-qm
:channel mq-channel})]
(mq-send-message mq-connection mq-queue mq-message)))
;; Just send it already
;;;; End of file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment