Setup and Calling i5/OS Programs (RPG, CL, COBOL)

advertisement
WebSphere Development Studio Client (WDSc)
for i5
And EGL
Setup and
Calling i5/OS Programs
(RPG, CL, COBOL)
from
Bob Cancilla
IBM EGL Eco System Team
March 2006
Table of Contents
Introduction ......................................................................................................................... 1
Installing EGL Runtime Resources .................................................................................... 2
Install EGL Runtime ....................................................................................................... 2
Install Samples for this White Paper ............................................................................... 4
EGL and the i5 – Calling i5 Programs ................................................................................ 6
Calling an i5 Program from EGL........................................................................................ 8
i5 RPG Program .............................................................................................................. 8
EGL Dynamic Web Project ............................................................................................ 8
Copy JT400.JAR to your Project .................................................................................... 8
Customize the EGL Build File ...................................................................................... 10
Create an EGL JSF Web Page ...................................................................................... 17
Create EGL Code to call the RPG Program.................................................................. 18
Create EGL Web Page .................................................................................................. 22
Trouble Shooting .............................................................................................................. 28
Verify connection to your i5 ......................................................................................... 28
Trace Your Web Application ........................................................................................ 28
Determining what went wrong on the i5....................................................................... 30
User Customizable CL Programs...................................................................................... 33
Commitment Control – QVGNRNCL .......................................................................... 35
Libraries and library list control – QVGNSETP........................................................... 36
i
Introduction
This paper describes the process of configuring the WDSc and your i5/OS (or OS/400)
based machine to enable Enterprise Generation Language (EGL) to call programs (RPG,
COBOL, CL, CL Commands, or programs written in any supported language) on the
your i5 or iSeries machine.
Calling an existing i5/OS program from EGL is incredibly simple, but requires a bit of
setup and testing. In this paper we will work you through the process of installing the
EGL server side library QEGL on your iSeries that contains the IBM provided programs
to evoke a job on the System i and call your program.
EGL leverages the i5 Toolbox for Java™ which in turn utilizes the i5’s Remote
Command Host Server (QZRCSRVSD in the QSYSWRK subsystem).
Some simple setup and testing is required to insure that you can access and utilize these
facilities.
In this paper we will discuss:





Installing support for the EGL Runtime
EGL and the i5 runtime environment.
Configuring your EGL Web Project to access the iSeries and call a program
The actual code to call an i5 program
Debugging and Resolving problems
1
Installing EGL Runtime Resources
To call i5 programs on your i5 machines under i5/OS (or OS/400) you will need at least
one license for the WDSc Advanced Edition software. The WDSc grants you an
unlimited use license for the i5 EGL runtime support.
EGL requires that some runtime resources be installed on your iSeries machine. You will
need the QEGL.ZIP, QEGL.SAVF files, and the document “EGL Server Guide for
iSeries Version 6, Release 0.
The “EGL Server Guide for iSeries” may be found on the web at:
http://www.elink.ibmlink.ibm.com/public/applications/publications/cgibin/pbi.cgi?CTY=
US&FNC=SRX&PBL=SC31-6841-01#
Install EGL Runtime
Here are the instructions (also found in the document “EGL Server Guide for iSeries”).
1. Locate the file QEGL.ZIP and QEGL.SAVF on the workstation with WDSc
Advanced Edition and EGL installed.
2. Go to the directory where you installed the WDSc Advanced Edition.
The file should be located in:
<%INSTALL
DIRECTORY%>\radi_prod\eclipse\plugins\com.ibm.etools.egl.generators.cobol.i
seriesruntime_6.0.0.1\executables\.
Note: If you take the default installation options for the WDSc the install
directory would normally be: X:\Program Files\IBM\Rational\SDP\6.0 (where
“X” is the drive letter of the drive where you installed the product).
2
Figure 1: Windows Explorer location of iSeries installation files
3. Log on to your i5 machine and create a save file in a library of your choosing:
CRTSAVF MYLIB/QEGL
4. FTP the file QEGL.SAVF from your PC to the i5 using the “Replace” option.
5. Once the file has been successfully transferred to the i5 then restore the QEGL
library using the command:
RSTLIB SAVLIB(QEGL) DEV(*SAVF) SAVF(MYLIB/QEGL)
Note: be sure to replace MYLIB with the name of the library you placed the
SAVF in.
6. You should now have a library on your system named QEGL. Use the
WRKLIB QEGL to verify that the library exists.
3
7. Do a CHGOBJOWN on the library and all of its objects to insure that it complies
with your security policy. It is critical that you define *PUBLIC *USE as access
rights for the library and all of its objects.
8. Use WRKOBJPDM to locate the EGL Provided CL Program named
QVGNRNCL.
9. Copy this program to each library on the system that contains programs you wish
to call from EGL.
Note: The CL source for this program is provided in the QEGL library source
file named QVGNSAMP. See the “EGL Server Guide for iSeries” for
instructions on customizing this program and the next section for a description.
Install Samples for this White Paper
When you downloaded this document, you should also have downloaded a ZIP file
containing an i5/OS SAVF named QEGLSAM. It contains the library QEGLSAM which
in turn contains the objects:
QEGLSAMP -- library
QEGLRPGSRC
EGL001R – a simple RPG Program member
QEGLCLPSRC
EGL001C – a simple CL Program that calls EGL001R
EGLTSTDTA – a test data area
EGL001R – compiled RPG Program
EGL001C – compiled CL Program
The zip file will also contains a Project Interchange files:
EGLCALLSAM.ZIP – project interchange format file which contains:
EGLCALLWEB – an EGL Web Project
EGLCALLWEBEAR – Enterprise application project
To install follow these steps:
1. Log on to your i5 machine and create a SAVF to receive the library.
CRTSAVF MYLIB/QEGLSAMP
2. FTP QEGLSAMP.SAVF to “MYLIB” on your i5 machine replacing the SAVF
QEGLSAMP.
4
3. Restore the QEGLSAMP library using the command:
RSTLIB SAVLIB(QEGLSAMP) DEV(*SAVF) SAVF(MYLIB/QEGLSAMP)
4. As described above change the object owner to conform to your standards and be
sure that the objects contained in QEGLSAMP have at least *PUBLIC *USE
object access rights.
You may import the following files or follow the step by step instructions in the next
section to work through creating a project and
In the WDSc import the project provided in Project Interchange format file:
EGLCALLSAM.ZIP
Do a File, Import, and Select Project Interchange from the list. Use the browse button to
locate the ZIP file EGLCALLSAM.zip. Select all of the projects in the zip file (click the
Select All button), then click finish.
5
EGL and the i5 – Calling i5 Programs
Calling a RPG, COBOL, CL, or other program on the i5 from EGL is as simple as
coding:
CALL myProgram parm1, parmN
The facility is however extremely flexible and supports the many options that may be
required to support many possible options and configurations. EGL takes into account
the many possible library list, commitment control, and other runtime options that may
affect how you run your jobs.
EGL uses the System i Toolbox for Java™ to call programs on the i5. The toolbox in
turn uses the i5 Remote Command server that is a part of the i5 Host Servers.
The Remote Command server in i5/OS consist of a server daemon program that listens
for TCP/IP requests from “clients”. This program is QZRCSRVSD which runs in the
QSYSWRK sub-system.
When the Remote Command Server starts, it starts a number of “worker” jobs that
process requests in the QUSRSYS sub-system. These jobs are all named QZRCSRVS.
Figure 2: EGL Call to i5 Program flow
6
Figure 2 illustrates the typical flow of a call from an EGL program to an i5/OS
application program.
In this scenario an EGL developer may be working on WDSc on their workstation and
running an EGL application under the WebSphere Test Environment.
The workstation will utilize the Java Toolbox to establish a connection with the Remote
Command server on the i5 QZRCSRVSD).
The remote command server daemon (QZRCSRVSD) will locate an available work job
(QZRCSRVS in the QUSRWRK sub-system).
The user is authenticated. The SWAP ID API will be issued to switch the QZRCSRVS
job from QUSERS to the ID passed in by EGL.
The program QVGNSVR will be invoked. This program in turn will call the
QVGNRNCL CL program that starts commitment control in the job (if required) and
then call the QVGNSETP CL program to add any required libraries to the job’s library
list.
Finally the user program will be called.
Return parameters will be returned up the path back to the invoking EGL program.
7
Calling an i5 Program from EGL
In this section we will walk through the steps involved in creating an EGL Dynamic Web
Project and create a simple JSF based Web Page that calls an RPG program on an iSeries.
i5 RPG Program
The program we are going to call is named EGL001R. It is an RPG program with two
numeric input parameters that will add the two pararmeters and return a result.
Here is the RPG Source:
Figure 3: EGL001R RPG Program
As you can see this program when called is passed three variables “p1, p2, and p3”. It
adds p1 to p2 and stores the result in p3.
This program had been compiled into the library RCANCILL on the i5 in our example.
Be sure you substitute the name of the library you use.
EGL Dynamic Web Project
Create a new EGL Dynamic Web Project. The project in this example is called
“EGLCALLWEB”.
Copy JT400.JAR to your Project
EGL uses the i5 Java Toolbox classes to communicate with an i5/OS based machine.
You must locate the j400.jar file located in the <% Install directory %>
\rwdi_shared\eclipse\plugins\com.ibm.etools.iseries.toolbox_6.0.1\runtime directory and
copy it into the Webcontent\\Web-Inf\lib directory.
Note: if multiple versions of the directory exist look for the one with the highest version
number.
8
Figure 4: Search for j400.jar
Copy the jt400.jar file to the Web-Inf\lib\ directory in your project as shown below.
9
Figure 5: WDSc EGL Project after copy
Figure 5 illustrates the jt400.jar file after the copy.
Customize the EGL Build File
The EGL build file contains the information necessary for EGL to communicate with
your target environment. The Build File must be configured once for each project to
define options that will control the generation of the executable program code.
Expand “Dynamic Web Projects”. Expand the
project “EGLCALLWEB”. Expand
“EGLSource”.
Locate the EGL Build file. This will be the project
name with the extension .eglbld. In this example it
is EGLCALLWEB.eglbld.
10
Double click the build file to open it.
Figure 6: EGL Build File
Figure 6 illustrates the EGL Build file after it is customized. When you first open the
build file you will see all possible options. Locate the following options and be sure they
are set exactly as illustrated.
Option
dbms
genDataTables
genProject
genProperties
j2ee
linkage
sqlJNDIName
system
Value
DB2
YES
EGLCALLWEB
GLOBAL
YES
CallI5
WIN
The yellow highlighted text for the “linkage” option contains the value “CallI5” this can
be any name you wish to code. We will use this name in the next step.
11
Figure 7: Build file options
Locate the Outline view in your workspace. It should be below the Project Navigator. If
it does not show up, click the >>3 and select it. Then click on EGLCALLWEB.eglbld to
select it.
12
Figure 8: Add Build File Part
Right click on the EGLCALLWEB.eglbld to display the context menu and select add
part.
Figure 9: Add EGL Build Part
Select “Linkage Options” from this dialog and click Next.
13
Figure 10: Name the Linkage options
On the dialog page displayed in Figure 10 above type the name of the linkage option that
you originally type in the “linkage” option in the build descriptor.
Once this one time set up for your project is done you can now create your EGL Web
Program that will call the RPG Program.
14
Figure 11: EGL Linkage options
When the dialog opens click on the “Add” button by the red numeral 1 in Figure 11
above.
Click inside the “Program Name” field and type the i5/OS name of the program you wish
to call. In this case it is EGL001R.
Note: You may add as many programs as you may need to this list. EGL programs in
the project may call any number of programs on your iSeries or other machines.
Then click in the field labeled “Type” (the red numeral 2). Click the downward pointing
arrow and select “remoteCall” (see the red numeral 3) from the list of choices. Click any
where in the dialog and press Enter to make sure the change applies. You will see the
program name EGL001R and “remoteCall” appear in the right hand list of linkage
options (red numeral 4).
Click in the following fields and provide the following properties exactly as listed below:
Property
pgmName
Value
EGL001R
type
remoteCall
conversionTable
CSOE037
kibrary
RCANCILL
Comment
should appear – you cannot
modify
should appear – you cannot
modify
CS letter O (Oh) E zero 37
See note 1 below.
Name of the i5/OS library
15
location
remoteBind
remoteComType
remotePgmType
where the program resides
on the i5.
elcrtp67.rtp.raleigh.ibm.com This is the TCP/IP name of
your machine or the IP
address. See note 2 below.
GENERATION
Select from drop down list.
JAVA400
Select from drop down list
EXTERNALLYDEFINED Select from drop down list
Note 1: EGL handles conversions from ASCII or UNICODE to EBIDIC for the i5
machine. The converstionTable property specifies the code page and language to use for
conversions. The first four characters of the conversion table are always “CSOE” (letter
oh, not zero). The last three digits are the three digit code for your national language.
The code 037 is US English.
Figure 12: Completed Linkage options
After completing the entry for these properties, save the Linkage options. Press CTRL +
S to save the entries. You may close the Linkage Option view at this time.
16
Create an EGL JSF Web Page
You may now create the program that will call the EGL001R RPG program.
Figure 13: New Faces JSP File
Be sure the Web Perspective is open as indicated by the rend numeral 1 in Figure 13
above. If the Web perspective is not open, select Window, Open Perspective and choose
Web from the menu or click other if Web is not in the list and select Web from the list
that appear.
Right click on WebContent. Select New, then “Faces JSP Page” in the context menu.
In the new Faces JSP Dialog type a name for your JSP file. In this example we named
the page “CALLEGL001R.” Click finish.
Select and delete the “Place content here” text you see on the page. You can select the
text you type then click on the properties tab at the bottom of the screen, click on “text”
and adjust the appearance if you wish.
17
Figure 14: EGL Faces JSP File
Right click anywhere on the web page and select “Edit Page Code” from the context
menu that appears.
Create EGL Code to call the RPG Program
The EGL Pagehandler appears. The pagehandler is a type of EGL program that controls
interaction with a Java ServerFaces web page.
Since our RPG program contains three numeric parameters and i5/OS defaults to
unsigned decimal numeric fields 15 bytes long with 5 decimal places, we must define
some variables to interact with the program.
We will insert these variables immediately following the:
viewRoot UIViewRoot:
record declaration. Note: this is an EGL special record variable that provides access to
the various parts of the web page.
18
Figure 15: Pagehandler with variables added
Figure 15 illustrates what your code should look like after you have declared the three
variables. We are using the PACF primitive data type. PACF is similar to DECIMAL
but uses the letter “F” instead of the letter “C” in the sign bit of a packed decimal field.
“F” indicates that the number is a positive unsigned number while “C” is a positive
signed number. See “packed decimal” data types in the i5/OS reference library. You
may also look up “Decimal” and “PACF” in the EGL help system.
We now need a simple EGL function and statement to call our RPG program.
19
Figure 16: Completed EGL Pagehander
Figure 16 illustrates the completed pagehandler code required to call the RPG Program
EGL001. As you can see the code is very intuitive and simple.
In this program we defined program variables that will contain input from an HTML
form be passed to the RPG program via the “call” statement and a variable to contain the
result returned from the RPG program and displayed on the web page.
In this program as in all EGL JavaServer Faces web programs, there is a Function named
“onPageLoad()”. This function is always invoked when the page is first loaded. In this
case we have nothing to do other than display the HTML form that we are about to
create.
When a user enters data into the two input fields “Parm1” and “Parm2” we need a
function that will call our RPG program and display the result. This function is the
“callRPG()” function.
20
Note that in this function we use the syslib.RemoteUser(“userid”, “password”) EGL
built-in function to set the user-id and password for the logged in user. You would
normally write a routine that stores user information in a session or other persistent area
of storage. This routine is simplified for illustration purposes.
Note that the Java Toolbox used to access your i5 requires that you authenticate prior to
every call to the i5 insuring security and integrity of the system.
Finally we have a simple call statement:
call EGL001R parm1, parm2, result;
In this statement we specify the program name that we had previously defined in the EGL
Build File’s Linkage options. The parameters are IN/OUT type parameters meaning that
we will set parm1 and parm2 to the values we get from the HTML form as input to the
program. The RPG program will return parm1 and parm2 and the third variable “result”
which is the result of the calculation in the RPG program.
We can now create the web form to capture input from the user, call the RPG program,
and display the result.
21
Create EGL Web Page
Figure 17: Create Web Page
Be sure that the “Page Data” view shown in the lower left corner of Figure 17 is visible.
Expand the Item that corresponds to the name of your Pagehandler file (CALLEGL001R)
and expand “Actions”.
Under CALLEGL001R you should see the three variables that we created in the
pagehandler. Under actions you should see the “callRPG() function we created.
Select all three of the variables, then drag and
drop them on to the web design area below the
page title.
Note the prompt indicating that you are about to
create new controls on the page.
22
Figure 18: Configure Data Control
When you drop the three variables on the page you will see the “Configure Data
Controls” dialog illustrated in Figure 18 above. Be sure that the “Updating an existing
record” radio button is selected. This will default the control types to “Input field with
message”. Click the drop down arrow to the right of the “result” field and change it to
“Output field”.
Click the options button.
23
Figure 19: Options
Unclick the “Delete button” as this will not be required in this web page. You may wish
to change the default “Submit button” label as we did to “Calculate” in this example.
Click Ok, and then click Finish on the main dialog.
24
Figure 20: Bind Action to Submit button
One last step and you are ready to run your application. Drag and drop the function
“callRPGG()” from the Page Data view on to the “Calculate” button to bind the clicking
of the button to the function you created to call the RPG EGL001R program.
25
Figure 21: Verifying the properties and binding of the Submit Button
As illustrated in Figure 21 above, click the Submit button (red numeral 1). Click on the
“Properties” tab (red numeral 2). Click the down arrow (red numeral 3) and select “All
Properties”. The mapping to the callRPG() function is displayed in the properties list at
red numeral 4.
You may now save your page, start your WebSphere Application server and run it on the
server.
If you have followed the instructions you should see something like the following:
26
Figure 22: Completed Web Page after call to EGL001R
Here the user entered the digit 1 in the Parm 1 field, the digit 2 in the parm 2 field,
clicked the “Calculate” button and got the number 3 back from the RPG program.
While it has taken many pages to present and explain all of this, the initial set up is a one
time activity. Configuring the build descriptor, creating a “Linkage options”, web page,
and writing the few lines of EGL code should take you on average less than 5 minutes.
As you can see it is much more difficult to explain than to do.
27
Trouble Shooting
In our example, we are working with the integrated WebSphere Application server that
exists in the WDSc, connecting to a remote i5 machine over a network, using an i5/OS
Remote Command Server job and calling a program on your machine.
There are many potential points of failure in what appears to the EGL developer as a
simple process. Understanding what is happening where and when and how to identify
and resolve problems is a key part of enabling EGL to call programs on your i5.
Most problems have to do with either network configuration, insuring that the Remote
Command Server is running, and that your i5/OS objects have proper authorization to be
used by the user running your web application.
Verify connection to your i5
In the linkage options page of the EGL build file we defined the network name (URL) of
the i5 machine that we contained the RPG program we wanted to call.
If you are having a problem with nothing happening at all when you run the web page,
open a command prompt and “Ping” your machine. This will verify that the network
name for your i5 can be resolved from your desktop machine and you can communicate.
Figure 23: ping machineName
Note that in this case the machine responded and its IP address 9.42.133.75 was returned.
Trace Your Web Application
The WDSc and EGL tooling offers you a trace facility that can help determine exactly
what is going on in your web application.
Locate the web.xml file in your WEB-INF directory as
illustrated to the left. Double click to pen the web.xml file or
Web Descriptor in the WDSc provided editor.
28
Locate and click to select the “Source” tab at the bottom of the web.xml editor view.
Figure 24: web.xml trace controls
Locate the vgj.trace.type entry in the web.xml file. Change the value from 0 to -1 (minus
one).
Locate the vgj.trace.device.options and change its value from 2 (none) to 0 (zero).
0 – displays the trace on the WDSc console
1 – writes the trace to a file
2 – suppresses the output
Now run your application on the WebSphere Application Server. Click and select the
“Console” view at the bottom of the page.
29
Figure 25: EGL Trace Output from Console
Figure 25 illustrates the output of a successful execution of the web page. If an error had
occurred, you would see error messages displayed in the trace. Note, you may double
click the “Console” tab to enlarge the small console window to full screen size to make it
easier to read. Double click it again to restore it to its normal size.
At this point if a security exception is displayed, make sure that you have specified a
properly authorized user profile and password.
Determining what went wrong on the i5
The most common errors and issues in calling a program on the i5 are properly setting the
i5/OS library list and object authorities for your program and the objects used by the
program.
You can use iSeries Navigator to analyze what is happening on your i5 machine.
30
Figure 26: iSeries Navigator - Remote Command Server
Since EGL uses the Java Toobox for i5, communications between EGL and your program
is handled by the Remote Command server.
Expand your machine in the left column as show in Figure 26 above. Expand “Servers”.
Click on “iSeries ACCESS”. After a moment you will see a list of iSeries Acess servers
appear in the right hand column.
Verify that the Remote Command server is “Started”.
NOTE: this is the first point of failure! This server must be started!
If the server is started, right click and select
“Server Jobs” from the context menu as
illustrated in the figure to the left.
31
Figure 27: Remote Command Server Jobs
The server daemon (server job) for the Remote Command Server is Qzrcsrvsd. Its
worker jobs that process your requests are named Qzrcsrvs. The jobs are started under
the user profile QUSER and the SWAP ID API is issued to switch to the user profile you
authenticate with.
The JOBD (Job Description) used by this server is: QZRCSRVS
As you can see the prestarted jobs Qzrcsrvs are listed. Note that some are completed and
have spool files available. You may right click on a job and select Job log or several
other options.
Look for ESCAPE and DIAGNOTIC messages in the job log. The most likely issues
pertain to authorities or library list issues.
Note: you should see a job with the user id you are using to access the i5. You may have
to examine the job logs of several jobs in order to find the correct job.
In the job log you should see:
This tells you that user profile of RCANCILL from a machine at IP address 9.48.52.16
connected to the job.
Work with your i5 System administrator to isolate and resolve any issues that may occur.
Also see the subsequent section titled User Customizable CL Programs which provide
some options to resolve Commitment Control and Library List issues.
32
User Customizable CL Programs
EGL provides two CL programs with source code to enable customers to handle
exceptional conditions pertaining to Commitment Control (QVGNRNCL) and the
handling of libraries and library lists (QVGNSETP).
It is important to note that the majority of customers do NOT require any modifications
to these CL programs and EGL will run if the instructions in Install EGL Runtime are
followed.
No two i5 installations are the same however and it is possible that some customization
may be required.
You can find the source for these two program in the QEGL library in the QVGNSAMP
source file:
Figure 28: QVGNSAMP CL Source
33
Figure 29: Remote System Explorer View of QVGNSAMP CL Source File
34
Commitment Control – QVGNRNCL
Figure 30: QVGNRNCL -- Commitment Control CL Program
This program determines from your EGL program and build file if commitment control is
required and issues the STRCMTCTL command if required.
It is rare that this program needs to be modified.
It is however important to note that if modifications are required, the executable (PGM
object) must be copied to each library containing programs to be called by an EGL
program.
35
Libraries and library list control – QVGNSETP
36
Figure 31: QVGNSETP -- handle libraries and library lists
This program will use the system library list and either the QUSRLIBL library list or a
custom user library list based on the JOBD in use. Additionally, this CL program
contains in its comments instructions for creating a data area that contains additional
libraries you may need, or you may add a statement at line 8000 to explicitly add libraries
using the ADDLIBLE CL Command.
NOTE: the source member name for this CL program is VGNSETP be sure you compile
it as QVGNSETP (adding the letter Q) or it will not be recognized. This program need
only exist in the QEGL library.
37
Download