[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: WebService from AS400



Hello Musthafa,

If you are on 5.4 or 6.1, you could also use the integrated webservices server (IWS) of our favorite OS. It is free, it is really very simple to use and you don't have to make any additional programs, stored procedures or Java classes.
Unless you have any high-end prereqs, in which case you would probably need Tomcat or Websphere anyway, it works very well. I use it all the time.

See: http://www-03.ibm.com/systems/i/software/iws/index.html

Freundliche Grüsse / best regards,
Richard la Croix
 

-----Original Message-----
From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx [mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Mohamed Musthafa Safarulla
Sent: Montag, 28. Dezember 2009 08:45
To: HTTPAPI and FTPAPI Projects
Subject: Re: WebService from AS400

Hey Thomas,

Thanks for the nice walk through.

So, If I am following the path you laid out correctly, I need new machine to
host this Tomcat server and the java webservice or exposed class(something i
would be doing from the scratch)  which in fact consumes everything from the
AS400 service program. Right?

Thanks,
Musthafa

On Fri, Dec 25, 2009 at 6:10 AM, Thomas Raddatz
<thomas.raddatz@xxxxxxxxxxx>wrote:

> Musthafa,
>
> Here is how I provide web services:
>
> 1. At first I write a RPG service program that implements the business
> logic of the web service. For
> me I call it the back end of the web service.
>
> 2. Next I use SQL stored procedures to expose the procedures of the service
> program to the public.
>
> 3. Now that I can access the procedures of my RPG service program with SQL
> it is easy to write a
> little Java class that can be deployed to Axis2 on a Tomcat server.
>
> Perhaps the following picture describes it better:
>
>    Web Service Client
>           |
>           |  calls web service
>           |
>           *
>    Java Class on Tomcat (3.)
>           |
>           |  does JDBC stored procedure call
>           |
>           *
>    SQL stored procedure on AS/400 (2)
>           |
>           |  acts as a wrapper
>           |
>           *
>    RPG service program
>
>
> Sample code:
>
> a) RPG service program procedure:
> ---------------------------------
>
>  *
>  * =====================================================================
>  *  Retrieves basic system status information.
>  * =====================================================================
>  *  Parameters:
>  *   i_reset          Reset status statistics.
>  *                     *YES  Statistics will be reset to zero.
>  *                     *NO   Statistics will not be reset to zero.
>  *
>  *  Returns:
>  *   basicStatus      Result set with one row of type 'basicStatus_t'.
>  * =====================================================================
> P RetrieveSystemStatus_basic...
> P                 B                   export
> D RetrieveSystemStatus_basic...
> D                 PI
> D  i_reset                      10A   const  varying
>  *
>  *  Return value
> D basicStatus     DS                  likeds(basicStatus_t ) inz
> D                                     dim(1)
> D numRows         S             10I 0 inz(%elem(basicStatus))
>  *
>  *  Local fields
> D curTimestamp    S               Z   inz
> D ssts0100        DS                  likeds(ssts0100_t) inz
> D errCode         DS                  likeds(errCode_t ) inz
>  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>  /free
>
>     if (i_reset <> '*YES' and i_reset <> '*NO');
>        kill('Value of parameter ''i_reset'' is invalid: ' + i_reset);
>     endif;
>
>     QWCRSSTS(ssts0100: %size(ssts0100): 'SSTS0100': i_reset: errCode);
>
>     curTimestamp = convertSysTimestampToRpg(ssts0100.curDateTime);
>
>     basicStatus(1).systemName                    = ssts0100.systemName;
>     basicStatus(1).currentTime                   = curTimestamp;
>     basicStatus(1).usersCurrentlySignedOn        = ssts0100.usrSgndOn;
>     basicStatus(1).batchJobsWaitingForMessages   = ssts0100.jobMsgWait;
>     basicStatus(1).batchJobsRunning              = ssts0100.jobRun;
>     basicStatus(1).batchJobsHeldWhileRunning     = ssts0100.jobHeldRun;
>     basicStatus(1).batchJobsHeldOnJobQueue       = ssts0100.jobHeldOnJobQ;
>     basicStatus(1).batchJobsOnAHeldJobQueue      = ssts0100.jobOnHeldJobQ;
>     basicStatus(1).batchJobsOnUnassignedJobQueue = ssts0100.jobUnasndJobQ;
>
>     EXEC SQL
>      SET RESULT SETS FOR RETURN TO CALLER ARRAY :basicStatus
>                                             FOR :numRows      ROWS;
>
>     return;
>
>  /end-free
>  *
> P RetrieveSystemStatus_basic...
> P                 E
>  *
>
>
> b) SQL stored procedure:
> ------------------------
>
>  *
>  *   CREATE PROCEDURE jako2009.RetrieveSystemStatus_basic(
>  *                                         IN  reset     VARCHAR(10))
>  *      EXTERNAL NAME
>  *         'JAKO2009/RTVSYSSTS(RetrieveSystemStatus_basic)'
>  *      LANGUAGE RPGLE
>  *      PARAMETER STYLE GENERAL
>  *      NOT DETERMINISTIC
>  *      DYNAMIC RESULT SET 1
>  *
>
>
> c) Java class:
> --------------
>
> public BasicStatusResponse retrieveBasicStatus(BasicStatusRequest request)
> {
>    BasicStatusResponse response = new BasicStatusResponse();
>
>     try {
>        Connection cn = getConnection();
>
>        CallableStatement stmt = cn.prepareCall("CALL
> jako2009.RetrieveSystemStatus_basic(?)");
>        if (request.getReset().equals(Boolean.TRUE)) {
>            stmt.setString(1, "*YES");
>        } else {
>            stmt.setString(1, "*NO");
>        }
>        stmt.execute();
>
>        ResultSet rs = stmt.getResultSet();
>        if (rs == null) {
>           closeConnection(cn, stmt, rs);
>           return response;
>        }
>
>        if (rs.next() == false) {
>           closeConnection(cn, stmt, rs);
>           return response;
>        }
>
>        response.setSystem(
>              rs.getString(BASIC_STATUS_SYSTEM_NAME));
>        response.setCurrentTime(
>              rs.getTimestamp(BASIC_STATUS_CURRENT_TIME));
>        response.setUsersCurrentlySignedOn(
>              rs.getInt(BASIC_STATUS_USERS_CURRENTLY_SIGNED_ON));
>        response.setBatchJobsWaitingForMessages(
>              rs.getInt(BASIC_STATUS_BATCH_JOBS_WAITING_FOR_MESSAGES));
>        response.setBatchJobsRunning(
>              rs.getInt(BASIC_STATUS_BATCH_JOBS_RUNNING));
>        response.setBatchJobsHeldWhileRunning(
>              rs.getInt(BASIC_STATUS_BATCH_JOBS_HELD_WHILE_RUNNING));
>        response.setBatchJobsHeldOnJobQueue(
>              rs.getInt(BASIC_STATUS_BATCH_JOBS_HELD_ON_JOB_QUEUE));
>        response.setBatchJobsOnAHeldJobQueue(
>              rs.getInt(BASIC_STATUS_BATCH_JOBS_ON_A_HELD_JOB_QUEUE));
>        response.setBatchJobsOnUnassignedJobQueue(
>              rs.getInt(BASIC_STATUS_BATCH_JOBS_ON_UNASSIGNED_JOB_QUEUE));
>
>        closeConnection(cn, stmt, rs);
>
>    } catch (ClassNotFoundException e) {
>       throw new WebServiceException(e);
>    } catch (SQLException e) {
>       throw new WebServiceException(e);
>    }
>
>    return response;
> }
>
>
> This year I spoke about RPG and Web Services at the German Common
> conference. As part of the
> presentation I provided a little demonstration web service. It uses the
> QWCRSSTS API to retrieve
> system status information.
>
> Unfortunately the size of the complete project folder (containing Eclipse,
> Tomcat and the Eclipse
> workspace) is about 400MB. Currently I am trying to upload it to my
> Internet provider.
>
> However feel free to download the System i part and the pure Eclipse
> project folder from here:
>
>
> http://www.tools400.de/Downloads/Samples/Common2009/Jako_2009_Web_Service_Project.zip
>
> http://www.tools400.de/Downloads/Samples/Common2009/Jako_2009_System_i.zip
>
> Setting up a RPG web service is not as trivial as consuming a web service.
> You need RPG knowledge (of
> course) and you have to know a bit Java and Tomcat.
>
> If you can open your AS/400 to the public you may consider the new Web
> Service capabilities that were
> introduced with V6.1 and that are available for V5R4 by PTF. Here is an
> article about it that Scott
> published back in 2008:
>
>    http://systeminetwork.com/article/ibms-integrated-web-services
>
> Regards,
>
> Thomas
>
>
> Mohamed Musthafa Safarulla schrieb:
> >    I need to serve, I already consume using HTTPAPI. Probably this is not
> >    the right place to ask.
> >    Thanks,
> >    Musthafa
> >
> >    On Thu, Dec 24, 2009 at 7:57 AM, Nicolas Machado (Metodo S.A.)
> >    <[1]nicolas.machado@xxxxxxxxxxxxx> wrote:
> >
> >        mushtafa, you need to serve or consume a web service ?
> >        if the second one is your need, httpapi is the answer.
> >        Best Regards
> >        2009/12/23 Mohamed Musthafa Safarulla
> >        <[1][2]mohamedmusthafa.safarulla@xxxxxxxxx>
> >
> >          I know lot of you guys are far advanced and using AS400 as a
> >    some
> >          machine about to be kicked out. For me it has been the the bread
> >        and
> >          butter for a good 4 years now. But seeming now i can see this is
> >        not
> >          the plat for i can hang on to for a long time as people are so
> >        hush
> >          hush about new technologies.
> >          I was provided with an as400 application, client access. I
> >    picked
> >        up
> >          the source code well, understood the business well, but never
> >        felt
> >          myself moving far ahead with technologies. When i see people are
> >        doing
> >          great things with Java, PHP & what not with AS400. They are
> >    using
> >          WebSphere developement server to create webservices, create
> >        program
> >          sources with good GUI.
> >          I was always in a bubble and when i looked at the system
> >        installed
> >          softwares latest Java is there and we had the CDs of WebSphere
> >          developement center etc. I never hooked up with it, I realized
> >        all
> >          these very lately and i know there are so many out there like me
> >        would
> >          like to hear on my concerns.
> >          Please guide and en-light me/us
> >          Thanks,
> >          Musthafa
> >
> >
> >      -------------------------------------------------------------------
> >          ----
> >          This is the FTPAPI mailing list.  To unsubscribe, please go to:
> >          [2][3]http://www.scottklement.com/mailman/listinfo/ftpapi
> >
> >      -------------------------------------------------------------------
> >          ----
> >        --
> >        _______________
> >        .:Nicolás Machado
> >      References
> >        1. mailto:[4]mohamedmusthafa.safarulla@xxxxxxxxx
> >        2. [5]http://www.scottklement.com/mailman/listinfo/ftpapi
> >      -------------------------------------------------------------------
> >      ----
> >      This is the FTPAPI mailing list.  To unsubscribe, please go to:
> >      [6]http://www.scottklement.com/mailman/listinfo/ftpapi
> >      -------------------------------------------------------------------
> >      ----
> >
> >    --
> >    Thanks,
> >    Musthafa
> >
> > References
> >
> >    1. mailto:nicolas.machado@xxxxxxxxxxxxx
> >    2. mailto:mohamedmusthafa.safarulla@xxxxxxxxx
> >    3. http://www.scottklement.com/mailman/listinfo/ftpapi
> >    4. mailto:mohamedmusthafa.safarulla@xxxxxxxxx
> >    5. http://www.scottklement.com/mailman/listinfo/ftpapi
> >    6. http://www.scottklement.com/mailman/listinfo/ftpapi
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > -----------------------------------------------------------------------
> > This is the FTPAPI mailing list.  To unsubscribe, please go to:
> > http://www.scottklement.com/mailman/listinfo/ftpapi
> > -----------------------------------------------------------------------
> -----------------------------------------------------------------------
> This is the FTPAPI mailing list.  To unsubscribe, please go to:
> http://www.scottklement.com/mailman/listinfo/ftpapi
> -----------------------------------------------------------------------
>



-- 
Thanks,
Musthafa
http://www.hapimag.com

Selber Flüge buchen auf http://flug.hapimag.com
Book your own flights on http://flight.hapimag.com

Diese E-Mail enthält vertrauliche Informationen, die rechtlich geschützt sind. Sie sind nur für den beabsichtigten Empfänger bestimmt. Bitte benachrichtigen Sie uns baldmöglichst, falls Sie die E-Mail irrtümlich erhalten haben, und löschen Sie diese unverzüglich. Besten Dank für Ihre Mithilfe.

This e-mail contains confidential information that may be privileged. It is for the sole attention and use of the intended recipient. Please notify us at once if you have received it in error and delete it immediately. Thank you for your cooperation.
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------