全部博文(287)
分类: 系统运维
2008-09-22 17:44:45
RPG ILE服务程序创建三步曲一
一. 概念
BNDDIR BNDDIR是指定存放modules和服务程序的路径。
CRTBNDDIR是定义一个符号指定存放modules和服务程序的路径。
指定BNDDIR的模式 BNDDIR可以通过CRTBNDDIR命令来指定;也可以通过程序定义来指定。程序定义用法:
/IF DEFINED(*ILERPG)
H BNDDIR('APPLIB/ABNDSRC':'"BND1.BND"')
/ENDIF
两者的区别在于,当一个bnddir是明确指定,即项目约定的,就可以在程序中直接指定。
程序控制行指定的bnddir不能覆盖命令行指定的bnddir。
二. 假设环境在APPLIB下建立:
/ABNDSRC
/ASRVSRC
/ARPGSRVSRC
3个Source PF
一个RPG服务程序SRV1,下挂两个服务应用程序,PGM1、PGM2。两个服务应用程序PGM1、PGM2是一般的编程模式;调用PGM1和PGM2用原型接口。
三. 创建三步曲第一步:创建服务应用程序
1. 服务应用程序(service)按一般RPG编程,在APPLIB/ARPGSRVSRC下编辑个服务应用程序,PGM1、PMG2。然后,PGM1和PGM2用15选项,CRTRPGMOD,在APPLIB下生成PGM1和PGM2 modules。
如果是其它非RPG代码,用CRTPGMMOD生成modules。
创建服务应用程序在RPGLE下有两种形式:
1)传统的rpgle程序,不过不生成pgm,而是module;
2)procedures,生成module。
2. BND文件第二步:创建BND文件和BNDDIR
在APPLIB/ABNDSRC下,编辑一个后缀为BND1.BND的文本文件。内容:
STRPGMEXP SIGNATURE('BND1') /* PGM1 */
EXPORT SYMBOL('PGM1') /* PGM2 */
EXPORT SYMBOL('PGM2')
ENDPGMEXP
注意:
1) 在BND程序中指定的循序是相对固定的。因为SVRPGM与其服务应用程序间的关系是静态的连接关系。一旦生成SVRPGM与其服务应用程序的指针是固定的。一旦变更了循序,就要编译相关的程序,否则,就会调用失败。
2) 如果一定要把PGM1与PGM2的循序对调,可以采用,废弃PGM1用PGM3来代替,无需删除EXPORT SYMBOL('PGM1'),只要在EXPORT定义的最后一行加入EXPORT SYMBOL('PGM3')。或者,采用以下BND文件:
/* Current version of exports */
STRPGMEXP PGMLVL(*CURRENT) LVLCHK(*YES) SIGNATURE('BND1')
EXPORT SYMBOL(PGM2) /* PGM2 */
EXPORT SYMBOL('PGM1') /* PGM1 */
ENDPGMEXP
/* Previous version of exports */
STRPGMEXP PGMLVL(*PRV)
EXPORT SYMBOL(PGM1) /* PGM1 */
EXPORT SYMBOL('PGM1') /* PGM2 */
ENDPGMEXP
注意:带*CURRENT参数的STRPGMEXP PGMLVL只允许一个。*PRV的STRPGMEXP PGMLVL可以多个。意味着可以把多个前SVRPGM组合成一个新的SRVPGM。本例,BNDDIR名为BND1指向APPLIB。
在CRTSRVPGM中,这个bind member放在 export SRCMBR参数项中。存放这个bind member的目录放在export SRCFILE,即把系统默认参数QSRVSRC改为你存放bind member的SRC-PF目录名。
第三步:创建服务程序
3. 服务程序在APPLIB/ASRVSRC下,编辑一个后缀为SRV1.RPGLE的文本文件。
内容:
/Free
Return ;
/End-Free
创建完这个服务程序(server)后,用15编译选项编译成module放入指定的lib下。生成后的module名在使用CRTSRVPGM时,是参数SRVPGM的指定名。
然后用CRTSRVPGM SRV1,键入F4选项。在MODULE选项中,输入PGM1、PGM2;在BNDDIR中输入BND1。
编译参数MODULE由系统默认值*SRVPGM,改为*ALL。(创建方法一)
BNDDIR和相关的LIB参数填入已经存在的,或者本文开始的用CRTBNDDIR命令创建的bind directory。
以上三步已完成一个服务程序的创建过程。
在后续的对一个服务程序下的服务应用程序的维护,比如修改了这个服务应用程序,并且对这个服务应用程序重新生成了module后,只需对这个服务应用程序单独进行维护,可以用 UPDSRVPGM 对服务程序进行更新。