|
I'm be curious to know the answer too...but I'm also wondering, why are
you interacting with Java? All the prototyped procedures are available
for RPG.
On Wed, 10 Mar 2004 11:24:31 -0600, "Shannon ODonnell"
<sodonnell@xxxxxxxxxxxxxxx> said:
> 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
>
>
>
>
>
>
> _______________________________________________
> This is the Web Enabling the AS400 / iSeries (WEB400) mailing list
> To post a message email: WEB400@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/web400
> or email: WEB400-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/web400.
>
--
michaelr_41@xxxxxxxxxxxxxx
--
http://www.fastmail.fm - Or how I learned to stop worrying and
love email again
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.