Exemplo n.º 1
0
 def receive(self, destination=None, timeout=1000):
     
     if destination:
         dest = destination
     elif self.default_destination:
         dest = self.default_destination
     else:
         raise JMSException("No destination given and no default destination set")
     
     return self.factory.receive(dest, timeout)
Exemplo n.º 2
0
 def send(self, message, destination=None):
     if isinstance(message, basestring):
         message = TextMessage(message)
     
     if destination:
         dest = destination
     elif self.default_destination:
         dest = self.default_destination
     else:
         raise JMSException("No destination given and no default destination set")
     
     message.jms_destination = dest
     
     self.factory.send(message, dest)
Exemplo n.º 3
0
    def _connect(self):
        if self._is_connected:
            return

        conn_name = "%s(%s)" % (self.host, self.listener_port)

        self.logger.info("Connecting to queue manager [%s], channel [%s]" \
            ", connection info [%s]" % (self.queue_manager, self.channel, conn_name))
        self.mgr = self.mq.QueueManager(None)

        sco = self.mq.sco()
        cd = self.mq.cd()
        cd.ChannelName = self.channel
        cd.ConnectionName = conn_name
        cd.ChannelType = self.CMQC.MQCHT_CLNTCONN
        cd.TransportType = self.CMQC.MQXPT_TCP

        if self.ssl:
            if not (self.ssl_cipher_spec and self.ssl_key_repository):
                msg = "SSL support requires setting both ssl_cipher_spec and ssl_key_repository"
                self.logger.error(msg)
                raise JMSException(msg)

            sco.KeyRepository = self.ssl_key_repository
            cd.SSLCipherSpec = self.ssl_cipher_spec

        if self.use_shared_connections:
            connect_options = self.CMQC.MQCNO_HANDLE_SHARE_BLOCK
        else:
            connect_options = self.CMQC.MQCNO_HANDLE_SHARE_NONE

        try:
            self.mgr.connectWithOptions(self.queue_manager,
                                        cd=cd,
                                        opts=connect_options,
                                        sco=sco)
        except self.mq.MQMIError, e:
            exc = WebSphereMQJMSException(e, e.comp, e.reason)
            raise exc
Exemplo n.º 4
0
    def _build_md(self, message):
        md = self.mq.md()

        md.Format = _WMQ_MQFMT_RF_HEADER_2
        md.CodedCharSetId = _WMQ_DEFAULT_CCSID
        md.Encoding = _WMQ_DEFAULT_ENCODING

        # Map JMS headers to MQMD

        if message.jms_correlation_id:
            if message.jms_correlation_id.startswith(_WMQ_ID_PREFIX):
                md.CorrelId = unhexlify_wmq_id(message.jms_correlation_id)
            else:
                md.CorrelId = message.jms_correlation_id.ljust(24)[:24]

        if message.jms_delivery_mode:

            if message.jms_delivery_mode == DELIVERY_MODE_NON_PERSISTENT:
                persistence = self.CMQC.MQPER_NOT_PERSISTENT
            elif message.jms_delivery_mode == DELIVERY_MODE_PERSISTENT:
                persistence = self.CMQC.MQPER_PERSISTENT
            else:
                info = "jms_delivery_mode should be equal to DELIVERY_MODE_NON_PERSISTENT or DELIVERY_MODE_PERSISTENT, not [%s]" % message.jms_delivery_mode
                self.logger.error(info)
                exc = JMSException(info)
                raise exc

            md.Persistence = persistence

        if message.jms_priority:
            md.Priority = message.jms_priority

        if message.jms_reply_to:
            md.ReplyToQ = message.jms_reply_to

            self.logger.log(TRACE1, ("Set jms_reply_to. md.ReplyToQ=[%r],"
                " message.jms_reply_to=[%r]" % (md.ReplyToQ, message.jms_reply_to)))

        # jms_expiration is in milliseconds, md.Expiry is in centiseconds.
        if message.jms_expiration:
            if message.jms_expiration / 1000 > _WMQ_MAX_EXPIRY_TIME:
                md.Expiry = self.CMQC.MQEI_UNLIMITED
            else:
                md.Expiry = message.jms_expiration / 10

        # WebSphere MQ provider-specific JMS headers

        jmsxgroupseq = getattr(message, "JMSXGroupSeq", None)
        if jmsxgroupseq != None:
            md.MsgSeqNumber = jmsxgroupseq
            md.MsgFlags |= self.CMQC.MQMF_MSG_IN_GROUP

        jmsxgroupid = getattr(message, "JMSXGroupID", None)
        if jmsxgroupid != None:
            if jmsxgroupid.startswith(_WMQ_ID_PREFIX):
                md.GroupId = unhexlify_wmq_id(jmsxgroupid)
            else:
                md.GroupId = jmsxgroupid.ljust(24)[:24]
            md.MsgFlags |= self.CMQC.MQMF_MSG_IN_GROUP

        for report_name in("Exception", "Expiration", "COA", "COD", "PAN",
            "NAN", "Pass_Msg_ID", "Pass_Correl_ID", "Discard_Msg"):

            report = getattr(message, "JMS_IBM_Report_" + report_name, None)
            if report != None:
                md.Report |= report

        # Doesn't make much sense to map feedback options as we're stuffed into
        # request messages (MQMT_REQUEST) not report messages (MQMT_REPORT)
        # but different types of messages are still possible to implement in
        # the future so let's leave it.

        jms_ibm_feedback = getattr(message, "JMS_IBM_Feedback", None)
        if jms_ibm_feedback != None:
            md.Feedback = jms_ibm_feedback

        jms_ibm_last_msg_in_group = getattr(message, "JMS_IBM_Last_Msg_In_Group", None)
        if jms_ibm_last_msg_in_group != None:
            md.MsgFlags |= self.CMQC.MQMF_LAST_MSG_IN_GROUP

        return md
Exemplo n.º 5
0
 def convert_and_send(self, object_, destination=None):
     if not self.message_converter:
         raise JMSException("Couldn't send the message, no message converter set")
         
     self.send(self.message_converter.to_message(object_), destination)
Exemplo n.º 6
0
 def receive_and_convert(self, destination=None, timeout=1000):
     if not self.message_converter:
         raise JMSException("Couldn't receive a message, no message converter set")
         
     return self.message_converter.from_message(self.receive(destination, timeout))