Prerequisites for triggering

Use this information to learn about the steps to take before using triggering.

Before the application can take advantage of triggering, complete the following steps:
  1. Either:
    1. Create an initiation queue for the application queue. For example:
         DEFINE QLOCAL (initiation.queue) REPLACE      +
                LIKE (SYSTEM.DEFAULT.INITIATION.QUEUE)      +
                DESCR ('initiation queue description')
      
      or
    2. Determine the name of a local queue that exists and can be used by the application (typically, this name is SYSTEM.DEFAULT.INITIATION.QUEUE or, if we are starting channels with triggers, SYSTEM.CHANNEL.INITQ), and specify its name in the InitiationQName field of the application queue.

  2. Associate the initiation queue with the application queue. A queue manager can own more than one initiation queue. We might want some of the application queues to be served by different programs, in which case, we can use one initiation queue for each serving program, although we do not have to. Here is an example of how to create an application queue:
       DEFINE QLOCAL (application.queue) REPLACE   +
       LIKE (SYSTEM.DEFAULT.LOCAL.QUEUE)           +
       DESCR ('appl queue description')    +
       INITQ ('initiation.queue')          +
       PROCESS ('process.name')            +
       TRIGGER                                     +
       TRIGTYPE (FIRST)
    
    Here is an extract from a CL program for IBM MQ for IBM i that creates an initiation queue:
     /*   Queue used by AMQSINQA                                       */
                 CRTMQMQ     QNAME('SYSTEM.SAMPLE.INQ')                  +
                             QTYPE(*LCL)  REPLACE(*YES)                  +
                             MQMNAME                                     +
                             TEXT('queue for AMQSINQA')                  +
                             SHARE(*YES)                /* Shareable   */+
                             DFTMSGPST(*YES)/* Persistent messages OK  */+
                                                                         +
                             TRGENBL(*YES)  /* Trigger control on      */+
                             TRGTYPE(*FIRST)/* Trigger on first message*/+
                             PRCNAME('SYSTEM.SAMPLE.INQPROCESS')         +
                             INITQNAME('SYSTEM.SAMPLE.TRIGGER')
    
  3. If we are triggering an application, create a process definition object to contain information relating to the application that is to serve the application queue. For example, to trigger-start a CICS payroll transaction called PAYR:
       DEFINE PROCESS (process.name) +
              REPLACE +
              DESCR ('process description') +
              APPLICID ('PAYR') +
              APPLTYPE (CICS) +
              USERDATA ('Payroll data')
    
    Here is an extract from a CL program for IBM MQ for IBM i that creates a process definition object:
     /*   Process definition                                           */
                 CRTMQMPRC   PRCNAME('SYSTEM.SAMPLE.INQPROCESS')         +
                             REPLACE(*YES)                               +
                             MQMNAME                                     +
                             TEXT('trigger process for AMQSINQA')        +
                             ENVDATA('JOBPTY(3)') /* Submit parameter  */+
                             APPID('AMQSINQA')    /* Program name      */
    

    When the queue manager creates a trigger message, it copies information from the attributes of the process definition object into the trigger message.

    Platform To create a process definition object
    UNIX, Linux, and Windows systems Use DEFINE PROCESS or use SYSTEM.DEFAULT.PROCESS and modify using ALTER PROCESS
    z/OS Use DEFINE PROCESS (see sample code in step 3 ), or use the operations and control panels.
    IBM i Use a CL program containing code as in step 3.
  4. Optional: Create a transmission queue definition and use blanks for the ProcessName attribute.

    The TrigData attribute can contain the name of the channel to be triggered or it can be left blank. Except on IBM MQ for z/OS, if it is left blank, the channel initiator searches the channel definition files until it finds a channel that is associated with the named transmission queue. When the queue manager creates a trigger message, it copies information from the TrigData attribute of the transmission queue definition into the trigger message.

  5. If we have created a process definition object to specify properties of the application that is to serve the application queue, associate the process object with the application queue by naming it in the ProcessName attribute of the queue.

    Platform Use commands
    UNIX, Linux, and Windows systems ALTER QLOCAL
    z/OS ALTER QLOCAL
    IBM i CHGMQMQ
  6. Start instances of the trigger monitors (or trigger servers in IBM MQ for IBM i ) that are to serve the initiation queues you have defined. See Trigger monitors for more information.

To be aware of any undelivered trigger messages, make sure that your queue manager has a dead-letter (undelivered-message) queue defined. Specify the name of the queue in the DeadLetterQName queue manager field.

We can then set the trigger conditions that you require, using the attributes of the queue object that defines the application queue. For more information, see Control trigger events.

Parent topic: Starting IBM MQ applications using triggers