예제 #1
0
파일: outgoing.py 프로젝트: brtsz/zato
class OutgoingConnection(BaseJMSWMQConnection):
    def __init__(self, factory, out_name):
        super(OutgoingConnection, self).__init__()
        self.logger = logging.getLogger(self.__class__.__name__)
        self.jms_template = JmsTemplate(self.factory)
        
    def send(self, msg, default_delivery_mode, default_expiration, default_priority, default_max_chars_printed):
        jms_msg = TextMessage()
        jms_msg.text = msg.get('body')
        jms_msg.jms_correlation_id = msg.get('jms_correlation_id')
        jms_msg.jms_delivery_mode = msg.get('jms_delivery_mode') or default_delivery_mode
        jms_msg.jms_destination = msg.get('jms_destination')
        jms_msg.jms_expiration = msg.get('jms_expiration') or default_expiration
        jms_msg.jms_message_id = msg.get('jms_message_id')
        jms_msg.jms_priority = msg.get('jms_priority') or default_priority
        jms_msg.jms_redelivered = msg.get('jms_redelivered')
        jms_msg.jms_timestamp = msg.get('jms_timestamp')
        jms_msg.max_chars_printed = msg.get('max_chars_printed') or default_max_chars_printed
        
        queue = str(msg['queue'])
        
        try:
            self.jms_template.send(jms_msg, queue)
        except Exception, e:
            if self._keep_connecting(e):
                self.close()
                self.keep_connecting = True
                self.factory._disconnecting = False
                self.start()
            else:
                raise
예제 #2
0
    def __init__(self, factory, name, kvdb):
        super(OutgoingConnection, self).__init__(factory, name, kvdb)
        self.jms_template = JmsTemplate(self.factory)

        # So people don't have to install PyMQI if they don't need it
        from CMQC import MQRC_UNKNOWN_OBJECT_NAME
        from pymqi import MQMIError

        self.MQMIError = MQMIError
        self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME,)
예제 #3
0
 def __init__(self, factory, name, kvdb, delivery_store):
     super(OutgoingConnection, self).__init__(factory, name, kvdb, delivery_store)
     self.logger = logging.getLogger(self.__class__.__name__)
     self.jms_template = JmsTemplate(self.factory)
     
     # So people don't have to install PyMQI if they don't need it
     from CMQC import MQRC_UNKNOWN_OBJECT_NAME
     from pymqi import MQMIError
     
     self.MQMIError = MQMIError
     self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME,)
예제 #4
0
class OutgoingConnection(BaseJMSWMQConnection):
    def __init__(self, factory, name, kvdb):
        super(OutgoingConnection, self).__init__(factory, name, kvdb)
        self.jms_template = JmsTemplate(self.factory)

        # So people don't have to install PyMQI if they don't need it
        from CMQC import MQRC_UNKNOWN_OBJECT_NAME
        from pymqi import MQMIError

        self.MQMIError = MQMIError
        self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME,)

    def send(self, msg, default_delivery_mode, default_expiration, default_priority, default_max_chars_printed):

        jms_msg = TextMessage()

        # Common named arguments first
        jms_msg.text = msg.get('body')
        jms_msg.jms_expiration = int(msg.get('expiration') or default_expiration)
        jms_msg.jms_delivery_mode = msg.get('delivery_mode') or default_delivery_mode
        jms_msg.jms_priority = msg.get('priority') or default_priority
        jms_msg.max_chars_printed = msg.get('max_chars_printed') or default_max_chars_printed

        kwargs = msg.get('kwargs')

        # JMS-specific ones now
        jms_msg.jms_destination = kwargs.get('jms_destination')
        jms_msg.jms_correlation_id = str(kwargs.get('jms_correlation_id'))
        jms_msg.jms_message_id = str(kwargs.get('jms_message_id'))
        jms_msg.jms_redelivered = kwargs.get('jms_redelivered')
        jms_msg.jms_timestamp = kwargs.get('jms_timestamp')

        queue = str(msg['queue'])

        try:
            start = datetime.utcnow()
            self.jms_template.send(jms_msg, queue)

        except Exception, e:
            if isinstance(e, self.MQMIError) and e.reason in self.dont_reconnect_errors:
                logger.warn(
                    'Caught [{}/{}] while sending the message [{}] (not reconnecting)'.format(e.reason, e.errorAsString(), jms_msg))
                self.maybe_on_target_delivery(msg, start, datetime.utcnow(), False, queue, format_exc(e), False)

            else:
                logger.warn('Caught [{}] while sending the message [{}] (reconnecting)'.format(format_exc(e), jms_msg))

                if self._keep_connecting(e):
                    self.close()
                    self.keep_connecting = True
                    self.factory._disconnecting = False
                    self.start()
                else:
                    raise
예제 #5
0
파일: outgoing.py 프로젝트: saulm/zato
class OutgoingConnection(BaseJMSWMQConnection):
    def __init__(self, factory, out_name):
        super(OutgoingConnection, self).__init__(factory, out_name)
        self.logger = logging.getLogger(self.__class__.__name__)
        self.jms_template = JmsTemplate(self.factory)

        # So people don't have to install PyMQI if they don't need it
        from CMQC import MQRC_UNKNOWN_OBJECT_NAME
        from pymqi import MQMIError

        self.MQMIError = MQMIError
        self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME, )

    def send(self, msg, default_delivery_mode, default_expiration,
             default_priority, default_max_chars_printed):
        jms_msg = TextMessage()
        jms_msg.text = msg.get('body')
        jms_msg.jms_correlation_id = msg.get('jms_correlation_id')
        jms_msg.jms_delivery_mode = msg.get(
            'jms_delivery_mode') or default_delivery_mode
        jms_msg.jms_destination = msg.get('jms_destination')
        jms_msg.jms_expiration = int(
            msg.get('jms_expiration') or default_expiration)
        jms_msg.jms_message_id = msg.get('jms_message_id')
        jms_msg.jms_priority = msg.get('jms_priority') or default_priority
        jms_msg.jms_redelivered = msg.get('jms_redelivered')
        jms_msg.jms_timestamp = msg.get('jms_timestamp')
        jms_msg.max_chars_printed = msg.get(
            'max_chars_printed') or default_max_chars_printed

        queue = str(msg['queue'])

        try:
            self.jms_template.send(jms_msg, queue)
        except Exception, e:

            if isinstance(
                    e,
                    self.MQMIError) and e.reason in self.dont_reconnect_errors:
                self.logger.warn(
                    'Caught [{}/{}] while sending the message [{}]'.format(
                        e.reason, e.errorAsString(), jms_msg))
            else:
                self.logger.warn(
                    'Caught [{}] while sending the message [{}]'.format(
                        format_exc(e), jms_msg))

                if self._keep_connecting(e):
                    self.close()
                    self.keep_connecting = True
                    self.factory._disconnecting = False
                    self.start()
                else:
                    raise
예제 #6
0
파일: outgoing.py 프로젝트: barowski/zato
class OutgoingConnection(BaseJMSWMQConnection):
    def __init__(self, factory, out_name):
        super(OutgoingConnection, self).__init__(factory, out_name)
        self.logger = logging.getLogger(self.__class__.__name__)
        self.jms_template = JmsTemplate(self.factory)
        
        # So people don't have to install PyMQI if they don't need it
        from CMQC import MQRC_UNKNOWN_OBJECT_NAME
        from pymqi import MQMIError
        
        self.MQMIError = MQMIError
        self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME, )
        
    def send(self, msg, default_delivery_mode, default_expiration, default_priority, default_max_chars_printed):
        jms_msg = TextMessage()
        jms_msg.text = msg.get('body')
        jms_msg.jms_correlation_id = msg.get('jms_correlation_id')
        jms_msg.jms_delivery_mode = msg.get('jms_delivery_mode') or default_delivery_mode
        jms_msg.jms_destination = msg.get('jms_destination')
        jms_msg.jms_expiration = int(msg.get('jms_expiration') or default_expiration)
        jms_msg.jms_message_id = msg.get('jms_message_id')
        jms_msg.jms_priority = msg.get('jms_priority') or default_priority
        jms_msg.jms_redelivered = msg.get('jms_redelivered')
        jms_msg.jms_timestamp = msg.get('jms_timestamp')
        jms_msg.max_chars_printed = msg.get('max_chars_printed') or default_max_chars_printed
        
        queue = str(msg['queue'])
        
        try:
            self.jms_template.send(jms_msg, queue)
        except Exception, e:
            
            if isinstance(e, self.MQMIError) and e.reason in self.dont_reconnect_errors:
                self.logger.warn('Caught [{}/{}] while sending the message [{}]'.format(e.reason, e.errorAsString(), jms_msg))
            else:
                self.logger.warn('Caught [{}] while sending the message [{}]'.format(format_exc(e), jms_msg))
                
                if self._keep_connecting(e):
                    self.close()
                    self.keep_connecting = True
                    self.factory._disconnecting = False
                    self.start()
                else:
                    raise
예제 #7
0
파일: outgoing.py 프로젝트: rpeterson/zato
 def __init__(self, factory, name, kvdb, delivery_store):
     super(OutgoingConnection, self).__init__(factory, name, kvdb, delivery_store)
     self.logger = logging.getLogger(self.__class__.__name__)
     self.jms_template = JmsTemplate(self.factory)
     
     # So people don't have to install PyMQI if they don't need it
     from CMQC import MQRC_UNKNOWN_OBJECT_NAME
     from pymqi import MQMIError
     
     self.MQMIError = MQMIError
     self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME,)
예제 #8
0
파일: outgoing.py 프로젝트: rpeterson/zato
class OutgoingConnection(BaseJMSWMQConnection):
    def __init__(self, factory, name, kvdb, delivery_store):
        super(OutgoingConnection, self).__init__(factory, name, kvdb, delivery_store)
        self.logger = logging.getLogger(self.__class__.__name__)
        self.jms_template = JmsTemplate(self.factory)
        
        # So people don't have to install PyMQI if they don't need it
        from CMQC import MQRC_UNKNOWN_OBJECT_NAME
        from pymqi import MQMIError
        
        self.MQMIError = MQMIError
        self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME,)
        
    def maybe_on_target_delivery(self, msg, start, end, target_ok, queue, inner_exc=None, needs_reconnect=None):
        if msg.get('confirm_delivery'):
            target_self_info = dumps({
                'name': self.name,
                'details': {
                    'conn_info':self.factory.get_connection_info(),
                    'queue': queue
                }
            })
            
            exc_info = {
                'inner_exc': inner_exc,
                'needs_reconnect': needs_reconnect
            }
            
            self.delivery_store.on_target_completed(
                INVOCATION_TARGET.OUTCONN_WMQ, self.name, msg, start, end, target_ok, target_self_info, exc_info)
        
    def send(self, msg, default_delivery_mode, default_expiration, default_priority, default_max_chars_printed):
        
        jms_msg = TextMessage()
        
        # Common named arguments first
        jms_msg.text = msg.get('body')
        jms_msg.jms_expiration = int(msg.get('expiration') or default_expiration)
        jms_msg.jms_delivery_mode = msg.get('delivery_mode') or default_delivery_mode
        jms_msg.jms_priority = msg.get('priority') or default_priority
        jms_msg.max_chars_printed = msg.get('max_chars_printed') or default_max_chars_printed
        
        kwargs = msg.get('kwargs')
        
        # JMS-specific ones now
        jms_msg.jms_destination = kwargs.get('jms_destination')
        jms_msg.jms_correlation_id = str(kwargs.get('jms_correlation_id'))
        jms_msg.jms_message_id = str(kwargs.get('jms_message_id'))
        jms_msg.jms_redelivered = kwargs.get('jms_redelivered')
        jms_msg.jms_timestamp = kwargs.get('jms_timestamp')
        
        queue = str(msg['queue'])
        
        try:
            start = datetime.utcnow()
            self.jms_template.send(jms_msg, queue)
            self.maybe_on_target_delivery(msg, start, datetime.utcnow(), True, queue)
                
        except Exception, e:
            if isinstance(e, self.MQMIError) and e.reason in self.dont_reconnect_errors:
                self.logger.warn(
                    'Caught [{}/{}] while sending the message [{}] (not reconnecting)'.format(e.reason, e.errorAsString(), jms_msg))
                self.maybe_on_target_delivery(msg, start, datetime.utcnow(), False, queue, format_exc(e), False)
                
            else:
                self.logger.warn('Caught [{}] while sending the message [{}] (reconnecting)'.format(format_exc(e), jms_msg))
                self.maybe_on_target_delivery(msg, start, datetime.utcnow(), False, queue, format_exc(e), True)
                
                if self._keep_connecting(e):
                    self.close()
                    self.keep_connecting = True
                    self.factory._disconnecting = False
                    self.start()
                else:
                    raise
예제 #9
0
class OutgoingConnection(BaseJMSWMQConnection):
    def __init__(self, factory, name, kvdb, delivery_store):
        super(OutgoingConnection, self).__init__(factory, name, kvdb, delivery_store)
        self.logger = logging.getLogger(self.__class__.__name__)
        self.jms_template = JmsTemplate(self.factory)
        
        # So people don't have to install PyMQI if they don't need it
        from CMQC import MQRC_UNKNOWN_OBJECT_NAME
        from pymqi import MQMIError
        
        self.MQMIError = MQMIError
        self.dont_reconnect_errors = (MQRC_UNKNOWN_OBJECT_NAME,)
        
    def maybe_on_target_delivery(self, msg, start, end, target_ok, queue, inner_exc=None, needs_reconnect=None):
        if msg.get('confirm_delivery'):
            target_self_info = dumps({
                'name': self.name,
                'details': {
                    'conn_info':self.factory.get_connection_info(),
                    'queue': queue
                }
            })
            
            exc_info = {
                'inner_exc': inner_exc,
                'needs_reconnect': needs_reconnect
            }
            
            self.delivery_store.on_target_completed(
                INVOCATION_TARGET.OUTCONN_WMQ, self.name, msg, start, end, target_ok, target_self_info, exc_info)
        
    def send(self, msg, default_delivery_mode, default_expiration, default_priority, default_max_chars_printed):
        
        jms_msg = TextMessage()
        
        # Common named arguments first
        jms_msg.text = msg.get('body')
        jms_msg.jms_expiration = int(msg.get('expiration') or default_expiration)
        jms_msg.jms_delivery_mode = msg.get('delivery_mode') or default_delivery_mode
        jms_msg.jms_priority = msg.get('priority') or default_priority
        jms_msg.max_chars_printed = msg.get('max_chars_printed') or default_max_chars_printed
        
        kwargs = msg.get('kwargs')
        
        # JMS-specific ones now
        jms_msg.jms_destination = kwargs.get('jms_destination')
        jms_msg.jms_correlation_id = str(kwargs.get('jms_correlation_id'))
        jms_msg.jms_message_id = str(kwargs.get('jms_message_id'))
        jms_msg.jms_redelivered = kwargs.get('jms_redelivered')
        jms_msg.jms_timestamp = kwargs.get('jms_timestamp')
        
        queue = str(msg['queue'])
        
        try:
            start = datetime.utcnow()
            self.jms_template.send(jms_msg, queue)
            self.maybe_on_target_delivery(msg, start, datetime.utcnow(), True, queue)
                
        except Exception, e:
            if isinstance(e, self.MQMIError) and e.reason in self.dont_reconnect_errors:
                self.logger.warn(
                    'Caught [{}/{}] while sending the message [{}] (not reconnecting)'.format(e.reason, e.errorAsString(), jms_msg))
                self.maybe_on_target_delivery(msg, start, datetime.utcnow(), False, queue, format_exc(e), False)
                
            else:
                self.logger.warn('Caught [{}] while sending the message [{}] (reconnecting)'.format(format_exc(e), jms_msg))
                self.maybe_on_target_delivery(msg, start, datetime.utcnow(), False, queue, format_exc(e), True)
                
                if self._keep_connecting(e):
                    self.close()
                    self.keep_connecting = True
                    self.factory._disconnecting = False
                    self.start()
                else:
                    raise
예제 #10
0
파일: outgoing.py 프로젝트: brtsz/zato
 def __init__(self, factory, out_name):
     super(OutgoingConnection, self).__init__()
     self.logger = logging.getLogger(self.__class__.__name__)
     self.jms_template = JmsTemplate(self.factory)
예제 #11
0
from springpython.jms.core import JmsTemplate
from springpython.jms.factory import WebSphereMQConnectionFactory

qm_name = "QM.1"
channel = "jms/demoQueue"
host = "127.0.0.1"
listener_port = "1434"
queue1 = "TEST.1"

# The connection factory we're going to use.
factory = WebSphereMQConnectionFactory(qm_name, channel, host, listener_port)

# Every JmsTemplate uses a connection factory for actually communicating with a JMS provider.
jms_template = JmsTemplate(factory)

# Get a message off the queue. The call to receive will by default time out
# after 1000ms and raise springpython.jms.NoMessageAvailableException then.
jms_template.receive(queue1)

# We're not using an IoC so we need to shut down the connection factory ourselves.
factory.destroy()