|
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-2024 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.