× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



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

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.