Author |
Message
|
anveshita |
Posted: Tue Dec 28, 2004 9:57 am Post subject: PCFeventmessage |
|
|
Master
Joined: 27 Sep 2004 Posts: 254 Location: Jambudweepam
|
Can somebody help me how to step through PCFeventmessage in Java?
I tried using System.out.println( "Message: " + pcfeventmessage.toString());
But this dumps the whole message. what I a doing is to parse the message "Q_DEPTH_HIGH" in SYSTEM.ADMIN.PERFM.EVENT and gather the queue name which threw the message.
I also tried
PCFParameter p;
String name = null;
while (name == null)
{
p = PCFParameter.nextParameter (pcfeventmessage);
name = (String) p.getValue ();
}
This is giving 3013 error, which I do not have a clue what it is.
Please let me know |
|
Back to top |
|
 |
jefflowrey |
Posted: Tue Dec 28, 2004 10:21 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Can we see some more code? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
anveshita |
Posted: Tue Dec 28, 2004 10:32 am Post subject: |
|
|
Master
Joined: 27 Sep 2004 Posts: 254 Location: Jambudweepam
|
I am trying to access local queue and passing the parms from command line. Here is the function that does the work I am hoping to do.
Code: |
public void start(String args[]) { try {
/******************************************************/
/* Create a queue manager object and access the queue */
/* that will be used for the putting of messages. */
/******************************************************/
if (args.length > 1) {
qMgr = new MQQueueManager(args[1]);
} else { qMgr = new MQQueueManager(""); }
int openOptions=8201;
MQQueue mqqueue = qMgr.accessQueue(args[0],
openOptions, null, null, null);
MQGetMessageOptions mqgetmessageoptions = new
MQGetMessageOptions();
mqgetmessageoptions.matchOptions = 0;
mqgetmessageoptions.waitInterval = 333;
mqgetmessageoptions.options = 8225;
/***************************/ /* Set up a loop exit flag
*/ /***************************/ boolean flag = false;
String evtype; int counter;
try {
int i = 0; while (true) {
MQMessage mqmessage = new MQMessage();
mqqueue.get(mqmessage,
mqgetmessageoptions);
System.out.println("Got an event
message!"); SimpleDateFormat
simpledateformat = new
SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
GregorianCalendar eventTime = ((MQMD)
(mqmessage)).putDateTime; PCFMessage
pcfeventmessage = new
PCFMessage(mqmessage);
switch (pcfeventmessage.getCommand()) {
case CMQCFC.MQCMD_Q_MGR_EVENT : evtype =
"QMGR EVENT"; break; case
CMQCFC.MQCMD_PERFM_EVENT : evtype =
"PERFORMANCE EVENT"; break; case
CMQCFC.MQCMD_CHANNEL_EVENT : evtype =
"CHANNEL EVENT"; break; default : evtype
= "Unknown event type"; break; }
System.out.println("evtype : "+evtype);
System.out.println( "Message: " +
pcfeventmessage.toString());
System.out.println( "Parameters: "
+ pcfeventmessage.getParameters());
PCFParameter p; String name =
null;
while (name == null) { p = PCFParameter.nextParameter
(pcfeventmessage); name = (String) p.getValue (); }
i++;
} } catch (Exception ex) {
/***********************************************
***/ /* Probably encountered our no message
available: */ /* write out error and mark loop
to be exited */
/***********************************************
***/ //System.out.println("MQ exception: CC = "
// + ex.completionCode //
+ " RC = " // + ex.reasonCode);
ex.printStackTrace(); flag = false;
}
mqqueue.close(); qMgr.disconnect();
} catch (Exception ex) { ex.printStackTrace(); }
} |
|
|
Back to top |
|
 |
fjb_saper |
Posted: Tue Dec 28, 2004 11:51 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Retrieve your message as a byte array. Instanciate a helper class with the byte array and retrieve the needed information from the helper class.
The helper class can then analyze the byte array and go after the exact parts (start, length) that is needed.
Enjoy  |
|
Back to top |
|
 |
anveshita |
Posted: Tue Dec 28, 2004 12:55 pm Post subject: |
|
|
Master
Joined: 27 Sep 2004 Posts: 254 Location: Jambudweepam
|
Thanks fjb_saper,
Could you please provide a code snippet, if any? |
|
Back to top |
|
 |
EddieA |
Posted: Tue Dec 28, 2004 11:50 pm Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
Here's a code snippet from a program that I have that works it's way through Event Messages. Hopefully it will be useful:
Code: |
if (mdFormat.equals(MQC.MQFMT_EVENT)) {
System.out.println("");
MQCFH cfh = new MQCFH (gotBody);
System.out.println(InfoString("MQRC", cfh.reason));
for (int i = 0; i < cfh.parameterCount; i++) {
PCFParameter pcf = PCFParameter.nextParameter (gotBody);
if (pcf instanceof MQCFIL) {
System.out.println("Its a FIL");
}
else {
if (pcf instanceof MQCFIN) {
messageVars [0] = pcf.getValue();
messageVars [1] = Integer.toHexString(((Integer)pcf.getValue()).intValue()).toUpperCase();
DecodeParameter(pcf.getParameter(), messageVars);
}
else {
if (pcf instanceof MQCFSL) {
System.out.println("Its a FSL");
}
else {
if (pcf instanceof MQCFST) {
messageVars [0] = pcf.getStringValue().trim();
DecodeParameter(pcf.getParameter(), messageVars);
}
else {
System.out.println("Unknown PCF type " + pcf.getType() + " encountered.");
};
};
};
};
}
} |
BTW. I'm a self taught Java guy (370 Assembler was my strength, which shows my age), so this my not be the best way of doing things.
Cheers, _________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
Nigelg |
Posted: Wed Dec 29, 2004 12:22 am Post subject: |
|
|
Grand Master
Joined: 02 Aug 2004 Posts: 1046
|
I have a program written in C which takes an byte stream input on stdin and interprets it as a PCF msg, if anybody is interested. |
|
Back to top |
|
 |
anveshita |
Posted: Wed Dec 29, 2004 7:55 am Post subject: |
|
|
Master
Joined: 27 Sep 2004 Posts: 254 Location: Jambudweepam
|
Thanks EddieA
I tried your code snippet.
if(mqmessage.format.equals(MQC.MQFMT_EVENT)){
MQCFH cfh = new MQCFH (mqmessage);
**** ***** ****
**** ***** ****
***** **** *****
}
I am getting 3001 error
Unable to load message catalog - mqji
com.ibm.mq.MQException: Completion Code 2, Reason 3001
at com.ibm.mq.pcf.MQCFH.initialize(MQCFH.java:138)
at com.ibm.mq.pcf.MQCFH.<init>(MQCFH.java:113)
at MyEventMonitor.start(MyEventMonitor.java:211)
at MyEventMonitor.main(MyEventMonitor.java:37)
Can you please let me know why? |
|
Back to top |
|
 |
jefflowrey |
Posted: Wed Dec 29, 2004 8:00 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Programmable Command Formats wrote: |
3001 (X'0BB9') MQRCCF_CFH_TYPE_ERROR
Explanation: Type not valid.
The MQCFH Type field value was not valid.
Programmer Response: Specify a valid type. |
EddieA, in his code, was passing in the body of the message... your code appears to be passing in the entire message... _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
anveshita |
Posted: Wed Dec 29, 2004 8:10 am Post subject: |
|
|
Master
Joined: 27 Sep 2004 Posts: 254 Location: Jambudweepam
|
Thanks...
MQCFH constructor as per the documentation expects MQMessage as the parameter.Hence, I have passed
MQMessage insted of "gotBody".
Now if I have to pass message body, how do
I code this? |
|
Back to top |
|
 |
EddieA |
Posted: Wed Dec 29, 2004 10:27 am Post subject: |
|
|
 Jedi
Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles
|
The 2 parameters into the routine are: (MQMessage gotBody, String mdFormat).
The 1st, as pointed out, is an MQMessage, the 2nd, a String containing the current message format. The full code does more than handle Events.
Cheers, _________________ Eddie Atherton
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
kirani |
Posted: Wed Dec 29, 2004 10:57 am Post subject: |
|
|
Jedi Knight
Joined: 05 Sep 2001 Posts: 3779 Location: Torrance, CA, USA
|
There is a sample code that comes with SupportPac MS0B: MQSeries Java classes for PCF. _________________ Kiran
IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries
|
|
Back to top |
|
 |
anveshita |
Posted: Wed Dec 29, 2004 11:41 am Post subject: |
|
|
Master
Joined: 27 Sep 2004 Posts: 254 Location: Jambudweepam
|
Thanks Kirani.
I have started off with the exaples on PCF and no where it is mentioned wiaht what I am trying to do with EVENT messages. Please let me know if I am missing something here
Thanks EddieA.
I have coded similar to the way you have mentioned and I am still getting 3001 error.
I have modified the code as follow
Code: |
if(mqmessage.format.equals(MQC.MQFMT_EVENT)){
MQCFH cfh = new MQCFH (mqmessage);
for ( i = 0; i < cfh.parameterCount; i++) {
PCFParameter pcf = PCFParameter.nextParameter (mqmessage);
if (pcf instanceof MQCFIL) {
System.out.println("Its a FIL");
}
else {
if (pcf instanceof MQCFIN) {
// messageVars [0] = pcf.getValue();
// messageVars [1] = Integer.toHexString(((Integer)pcf.getValue()).intValue()).toUpperCase();
// DecodeParameter(pcf.getParameter(), messageVars);
System.out.println("Its a FIN");
}
else {
if (pcf instanceof MQCFSL) {
System.out.println("Its a FSL");
}
else {
if (pcf instanceof MQCFST) {
// messageVars [0] = pcf.getStringValue().trim();
//DecodeParameter(pcf.getParameter(), messageVars);
System.out.println("Its a FST");
}
else {
System.out.println("Unknown PCF type " + pcf.getType() + " encountered.");
}
}
}
}
}
} |
Let me tell about the mqmessage I am using here. It is the message I have browsed from SYSTEM.AMIN.PERFM.EVENT queue
Please let me know if some thing is missing in the above code |
|
Back to top |
|
 |
|