웹 서비스로 IBM i 프로그램에 액세스: 개요

EGL을 사용하여 EGL 외부 유형 방식으로 IBM® i 호출된 프로그램 또는 서비스 프로그램의 로직을 노출할 수 있습니다. 서비스 요청자로 작동 중인 애플리케이션이 rpgle, cbl, cblle, sqlrpgle, sqlcbl, sqlcblle 유형의 IBM i 프로그램에 액세스할 수 있도록 EGL 생성기가 해당 외부 유형을 사용하여 EGL REST 또는 SOAP 서비스를 작성합니다.
IBM i 프로그램에 액세스하려면 다음을 수행하십시오.
  1. 외부 유형(유형HostProgram)을 작성하십시오.
  2. EGL 배치 디스크립터 편집기의 서비스 배치 섹션에서 해당 외부 유형을 선택하고 적절한 정보를 입력하십시오.
  3. Java™ EE를 준수하는 애플리케이션 서버에 결과 웹 서비스를 배치하십시오.
  4. 요청자에서 call 문을 코드화하여 IBM i 코드에 액세스하십시오.
자세한 지시사항은 “웹 서비스로 IBM i 프로그램에 액세스: 키 입력 세부사항”을 참조하십시오.
서비스 호출 중에 사용되는 레코드의 기초가 되는 레코드 파트를 디자인하는 것은 쉽지 않습니다. 그러나 Rational® Developer for Power Systems Software™: IBM i용 RPG 및 COBOL 개발 도구를 사용할 수 있습니다. 이 경우 마법사를 사용하여 두 프로젝트의 컨텐츠를 작성할 수 있습니다.
  • 웹 프로젝트인 서비스 프로젝트는 IBM i 프로그램에 액세스하는 코드를 개발하는 데 사용되는 다음 컴포넌트를 포함합니다.
    • 원하는 IBM i 프로그램의 함수 시그니처를 미러링하는 함수 프로토타입을 포함하는 외부 유형, 스테레오타입 HostProgram
    • 함수 프로토타입에서 매개변수 및 리턴값이 참조하는 EGL 구조화 레코드 파트
    • 다음 세부사항을 포함하는 항목이 있는 배치 디스크립터: 서비스에 액세스하기 위한 URI, 외부 유형에 대한 참조, IBM WebSphere® Application Server 또는 Apache Tomcat에서 프로그램에 액세스하기 위한 연결 매개변수 세트
    • 이후에 언급되는 PCML(Program Call Markup Language) 파일
  • Rich UI 프로젝트인 클라이언트 프로젝트는 서비스에 액세스하는 EGL Rich UI 애플리케이션을 개발하는 데 사용되는 다음 컴포넌트를 포함합니다.
    • 서비스 프로젝트에 배치되는 외부 유형과 같은 인터페이스 파트입니다.
    • 인터페이스 파트의 함수 프로토타입에서 매개변수 및 리턴값이 참조하는 구조화되지 않은 레코드 파트 세트입니다. 해당 레코드 파트의 필드는 구조화된 레코드 파트의 최저(리프) 필드와 같습니다.
    • 서비스에 액세스하는 항목이 있는 배치 디스크립터입니다.
일부 IBM i(비EGL) 호스트 프로그램은 stateful입니다.
  • stateful 프로그램은 사용자 및 프로그램이 다단계 대화에 참여할 수 있도록 대화 간의 정보를 보유합니다.
  • stateful 호스트 프로그램에 대한 액세스를 제공하고 외부 유형을 포함하는 웹 프로젝트의 배치 디스크립터를 설정하는 경우 서비스가 SOAP 서비스가 아닌 REST 서비스임을 지정해야 합니다. 호스트 프로그램이 stateful임을 표시하려면 Stateful 선택란을 선택하여 배치 디스크립터 편집기에서 배치 디스크립터를 사용자 정의하십시오.
  • 서비스에서 제공하는 세션 쿠키로 호스트 프로그램 액세스의 stateful 측면이 가능합니다. 쿠키는 HTTP 세션의 ID를 보유합니다. Rich UI에서 작업 중인 경우 인터페이스 파트를 기반으로 하는 변수를 선언할 때 세션 쿠키를 식별합니다.
  • 애플리케이션에서 마지막으로 서비스를 호출한 후에 런타임 자원을 해제하려면 serviceLib.endStatefulServiceSession() 함수를 호출하십시오.
  • 참고: 코드가 애플리케이션 서버에 배치되지 않은 경우 HTTP 세션 조작을 필요로 하는 코드를 실행할 수 없거나 디버그할 수 없습니다.

HTTP 세션 세부사항은 서비스 액세스 변수에 보유됩니다. 요청자의 세션 수명은 변수가 선언되는 위치에 따라 다릅니다. 예를 들어, 변수가 함수 호출에서 선언되는 경우 요청자 세션은 함수가 범위 내에 있는 만큼 지속됩니다. 변수가 라이브러리에서 선언되는 경우 요청자 세션은 라이브러리가 범위를 벗어날 때까지 보유됩니다. EGL stateful REST 서비스에 액세스하는 경우 변수가 너무 일찍 범위를 벗어나지 않는 방법으로 변수를 선언하십시오.

예제: IBM i 프로그램에 대한 액세스를 제공하는 외부 유형

이 예제는 IBM i 프로그램에 대한 액세스를 제공하는 외부 유형을 표시합니다.
ExternalType GETREC type HostProgram {platformData=[@i5OSProgram{ programName="GETREC", 
                         programType=NATIVE, isServiceProgram=false, libraryName="*LIBL"}]}
   function GETREC(CUST CUSTa10, EOF char(1), COUNT decimal(2,0)){ hostName="GETREC"};
end 		
platformData 특성이 배열을 승인합니다. 이 예제에서 배열에는 @i5OSProgram 복합 특성에 대한 하나의 항목이 있습니다. @i5OSProgram의 특성 필드는 다음과 같습니다.
programName
IBM i의 프로그램 이름입니다. 기본값은 외부 유형의 이름입니다.
programType
EGL(EGL에서 작성된 프로그램의 경우) 또는 원시(COBOL 또는 RPG에서 작성된 프로그램의 경우)입니다. 기본값은 NATIVE입니다.
isServiceProgram
프로그램이 IBM i 서비스 프로그램인지 여부를 표시하는 부울입니다. 기본값은 false입니다.
libraryName
IBM i 라이브러리입니다. 기본값은 *LIBL입니다.

hostName 특성은 함수 프로토타입에 대해 사용할 수 있으며 프로그램 함수의 이름을 식별합니다. 기본값은 함수 프로토타입의 이름입니다.

IBM i 및 EGL 레코드 필드의 데이터 유형

워크벤치는 호스트 소스의 IBM i 데이터 유형을 PCML(Program Call Markup Language) 정의로 변환합니다. 그런 다음 워크벤치는 해당 정의를 사용하여 외부 유형 및 레코드를 작성합니다.

PCML은 두 가지 이유로 보유됩니다. 먼저, 마법사의 후속 실행에서 입력으로 사용할 파일을 업데이트할 수 있습니다. 예를 들어, 여러 프로그램의 시작점에 해당하는 PCML 정의를 함께 넣을 수 있습니다. 해당 정의를 입력 파일로 사용하는 경우 마법사가 작성하는 외부 유형은 모든 시작점을 반영할 수 있습니다. 두 번째로, IBM 기술 지원 담당자는 필요에 따라 보유된 PCML 파일을 디버깅 도구로 사용할 수 있습니다.

다음 테이블은 IBM i 구조화된 레코드 및 EGL 구조화된 레코드의 해당 데이터 유형을 나열합니다.

표 1. IBM i 구조화된 레코드 및 EGL 구조화된 레코드의 해당 데이터 유형
IBM i 규칙 EGL 외부 유형의 EGL 데이터 유형
char charType = 1바이트 CHAR(PCML 길이)
charType = 2바이트 UNICODE(PCML 길이)
int 2바이트 서명됨 정밀도 != 16, 길이 = 2 SMALLINT
2바이트 서명되지 않음 정밀도 = 16, 길이 = 2 INT
4바이트 서명됨 정밀도 != 32, 길이 = 4 BIGINT
4바이트 서명되지 않음 정밀도 = 32, 길이 = 4 BIGINT
8바이트 서명됨 길이 = 8 BIGINT
팩형     DECIMAL(PCML 길이, PCML 정밀도)
구역     NUM(PCML 길이, PCML 정밀도)
float   길이 = 4 SMALLFLOAT
  길이 = 8 FLOAT
바이트     HEX(PCML 길이 * 2)

EGL이 지원하지 않거나 PCML이 변환하지 않는 IBM i 유형에 해당하는 워크벤치 작성 EGL 레코드 필드를 업데이트해야 할 수 있습니다. PCML에 대한 세부사항은 iSeries용 IBM WebSphere Development Studio Client(http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/topic/com.ibm.etools.iseries.webtools.doc/topics/rdtcattr.html)의 온라인 Information Center에서 사용 가능합니다.

일부 호스트 구조에는 해당 EGL 유형이 없습니다. 다음은 COBOL 예제입니다.
01 P1 PIC 9(5) USAGE BINARY.
01 P2.
       02 P2A PIC X(5) OCCURS 1 to 10 TIMES 
                       DEPENDING ON P1.

EGL 레코드 필드의 데이터 유형

다음 테이블은 구조화된 레코드 및 구조화되지 않은 레코드의 해당 데이터 유형을 나열합니다. HEX 또는 INTERVAL 유형인 워크벤치 작성 구조화되지 않은 레코드 필드를 업데이트해야 할 수 있습니다.

표 2. 구조화된 레코드 및 구조화되지 않은 레코드의 해당 데이터 유형
구조화된 레코드의 데이터 유형 구조화되지 않은 레코드의 데이터 유형
BOOLEAN BOOLEAN
CHAR, DBCHAR, MBCHAR, STRING, UNICODE STRING
HEX HEX
DATE DATE
TIME TIME
TIMESTAMP TIMESTAMP
INTERVAL INTERVAL
DECIMAL, BIN(length), BIGINT, INT, MONEY, NUM, SMALLINT, SMALLFLOAT 해당 숫자 유형
BIN(길이, decimalPlaces), 여기서 decimalPlaces > 0 NUM(길이, decimalPlaces)
NUMC(길이, decimalPlaces) NUM(길이, decimalPlaces)
PACF(길이, decimalPlaces) NUM(길이, decimalPlaces)