CICS Server编程
索引:
1.注意事项
调用操作系统系统调用、函数必须是线程安全的。
gethostbyname()、gethostbyaddr()、getprotent()、getservbyname()等非线程安全,用gethostbyname_r()、gethostbyaddr_r()、getprotent_r()、getservbyname_r()等替代。
不能调用fork()、execl()、system(),分别用EXEC CICS LINK 、XCTL 、START代替实现类似功能。
exit()用EXEC CICS RETURN替代。
不推荐使用malloc(),用EXEC CICS GETMAIN代替。
kill()用EXEC CICS SET TASK PURGETTYPE(PURGE | FORCEPURGE)代替。
在程序中打开的资源不用时注意关闭,CICS会保留他们的状态:
- 打开的文件;
- 使用的socket描述符;
- 环境变量;
- 当前工作目录;
- 进程的优先级;
- 共享内存;
- 动态分配的内存。
当CICS程序需要驻留在内存时(PD Resident = Yes),慎用静态变量(static)。
注意字节序问题,结构的对齐问题。
数据库游标和临时表等不用时要清除和关闭。
2.交易间数据共享方法
CWA;
使用临时存储队列(TSQ);
使用暂存数据队列(TDQ);
使用VSAM文件;
使用CICS RETURN的COMMAREA:
EXEC CICS RETURN COMMAREA()
CICS共享存储区:
CICS GETMAIN SET() SHARED
3.Execute Interface Block
EIBTASKN | Sequential task number |
EIBDATE | System date (start or 'asktime') |
EIBTIME | System time of day |
EIBTRNID | Transaction identification |
EIBTRMID | Terminal identifier |
EIBCALEN | Communications area length |
EIBFN | Last command issued |
EIBRSRCE | Resource name (terminal or queue) |
EIBDS | Resource name (file) |
EIBRESP | Error condition response |
EIBAID | 3270 attention identifier (key) |
EIBCPOSN | 3270 cursor position |
4.CICS Server API
(1).命令形式
以EXEC CICS为前缀。
形式:
EXEC CICS command [ option [ ( argument ) ] ] ... Command:Operation Type Option:Optional Facilities Arguments:Data Values or Keywords
错误处理:通常情况下CICS会abend该任务;若使用RESP选项则CICS返回错误码。
(2).命令选项
每个命令基本都有的Command Option:
- RESP
- RESP2
- NOHANDLE
- NOEDF
Communications Area:32K。
(3).ADDRESS
EXEC CICS ADDRESS [COMMAREA(ptr_ref)] [CWA(ptr_ref)] CWA公共内存区 … …
如果RESP不为NORMAL,则存取失败。
(4).RETRIEVE
EXEC CICS RETRIEVE
获取START参数。
(5).ASSIGN
EXEC CICS ASSIGN
获得环境参数。
(6)GETMAIN
EXEC CICS GETMAIN SET(ptr_ref){LENGTH…}[SHARED]
向CICS申请内存,没有SHARED选项,交易结束会被CICS释放。
(7).FREEMAIN
EXEC CICS FREEMAIN
释放GETMAIN申请的内存。
(8).ENQ
EXEC CICS ENQ
对共享资源加锁。
(9).DEQ
EXEC CICS DEQ
释放锁。
(10).ASKTIME
EXEC CICS ASKTIME
获得绝对时间。
(11).FORMATTIME
EXEC CICS FORMATTIME
按要求格式化绝对时间。
(12).DELAY
EXEC CICS DELAY
使程序延时执行。
(13).CANCEL
EXEC CICS CANCEL
取消延时或取消异步执行的交易。
(14).SYNCPOINT
EXEC CICS SYNCPOINT
交易数据提交(XA),结束一个LUW,达成两阶段提交。
(15).ROLLBACK
EXEC CICS SYNCPOINT ROLLBACK
交易数据回滚(XA),结束一个LUW。
(16).LINK
EXEC CICS LINK
调用另一个程序,结束返回调用程序(fork)。
(17).XCTL
EXEC CICS XCTL
将控制转给另一个程序(exec)。
(18).START
EXEC CICS START
异步执行另一个交易(system)。
(19).ABEND
EXEC CICS [ABCODE(name)] [CANCEL]
中断当前CICS交易,name ABEND,作为代码是为四个字符;[CANCEL]选项可以屏蔽EXEC CICS HANDLE ABEND。
(20).RETURN
EXEC CICS RETURN
执行返回语句,返回调用者。
5.Server程序编译
cicstran
cicstcl