Transcript IBM i stuff
®
IBM Software Group
EGL and IBM i
Connectivity, Calling things, JDBC properties
Claus Weiss [email protected]
Last Update: 6/1/2008
© 2008 IBM Corporation
EGL and Remote Programs on IBM i
Topic
Sub-Topics:
EGL Calls to Remote Programs (Overview)
Calling programs on IBM i
Invoking a command
Invoking a procedure in a Service Program
Dealing with
members
date fields on IBM i
© 2008 IBM Corporation
2
Calling programs
In this section you will learn how to call programs
running on an IBM i.
Here’s what you need to do:
Add the iSeries JT400 toolkit to your project
EGL Logic Part
2. (For each program to call) Add a callLink entry to the EGL Linkage
call program…
Part for your Build File
3. Create the business logic to call the RPG Program
First we will start with an overview of the system architecture and
process
© 2008 IBM Corporation
3
Calling RPG Programs - Overview
Calling a RPG, COBOL, CL, or other program on the System i 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
runtime options that may affect how you run your jobs and call the RPG programs.
EGL uses the System i Toolbox for Java™ to call programs on the System i. The toolbox in turn
uses the i5/OS Remote Command server that is a part of the i5/OS Host Servers.
The Remote Command server in i5/OS consists 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.
The next slide describes this process in graphical and technical (in the Notes section) detail
Note: When using pre-started jobs, UDATE will return date value of start of job not the date time
of program start. Use timestamp at start of program to get system time at start of program
© 2008 IBM Corporation
4
Calling RPG Programs – System Architecture
Your EGL application calls programs through a series of Qxxx system modules, via the
JT400.JAR (Java) toolbox
If
calling programs
directly
Property:
remotePgmType:
stateless
or
stateful
red path
Else
generated COBOL call
blue path
© 2008 IBM Corporation
If calling COBOL on the i
5
EGL and Remote Programs on IBM i
Topic
Sub-Topics:
EGL Calls to Remote Programs (Overview)
Calling programs on IBM i
Invoking a command
Invoking a procedure in a Service Program
Dealing with
members
date fields on IBM i
© 2008 IBM Corporation
6
Calling programs – Steps (Revisited)
Here’s what you need to do:
One time step
Add the iSeries JT400 toolkit to your project and Java Build Path
Once per project
Add an EGL Linkage Part for external programs
Once for each program to call
For each program add a callLink element
For each call
- Code the business logic to call the RPG Program, from an EGL “client” logic part:
- Service
- JSFHandler
- Program
- Library
© 2008 IBM Corporation
7
Add the JT400 Toolkit to your Project
Calling RPG programs on an iSeries box requires the JT400 toolkit in your build path.
There are 2 ways to do this (you only need to do one of these)
1. Add the file to the build path
Right-click over your project and select Properties
In the window that pops up, select Java Build Path on the left side of the screen
Select Add External Jars… Find the jt400.jar file on your pc, select Open, Select OK to close the
properties window.
2. Put the file in the WEB-INFLib folder.
Switch to the Resource perspective
Expand Web Content WEB-INF lib folder
– Drag jt400.jar into this folder
© 2008 IBM Corporation
Drag Here
8
Add to the Build File’s Linkage Option – 1 of 2
From Project Explorer, Open EGLWeb.eglbld using the EGL Build Parts Editor
From the Window menu, open the Outline View
Add a linkage part for the project
From the externalPrograms part:
Click: Add
In the CallLink Elements:
Name the program: RPG1
Type: remoteCall
Enter the following properties:
Alias: RPGCLSP1
conversionTable (type): CSOE037
Library: EGLPOT
location (type): iseriesd.demos.ibm.com
luwControl (select): SERVER
remoteBind: GENERATION /runtime
remoteComType (select): JAVA400
remotePgmType (select): STATELESS
Close and Save your Linkage Options – and Close/Save the Build File
Note: if you specify remotePgmType stateless or stateful you will not need QEGL on IBM i
© 2008 IBM Corporation
9
Add to the Build File’s Linkage Option – 2 of 2
From Project Explorer, Right-Click over EGLWeb.eglbld and select: Open with Text
editor
Scroll down to the line <remoteCall pgmName=“RPG1”…
Click your mouse at the beginning of the line (to set focus)
Press Shift/End – to select the entire line (see reverse video line below)
Press Ctrl/C – to copy the line
Enter a new line, and press Ctrl/V 3 times – to copy/paste the entire line three
times
Modify the pgmName’s and Alias’ in the new lines to:
RPG2
RPG3
RPG4
RPGCLSP2
RPGCLSP3
RPGZIPCK
Close and save your edits
© 2008 IBM Corporation
10
2. Replicate the Linkage Options for Additional Programs – 3 of 3
Close and save your edits to the Linkage Options
Open EGLWeb.eglbld with the EGL Build Parts Editor
Un-check: Show only specified options
From the linkage Option, open the drop-down list and
select:externalPrograms
Close and save your Build file
Right-click over your EGLWeb project and Generate
© 2008 IBM Corporation
11
3. EGL Program Calls to IBM i
So – you can see from this
example, that there is nothing
complex whatsoever about calling
programs from EGL. This
JSFHandler has several different
scenarios:
Passing individual parameters to RPG
Passing a single record
Passing a record that contains an array
Here are the record definitions
Fixed records are required
Fixed arrays are required
© 2008 IBM Corporation
12
EGL and Remote Programs on IBM i
Topic
Sub-Topics:
EGL Calls to Remote Programs (Overview)
Calling programs on IBM i
Invoking a command
Invoking a procedure in a Service Program
Dealing with
date fields on IBM i
members
© 2008 IBM Corporation
13
Invoking IBM i comands – Steps
Here’s what you’ll do:
The steps for invoking commands on IBM i is similar as for
calling a program, but the linkage part needs to point to the
QCMDEXC program.
One time step
- Add the iSeries JT400 toolkit to your project and Java Build Path
For this step, follow the instructions for calling an RPG program
Once in a project for external calls
- Add an EGL Linkage Part for the QCMDEXC program
For each call to QCMDEXC
- Code the logic to add the command string as
a parameter and to call the QCMDEXC Program,
from an EGL “client” logic part:
- Service
- JSFHandler
- Program
- Library
© 2008 IBM Corporation
14
Add to the Build File’s Linkage Option
From Project Explorer, Open the .eglbld file
using the EGL Build Parts Editor
From the Window menu, open the Outline View
(It should be located at the bottom left corner of the
tool, next to “Page Data” View)
From the Outline View, select “externalPrograms”
(you should have created this during the calling Cobol
workshop)
From the externalPrograms part:
Click: Add
In the CallLink Elements:
Name the program: COMANDONI
Type: remoteCall
Enter the following properties:
Alias: QCMDEXC
conversionTable (type): CSOE037
Library: %LIBL%
location (type):
iseriesd.demos.ibm.com
luwControl (select): SERVER
remoteBind: GENERATION
remoteComType (select): JAVA400
remotePgmType (select): STATEFUL
Close and Save your Linkage Options –
and Close/Save the Build File
© 2008 IBM Corporation
15
EGL and Remote Programs on IBM i
Topic
Sub-Topics:
EGL Calls to Remote Programs (Overview)
Calling programs on IBM i
Invoking a command
Invoking a procedure in a Service Program
Dealing with
members
date fields on IBM i
© 2008 IBM Corporation
16
Invoking a procedure in a Service Program – Steps
Here’s what you need to do:
The steps for invoking procedures are different than for
calling a program, no linkage part is need instead you will use a
deployment descriptor instead.
No Call statement is needed instead you invoke the procedure
like a function, the procedure interface is described in an EGL
interface.
One time step
- Add the iSeries JT400 toolkit to your project and Java Build Path
Once for each procedure to invoke
- Add an EGL deployment descriptor entry
For each invocation
- Code the business logic to call the RPG Program,
from an EGL “client” logic part:
- Service
- Interface
- JSFHandler
- Program
- Library
© 2008 IBM Corporation
17
Add to the Service Client binding
From Project Explorer, in the
EGLSource folder: Open the .egldd file
using the EGL Build Parts Editor
Select the Service Client Bindings Tab
From the Service Bindings
Configuration dialog
Click the ADD button
Select the Native binding Radio button
On the Add Native Binding Dialog
Enter the following attributes:
conversionTable (type): CSOE037
Library: EGLPOT
location (type):
iseriesd.demos.ibm.com
Userid(type): EGL4RPG
Password(type): EGL4YOU
Press the Finish button
Close and Save your Deployment
Descriptor –
© 2008 IBM Corporation
18
4. Create the Interface for procedure invocation
Before finishing the project you need to create the EGL interface
Right-click over the \EGLSource\ folder and select New Interface
Package name: Interfaces
EGL sourec file name: getdssol
package Interfaces;
import basicrecords.cstruc;
// interface
interface getdssol
function getrecord(custnoi char(7),myds cstruc, fdback char(20)) ;
end
© 2008 IBM Corporation
19
EGL and Remote Programs on IBM i
Topic
Sub-Topics:
EGL Calls to Remote Programs (Overview)
Calling programs on IBM i
Invoking a command
Invoking a procedure in a Service Program
Dealing with
members
date fields on IBM i
© 2008 IBM Corporation
20
Accessing members in data base files
How to access members in data base files :
Create an SQL Alias
Use an SQL statement in your EGL
Use SQL on i to create the alias
Alias is an
Sample use SQL Alias statement to create :
CREATE ALIAS QLINK FOR WFLABXX/MYFILE(mymember)
SQL name also works
WFLABXX.MYFILE(mymember)
Alias will show in RSE as well as OPS Navigator
•Use SQL Select statement with Alias name
•select * from WFLABXX/QLINK
© 2008 IBM Corporation
21
Some notes for accessing DB2 on i
In the jdbc data source when working with yyyy
Specify these properties:
dateformat : iso
timeformat: iso
Setting a date to 0001-01-01
Assign in EGL = “01/01/0001” ; use Quotes
Or assign NULL, to Null the date field
One more:
For working with the library list, use
Naming: system
© 2008 IBM Corporation
22