创建 ILE RPG 程序时,为什么应避免使用默认激活组名称 QILE

When creating an ILE RPG program why should default activation group name of QILE be avoided

根据 Paul Tuohy 的 style guide 和我以前阅读过的其他来源,在创建 ILE RPG 程序时应避免使用默认激活组 QILE。但是,谷歌搜索这个主题我似乎无法找出原因。

根据this pdf presentation系统经常使用QILE,这是否应该避免?

Here 提到 QILE 是一个糟糕的激活组选择,但没有给出理由。

从链接的样式指南看来,Paul Tuohy 反对 QILE 仅仅是因为它是一个默认命名的激活组名称,没有其他原因。他真的反对那些不是故意选择命名激活组名称的人。

This is the activation group that is used when care has not been taken to choose the activation group. If care was not taken to choose the activation group, care may not have been taken in other aspects of the application...

如果我使用命名激活组,我通常会使用 QILE 作为命名激活组。原因是在没有特殊情况的情况下,没有充分的理由不使用它。如果我有特殊情况,那么我将使用反映特殊情况的命名激活组。例如,我曾经创建了一个消息代理,它使用处理特定消息类型的出口程序进行操作。当它们结束时,我没有结束退出程序。这具有提高下一次调用性能的效果,因为程序不必重新初始化。这也有保持某些文件打开的效果。我有一个要求,有时我需要锁定一些由退出程序打开的文件。为了获得该锁,需要在消息代理作业中关闭文件。但是消息代理作业既不知道哪些退出程序 运行,也不知道这些退出程序打开了哪些文件。为了解决这个问题,我将这些退出程序放在它们自己的激活组中,我可以回收它们来关闭任何文件。通过暂停消息代理并回收特殊激活组,我能够关闭所有由退出程序打开的文件。我的其他进程现在能够锁定文件。完成后,我恢复了消息代理,并且出口程序在需要时重新获得了锁。

关键是您应该有意识地选择使用哪个激活组。我更喜欢在开始进程的 CLP 中使用 *NEW,而对所有被调用的程序和服务程序使用 *CALLER。 *NEW 使我脱离默认激活组并进入一个新的激活组,该组将以启动它的程序结束。 *NEW 还允许递归调用 RPG 程序。但我不喜欢在任何地方都使用 *NEW,因为这会导致创建过多的激活组,并且激活会有些耗时,尤其是如果您经常这样做的话。了解您的应用程序,并设计激活组策略。如果你这样做,QILE可以成为其中的一部分,你不会有任何惊喜。

现在,如果您正在开发供第三方使用的应用程序,QILE 可能不是一个好主意,因为当其他人在您不知情的情况下回收您的激活组时,您可能会产生意想不到的后果。或者您可能会在他们身上回收其他人的激活组,或者您可能无法进行所需的回收。在这种情况下,最好避免使用 QILE,因为大多数使用名称激活组的人只是使用 QILE,您不想影响您无法控制的应用程序。

我认为是我发起了选择奇乐并不是最好的主意。我坚持这一点,特别是如果你 Mark 提到的第三方应用程序,或者即使你确实或可能 使用 第三方应用程序使用奇乐的人。

如果我没有任何特别的理由选择一个激活组而不是另一个激活组,我会拥有自己的非特定激活组而不是使用 QILE。