即使签名ID与程序对象不同,也不会抛出签名违规错误

时间:2018-06-12 20:02:04

标签: ibm-midrange rpgle

我已将一个服务程序绑定到程序对象。最初都具有相同的签名ID。后来,我在服务程序中当前存在的模块列表中添加了一个新模块。此时程序和服务程序都有不同的签名ID。

计划签名ID:

     Service                                                                
Opt  Program     Library     Activation  Signature                          
     SRVPGM1     AKSHAYM     *IMMED      00000000000000000000FE56D41B36D1   

服务程序签名ID:

   Shared activation group  . . . . . . . . . . . . :   *NO                     
   Current export signature . . . . . . . . . . . . :   0000000000D5D6C72E980395
EE694617                                                                        
   User profile . . . . . . . . . . . . . . . . . . :   *USER                   
                                                                        More... 

现在,当我向该程序发出STRDBG和CALL时。我没有收到签名违规错误。

我在这里遗漏了什么。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:3)

DSPSRVPGM命令输出上点击输入几次,直到您转到签名屏幕或只使用DSPSRVPGM SRVPGM(...) DETAIL(*SIGNATURE)

DSPSRVPGM - Signatures

听起来先前的签名仍然有效。

通过在用于创建* SRVPGM对象的binder源中使用STRPGMEXP PGMLVL(*PRV)块来启用此功能。我们的想法是,您可以在不强制重新编译现有呼叫者的情况下向* SRVPGM添加新导出。

然而,使用PGMLVL(*PRV)并没有真正增加任何价值。只是增加了活页夹源的复杂性。

ILE的最佳做法是

  • 使用硬编码签名STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MYSRV v1')
  • 将新程序添加到导出列表的末尾
  • 不删除导出或更改活页夹源导出列表的顺序
  • 如果对现有程序进行更改,请不要更改现有参数并添加新参数OPTION(*NOPASS)

遵循上述规则,您的服务程序可以得到增强,而无需重新制作或以其他方式影响调用其中程序的任何现有程序。即使使用PGMLVL(*PRV)块,您也必须遵循上面的最后3条规则。因此:使用硬编码签名更简单,更容易。

如果在某些时候你必须强制重新编译呼叫者,那么只需更改* SRVPGM签名即可 STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('MYSRV v2')

参考文献:ILE Concepts for RPG presentation by IBM's Barbara Morris

  

我建议在开头添加一条关于在最后添加新导出的注释,以及在每个导出的注释中添加数字,以强化订单不得更改的想法。

     

您可以使用STRPGMEXP命令的SIGNATURE参数设置签名

     

理想情况下,签名永远不会改变。