|
Not sure if this is the right forum for this question, but if not, I'm
sure someone will tell me.
I'm trying to interface an RPGIV program to a Java class to talk to a MQ
Series MQ Manager.
I've done RPG to Java beore, but I've always used pretty simple
paramaters and such. This one is a bit trickier so I'm seeking help.
Here's what I have:
Within my MQJBIND class, I have a method called "MQJBIND" that accepts
two java string objects as parms.
A second method in the class called "mGetOutput" that returns a java
string object and accepts as a parm, the reference to MQJBIND.
Here's the relevant java code:
class MQJBIND
{
public void init()
{
// Set up MQSeries environment
MQEnvironment.channel = channel;
} // end of init
/**
* CONSTURCTER
* @param qManager the MQSeriss Queue Manager name
* @parm qname the MQSeries Queue Name
*/
public MQJBIND(String qManager, String qName)
{ // begin MQJBIND
// Set up MQ environment
try
{ // begin TRY MQJBIND
// Create a connection to the queue manager
qMgr = new MQQueueManager(qManager,MQC.MQCNO_STANDARD_BINDING);
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF |
MQC.MQOO_INQUIRE |
MQC.MQOO_SET |
MQC.MQOO_OUTPUT ;
// Note. MQOO_INQUIRE & MQOO_SET are always included by default.
// Now specify the queue that we wish to open, and the open
options...
local_queue = qMgr.accessQueue(
qName,
openOptions,
null, // default q manager
null, // no dynamic q name
null); // no alternate user id
} // end TRY MQJBIND
// If an error has occured in the above, try to identify what went
wrong.
// Was it an MQ error?
catch (MQException ex)
{ // begin CATCH MQJBIND
if(ex.reasonCode == 2033 || ex.reasonCode == 2002)
{
error_out = "EMPTY QUEUE";
out_text = "";
}
else
{
error_out = "An MQ error occurred : Completion code " +
ex.completionCode +
" Reason code " + ex.reasonCode;
out_text = "";
}
} // end CATCH MQJBIND
} // end MQJBIND
/**
* Method getOutput reads the message from the appropriate queue and
* returns it in a String format.
* MQ Queue.
* @param MQJBIND class
*/
public static String getOutput(MQJBIND mqg)
{ // begin getOutput
mqg.out_text = "";
try
{ // begin try getOutput
//check if queue is empty
if ((mqg.qDepth = mqg.local_queue.getCurrentDepth()) > 0)
{
//System.out.println ("In MQJBind current depth is >
0");
MQMessage retrievedMessage = new MQMessage();
// Set the get message options.. accept the defaults
MQGetMessageOptions gmo = new MQGetMessageOptions();
// wait for a message to arrive
gmo.options = MQC.MQGMO_WAIT;
// unlimited wait for a message
gmo.waitInterval = MQC.MQWI_UNLIMITED;
// get the message off the queue..
mqg.local_queue.get(retrievedMessage,gmo);
// And prove we have the message by displaying the UTF
message text
String msgText = retrievedMessage.readUTF();
mqg.out_text = msgText;
System.out.println("The message is: " + msgText);
}
else
{
//System.out.println ("In MQJBind current depth is <=
0");
mqg.error_out = "EMPTY QUEUE";
mqg.out_text = "";
}
} // end try getOutput
catch (MQException ex)
{ // begin catch MQException getOutput
if(ex.reasonCode == 2033 || ex.reasonCode == 2002)
{
mqg.error_out = "EMPTY QUEUE";
mqg.out_text = "";
}
else
{
mqg.error_out = "An MQ error occurred : Completion code
" + ex.completionCode +
" Reason code " + ex.reasonCode;
mqg.out_text = "";
}
} // end catch MQException getOutput
catch (java.io.IOException ex)
{ // begin catch java.io.IOException getOutput
mqg.error_out = "An error occurred whilst writing to the
message buffer: " + ex;
mqg.out_text = "";
} // end catch java.io.IOException getOutput
return (mqg.out_text);
} // end getOutput
Now...my question is....how do I prototype the MQJBIND method in my RPG
program to receive the reference to MQJBIND?
Here's what I did, but it doesn't like my prototype when I compile,
because I can't figure out what to use as the return data type on the
prototype:
D obj_ref S O CLASS(*JAVA:'MQJBIND')
D mqjbind S O CLASS(*JAVA:'MQJBIND')
D qManager S O
CLASS(*JAVA:'java.lang.String')
D qChannel S O
CLASS(*JAVA:'java.lang.String')
D qName S O
CLASS(*JAVA:'java.lang.String')
D bytes S O
CLASS(*JAVA:'java.lang.String')
* Prototype procedure to instantiate 'MQJBIND' class
D MQJBIND PR O
D EXTPROC(*JAVA:
D 'MQJBIND':
D *CONSTRUCTOR)
* Prototype procedure to connect to QManager
D MQJBINDM PR 10i 0
<<<<-----this return value is incorrect, but I don't know how to fix!
D EXTPROC(*JAVA:
D 'MQJBIND':
D 'MQJBIND')
D ManagerQ LIKE(qManager) CONST
D NameQ LIKE(qName) CONST
* Prototype procedure to accept the DCN INFO FROM ISP
D MQGetOutput PR 1000a
D EXTPROC(*JAVA:
D 'MQJBIND':
D 'getOutput')
D MqJBindObj LIKE(MQJBIND)
// Instantiate the 'MQMJBind' class via the *CONSTRUCTOR
obj_ref = MQJBIND();
// Call the MQMJBIND Method to connect to the MQ Manager on
remote host
mqjbind = MQJBINDM(obj_ref:qManager:qName);
// Call the 'MQGetOutput' method in class 'MQMJBind'
Response = MQGetOutput(obj_ref:mqjbind);
Any help/suggestions appreciated.
Shannon O'Donnell
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.