Чтение плоского файла с динамическим именем в CICS

Предположим, у меня есть пакетное задание, которое ранее запускалось и создавало плоский выходной файл с фиксированной длиной записи. (Имя выходного файла будет меняться для каждого запуска задания.)

У меня есть программа CICS, работающая в серверной среде, которая будет получать запрос от веб-браузера на результаты задания, и я хочу прочитать файл и вернуть содержимое. (Предположим, что конкретное имя файла будет включено в текст.)

Я пытаюсь выяснить, как на самом деле получить доступ к файлу в CICS.

Мне удалось динамически указать имя файла с помощью CEEENV, но затем я обнаружил, что не могу использовать собственные команды OPEN/READ. Я знаю, что есть команды чтения и просмотра CICS, но все они, кажется, требуют, чтобы файл был определен для CICS заранее? Я также видел ссылки на использование очередей переходных данных для доступа к последовательным файлам, но опять же, очередь должна быть предварительно определена.

У файла не будет какой-либо определенной структуры или подходящего ключа, поэтому, похоже, мне следует использовать команды файла BDAM. Кажется, для этого требуется запись FCT. Но я не могу найти достойных примеров того, как это сделать.

Очевидно, что веб-службу можно вызывать часто и одновременно, поэтому мне нужен какой-то способ временно связать файл со средством доступа к нему, которое я могу освободить, как только закончу с ним.

Очевидно, я не очень хорошо знаком со средой CICS. Я чувствую, что либо упускаю что-то простое, либо есть фундаментальная причина, по которой это невозможно сделать. Указатели на любой из них приветствуются!


person Mick O'Hea    schedule 30.11.2016    source источник
comment
Насколько мне известно, любой файл, который вы хотите прочитать в CICS, должен быть определен в этом конкретном регионе CICS. Если вы работаете с несколькими регионами CICS или у вас есть сплетение CICS, это может быть проблемой, если только файл не определен в каждом регионе. Кроме того, потому что это динамическое распределение также будет проблемой. Интересно, может ли использование очереди работать лучше в этом случае.   -  person SaggingRufus    schedule 30.11.2016
comment
Возможно, вам удастся обойтись без определения GDG в CICS и внесения записи один раз, чтобы программа CICS захватила последнее поколение, кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь, но это все, что я могу придумать, чтобы создать динамически выделенный файл. работа в ЦИКС.   -  person SaggingRufus    schedule 30.11.2016
comment
Единственный способ реализовать свои бизнес-требования — это понять, как ваш сайт хочет это сделать. Существует множество способов удовлетворить ваши бизнес-требования, и крайне маловероятно, что в вашем решении будет динамически распределяемый файл, тем более набор данных, отличный от VSAM. На вашем сайте есть политики, стандарты и методы, которые служат таким вещам, как безопасность и доступность, ремонтопригодность, аудит, соответствие и нормативные вопросы (последние менее важны, если бизнес не является финансовым. Спросите на своем сайте, а не в Интернете.   -  person Bill Woodger    schedule 01.12.2016
comment
На данный момент я просто пытаюсь ответить на технический вопрос, возможен ли доступ в CICS к последовательному плоскому файлу, ранее созданному с помощью пакетного JCL. Есть конкретные причины, по которым это требование, в которые я не вхожу. Если это невозможно, мне придется рассмотреть альтернативные подходы. Запрос на вашем сайте, а не в Интернете, несколько побеждает всю цель переполнения стека, но я ценю ваш конструктивный ответ.   -  person Mick O'Hea    schedule 01.12.2016
comment
Технический ответ — да (см. мой ответ ниже). Разрешено ли это на вашем сайте, что, кажется, больше касается Билла, конечно, не является тем, что мы можем решить. Относительно часто люди спрашивают, возможно ли что-то технически, когда им говорят, что это не разрешено на их сайте — два разных вопроса.   -  person cschneid    schedule 01.12.2016
comment
Спасибо, и я ценю ваш ответ, особенно включенные предостережения. Я очень рад, когда мне говорят, что я неправильно понял какую-то базовую предпосылку чего-то и это невозможно, или что это возможно, но я не должен этого делать по x причинам, или что есть лучшая альтернатива, которую я должен рассмотреть (например, использование DB2 ). Но я не думаю, что одеяло «спросите на своем сайте» особенно полезно при попытке оценить, какие технические варианты возможны.   -  person Mick O'Hea    schedule 01.12.2016
comment
@SaggingRufus Я думаю, что можно использовать CICS SPI и enq/define/read/disable/discard/deq очередь TD, указывающую на плоский файл на лету, но достаточно безопасности (и прочего) последствия, что даже кто-то вроде меня, чье здравомыслие уже вызывает сомнения, не упомянет об этом. Подожди, ой...   -  person cschneid    schedule 01.12.2016
comment
Как это может победить всю цель ТАК? Хорошо, попробуй. Пойдите к своим техническим специалистам и скажите, что SO говорит, что все в порядке, так что просто позвольте мне это сделать, у меня даже есть код, который нужно вставить, мне сказали, что он будет работать нормально. На вашем сайте действуют различные политики по разным причинам, ни одна из которых нам не известна. Вместо того, чтобы я хочу сделать это, или я возьму свои игрушки домой, почему бы вам не объяснить ваше требование людям на вашем сайте. Ваше решение может быть таким же простым, как использование ESDS вместо плоского файла, или это может быть что-то еще. Мы понятия не имеем, и мы не должны подбрасывать вам что-то из-за ТАК.   -  person Bill Woodger    schedule 04.12.2016
comment
Я честно сбит с толку. В своем первоначальном посте я ясно дал понять, что я новичок в среде CICS. Я не собираюсь вырезать и вставлять что-то в производственную среду, не понимая, как это работает и каковы последствия этого. Ты продолжаешь говорить мне, чтобы я поговорил с моими техническими специалистами. Прямо сейчас, это я. Вскоре я найду кого-нибудь еще, а пока мне кажется хорошей идеей попытаться получить преимущество в понимании доступных вариантов и связанных с этим проблем. И из ответов, которые я получил, у меня есть некоторые фундаментальные недоразумения, которые мне нужно прочитать.   -  person Mick O'Hea    schedule 05.12.2016


Ответы (3)


Я сделал это с файлами Unix Systems Services через вызовы подпрограмм времени выполнения C из COBOL. FOPEN, эт. др. доступны для вас.

Очень важно, чтобы ваша программа выполнялась на открытом TCB и чтобы она была потокобезопасной.

Если вы используете CICS TS 4.2 или более позднюю версию, вы должны определить свою программу как CONCURRENCY(REQUIRED), чтобы вы знали, что она находится в открытом TCB, а не в QR TCB. Выполнение операций ввода-вывода на QR TCB плохо сказывается на производительности и пропускной способности и, возможно, на вашей дальнейшей занятости. Если ваша программа, выполняющая ввод-вывод, не является первой программой в транзакции, вы должны LINK к ней, а не динамически CALL, чтобы переключение TCB произошло автоматически.

Если вы используете CICS TS 4.1 или более раннюю версию, вам придется пройти через некоторые препятствия, чтобы заставить вашу транзакцию попасть в открытый TCB. Надеюсь, у вас более свежая версия.

Объясните своему системному программисту CICS, что вы собираетесь выполнять ввод-вывод QSAM, но вы должны убедиться, что вы используете открытый TCB, чтобы избежать проблем с производительностью.

Если вы не знаете, что представляют собой различные TCB, обратитесь к документации. Существует красная книга по теме безопасности потоков, посвященная TCB. Это стоит вашего времени.

Другой способ сделать это — загрузить данные в таблицу DB2 (если в вашем магазине есть DB2) в конце пакетного задания.

person cschneid    schedule 30.11.2016
comment
Спасибо за это, и я ценю предупреждение о потенциальных проблемах с производительностью. Я рассматривал вариант БД как запасной вариант, но это может быть более безопасный вариант. - person Mick O'Hea; 01.12.2016
comment
Как и в случае с обычным ROT, по моему опыту, не смешивайте файлы, отличные от VSAM, и CICS. Как вы видели, обручи довольно обширные и очень крутые. Для последовательных файлов вы можете поиграть с ESDS, но даже если это физически возможно, логика реализации может вызвать проблемы. Вы также можете посмотреть на реализацию типа сообщения с использованием WMQ или аналогичного. - person zarchasmpgmr; 01.12.2016
comment
@zarchasmpgmr абсолютно согласен. Существует значительная разница между тем, возможно ли это, разрешено ли это и является ли это хорошей идеей. А иногда человек оказывается между «не могу» и «должен». - person cschneid; 01.12.2016

Вы можете использовать CICS SPI для динамического определения ресурсов для файла, но это не очень хорошая идея, на самом деле это скорее заноза в заднице, слишком много соображений — высокая доступность, регион, которому принадлежит файл, головные боли изобилуют.

Все МОЖНО сделать, в конце концов, это всего лишь компьютер, но вы нарушите все допущения, которые использовались при построении структуры CICS/TS за последние полвека или около того. Он управляет ресурсами для обеспечения максимального параллелизма всех запущенных задач для максимальной эффективности всех машинных ресурсов. Выполнение того, что вы предлагаете, может перевести весь регион в состояние ожидания ОС и заблокировать все, если вы не сделаете все правильно.

Если это просто простой файл, скопируйте его в предопределенный ESDS в конце задания, которое его создает, и запустите задачу CICS, прочитайте его оттуда, ваша жизнь отладки будет намного проще, и ваши CICS SysProgs не будут ненавидеть вас и прокляни свое имя навсегда. Или вы можете использовать ключ KSDS с уникальным именем файла и порядковым номером записи и обрабатывать с помощью STARTBROWSE/READNEXT/ENDBROWSE только эти записи.

person Joe Zitzelberger    schedule 03.12.2016
comment
Я согласен, что лучше работать с CICS, чем против него. Обычно мы использовали KSDS (с соответствующим ключом, например, идентификатором запроса в таких ситуациях). База данных (DB2?) была бы альтернативой KSDS — за исключением выделения/отмены выделения файлов из CICS. - person Bruce Martin; 04.12.2016

Поскольку файл представляет собой плоский файл, а не какой-то кластер VSAM, я бы посоветовал вам прочитать его как ввод Дополнительная очередь временных данных раздела (Extra TDQ).

Имя набора данных можно включить в определение ресурса, но поскольку имя набора данных нельзя изменить с помощью интерфейса системного программирования, переход на новый набор данных можно было бы выполнить с помощью инструмента CICS ADYN, но я бы рекомендуется закрыть и отключить очередь с помощью SET TDQUEUE, а затем заменив ее на CREATE из вашей программы.

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

person Andy Clifton    schedule 27.06.2018