Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1294117
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

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

3Source PF

一个RPG服务程序SRV1,下挂两个服务应用程序,PGM1PGM2。两个服务应用程序PGM1PGM2是一般的编程模式;调用PGM1PGM2用原型接口。

三. 创建三步曲

第一步:创建服务应用程序

1. 服务应用程序(service)

按一般RPG编程,在APPLIB/ARPGSRVSRC下编辑个服务应用程序,PGM1PMG2。然后,PGM1PGM215选项,CRTRPGMOD,APPLIB下生成PGM1PGM2 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) 如果一定要把PGM1PGM2的循序对调,可以采用,废弃PGM1PGM3来代替,无需删除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只允许一个。*PRVSTRPGMEXP 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选项中,输入PGM1PGM2;在BNDDIR中输入BND1

编译参数MODULE由系统默认值*SRVPGM,改为*ALL。(创建方法一)

BNDDIR和相关的LIB参数填入已经存在的,或者本文开始的用CRTBNDDIR命令创建的bind directory。

 

以上三步已完成一个服务程序的创建过程。

在后续的对一个服务程序下的服务应用程序的维护,比如修改了这个服务应用程序,并且对这个服务应用程序重新生成了module后,只需对这个服务应用程序单独进行维护,可以用 UPDSRVPGM 对服务程序进行更新。

 

阅读(2618) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~