PROGRAM 资源定义
PROGRAM 资源控制程序的信息,该程序存储在程序库中,用于处理事务或事务的一部分。
您可以使用 CEDA 或 DFHCSDUP 来创建 PROGRAM 定义,也可以通过设置相应的系统初始化参数并允许自动安装程序来创建 PROGRAM 定义。 请参阅 自动安装程序,映射集和分区集 ,以获取有关程序的自动安装的信息。
有关使用 BAS 的信息,请参阅 使用 BAS PROGRAM 资源定义。
CICS 束中的 PROGRAM 资源
您可以使用 CICS 束来创建,编辑和安装 PROGRAM 资源定义。 如果以此方式创建 PROGRAM 资源,那么必须使用 CICS 束来管理该资源的生命周期,并且不能独立管理该资源。 您可以使用 EXEC CICS INQUIRE PROGRAM 或 CEMT INQUIRE PROGRAM 命令来查询由 CICS 束动态生成的 PROGRAM 资源。 但是,不能对 CICS 束动态生成的 PROGRAM 资源发出 SET 或 DISCARD 命令。 必须针对 BUNDLE 资源发出命令,并且 CICS 会将这些命令应用于 PROGRAM 资源。
有关在 CICS 束中定义资源的更多信息,请参阅 定义 CICS 束。
PROGRAM 资源作为应用程序入口点
可以将 PROGRAM 资源定义为应用程序入口点。 有关如何定义入口点的更多信息,请参阅 在 CICS Explorer 产品文档中定义应用程序入口点。应用程序的专用 PROGRAM 资源
PROGRAM 资源作为应用程序版本的专用资源受支持。 由部署在平台上的应用程序的任务自动安装的程序也是该应用程序版本的专用程序。
有关专用资源的更多信息,请参阅 应用程序版本的专用资源。
语法
属性
- API({CICSAPI|OPENAPI})
- 指定程序要使用的 API。 API 属性适用于以下程序:
- 用户应用程序
- PLT 程序
- 用户可替换程序
- 与任务相关的用户出口程序。 有关更多信息,请参阅 与任务相关的用户出口程序。
API 属性不适用于全局用户出口。
- CICSAPI
- 该程序仅限于使用 CICS 应用程序编程接口。
如果使用 CONCURRENCY (QUASIRENT) 定义程序,那么它始终在准重入 (QR) 上运行 TCB。 如果该程序是使用 CONCURRENCY (THREADSAFE) 定义的,那么它将在 CICS 在确定为合适的时间使用的任何 TCB 上运行,如果该程序是使用 CONCURRENCY (REQUIRED) 定义的,那么它将始终在开放式 TCB 上运行。
- OPENAPI
- 程序不限于 CICS 应用程序编程接口。
CICS 在其自己的开放式 TCB 上运行程序。 使用的开放式 TCB 类型取决于 EXECKEY 属性的值和程序的语言。
如果 CICS 在运行命令时需要切换到 QR TCB ,那么它将返回到开放式 TCB ,然后再将控制权交还给应用程序。
要指定 OPENAPI 属性,必须将程序编码为线程安全标准并使用 CONCURRENCY (REQUIRED) 进行定义。 OPENAPI 程序的主要用途是将应用程序工作负载从 QR TCB 移至多个开放式 TCB。 您可以从更好地利用服务器资源中获益,以实现更高的吞吐量。
注: 不推荐使用先前发行版中支持的 CONCURRENCY (THREADSAFE) API (OPENAPI) 的组合,但会保留此组合以实现兼容性,并生成与 CONCURRENCY (REQUIRED) API (OPENAPI) 相同的行为。
- CEDF({YES|NO})
- 指定当程序在 EDF 控制下运行时执行诊断工具 (EDF) 的操作。
- 否
- 未显示 EDF 诊断屏幕。
- 是
- 这样会显示 EDF 诊断屏幕。 如果使用 NOEDF 选项转换程序,那么仅显示程序启动和终止 EDF 屏幕。 请参阅 表 1。
表 1. 对 CEDF (NO) 和 NOEDF 程序的影响 PROGRAM 上的 CEDF 选项 为转换程序指定了 EDF 为转换程序指定了 NOEDF YES 所有 EDF 屏幕 仅程序启动和终止屏幕 否 无 EDF 屏幕 无 EDF 屏幕 注: 该表显示了程序资源定义上的 CEDF 选项如何与为转换程序指定的 EDF 选项进行交互。
- CONCURRENCY({QUASIRENT|THREADSAFE|REQUIRED})
- 指定是将程序写入线程安全标准,还是仅为拟重入程序。 可以为所有 CICS 可执行程序对象指定 CONCURRENCY 属性:
- 用户应用程序。
- PLT 程序。
- 用户可替换程序。
- 全局用户出口程序。 有关更多信息,请参阅 全局用户出口程序。
- 与任务相关的用户出口程序。 有关更多信息,请参阅 与任务相关的用户出口程序。
Java™ 程序以及使用 XPLink 选项编译的任何 C 和 C++ 程序必须定义为 CONCURRENCY (REQUIRED)。
- QUASIRENT
- 该程序仅是拟重入程序,并且依赖于 CICS 在访问共享资源时提供的序列化。
该程序仅限于 CICS 允许的编程接口,并且必须符合 CICS 拟重入规则。 有关更多信息,请参阅 多线程: 重入程序,准重入程序和线程安全程序。
所有可执行程序都支持此值。
CICS 确保程序始终在 QR TCB 下运行,即使在其启动 JVM 或与开放式 API 任务相关的用户出口后返回控制权,或与线程安全程序进行交互时也是如此。
- THREADSAFE
- 程序将写入线程安全标准。 当它访问共享资源时,它会考虑其他程序可能同时运行并尝试修改相同资源的可能性。 因此,程序在访问任何共享资源时使用相应的序列化方法。
有关 CICS Db2® 应用程序的信息,请参阅 准备 CICS Db2 程序以用于执行和生产。
有关编写线程安全应用程序的信息,请参阅 线程安全程序。
所有可执行程序都支持此值。
- REQUIRED
- 程序将写入线程安全标准。 CICS 在开放式 TCB 上启动程序,并确保程序始终在开放式 TCB 上运行。 如果 CICS 切换到 QR TCB 以运行 CICS 命令,那么它将返回到开放式 TCB ,然后再将控制权交还给应用程序。 所使用的开放式 TCB 类型取决于 API 设置和程序的语言。
- 在 JVM 服务器中运行的 Java 程序和 OSGi 捆绑软件使用 T8 TCB。
- C 或 C++ XPLink 程序与 OPENAPI 程序一样运行,如果设置了 CICS 密钥,那么使用 X8 TCB ,如果设置了用户密钥,那么使用 X9 TCB。
- COBOL , PL/I ,非 XPLink C 或 C++ 以及同时指定 API (CICSAPI) 的汇编语言程序使用 L8 TCB ,因为无论程序的执行键如何, CICS 命令都可以在此 TCB 上运行。
- COBOL , PL/I ,非 XPLink C 或 C++ 以及同时指定 API (OPENAPI) 的汇编语言程序使用 L8 TCB (如果设置了 CICS 密钥) ,或者使用 L9 TCB (如果设置了用户密钥)。
REQUIRED 适用于用户应用程序, PLT 程序和用户可替换程序。
- DATALOCATION({ANY|BELOW})
- 使用 SET 选项的命令可以将数据地址返回到应用程序; 此操作数指定数据的位置。 For example, in the command EXEC CICS RECEIVE
SET(ptr-ref), ptr-引用 is less than 16 MB if DATALOCATION(BELOW) is specified, but might be greater than 16 MB if DATALOCATION(ANY) is specified. DATALOCATION 不影响 GETMAIN 命令的操作。 有关 CICS 在何处获取存储器以响应此命令的更多信息,请参阅 GETMAIN。
- 任何
- 程序可以处理 31 位地址。 这是缺省值。 数据的地址可以高于或低于 16 MB 界线。 为 DATALOCATION 属性指定的值与链接编辑的程序的寻址方式无关。 使用寻址方式 AMODE=24 进行链接编辑的程序无法访问高于 16 MB 的数据; 请确保您指定的值与链接编辑的应用程序的寻址方式兼容:
- 为所有 31 位或 64 位程序指定 ANY ,除非它们将 CICS 数据地址传递到其他 24 位程序。
- 为 AMODE=24 程序指定 DATALOCATION (BELOW) ,除非正在将存储地址传递到可以访问高于 16 MB 的存储器的程序,或者该程序显式地切换寻址方式。
- BELOW
- 程序只能处理 24 位地址,因此必须仅提供位于 16 MB 线以下的数据。 如果需要,将数据复制到 16 MB 线以下,然后再将其地址传递到应用程序。
DATALOCATION 不会影响 GETMAIN64 或 GET64 CONTAINER 命令的操作。 有关这些命令的更多信息,请参阅 GETMAIN64 和 GET64 CONTAINER。
- DESCRIPTION(文本)
- 您可以提供在此字段中定义的资源的描述。 描述文本的长度最多可以为 58 个字符。 您可以使用的字符没有任何限制。 但是,如果使用括号,请确保对于每个左括号都有一个匹配的右括号。 如果使用 CREATE 命令,那么对于文本中的每个单撇号,将编码两个撇号。
- DYNAMIC({NO|YES})
- 指定如果程序是程序链接请求的主题,那么是否可以动态路由请求。
- 否
- 如果程序是程序链接请求的主题,那么不会启动动态路由程序。
对于分布式程序链接 (DPL) 请求,必须在 REMOTESYSTEM 属性或 EXEC CICS LINK 命令的 SYSID 选项上显式指定要运行程序的服务器区域; 否则它缺省为本地区域。
- YES
- 如果程序是程序链接请求的主体,那么将启动 CICS 动态路由程序。 如果在 EXEC CICS LINK 命令的 SYSID 选项上未指定远程区域,那么路由程序可以将请求路由到要运行该程序的区域。
DYNAMIC 属性优先于 REMOTESYSTEM 属性; 请参阅 REMOTESYSTEM。
有关动态路由选择 DPL 请求的指导信息,请参阅 动态路由选择 DPL 请求。
- EXECKEY({USER|CICS})
- 指定 CICS 将控制权交给程序的密钥,并确定程序是否可以修改 CICS密钥存储器。 除了可重入程序 (即使用 RENT 属性链接编辑的程序) 之外, EXECKEY 还定义了使用驻留方式将程序装入到哪些 DSA CICS 中。
- CICS
- CICS 在调用 CICS 键时将控制权交给该键中的程序。 CICS 将程序装入到其中一个 CICS键 DSA 中。
在存储保护处于活动状态的 CICS 区域中, CICS-key 程序对其自己的任务和所有其他任务的 CICS-key 和用户密钥存储器具有读写访问权,无论事务隔离是否处于活动状态。
- 用户
- 当调用程序时, CICS 会将控制权交给用户密钥中的程序。 CICS 将程序装入到其中一个用户密钥共享 DSA 中。
在仅具有活动存储器保护的 CICS 区域中,用户密钥程序对所有用户密钥存储器具有读写访问权,但对 CICS-key 存储器具有只读访问权。
在存储器保护和事务隔离环境中,如果使用 ISOLATION (YES) 定义了事务,那么用户密钥程序对其自己的任务的用户密钥任务生存期存储器以及任何共享 DSA 存储器具有读写访问权。
如果在事务隔离环境中使用 ISOLATION (NO) 定义事务,那么其用户键程序也对使用 ISOLATION (NO) 定义的其他事务的用户键任务生存期存储器具有读写访问权。
用户密钥程序始终具有对 CICS-key 存储器的只读访问权。
在下列情况下,将忽略 EXECKEY 属性:- 第一级全局用户出口程序,与任务相关的用户出口程序,用户可替换程序和 PLT 程序始终在 CICS 键中运行。
- 如果使用 RENT 属性对程序进行链接编辑,那么 CICS 会根据为程序指定的驻留方式,将程序装入到其中一个只读 DSA (RDSA 或 ERDSA) 中。 仅当将 RENTPGM=PROTECT 指定为系统初始化参数时,才会从只读存储器分配只读 DSA。
- COBOL 动态 CALL 调用的程序始终在与调用者相同的密钥中运行。
- EXECUTIONSET({FULLAPI|DPLSUBSET})
- 指定您是否希望 CICS 链接并运行程序,就像该程序在远程 CICS 区域中一样。
- DPLSUBSET
- 如果希望 CICS 链接到程序并使用远程 DPL 程序的 API 限制来运行该程序,请指定 DPLSUBSET。 请参阅 LINK 命令的异常条件 ,以获取 DPL 程序的 API 限制的详细信息。
- FULLAPI
- 如果希望 CICS 链接到程序并在没有 DPL 程序的 API 限制的情况下运行该程序,请指定 FULLAPI。 该程序可以使用完整的 CICS API。
EXECUTIONSET 属性仅适用于以下情况:- 要链接到的程序,而不是要链接到最先由事务授予控制权的程序。
- 当 REMOTESYSTEM 名称与本地 CICS 区域同名时。 其目的是在本地 CICS 环境中测试程序,就像它们作为 DPL 程序运行一样。
- GROUP(groupname)
- 每个资源定义都必须具有 GROUP 名称。 资源定义成为组的成员,并在安装组时安装在 CICS 系统中。可接受的字符:
A-Z 0-9 $ @ #
当代码页为 IBM-037时,有效字符将按其呈现方式列出。 如果使用不同的 EBCDIC 代码页,请注意 变体角色 中记录的变体字符。
输入的任何小写字符都将转换为大写。
GROUP 名称的长度最多可以为 8 个字符。 小写字符被视为大写字符。
- JVM({NO|YES})
- 指定该程序是否是必须在 Java 虚拟机 (JVM) 中运行的 Java 程序。
- 否
- 该程序不会在 JVM 中运行。
- YES
- 该程序将在 JVM 中运行。 如果指定 JVM (YES) ,请在 JVMCLASS 属性中指定类名。
除了 YES 和 NO 之外,您还可以指定 DEBUG ,但仅在兼容性方式下 (请参阅 在 CICS的不同发行版之间共享 CSD)。
如果将 JVM 设置为 YES ,并且还为 JVMPROFILE (过时的属性) 设置了值,那么将阻止程序安装。
- JVMCLASS(class)
- 指定 Java 程序服务的名称 (长度不超过 255 个字符)。 有关详细信息,请参阅 JVMCLASS 语法用于 Java 程序。
这些名称区分大小写,必须使用正确的大写字母和小写字母组合输入。 如果使用终端,请确保禁止大写转换。
JVMCLASS 的值可以包含以下字符:
可接受的字符:A-Z a-z 0-9 $ @ # . / - _ % & ? ! : | " = ¬ , ; < >
当代码页为 IBM-037时,有效字符将按其呈现方式列出。 如果使用不同的 EBCDIC 代码页,请注意 变体角色 中记录的变体字符。
此属性仅适用于在 JVM 控制下运行的 Java 应用程序。 如果指定 JVM (NO) ,那么 CICS 将忽略 JVMCLASS 中指定的任何值。
- JVMPROFILE(jvmprofile)
该属性已过时,但仍受支持,用于提供与 CICS 较早发行版的兼容性。 要在 JVM 服务器中运行 Java 程序,请改为使用 JVMSERVER 属性。
- JVMSERVER(jvmserver)
- 指定包含要在链接期间调用的 Java 代码的 JVMSERVER 资源的名称 (长度最多为 8 个字符)。 JVMSERVER 资源表示 CICS中的 JVM 服务器运行时环境。 JVM 服务器运行 CICS 密钥中的所有程序。
- LANGUAGE({COBOL|ASSEMBLER|LE370|C|PLI})
- 指定程序语言。
- Assembler
- 未使用 LEASM 转换程序选项进行翻译的汇编语言程序。 LEASM 用于转换那些符合语言环境的汇编程序。
- C
- 未由符合语言环境的编译器编译的 C 或 C++ 程序。
- COBOL
- COBOL 程序。
- LE370
- 使用多语言支持的程序,或已由符合语言环境的编译器编译的程序,或是使用 LEASM 选项进行翻译以生成符合语言环境的程序的汇编程序 MAIN 程序。
- PLI
- PL/I 程序。
在大多数情况下,您不必指定 LANGUAGE 属性,因为 CICS 程序管理器会推断正确的语言并忽略您指定的值。 但是,如果程序是用汇编语言编写的,并且没有 DFHEAI 或 DFHEAG 存根,那么 CICS 无法推断该语言,您必须指定相应的值: 如果未指定该语言并且 CICS 无法推断该语言,那么尝试使用该程序的事务将以代码 ALIG 异常终止。
虽然,您通常不必为此属性指定值,但请注意,在 INQUIRE PROGRAM 命令的LANG乘数和 LANGUAGE 选项中返回了指定的值。 如果更改此属性的值,那么使用此命令的程序可能会受到影响。
该属性不适用于 JVM 程序。 当指定 JVM (YES) 时, CICS 推断该程序是要在 JVM 控制下运行的 Java 程序。
- PROGRAM(名称)
- 指定此 PROGRAM 定义的名称。 该名称的最大长度为 8 个字符。可接受的字符:
A-Z 0-9 $ @ #
当代码页为 IBM-037时,有效字符将按其呈现方式列出。 如果使用不同的 EBCDIC 代码页,请注意 变体角色 中记录的变体字符。
除非使用 CREATE 命令,否则您输入的任何小写字符都将转换为大写。
最好不要使用以 DFH 开头的名称,因为这些字符保留供 CICS使用。
当您升级或提供新功能或修订时, CICS 可以将其删除或废弃,并将其替换为 CICS 资源。
要在活动的 CICS 区域中使用该程序,必须将其链接编辑为指定为 DFHRPL 或动态 LIBRARY 并置的一部分的其中一个库。 如果程序是可重入的,那么可以将其放在链接装配区域 (LPA) 中。 有关安装应用程序的更多信息,请参阅 安装应用程序。
- RELOAD({NO|YES})
- 指定程序控制链接、装入或 XCTL 请求是否会产生一个新的程序副本。 该属性不适用于 JVM 程序。
- 否
- 对于请求,将复用当前在存储器中的程序的任何有效副本。
- YES
- 对于每个请求,都会将程序的新副本引入到存储器中。 此外,当不再需要这些程序副本时以及在事务终止前,必须通过使用存储器控制 FREEMAIN 请求以显式方式将所有这些程序副本从存储器中除去。 如果未发出相关 FREEMAIN 请求,那么 DSA/EDSA 的区域将与不可访问的程序副本绑定在一起,从而可能导致存储器不足或分段。注: 如果已将程序的新版本放在 LIBRARY 并置中,那么在装入新版本之前必须为程序发出 NEWCOPY 或 PHASEIN。
可以使用 RELOAD (YES) 来装入由执行任何关联程序修改的表或控制块。 请勿对为任务装入的第一个程序指定此值,因为该任务没有方法对该程序发出 FREEMAIN 请求。
必须为非重入程序指定 RELOAD(YES)。
有关 RELOAD 属性的更多信息,请参阅 控制使用 MVS 链接装配区域中的模块。
- REMOTENAME(程序)
- 指定远程 CICS 区域上程序的名称。可接受的字符:如果指定 REMOTESYSTEM 并省略 REMOTENAME ,那么 REMOTENAME 属性缺省为与本地名称 (即,此资源定义上的程序名) 相同的名称。
A-Z 0-9 $ @ #
当代码页为 IBM-037时,有效字符将按其呈现方式列出。 如果使用不同的 EBCDIC 代码页,请注意 变体角色 中记录的变体字符。
除非使用 CREATE 命令,否则您输入的任何小写字符都将转换为大写。
- REMOTESYSTEM(连接)
- 指定 IPCONN 或 CONNECTION 资源的名称,该资源定义指向程序所在的远程 CICS 区域的链接。 如果希望 CICS 将分布式程序链接 (DPL) 请求发送到另一个 CICS 区域,请指定此属性。可接受的字符:
A-Z 0-9 $ @ #
当代码页为 IBM-037时,有效字符将按其呈现方式列出。 如果使用不同的 EBCDIC 代码页,请注意 变体角色 中记录的变体字符。
除非使用 CREATE 命令,否则您输入的任何小写字符都将转换为大写。
- RESIDENT({NO|YES})
- 指定程序的居住状态。 该属性不适用于 JVM 程序。
- 否
- 该计划并不是永久居民。 如果指定了 RELOAD (YES) ,那么必须指定此值。
- YES
- 该程序将首先在引用时装入,然后将永久驻留在虚拟存储器中,但可由操作系统进行分页。 当您指定RES识别 (YES) 时, CICS 将采用 USAGE (NORMAL) 规范。
有关 RESRES 属性的影响的更多信息,请参阅 将程序定义为常驻,非常驻或瞬态。
- RSL
- 该属性已过时,但仍受支持,用于提供与 CICS 较早发行版的兼容性。 有关更多信息,请参阅 过时属性。
- STATUS({ENABLED|DISABLED})
- 指定程序状态。
- DISABLED
- 不能使用该程序。
- 已启用
- 可以使用该程序。
对于 CICS 束动态生成的 PROGRAM 资源,将忽略此属性。 PROGRAM 资源的初始状态派生自定义该资源的捆绑软件的初始状态。
- TRANSID(名称)
如果程序是动态的,那么此值是用于分布式程序链接 (DPL) 请求的缺省 TRANSID。 如果程序不是动态的,那么此值指定您希望远程 CICS 连接的事务的名称,并在该事务下运行远程程序。
如果未在 TRANSID 属性上指定事务名称,那么远程区域将在下列其中一个 CICS 缺省镜像事务下运行 DPL 程序。 如果您在远程区域中定义了用户事务以调用镜像程序,那么 DPL 程序将在该事务标识下运行。
- CPMI
- 用于需要数据转换的 LU6.2 连接以及用于来自 CICS Transaction Gateway for Multiplatforms的 TCP/IP 和 IPIC 请求的镜像事务。
- CSMI
- 针对具有同步级别 2 的 MRO 和 LU6.2 连接以及针对来自 CICS Transaction Gateway for z/OS的 EXCI 和 IPIC 请求的 CICS 镜像事务。
- USAGE({NORMAL|瞬态})
- 指定何时释放此程序的存储器。 该属性不适用于 JVM 程序。
- 正常
- 当此程序的驻留使用计数 (RESCOUNT) 达到零时,它就可以在正常动态程序存储器压缩过程中从存储器中除去。
如果指定了 RELOAD (YES) ,那么必须指定此值。
- transient
- 当此程序的驻留使用计数 (RESCOUNT) 变为零时,将释放此程序的存储器。 为很少引用的程序指定此值。
- USELPACOPY({NO|YES})
- 指定是否从链接装配区域(LPA)使用该程序。 该属性不适用于 JVM 程序。
- 否
- 该程序不会从 LPA 中使用。 它被装入到 CICS 地址空间。
- YES
- 如果将
LPA=YES
指定为系统初始化参数,那么可以从 LPA 使用该程序。 使用 LPA 中的程序要求它已安装在该程序中,并且该程序未由 PRVMOD 系统初始化参数命名。 有关更多信息,请参阅 控制使用 MVS 链接装配区域中的模块。