Scheduling a Simple File Transfer using Universal File Mover (How To #5)

At mqseries.net, a user asked the following question:

I’m using MQ FTE version 7.0.4.1 , and I’d like to make a File Transfer to occur from Tuesday to Saturday , is it possible?

Since this is very easy to do in UFM, I thought I would make a ‘UFM How To’ from the question. I will show how to schedule a simple file transfer in “client mode” when UFM connects to the queue managers. Client mode connectivity means that the queue manager resides on a different server than the client application (i.e. UFM).


In this example, the following servers are used but they only have WebSphere MQ (WMQ) Client installed (no queue managers):
– aix002 is an AIX server with WMQ Client and UFM software installed
– linux002 is a Linux server with WMQ Client and UFM software installed

In this example, the following queue managers are used:
MQA1 is a queue manager residing on a AIX (aix001) server (sender)
MQL1 is a queue manager residing on a Linux (linux001) server (receiver)

TEST.LINUX.QL and TEST.LINUX.QL.BK are local queues defined in queue manager MQL1 (receiver)
TEST.LINUX.QR is a remote queue defined in queue manager MQA1 (sender)

If you do not know how to define/setup communication between 2 queue managers then follow the instructions in this blog posting:
https://www.capitalware.com/rl_blog/?p=509

Step #1: On the linux002 server, create a file in the mq directory called mql1.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_MQ SYSTEM "UFM_MQ.dtd">
<UFM_MQ>
    <QMgrName>MQL1</QMgrName>
    <QueueName>TEST.LINUX.QL</QueueName>
    <Hostname>linux001</Hostname>
    <ChannelName>SYSTEM.DEF.SVRCONN</ChannelName>
    <Port>1414</Port>
    <UserID>tester</UserID>
</UFM_MQ>

The mql1.xml (UFM_MQ XML) file describes how to connect to the remote MQL1 queue manager on server linux001. The connection will use UserID of tester. If you do not have that UserID defined on the linux001 server then use a UserID that is defined.

Step #2: On the linux002 server, in the UFM install directory, create a file called ufm_receive_test_5.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_Workflow SYSTEM "UFM_Workflow.dtd">
<UFM_Workflow>

  <Actions>
    <MQReceive getwithconvert="Y" run="D">
      <MQ>
        <MQFile>mql1.xml</MQFile>
        <BackOutQName>TEST.LINUX.QL.BK</BackOutQName>
      </MQ>
      <Default>
         <Directory override="Y">/home/roger/UFM/</Directory>
      </Default>
    </MQReceive>
  </Actions>

</UFM_Workflow>

When UFM is started, it will run as a daemon (run=”D”) and use a backout queue called TEST.LINUX.QL.BK just in case there is an issue with a message. UFM will use ‘get with convert’ option when retrieving the messages. UFM will override the message’s specified directory and use the one provided. Either create /home/roger/UFM/ directory on your Linux server or use a directory that already exist on your Linux server.

Step #3: On the linux002 server, start UFM to receive the file transfers:

./ufm.sh ufm_receive_test_5.xml &

Step #4: On the aix002 server, create a file in the mq directory called mqa1.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_MQ SYSTEM "UFM_MQ.dtd">
<UFM_MQ>
    <QMgrName>MQA1</QMgrName>
    <QueueName>TEST.LINUX.QR</QueueName>
    <Hostname>aix001</Hostname>
    <ChannelName>SYSTEM.DEF.SVRCONN</ChannelName>
    <Port>1414</Port>
    <UserID>tester</UserID>
</UFM_MQ>

The mqa1.xml (UFM_MQ XML) file describes how to connect to the remote MQA1 queue manager on server aix001. The connection will use UserID of tester. If you do not have that UserID defined on the aix001 server then use a UserID that is defined.

Step #5: On the aix002 server, create a file in the data directory called test.txt and put a simple text message in the file (i.e. This is a test message.)

Step #6: On the AIX server, in the UFM install directory, create a file called ufm_send_test_5.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_Workflow SYSTEM "UFM_Workflow.dtd">
<UFM_Workflow>

  <Actions>
    <MQSend delete="N" format="S">
      <File>data/test.txt</File>
      <MQ>
        <MQFile>mqa1.xml</MQFile>
      </MQ>
      <Remote>
        <Directory>/var/mqm/</Directory>
      </Remote>
    </MQSend>
  </Actions>

</UFM_Workflow>

When UFM is started, it will send the specified file and mark the message’s MQMD format as ‘string’.

Step #7: On the aix002 server, create a file in the schedule directory called schedule_5.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_Schedule SYSTEM "UFM_Schedule.dtd">
<UFM_Schedule>
  <Schedule xmlfile="ufm_send_test_5.xml">
    <Minute>0</Minute>
    <Hour>5</Hour>
    <DayOfWeek>2,3,4,5,6</DayOfWeek>
  </Schedule>
</UFM_Schedule>

The schedule_5.xml (UFM_Schedule XML) file describes a scheduling event that will happen on Tuesday, Wednesday, Thursday, Friday and Saturday at 5:00AM each day. When the scheduling event fires, UFM will launch the specified UFM Workflow XML (i.e. ufm_send_test_5.xml). For the DayOfWeek XML element, the user can use numbers (i.e. 2, 3, etc.) or use the day of the week names (i.e. TUESDAY, WEDNESDAY, etc.).

Note: UFM_Schedule XML also supports a HolidayFile element that contains holidays when the scheduling event should NOT be handled.

Step #8: On the AIX server, in the UFM install directory, create a file called ufm_schedule_test_5.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_Workflow SYSTEM "UFM_Workflow.dtd">
<UFM_Workflow>

  <Actions>
    <Schedule xmlfile="schedule_5.xml">
  </Actions>

</UFM_Workflow>

The UFM Workflow XML (i.e. ufm_schedule_test_5.xml) contains the Schedule action that the user wants UFM to process and the xmlfile attribute contains the UFM_Schedule XML file that holds all of the scheduling events.

Step #9: On the aix002 server, start UFM to handle the scheduling of events:

./ufm.sh ufm_schedule_test_5.xml

UFM will start and run forever processing scheduling events.

Step #10: On the linux002 server, verify that the test file (i.e. test.txt) was put into the /home/roger/UFM/ directory or whatever directory you specified in the ufm_receive_test_5.xml file.

Step #11: Finally, we need to stop UFM daemon that is running on the linux002 server. In the UFM install directory, create a file called ufm_putquit_test_5.xml and copy the following into the file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE UFM_Workflow SYSTEM "UFM_Workflow.dtd">
<UFM_Workflow>
  <Actions>
    <MQPutQuit>
      <MQ>
        <MQFile>mql1.xml</MQFile>
      </MQ>
    </MQPutQuit>
  </Actions>
</UFM_Workflow>

Step #12: On the linux002 server, run UFM with the MQPutQuit action:

./ufm.sh ufm_putquit_test_5.xml

This blog demonstrates how to use UFM at both the sender and receiver ends as MQ clients that connect to remote queue managers. The client-side uses UFM scheduling action to manage the sending of files via MQ.

Regards,
Roger Lacroix
Capitalware Inc.

This entry was posted in Capitalware, IBM i (OS/400), IBM MQ, Java, Linux, macOS (Mac OS X), Open Source, Universal File Mover, Unix, Windows.

Comments are closed.