프로그램 호출을 처리하고 로깅, 보안 검사 등과 같은 교차 절단 작업을 수행하는 래퍼/브리지 COBOL 프로그램에서 작업하고 있습니다. 주된 동기는 검사입니다. 생산자 프로그램을 호출 할 수있는 액세스 권한이 있는지 여부에 관계없이 소비자 프로그램에 대한 보안 액세스.COBOL에서 다른 프로그램의 연결 섹션에 연결 섹션 데이터를 전달하는 방법
브리지 COBOL 프로그램을 B1로하고 프로듀서 프로그램 P1과 소비자 (클라이언트) C1로합시다.
C1이 P1을 호출하려면 B1을 호출해야합니다. 그런 다음 B1이 액세스 가능성을 확인합니다. C1에 액세스 할 수있는 경우 B1은 P1에 C1 데이터를 호출합니다.
C1 -> B1 -> P1
여기서, B1 및 P1의 연결 부분은 동일하다. 프로그램은 EXEC CICS LINK를 사용하여 서로 호출합니다.
COMMAREA,
COMMAREA1 (DataSet Name)
01 COMMAREA-STRUCT,
03 a-field
03 another-field
...
클라이언트
;IDENTIFICATION DIVISION.
PROGRAM-ID. Client.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY COMMAREA1
PROCEDURE DIVISION
/* fill CommareaStruct with some values. */
....
/* call B1 Bridge */
EXEC CICS LINK PROGRAM (B1Bridge) NOHANDLE
COMMAREA (COMMAREA-STRUCT)
LENGTH (LENGTH OF COMMAREA-STRUCT)
END-EXEC
....
다리,
IDENTIFICATION DIVISION.
PROGRAM-ID. B1Bridge.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
COPY COMMAREA1
PROCEDURE DIVISION
...
/* access control */
/* logging */
...
/* pass data to P1*/
EXEC CICS LINK PROGRAM (P1) NOHANDLE
COMMAREA (COMMAREA-STRUCT)
LENGTH (LENGTH OF COMMAREA-STRUCT)
END-EXEC
....
생산자;
IDENTIFICATION DIVISION.
PROGRAM-ID. P1
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
COPY COMMAREA1
PROCEDURE DIVISION
....
*doing some business with data in COMMAREA1
...
위의 경우 브리지 프로그램 B1에 대해 컴파일 타임 경고가 표시됩니다. "COMMAREA-STRUCT 또는 그 하급자 중 하나가 참조되었지만 COMMAREA-STRUCT는 주소 지정 기능이없는 링크 섹션 항목이었습니다.이 참조는 실행시 성공적으로 해결되지 않습니다."
어떤 의미입니까? B1의 연결 부분을 P1의 연결 부분에 어떻게 전달해야합니까?
이렇게하면 EIBRESP : 22와 EIBRESP2 : 26 (commarea length error)가 실행됩니다.
- 편집 - 내가 더 자세한 정보를 제공해야한다고 생각
;
주요 동기 부여; 실제로 회사 COM1과 COM2라는 두 회사가 있습니다. COM2는 수년간 COM1의 계열사였습니다. COM1 및 COM2에는 각각 CICS1 및 CICS2가 있습니다. 그리고 COM2 클라이언트 프로그램은 COM1 프로듀서 프로그램을 사용합니다. COM2 클라이언트는 절대로 COM1 제작자를 직접 호출하지 않습니다. COM2 클라이언트는 COMMAREA-STRUCT에 데이터를 입력하고 Generic Cobol Program (GCP로 지정)을 원격으로 호출합니다. COMMAREA-STRUCT는 또한 GCP가 어떤 프로그램을 불러 내기를 원하는지를 나타내는 "생산자 프로그램 이름"필드를 가지고 있습니다. 따라서 GCP는 COMMAREA-STRUCT에서 데이터를 내보내고 생산자 필드에 매핑합니다. GCP는 주소 지정을 사용하여 동적으로 매핑 작업을 수행합니다 (각 제작자에게 특별하지는 않음). 생산자가 수행 한 후에 GCP는 결과를 취해 COMMAREA-STRUCT를 통해 클라이언트로 전달합니다. 이 시스템은 몇 년 전에 설계되었습니다. 수많은 COM2 고객과 수천 명의 COM1 프로듀서가 있습니다.
자, COM2 떨어져 COM1에서 싶어한다. 따라서 COM1은 더 이상 모든 COM1 리소스 (생산자)에 대한 완전한 액세스 권한을 부여하고 싶지 않습니다. 따라서 COM1은 B1 브릿지 프로그램 만 로컬로 실행하는 CICS 핸들러가 될 CICS1 앞에 새로운 cics를 추가하려고합니다.이것은 또한 네트워크 보안 및 회사 정치적 결정에 관한 것입니다.
잠시 동안 서로에게서 회사를 분리하려면 고객이나 제작자 모두 영향을받지 않아야합니다. 그래서 문제는 GCP-Bridge 계층에서 해결되어야합니다.
B1 Bridge는 COM2 클라이언트에 대해 GCP처럼 동작해야하며 액세스 가능성을 확인해야합니다 (어떤 방식 으로든 적용했습니다). 클라이언트에서 오는 모든 데이터를 수정하지 않고 GCP로 전달해야합니다.
현재 로깅 작업에는 우선 순위가 없습니다. 우리는 잠시 동안 일부 회사에 집중합니다.
귀하의 전문가 의견에 대해 매우 고맙게 생각합니다.
* B1은 다른 CICS에 있고 COM1의 LOADLIB1에 액세스 할 수 없기 때문에 B1이 EXEC CICS LINK에 의해 GCP를 원격으로 호출해야하는 이유 때문에 CALL을 사용할 수 없습니다.
* commarea를 전달하는 대신 채널을 전달하면 나에게 잘 들립니다. 그것에 대해 논의 할 것입니다.
* 필자는 LENGHT OF에서 전체 단어 - 하프 워드 충돌을 확인합니다. 당신 말이 맞아요.
* 보안 점검을 위해 "EXEC CICS QUERY SECURITY"에 대해 논의합니다.
* 위에서 언급 한 것처럼 우리는 사본을 수정할 수 없습니다. 만 우리는 IS 변경
EXEC CICS LINK PROGRAM (GCP)
교체 &을 발견하여 클라이언트에
EXEC CICS LINK PROGRAM (B1)
에 있습니다. 수천 명의 고객이 있기 때문입니다. 우리는 복사 본을 바꾸고 그 책에 손을 대고 싶지 않습니다.
이러한 세부 사항이 밝혀지면 문제가 더 쉽게 이해할 수 있다고 생각합니다.
그래서 컴파일 결과 목록을보십시오. PROCEDURE DIVISION 헤더를보십시오. USING? @cschneid가 자세히 설명했듯이 01에서 주소 지정 기능을 사용할 수없는 이유입니다. 클라이언트 프로그램은 어떻게 "로그온"합니까? 왜 액세스 제어 및 로깅을 제공하지 않습니까? –
로깅 및 보안은 흥미로울 수 있습니다. 보안을 위해'EXEC CICS QUERY SECURITY'를 권할 수 있습니다 (보안 전문가와 확인하십시오). 로깅 - 어디로? VSAM? DB2? 뭐라 구요? – cschneid
전문가의 의견에 감사드립니다. 문제의 세부 사항과 답글로 구성된 질문을 편집했습니다. – Tunceren