Форум программистов, компьютерный форум, киберфорум
Cobol
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
1

COBOL в мультиязыковых приложениях

08.01.2020, 20:57. Просмотров 1658. Ответов 29
Метки нет (Все метки)

Уважаемый Kukstyler, в продолжение нашего общения, по Вашему совету решил создать отдельную тему.
Как программиста в большей мере пишущего на PL/I меня заинтересовал следующий вопрос.

Как бы Вы посоветовали организовать вызов программы написанной на PL/I из программы написанной на COBOL, в случае, если обе программы работают в одной CICS транзакции?

В документации на IBM Knowledge Center мне удалось найти информацию о межпрограммном взаимодействии, и часть, связанная в PL/I мне понятна. Не могли бы Вы посоветовать как правильно организовать взаимодействие со стороны вызывающей COBOL программы под CICS.

Буду благодарен Вам за совет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2020, 20:57
Ответы с готовыми решениями:

COBOL Manual
На русском нигде не встречал, выкладываю на английском, если кому надо/интересно.

Cobol for DOS
Есть кто-то кто работал с кобол под дос?

Обсуждение COBOL
Всем привет. Мало кто знает COBOL на сегодняшний день... По иронии судьбы я работаю именно с ним...

Программы COBOL
Разработка программ на COBOL-е для Windows *.EXE/*.DLL (а так же скрипты COBOL/CICS/DB2/JCL). Тем...

29
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
09.01.2020, 01:09 2
ByteCodeRunner, здравствуйте. Укажите платформу/ОС, а так же как именно Вы хотите вызвать программу PL/I из COBOL-а: через CALL или по средствам CICS (LINK, XCTL...) ?

Что конкретно Вы имеете в виду под "правильно организовать взаимодействие"?
Или может опишите задачу, что конкретно Вам нужно сделать.
0
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
09.01.2020, 23:43  [ТС] 3
Прошу прощения, к сожалению, сообщить что-либо о конфигурации нет возможности. В силу ограничений, вынужден формулировать вопросы для гипотетической системы. Надеюсь на Ваше понимание.

Ваш предыдущий ответ дал мне несколько вариантов.

Вариант 1. (CALL)

Пусть есть первая COBOL программа, которая через CALL вызывает вторую COBOL программу.

И пусть вторая программа переписана на PL/I.

Вопрос 1. Правильно ли я понимаю, что в таком случае, нужно:

1. Выполнить раздельную компиляцию каждой программы, получив два объектных модуля.

2. Далее с помощью редактора связей получить из двух объектных модулей один загрузочный модуль.

3. При этом между параметрами в вызове CALL (COBOL программа) и параметрами в точке входа EXTERNAL ENTRY (PL/I программа) должно быть соответствие форматов данных.

Вариант 2. (LINK, XCTL)

Пусть так же есть первая COBOL программа, которая через EXEC CICS LINK вызывает вторую COBOL программу, передавая параметры через COMMAREA.

И пусть в этом случае вторая программа переписана на PL/I.

Вопрос 2. Правильно ли я понимаю, что в таком случае, нужно:

1. Выполнить раздельную компиляцию каждой программы, получив два объектных модуля.

2. Далее с помощью редактора связей получить из двух объектных модулей два загрузочных модуля каждый из которых будет работать отдельно под управлением CICS, общаясь друг с другом посредством передачи данных через COMMAREA.

3. При этом так же должно быть обеспечено соответствие форматов данных которые передаются через COMMAREA.

Так же у меня есть ещё один Вопрос 3.

Подскажите пожалуйста, с точки зрения эффективности по памяти, правильно ли я понимаю, что Вариант 2 (LINK, XCTL) более затратный?

Буду Вам благодарен за ответы, и если Вы не против продолжить общение, есть предложение.

Можно было бы описать некоторую гипотетическую конфигурацию, т.е. взять условные версии ПО, придуманные PDS и некоторые условные задачи.

Используя такую "машину" можно было бы обсудить интересные темы (подобно тому как это сделал Д.Кнут с помощью машины MIX).
Хотелось бы на таком условном примере попробовать составлять JCL и рассматривать механизмы взаимодействия в рамках CICS.
А наиболее интересные варианты можно будет проверить используя IBM Z Trial.

Если Вы посчитаете такой вариант возможным, могу начать создавать такую гипотетическую "машину".

Большое спасибо за Ваше время.
0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
10.01.2020, 16:17 4
Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
1. Выполнить раздельную компиляцию каждой программы
Верно.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
2. Далее с помощью редактора связей получить из двух объектных модулей один загрузочный модуль.
Не обязательно! Можно (и как правило в больших системах приветствуется именно этот подход) записать вызов динамическим. Иначе при каждой модификации под-программы, надо будет заново линковать вызывающую программу.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
каждый из которых будет работать отдельно под управлением CICS
Нет. CICS контроллирует все ресурсы унитарно. Контролировать отдельную программу в сгруппированом бинарнике он не может. При первом вызове программы, бинарник загружается в кэш, что бы обновить кэш заново с файловой системы, надо запустить тех. транзакцию CECI SET PROGRAM има_программы NEWCOPY.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
общаясь друг с другом посредством передачи данных через COMMAREA.
Зависит от контекста, если данные чисто узкого характера, нужные только этим 2-м программам, то можно и через LINKAGE передать.
Касаемо COMMAREA - это старый модус операнди, с кое-какими лимитаицями, в частности по максимальному объему. Последная тенденция использовать каналы и контейнеры (CICS Channels and Containters).

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
При этом так же должно быть обеспечено соответствие форматов данных которые передаются через COMMAREA.
COMMAREA - это пространство в памяти (структура данных) используемая всей транзакцией и контроллируемая CICS. Тогда как данные переданные через LINKAGE - локального характера (между 2-мя программами). При несоответствии типа/объёма данных в LINKAGE получим сразу-же красивый взрыв с 9-и этажной руганью (чисто технический). При несоответствии типа/объёма данных в COMMAREA - тоже, но скорее всегоне сразу (в зависимости от трнукаций/оверлапов данных).

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
Вариант 2 (LINK, XCTL) более затратный?
Как я уже писал, LINKAGE/COMMAREA это функционально разные типы памяти. 01 DFH-COMMAREA получает адрес памяти от CICS, тогда как LINKAGE от OС. COMMAREA необходима для мнгопрограммных транзакций, именно в ней и есть вся транзакция (её данные), и она сравнительно легко разделена многими программами. Не забивайте для чего вообще CICS - его задача гарантировать полный запуск транзакции либо полное её аннулирование в случае ошибки.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
JCL и рассматривать механизмы взаимодействия в рамках CICS
Тут кажется Вы немного перепутали Batch/OnLine. Единственное место где JCL задействован в рамках CICS, это при запускe самого CICS региона (инстанции, скажем так).

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
можно было бы обсудить
С радостью
2
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
10.01.2020, 23:10  [ТС] 5
Большое Вам спасибо за содержательные ответы!

Буду очень рад дальнейшему общению и обсуждению.

Возьму тайм аут до конца уик-энда, для обдумывания и подготовки вопросов!
1
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
14.01.2020, 00:00  [ТС] 6
Еще раз спасибо за практические советы по работе с CICS!
Многие ранее неясные моменты прояснились!
Очень интересуют именно особенности разработки под CICS.

Из Вашего ответа я для себя обобщил, что разработка под CICS сводится к двум шагам:
1) Компиляция, с получением исполняемого загрузочного модуля (бинарника) с помощью JCL.
2) Загрузка в кэш CICS полученного бинарника с помощью CECI SET PROGRAM имя_программы NEWCOPY.

Соответственно, для успешной разработки под CICS необходимо:
1) Уметь составить JCL. Для этого, я предполагаю, нужно правильно задать опции компилятора для получения бинарника под CICS.
2) Уметь использовать CECI или CEDA (?) для загрузки бинарника.

Кстати, хотел спросить Вас, когда лучше использовать CEDA а когда CECI ?

Ещё очень интересуют Каналы и Контейнеры. Много читал о них.
Вы писали, что это современный и эффективный способ обойти ограничения COMMAREA (если не ошибаюсь это всего 32768 байт).
Хотелось бы понять, как лучше эффективно использовать Каналы и Контейнеры для замены COMMAREA?
Ведь COMMAREA используется всей транзакцией, а вот как использовать Каналы и Контейнеры таким же образом не совсем понятно.

Очень хотелось бы научится самостоятельно писать JCL для компиляции под CICS для некоторой гипотетической задачи.
Сейчас готовлю такой условный пример для нашего обсуждения в ближайшем посте.
Постараюсь закончить и выложить завтра-послезавтра.

Большое Вам спасибо!
0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
14.01.2020, 11:37 7
Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
когда лучше использовать CEDA а когда CECI ?
CEDA используется для административных целеэ в CICS, по-этому как правило данная тех. транзакция запрещена обычным пользователям. Тогда как обновить кэш нужно и разработчикам тоже, для тестирования. По-этому им даётся доступ к CECI.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
как использовать Каналы и Контейнеры таким же образом не совсем понятно.
Канал это идентификатор пространства в памяти для транзакции. Тогда как Контейнеры - это "Подразделы" Канала: не всем программам нужны одни и те же данные. По-эотму некая группа программ может использовать одну группу Контейнеров, а другая другую. Но идентифицируются/связываются группы контейнеров через Каналы: https://www.ibm.com/support/kn... fcons.html

Как правило, в начале каждой программы мы получаем Канал. Затем, на протяжении все программы получаем доступ к Контейнерам, указывая идентификатор Канала полученный в начале программы.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
хотелось бы научится самостоятельно писать JCL для компиляции под CICS
Код
//C$COMPIL JOB PROB,&SYSUID,MSGCLASS=H,CLASS=S,TIME=0,
//         NOTIFY=&SYSUID,REGION=0M,RESTART=*
//**********************************************************************
//         SET MEM=AAAAAAAA    <== COBOL SOURCE
//*        --------------------------------------------
//         SET CEELIB1=CEE.V2R1M0.SCEELKED <== CEE  LIB
//         SET SRCLIB=UT27.KARLUR.SOURCE   <== SRC  LIB
//         SET COPY1=UT27.KARLUR.COPY      <== COPY LIB
//**********************************************************************
//* COMPILE
//**********************************************************************
//COMPIL   EXEC PGM=IGYCRCTL,PARM='MAP,APOST,DYN,NOOPT,SZ(MAX),
//             NOTERM,DATA(31),LIB,TEST,SOURCE,NOSEQ',REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT2   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT3   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT4   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT5   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT6   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT7   DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSLIB   DD DSN=&COPY1,DISP=SHR
//         DD DISP=SHR,DSN=USRC.ALLURE.V2310200.COPYCO
//         DD DISP=SHR,DSN=USRC.BAC.V2310000.COPYCO
//         DD DISP=SHR,DSN=USRC.BRF.V2311000.COPYCO
//SYSLIN   DD DSNAME=&&LOADSET,UNIT=SYSDA,
//            DISP=(MOD,PASS),SPACE=(TRK,(3,3))
//SYSIN    DD DISP=SHR,DSN=&SRCLIB.(&MEM)
/*
//**********************************************************************
//* LINK
//**********************************************************************
//LINKEDIT EXEC PGM=HEWL,COND=(8,LT,COMPIL),
//         PARM='XREF,LIST,LET,REUS,DCBS,AMODE=31,RMODE=ANY,RENT'
//SYSPRINT DD SYSOUT=*
//SYSLIB   DD DSN=&CEELIB1,DISP=SHR
//SYSLIN   DD DSNAME=&&LOADSET,DISP=(OLD,DELETE)
//SYSLMOD  DD DSN=&LOADLIB(&MEM),DISP=(MOD,PASS),
//            SPACE=(TRK,(100,10)),UNIT=SYSDA,RECFM=U
//SYSUT1   DD UNIT=SYSDA,SPACE=(TRK,(10,10))
/*
2
Модератор
Эксперт Python
27953 / 14915 / 2936
Регистрация: 12.02.2012
Сообщений: 24,437
Записей в блоге: 4
14.01.2020, 16:23 8
Kukstyler, JCL... Повеяло прошлым... А ведь все помню! Работал на PL/I, ассемблере, Фортране. Сделал монитор компиляторов - программа, которая динамически вызывала нужный компилятор, настраивала DD-предложения, компилировала, вызывала редактор связей, формировала единый листинг...
3
Black Fregat
14.01.2020, 17:09
  #9

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
JCL... Повеяло прошлым... А ведь все помню!
Да, все параметры прочитались без запинки..

0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
14.01.2020, 17:46 10
Catstail, я уже несколько лет с ними не возился. Помню как в первый раз увидел, думаю чё за хрень такая, аж в глазах рябит! А сейчас смотрю, да вроде нормалёк, всё чётко и ясно.
1
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
14.01.2020, 23:43  [ТС] 11
Kukstyler, большое Вам спасибо за ответы и за JCL!
Внимательно прочитал JCL, часть уже понимаю, но по некоторым параметрам есть вопросы. Читаю документацию.

Опыт самостоятельного написания JCL у меня пока есть только для OS/VS2 MVS.
Пишу их для компиляции и линковки моих PL/I и COBOL программ на собственном тестовом полигоне без CICS.

А вот под CICS самостоятельно писать JCL пока возможности небыло.
Теперь же на основе Вашего примера, попробую написать подобный JCL для PL/I под CICS и размещу его здесь.

Кстати, для написания JCL под OS/VS2 MVS мне очень пригодились:
(1) Р. Эшли, Д. Фернандес, Язык управления заданиями, 1981, и
(2) В.П. Данилочкин и др., Операционная система ОС ЕС, 1988.

Catstail, возможно Вы посоветуете ещё какие-нибудь интересные источники по JCL на которые стоит обратить внимание.
Буду очень благодарен.
0
Модератор
Эксперт Python
27953 / 14915 / 2936
Регистрация: 12.02.2012
Сообщений: 24,437
Записей в блоге: 4
15.01.2020, 09:39 12
ByteCodeRunner, вот
0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
15.01.2020, 09:58 13
Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
по некоторым параметрам есть вопросы
Можете смело их задавать. Всё я уже не помню, но большинство да, так что дерзайте

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
А вот под CICS самостоятельно писать JCL пока возможности небыло.
Если дело касается запуска CICS, но соответствующий JCL, если не ошибаюсь, есть в инсталляционном пакете.
Если говорить о компиляции, то JCL в принципе особе не отличается. Ведь всё дело в том, что до компиляции код прочёсывается пре-компилятором, переводящим все EXEC CICS в АPI вызовы CICS. Так что в JCL компиляции, надо просто указать соответствующие директивы компилятору: https://www.ibm.com/support/kn... env04.html

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
ещё какие-нибудь интересные источники по JCL
https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3sa231385/$file/ieab600_v2r3.pdf
Но это как словарь.
0
Модератор
Эксперт Python
27953 / 14915 / 2936
Регистрация: 12.02.2012
Сообщений: 24,437
Записей в блоге: 4
15.01.2020, 15:21 14
ByteCodeRunner, вот еще
0
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
16.01.2020, 00:40  [ТС] 15
Catstail, большое Вам спасибо за рекомендованные книги! Первая книжка у меня есть - повезло найти её в бумажной форме, уже работаю с ней, взял её за основу.
0
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
19.01.2020, 23:42  [ТС] 16
Уважаемый Kukstyler, в процессе чтения JCL у меня возникли несколько вопросов. Заранее прошу прощения, если вопросы эти покажутся Вам очевидными.

Итак, буду последовательно двигаться по коду.

1. Имя задания C$COMPIL
Правильно ли я понимаю, что в именах допустимы символы '$', '@' и '#' ?

2. PROB
Это я понимаю, идентификационная информация. Она может быть связана с проектом или типом задачи?

3. &SYSUID
Это я понимаю, идентификационная информация пользователя, от которого запускается задание?

4. TIME=0
Это к сожалению непонятное мне значение параметра. Я привык задавать его одним из спосовов:
TIME=(минуты,секунды) или TIME=1440. Так же читал о варианте TIME=(,секунды).
Подскажите пожалуйста, а что происходит при TIME=0 ?

5. REGION=0M
Так же непонятное мне значение. Если задача небольшая, под OS/VS2 и для PL/I и для COBOL я ставлю REGION=8M.
Как бы Вы посоветовали выбирать значение этого параметра?

6. RESTART=*
Правильно ли я понимаю, что в случае перезапуска задания параметр * указывает, что выполнение задания снова начнется с начала?

Буду Вам очень благодарен за ответы. Продолжаю с большим интересом разбирать код.
0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
20.01.2020, 01:23 17
Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
Правильно ли я понимаю, что в именах допустимы символы '$', '@' и '#' ?
Точно не помню, но кажется да. Символ & для декларации переменной, а так же на пример % тоже при случае использования Control-M.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
идентификационная информация. Она может быть связана с проектом или типом задачи?


Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
идентификационная информация пользователя
Это системная переменная, заменяющая &SYSUID на имя пользвоателя (SYStem User ID).

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
4. TIME=0
Это к сожалению непонятное мне значение параметра
Это лимит исполнения JOB-а по времени, 0 = без лимитов.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
5. REGION=0M
Так же непонятное мне значение.
Это максимально допустимая память, используемая JOB-ом. 0=без лимитов.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
Правильно ли я понимаю, что в случае перезапуска задания параметр * указывает, что выполнение задания снова начнется с начала?
При желании/необходимости, можно указать вместо * имя STEP-а, с которого хочешь перезапустить JOB.
0
10 / 10 / 0
Регистрация: 06.07.2018
Сообщений: 18
28.01.2020, 00:47  [ТС] 18
Kukstyler, прошу прощения за долгое отсутствие на форуме, был погружен в текущие заботы.

Возвращаясь к анализу кода, хотел бы задать ещё несколько вопросов.

7. Подскажите пожалуйста, какие наборы данных необходимо подключать в разделе SYSLIB, а какие в разделе SYSLIN?
Хотелось бы понять как именно подготавливать наборы для SYSLIB и SYSLIN соответственно.

8. Подскажите пожалуйста, правильно ли я понимаю, что SYSUT1 - SYSUT7 это служебные DD имена, которые именно в COMPIL EXEC не используются?
0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
28.01.2020, 12:17 19
Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
SYSLIB
Тут находятся copybook-и, ну для Кобол-а этот как .h файлы для Си.

Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
SYSLIN
https://www.ibm.com/support/kn... ev_115.htm

The first step produces an object deck that is stored in the SYSLIN temporary data set, as shown in Figure 2. The second step takes the SYSLIN temporary data set as input, as well as any other modules that might need to be included, and creates a load module in the data set referenced by the SYSLMOD DD statement.
Цитата Сообщение от ByteCodeRunner Посмотреть сообщение
SYSUT1 - SYSUT7
Они используются компилятором для работы (всякие кэшы и т.д.) то есть используются именно в том STEP-e в котором декларированы : https://www.ibm.com/support/kn... pmvs13.htm
0
display "I'LL BE BACK"
1183 / 812 / 247
Регистрация: 02.04.2009
Сообщений: 3,029
12.02.2020, 23:53 20
ByteCodeRunner, как успехи?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2020, 23:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Delphi7 + COBOL
Всем привет. С Delphi я знаком на базовом уровне... Хотя знаний по программированию...

Типы полей в COBOL
В COBOL-е используются 2 типа данных: Alphanumeric - альфанумерические (от A до 9), эквивалент...

Cobol & MacIntel
Существует ли среда разработки для Макинтоша (с процессором Интел)? Какие существуют компиляторы...

Среда разработки Cobol
Здравствуйте. Вы не посоветуете среду разработки Cobol. Хотел бы познакомиться с этим языком. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.