Java - Report from websphere MQ

The code below works well for putting messages into MQ. The load balancing works perfect. I tried to obtain the report but no report is generated. How do I solve the problem?. Did I miss something?.

Java code

qMgr = new MQQueueManager(qManager);
int openOptions = MQC.MQOO_OUTPUT ;
MQQueue MQ1_RQSTIN = qMgr.accessQueue("QM1.RQSTIN",openOptions);
MQMessage hello_world = new MQMessage();
hello_world.putApplicationName = "src_mqsample.txt";
hello_world.report = MQC.MQRO_COA ;
hello_world.replyToQueueName = "QM1.REPLY";

File file = new File("C:
Documents and Settings
My Documents
JCreator LE
MyProjects
MQSample
src_mqsample.txt");
StringBuffer contents = new StringBuffer();
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(file));
String text = null;


while((text = reader.readLine())!= null)
{
contents.append(text).append(System.getProperty("line.separator"));
}

hello_world.writeObject(contents);
MQPutMessageOptions pmo = new MQPutMessageOptions();
MQ1_RQSTIN.put(hello_world,pmo);


MQ Script


QM1

DEFINE QLOCAL(DEAD.QUEUE)

DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(QM2) XMITQ(QM2.XMIT) PUT(ENABLED)

DEFINE QLOCAL(QM2.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM1.QM2.DF) TRIGTYPE(FIRST)

DEFINE CHANNEL(QM1.QM2.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM2.XMIT) CONNAME('localhost(1415)')

DEFINE CHANNEL(QM2.QM1.DF) CHLTYPE(RCVR) TRPTYPE(TCP)

DEFINE QLOCAL(QM1.REPLY) PUT(ENABLED) GET(ENABLED)

runmqlsr -m QM1 -t tcp -p 1420


QM2

DEFINE QLOCAL(DEAD.QUEUE)

DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(ANY.QMGR) XMITQ(Q3.XMIT) PUT(ENABLED)

DEFINE QLOCAL(QM3.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM2.QM3.DF) TRIGTYPE(FIRST)

DEFINE CHANNEL(QM2.QM3.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM3.XMIT) CONNAME('localhost(1416)')

DEFINE CHANNEL(QM1.QM2.DF) CHLTYPE(RCVR) TRPTYPE(TCP)

DEFINE QREMOTE(QM1.REPLY) RQMNAME(QM1) RNAME('') XMITQ(QM1.XMIT)

DEFINE QLOCAL(QM1.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM2.QM1.DF) TRIGTYPE(FIRST)

DEFINE CHANNEL(QM2.QM1.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM1.XMIT) CONNAME('localhost(1420)')

runmqlsr -m QM2 -t tcp -p 1415

runmqlsr -m QM2 -t tcp -p 1419


QM3

DEFINE QLOCAL(DEAD.QUEUE)

DEFINE QREMOTE(ANY.QMGR)

DEFINE CHANNEL(QM2.QM3.DF) CHLTYPE(RCVR) TRPTYPE(TCP)

DEFINE CHANNEL(QM3.QM4.DF) CHLTYPE(CLUSSDR) CONNAME('localhost(1417)') CLUSTER(CLUS2)

DEFINE CHANNEL(QM3.QM3.DF) CHLTYPE(CLUSRCVR) CONNAME('localhost(1416)') CLUSTER(CLUS2)

DEFINE QREMOTE(QM1.REPLY) RQMNAME(QM1) RNAME(MQ1.REPLY) XMITQ(QM2.XMIT)

DEFINE QLOCAL(QM2.XMITQ) USAGE(XMITQ) TRIGGER TRIGDATA(QM1.QM2.DF) TRIGTYPE(FIRST)

DEFINE CHANNEL(QM1.QM2.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM2.XMITQ) CONNAME('localhost(1419)')

runmqlsr -m QM3 -t tcp -p 1416


QM4

ALTER QMGR REPOS(CLUS2)

DEFINE QLOCAL(DEAD.QUEUE)

DEFINE CHANNEL(QM3.QM4.DF) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('localhost(1417)') CLUSTER(CLUS2)

DEFINE CHANNEL(QM4.QM5.DF) CHLTYPE(CLUSSDR) CONNAME('localhost(1418)') CLUSTER(CLUS2)

DEFINE QLOCAL(QM1.RQSTIN) CLUSTER(CLUS2)

runmqlsr -m QM4 -t tcp -p 1417


QM5

ALTER QMGR REPOS(CLUS2)

DEFINE QLOCAL(DEAD.QUEUE)

DEFINE CHANNEL(QM4.QM5.DF) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('localhost(1418)') CLUSTER(CLUS2)

DEFINE CHANNEL(QM3.QM4.DF) CHLTYPE(CLUSSDR) CONNAME('localhost(1417)') CLUSTER(CLUS2)

DEFINE QLOCAL(QM1.RQSTIN) CLUSTER(CLUS2)

runmqlsr -m QM5 -t tcp -p 1418


Your help is kindly appreciated.

Thank You.
eugene007Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
lgacsConnect With a Mentor Commented:
I repeat: You have not received COA because your message has NOT been delivered.
DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(ANY.QMGR) XMITQ(Q3.XMIT)

The original message is not deliverable, you have no queue manager "ANY.QMGR".
All messages are  transmitted to QM3, where you can find them in the dead letter queue
(which is probably your DEAD.QUEUE, if defined so, or in a default transmission queue
if it is declared.)
0
 
eugene007Author Commented:
I did modification on MQ script but still no report is generated.
MQ Script 
 
QM1 
 
DEFINE QLOCAL(DEAD.QUEUE) 
 
DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(QM2) XMITQ(QM2.XMIT) PUT(ENABLED) 
 
DEFINE QLOCAL(QM2.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM1.QM2.DF) TRIGTYPE(FIRST) 
 
DEFINE CHANNEL(QM1.QM2.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM2.XMIT) CONNAME('localhost(1415)') 
 
DEFINE CHANNEL(QM2.QM1.DF) CHLTYPE(RCVR) TRPTYPE(TCP) 
 
DEFINE QLOCAL(QM1.REPLY) 
 
runmqlsr -m QM1 -t tcp -p 1420 
 
 
QM2 
 
DEFINE QLOCAL(DEAD.QUEUE) 
 
DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(ANY.QMGR) XMITQ(Q3.XMIT) PUT(ENABLED) 
 
DEFINE QLOCAL(QM3.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM2.QM3.DF) TRIGTYPE(FIRST) 
 
DEFINE CHANNEL(QM2.QM3.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM3.XMIT) CONNAME('localhost(1416)') 
 
DEFINE CHANNEL(QM1.QM2.DF) CHLTYPE(RCVR) TRPTYPE(TCP) 
 
DEFINE QREMOTE(QM1.REPLY) RNAME(QM1.REPLY) RQMNAME(QM1) XMITQ(QM1.XMIT) 
 
DEFINE QLOCAL(QM1.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM2.QM1.DF) TRIGTYPE(FIRST) 
 
DEFINE CHANNEL(QM2.QM1.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMIQ(QM1.XMIT) CONNAME('localhost(1420)') 
 
DEFINE CHANNEL(QM3.QM2.DF) CHLTYPE(RCVR) TRPTYPE(TCP) 
 
runmqlsr -m QM2 -t tcp -p 1415 
 
runmqlsr -m QM2 -t tcp -p 1419 
 
 
QM3 
 
DEFINE QLOCAL(DEAD.QUEUE) 
 
DEFINE QREMOTE(ANY.QMGR) 
 
DEFINE CHANNEL(QM2.QM3.DF) CHLTYPE(RCVR) TRPTYPE(TCP) 
 
DEFINE CHANNEL(QM3.QM4.DF) CHLTYPE(CLUSSDR) CONNAME('localhost(1417)') CLUSTER(CLUS2) 
 
DEFINE CHANNEL(QM3.QM3.DF) CHLTYPE(CLUSRCVR) CONNAME('localhost(1416)') CLUSTER(CLUS2) 
 
DEFINE QREMOTE(QM1.REPLY) RNAME(QM1.REPLY) RQMNAME(QM2) XMITQ(QM2.XMIT) CLUSTER(CLUS2) 
 
DEFINE QLOCAL(QM2.XMIT) USAGE(XMITQ) TRIGGER TRIGDATA(QM3.QM2.DF) TRIGTYPE(FIRST) 
 
DEFINE CHANNEL(QM3.QM2.DF) CHLTYPE(SDR) TRPTYPE(TCP) XMITQ(QM2.XMIT) CONNAME('localhost(1419)') 
 
runmqlsr -m QM3 -t tcp -p 1416 
 
 
QM4 
 
ALTER QMGR REPOS(CLUS2) 
 
DEFINE QLOCAL(DEAD.QUEUE) 
 
DEFINE CHANNEL(QM3.QM4.DF) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('localhost(1417)') CLUSTER(CLUS2) 
 
DEFINE CHANNEL(QM4.QM5.DF) CHLTYPE(CLUSSDR) CONNAME('localhost(1418)') CLUSTER(CLUS2) 
 
DEFINE QLOCAL(QM1.RQSTIN) CLUSTER(CLUS2) 
 
DEFINE QREMOTE(QM1.REPLY) RNAME(QM1.REPLY) RQMNAME(QM3) XMITQ('') CLUSTER(CLUS2) 
 
runmqlsr -m QM4 -t tcp -p 1417 
 
 
QM5 
 
ALTER QMGR REPOS(CLUS2) 
 
DEFINE QLOCAL(DEAD.QUEUE) 
 
DEFINE CHANNEL(QM4.QM5.DF) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('localhost(1418)') CLUSTER(CLUS2) 
 
DEFINE CHANNEL(QM3.QM4.DF) CHLTYPE(CLUSSDR) CONNAME('localhost(1417)') CLUSTER(CLUS2) 
 
DEFINE QLOCAL(QM1.RQSTIN) CLUSTER(CLUS2) 
 
DEFINE QREMOTE(QM1.REPLY) RNAME(QM1.REPLY) RQMNAME(QM3) XMITQ('') CLUSTER(CLUS2) 
 
runmqlsr -m QM5 -t tcp -p 1418

Open in new window

0
 
lgacsCommented:
You should also define replyToQueueManager beside replyToQueueName
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
eugene007Author Commented:
public String replyToQueueManagerName
0
 
eugene007Author Commented:
I added:

hello_world.replyToQueueManagerName = "QM1";

But no report is return to the queue manager QM1 queue QM1.REPLY
0
 
lgacsCommented:
You have not received COA because your message has NOT been delivered.

The target Q refer a Q on QM2
 DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(QM2)
which refer an unexisting Q
 DEFINE QREMOTE(QM1.RQSTIN) RNAME(QM1.RQSTIN) RQMNAME(ANY.QMGR)

Try a simple structure first.
Make a drawing on it, signing the references and message paths.

0
 
eugene007Author Commented:
Actually the mq script is a load balancing script. At QM3 it decides to route the message to QM4 or QM5.
0
 
eugene007Author Commented:
In QM4 and QM5 I have:
DEFINE QREMOTE(QM1.REPLY) RNAME(QM1.REPLY) RQMNAME(QM3) XMITQ('') CLUSTER(CLUS2)
so why cant the QM4 and QM5 use this remote queue to send a COA to QM1?
0
 
eugene007Author Commented:
How do I resolve this problem without affecting the load balancing capability of the MQ script?.
0
 
eugene007Author Commented:
I check the DEAD.QUEUE and Transmission Queue but the current depth is 0.
0
 
eugene007Author Commented:
I also did the following:

Java code:

hello_world.report = MQC.MQRO_COD ;
hello_world.replyToQueueName = "ANY.QMGR";
hello_world.replyToQueueManagerName = "QM3";

For QM4 and QM5 I:

DEFINE QALIAS(ANY.QMGR) TARGQ(QM1.REPLY) CLUSTER(CLUS2)

But no report is sent to QM1.
0
 
eugene007Author Commented:
I even check SYSTEM.DEAD.LETTER.QUEUE and found that the currentdepth is 0.
0
 
eugene007Author Commented:
ANY.QMGR does not exist, can I declare one with no queue and channel definition declared.
0
 
eugene007Author Commented:
I did a simple design and it works :)
0
All Courses

From novice to tech pro — start learning today.