本文提到MAP、LINKAGE、死锁、调用方式、嵌入、交易存贮、共享机制、姻亲关系、传递数据技术、运行程序、错误恢复机制、测试、文件访问方式及机制、数据库管理、任务交易的执行机制、3270终端家族、3270 BUFFER、
转自:http://blog.yxzone.net/2010/02/21/4.html
在对BMS进行编译时,可以使用两个选项,即Type=DSECT和Type=Map;前者生成逻辑MAP,后者生成物理MAP。
可以在LINKAGE SECTION中说明一个数据结构,而用ADDRESS获取其地址,空间的分配命令包括GETMAIN,LOAD,READ和READQ。
在多用户的环境下,不仅要考虑交易的完整性与一致性,而且要考虑多交易对资源的争夺,即避免死锁现象的出现。为此,
1.所有的应用程序必须以同样的KEY值顺序对文件进行访问,即升序或降序。
2.所有应用在发起一个READ UPDATE命令后必须写一个REWRITE或DELETE或UNLOCK。
3.WRITE MASSINSERT命令后需接一个UNLOCK命令。
CICS不支持广泛的混合语言编程环境,但COBOL可调用ASM的模块。但一个CICS交易可由多个执行程序所组成,利用LINK或XCTL命令来相互调用。
CICS对子程序的调用可包括三种形式,即EXEC CICS LINK,STATIC COBOL CALL以及DYNAMIC COBOL CALL。
在CICS的COBOL宿主程序中,CICS的DFHEIBLK(EXEC INTERFACE BLOCK)以及DFHCOMMAREA(communication area)在LINKAGE SECTION中被插入。
CICS的NESTING:
1.必须将最高层的程序及其所有直接或间接的程序所为编译的一个单元来提交。
2.在每个包含EXEC CICS命令的程序中,程序的调用参数被加入了DFHEIBLK和DFHCOMMAREA作为头两个参数。
3.对每个包含CICS EXEC程序的调用语名中,亦将DFHEIBLK和DFHCOMMAREA作为头两个调用参数。
对于主控程序来说明,EIB的地址并不能确定,所以需要用如下的语句来确定其地址:EXEC CICS ADDRESS EIB(dfheiptr)。同样,利用ADDRESS COMMAREA亦可以获得通讯域的地址。
CICS的pseudo-conversational transaction不如conversational容易保持交易的完整性,因为UOW不能横跨Transaction,你需要另一个程序来保持交易的完整性。
在CICS中一个交易的storage由如下几个部分所组成:(这些域均不是Recoverable,也不能由resource security keys来保护。)
1.Transaction Work Area(TWA);
2.User Storage(via a GETMAIN command issud without the SHARED option);
3.COMMAREA;
4. Program Storage。
CICS在交易间共享数据的机制包括:
1.Common work area(CWA--是唯一的在系统启动时被分配,并在CICS的SESSION存在期间存在的控制块,其长度是固定的,由系统初始化参数WRKAREA来指定,不是安全的,适用于小数据,如系统的状态等);
2.TCTTE user area(TCTUA--is an optional extension to the terminal control table entry TCTTE,系统的启动参数TCTUALOC及TCTUAKEY说明了所有TCTUA的位置及storage key,你可以说明您需要一个TCTUA与一个终端相结合,则可在TYPETERM资源定义的USERAREALEN参数中说明其长度,长度对所有终端均是一样的,最大长度为255个字节);
3.COMMAREAin RETURN commands(It is not recoverable,there is no resource security);
4.Display screen;
5.Temporary storage;
6.Intrapartition transient data;
7.Storage acquired by a GETMAIN command with SHARED option;
8.Your own data sets。
CICS的姻亲关系(Affinity):
1.交易的姻亲关系(Transaction affinity)是由交易间传递消息(information)所引起的,或者是由交易间的同步关系所引起的(2.3.1.1-1),在两个交易同步的情况下,利用事件控制块ECB或者是一个队列ENQ机制来完成;
2.交易与系统的姻亲关系(Transaction-system affinity).
CICS传递交易数据的技术有以下三点:
1.安全的技术,即COMMAREA的技术;
2.不安全的技术,利用长生命期的共享区域,如CWA,GETMAIN SHARED域.
3.可疑虑的技术,temporary storage,Transient data queues,trigger levels,利用CICS的同步或顺序命令如(RETRIEVE WAIT/START,START/CANCEL REQID,DELAY.CANCEL REQID,POST/CANCEL REQID).
你可以利用下面的任意一种技术以在CICS intercommunication environment下运行应用程序:
1.Transaction routing,enables a terminal in one CICS systemto run a transactionin another CICS system;
2.Function shipping,enables your application program to access resources in another CICS system;
3.Distributed program link(DPL),enables an application program running in one CICS region to link to another application program running in a remote CICS region;
4. Asynchronous processing,enables a CICS transaction to start another transaction in a remote system and optionally pass data to it。
5.Distributed transaction processing(DTP),enables a CICS transaction to communicate with a transaction running in another system,there are two interfaces available to DTP,command levelEXEC CICSand the SAA interface for DTP known as Common Programming Interface Communications(CPI Communications)仅能用C,C++及汇编语言进行编程;
6.Common Programming Interface Communications(CPI-C) provides DTP on APPC connections and defines an API that can be used on multiple system platforms;
7.External CICS interface(EXCI) enables a non CICS program running in MVS to allocate and open sessions to a CICS system,and to issue DPL requests on these session。
交易的路由(Transaction routing),Transactions that can be invoked from a terminal owned by another CICS system,or that can acquire a terminal owned by another CICS system during transaction initiation,must be able to run in a transaction routing environment。
分布式程序联接(Distributed program link,DPL),分布式程序联接允许一个CICS程序(client program)去调用位于远端CICS region中的另外一个CICS程序。用四种方法可用于说明程序欲联接的程序是一个远端的:.1.在XPCREQ global user exit中说明远端系统的名称;2.在LINK命令中说明远端系统的名称(例子:EXEC CICS LINK PROGRAM(..),COMMAREA(..),LENGTH(..),DATALENGTH(..),SYSID(..),TRANSID(..),SYNCONRETURN,这里而说明SYSID且与本地不同,或者在程序资源定义中的REMOTESYSTEM option中说明程序的名称;而SYNCONRETURN表示客户和服务器程序分别作为工作单元,如果不说明,则表示作为统一的工作单元);3.在程序资源定义中说明远端系统的名称;By specifying the remote system name using the program autoinstall user-replaceable module(URM)。
CICS的错误恢复机制:
1.在日志控制表JCT中定义日志,日志由日志号来标识,是一个从2到99的数值,数值1用作系统日志。每一条日志记录以一个标准长度域(LLbb)开始,然后是一个用户说明的标识符,最后是一个系统提供的前缀。
2.在CICS表生成时,定义特殊的资源为recoverable。
3.利用WRITE JOURNALNUM命令来输出日志记录,如果跟随一个WAIT选项,则即同步方式,交易要等待记录输出的完成,否则即异步方式,数据被写入到日志缓冲区中,还可以利用STARTIO选项以立即进行输出。
4.利用恢复交易进行恢复(backout),恢复以UOW作为单位,一次SYNCPOINT即是UOW的开始。
5.否可以用SAA Resource Recovery Interface进行恢复
CICS程序的测试:1.不要直接测试生产系统。2.不要直接由开发者进行测试。3.多次进行测试。4.利用CEDF交易进行初始测试。5.利用工具进行测试,TPNS即是专业测试软件包。6.测试程序是否即能处理正确数据又能处理非正确数据。
CICS例外测试(Dealing with exception conditions):1.CICS利用EXEC interface block(EIB)对例外进行响应,其中的值RESP即错误信息代码,除非其值为DFHRESP(NORMAL)。2.CICS蕴含的例外处理是中断程序,在C系列编写的程序中,没有例外处理。3.用户自己编写程序对例外代码进行响应。4.可以通过编程改变CICS的例外处理,HANDLE CONDITION condition(label),HANDLE CONDITION ERROR(label),IGNORE CONDITION,HANDLE ABEND是最主要的命令,还可以利用PUSH HANDLE和POP HANDL命令来挂起和激活(2.7.3-1)。
CICS提供两种类型的文件访问方式:VSAM和BDAM。在对一个记录进行访问时,应用程序必须对所需读取的记录以及存放数据的存储域进行说明。VSAM数据集包括三种类型的数据集,即KSDS,ESDS和RRDS。CICS支持带有键值的和不带有键值的BDASM数据集。BDAM支持使用位于DASM设备上记录的物理属性。
CICS数据表:文件控制命令可以访问数据表。数据表提供了一种构造、维护,以及对存放在虚存中的表中记录进行快速访问的方法。每个数据表同一介VSAM KSDS相结合,被称为是其资源数据集。
每张表由CEDA DEFINE FILE界面或DFHFCT宏来定义。当一个表被打开后,CICS利用将这个表所对应的资源数据集的数据导出的方法对其进行创建,并将其加载至虚存的16M以上的空间中。MVS/ESA中的CICS支持两种类型的数据表:1.CICS-MAINTAINED TABLES(CMTs)。这种表采用与相应的资源数据集同步映像的方式。即对表中数据的任何改变均将在相应的资源数据集中进行反映,同时,对相应资源数据集的任何更改亦将在数据表中予以反映。适应于VSAM KSDS数据集的所有文件访问API均适应于这种数据表,在数据表中不能满足而需参照相应数据集的请求即导致需调用VSAM的API以对相应的数据集进行访问,可将表定义成可恢复的以保证全部的完整性。2.User-maintained tables(UMTs)。这种类型的数据表在其被加载后即与相应的资源数据集完全分离,对表中数据的修改并不能自动地在相应的资源数据集中进行反映。只有部分文件访问的API能够支持这种类型的数据表,可参阅CICS/ESA Application Programming Reference Manual,这种表的交易完整性不能全部予以保障。
CICS的直接对KSDS进行读取的机制:利用READ命令进行读取操作,如果向用户程序的存储域进行读取,可使用READ INTO命令;如果向CICS SET域中进行读取,可使用READ SET命令。当从KSDS中进行读取时,你可以标识其完整的键值以获得唯一的一记录,亦可以说明键值的一部分以对满足条件的第一条记录进行定位,这两种方式通过几个选项来完成:1.GENERIC选项只对键值的一部分进行匹配,在这种情况下必须说明KEYLENGTH选项,以对多少位的键值需要匹配进行说明。2.GTEQ选项,表示你需要这样一条记录,即它的KEY值“大于或等于”你需说明的KEY值。3.EQUAL表求精确匹配。
CICS的直接对ESDS读取机制,读取命令与KSDS一致,而需读取的记录应由RBA来指明,因为在ESDS中一条记录的RBA是不能改变的。
CICS的直接对RRDS读取机制,读取命令是相同的,但记录的定位需通过相对的记录号RRN来完成。
利用路径方式的直接读取,如果一个KSDS或一个ESDS具有一个alternate index 以及一个alternate index path(并在FCT中有一个相应的描述项),你就可以利用alternate index中的一个KEY值对记录进行定位。GENERIC和GTEQ选项在这里仍然可以被应用。如果说明的KEY值不唯一,则读取第一条记录,并产生一个DUPKEY异常条件。
顺序的读取(浏览,browsing)。1.可以通过STARTBR命令来启动一个浏览,以与直接读取同样的方式对一个特定的记录进行定位,然而,STARTBR命令仅对说明了浏览的起始位置,并不实际读取该记录。2.利用READNEXT命令从这个起始点开始顺序地读取记录。每个READNEXT命令完成后,CICS在RIDFLD选项所指定的域中返回该记录的KEY值的全部。3.像对KSDS直接读取一样,记录可以读进用户的区域(利用INTO选项)或CICS的区域(通过SET选项)。4.利用READPREV命令代替READNEXT命令,可实现对记录的反向读取5.在浏临启动后,可以随时改变当前的浏览点,即可以利用RESETBR命令,亦可以利用READNEXT或READPREV命令。6.对于VSAM的情况,重定位仅需简单地在READNEXT或READPREV命令的RIDFLD选项中说明不同的域值即可实现,但其键值类型应与STARTBR或READNEXT相同。7.对于BSAM的情况,只能用RESETBR命令来对记录进行重新定位。9.如果试图在最后一条记录继续浏览,则会引起ENDFILE条件被触发,如果要结束浏览,则需要利用ENDBR命令来完成,在进行修改前必须采用这样的命令,如果不这样。则结果很难预料,可能在交易中导致死锁。10.CICS允许在同一个交易中对同一个文件同时进行浏览,需以REQID选项来区分各个浏览。
CICS对文件记录的修改。为了对一条记录进行修改,应首先利用READ命令并带上UPDATE选项,在应用程序进行修改后,需用REWRITE命令将原记录写入到数据集中。如果没有用到重写及删除命令,在READ UPDATE命令后需要以UNLOCK将该记录锁打开。
CICS对文件记录的删除。1.删除一个单一的记录,*先利用READ UPDATE命令对记录进行定位,然后触发DELETE命令,无需说明RIDFLD选项;*单独启动DELETE命令,并在RIDFLD中指明要删除的记录,但这种情况下可能删除了多条记录。2.删除一组记录,利用GENERIC KEY机制,可对多条记录进行删除,这时必须说明KEYLENGTH的值,如果还说明了NUMREC选项,则被删除的记录数亦将返回到应用程序中。
CICS对文件记录的追加机制,利用WRITE命令对文件的记录进行追加。1.对KSDS的追加,利用WRITE命令,但在RIDFLD中必须对记录的键值进行说明。2.对ESDS文件的追加,记录总是被写入到文件的未尾。3.对RRDS的追加,在RIDFLD中说明文件的相对记录号。4.当向一个固定长度的文件进行追加时,写入的记录长度必须等于文件生成时的记录长度。5.顺序地增加记录,在WRITE命令中采用MASSINSERT选项,可以一次追加多条记录,从而改进其性能。
CICS文件控制命令的诸选项,RIDFLD,INTO或SET,FROM,TOKEN。1.RIDFLD选项,无论对一条记录进行何种操作(读、追加、删除或启动一个浏览),均需说明RIDFLD选项,除非已经作了READ UPDATE操作。然而,在ENDBR,REWRITE及UNLOCK命令中无需此选项,在READNEXT和READPREV命令中,你亦必须包含这个选项以使CICS能够返回记录的标识。2.INTO和SET选项,指定存放记录数据的空间。3.FROM选项,在追加记录(利用EXEC CICS WRITE命令)或修改一条记录(利用REWRITE命令),必须在FROM选项中说明被修改的记录。4.TOKEN选项,…3.1.9.4-1。
避免交易的死锁。1.所有的应用程序,如果它们要对资源进行修改,则应该以同样的顺序,即或者升序或者降序。2.所有启动READ UPDATE命令的应用必须后跟一个不带RIDFLD选项的REWRITE,DELETE或UNLOCK命令以对锁进行释放。3.一组WRITE MASSINSERT命令需以UNLOCK命令做为结束,在UNLOCK命令没有触发前,不要对文件做任何操作。4.在对文件进行浏览时,必须以ENDBR对其进行结束,在此之前不要启动带有RIDFLD选项的READ UPDATE,WRITE,DELETE命令。
文件的标识。包括KEY,RBA,RRN。
CICS的BSAM文件,参阅3.3.1.3-1…。
CICS对DL/1数据库的管理。DL/1数据库由IBM注册的程序(Information Management System/Enterprise System Architecture,IMS,信息管理系统/企业系统结构)进行管理。CICS对DL/1的操作包括两个界面,我们推鉴使用EXEC DLI界面,另一个层次较低的界面是DLI CALL界面。
CICS对DB2数据库的管理。CICS只对DB2提供了一个界面,即EXEC SQL界面。CICS在处理DB2数据库的同时亦可对DL/I进行操作。
CICS的数据通讯,CICS支持与其它应用的通讯,不仅包括与终端的通讯,还包括与其它CICS的region,IMS/DC等。
CICS在数据通讯中的基本术语。1.终端(Terminal),即包括硬件设备,亦可能是仿真终端的一个控制单元。2.逻辑单元(Logical Unit,LU),是数据传输的终极结点,即可以是一个终端,亦可能是主机上的一个应用(CICS region,IMS/DC等),这是一个VTAM的术语。VTAM将不同的通讯叶结点区分为七种类型,类型1,2,3即普通的终端;类型0即可以是一个终端,亦可能是利用非常简单通讯协议的控制单元或处理器。类型4是一个可编程的控制单元,类型6.1和类型6.2(APPC)即程序到程序的通讯,请见CICSESA 3.3 FACILITIES AND PLANNING GUIDE。3.交易(Transaction),即连线交易处理系统,在通常的意义下,交易被理解为两个参与者之间的交互过程;然而,在CICS中交易被赋予特定的含义,它意味着对特定类型请求所执行的处理。一个请求类型往往代表了整个操作过程,就象选择座位一样。应用程序的设计中定义了请求类型,并需在CICS的TRANSACTION defination中予以定义,在定义中需告诉CICS需作的工作,最关键的事情就是先调用哪个程序。交易由交易标识符(Transaction identifier)或交易代码(Transaction Code)来表示,交易代码由一到四位字符表示。4.任务(Task),在CICS中有特定的含义,它是一个特珠交易类型的一个实例,即对一个交易的执行,它对一个特定的数据集进行操作,并针对在一个特定终端上的特定的用户。5.主要设备(Principal facility),CICS仅允许一个TASK与一个终端进行交互,这台终端即是该TASK的主要设备。CICS在其启动一个TASK时即对主要设备进行赋值,TASK在其生存的期间内掌握这台设备,在该TASK结束以前,其它TASK不能使用该设备。如果一个设备需要与另外的设备进行通讯,它不能直接地进行操作,而需生成另外的一个TASK,该TASK以需要通讯的设备作为主要设备,最常见的情况是与打印机的连接。6.附加设备(Alternate Facility)。虽然一个TASK仅能与一个终端进行直接通讯,它也可以与一个或多个远端的系统建立通讯。TASK要求CICS建立与该系统的对话,该系统即成为该TASK的附加设备。
一个CICS的交易是如何启动的?这里有两种方法,即unsolicited input和, sans-serif !important; line-hei