Stored procedures iSeries过程调用上的承诺控制错误

Stored procedures iSeries过程调用上的承诺控制错误,stored-procedures,ibm-midrange,rpg,Stored Procedures,Ibm Midrange,Rpg,我在调用由各种CL&RPG程序组成的iSeries存储过程时遇到间歇性问题。错误是:- Commitment definition *N not valid for open of QAOSSI12 Error occurred while opening file QAOSSI12. 如前所述,问题并不总是发生,但在对程序进行负载测试时会发生更多 我知道信息含糊不清,但任何想法都值得赞赏 如果这是错误CPF4326,则消息文本提供以下可能性: 当承诺定义*N未激活时,成员QAOS

我在调用由各种CL&RPG程序组成的iSeries存储过程时遇到间歇性问题。错误是:-

 Commitment definition *N not valid for open of QAOSSI12
    Error occurred while opening file QAOSSI12. 
如前所述,问题并不总是发生,但在对程序进行负载测试时会发生更多


我知道信息含糊不清,但任何想法都值得赞赏

如果这是错误CPF4326,则消息文本提供以下可能性:

当承诺定义*N未激活时,成员QAOSI12已为承诺控制打开。 对于除*N以外的承诺定义,成员QAOSI12的未承诺更改处于挂起状态。 调用程序正在使用范围为*ACTGRP的承诺定义*N,而程序指定使用*JOB的ascope打开文件。
在您的情况下,这些情况可能发生吗?

我们已经得到了CPF4326,似乎有效的解决方案是将事务隔离=无添加到我们的jdbc URL中。无论如何,我们都不会尝试使用事务,因此启用它们没有任何好处。我们还怀疑iBATIS中有什么东西试图在出现错误时回滚事务,即使我们没有做任何明确的承诺控制

您可以在编译时将COMMIT值更改为COMMIT*NONE,然后不创建任何承诺定义

Commit Commit命令用于完成当前事务,并为与发出该命令的程序关联的承诺定义建立新的承诺边界


您还必须检查您的文件是否在日志下。

如何进行负载测试?从外部(例如JDBC调用)或从内部(例如从过程直接调用)。在后一种情况下,请检查是否使用命名的ActivationGroup。正如Danny T所写,检查您的范围。