使用 SAP JCO (v3.0) 时,如何处理 JCoContext.end() 期间的异常?

When using SAP JCO (v3.0), how do I handle an exception during JCoContext.end()?

所有,

我们目前开发了一个 Java 客户端应用程序,它通过 JCO v3.0 API 与 SAP 通信。在调用多个 BAPI 函数的有状态调用期间,我们使用 JCoContext class 来建立有状态会话。我们在执行 JCoFunction 之前调用 JCoContext.begin() 并在所有函数完成后在 finally 块中调用 JCoContext.end() 。

问题出现在 JCoContext.end() 上。它可能会引发 JCoException。文档对于异常可能发生的原因或如何处理它不是很清楚。在测试中,当将 NULL 目标传递给 JCoContext.end() 方法时,我已经能够观察到异常。虽然这可能会发生,但它绝对不会发生在我们的生产代码中。所以问题仍然存在,是否还有其他原因会引发异常?

此外,如果未调用 JCoContext.end() 方法,我会观察到奇怪的行为。在那些情况下,我看到后续的 BAPI 调用没有成功完成。这向我表明,如果 end() 方法没有成功完成,它可能会使 JCo 处于不良状态。那么,我们应该如何处理这里发生的异常。作为开发人员,我有什么办法?看来我唯一的保证就是关闭程序。

如果您有任何想法,请告诉我,谢谢,

保罗·曼宁

通过this description可以基本了解JCo异常。 SAP documentation 说明了这种异常处理方式:

JCoDestination destination = JCoDestinationManager.getDestination("<destination>");

try
{
    JCoContext.begin(destination);
    function1.execute(destination);
    function2.execute(destination);
    functionBapiTransactionCommit.execute(destination);
}
catch (AbapException ex)
{
    ...
}
catch (JCoException ex)
{
    ...
}
catch (Exception ex)
{
    ...
}
finally
{
    JCoContext.end(destination);
}

SAP 员工在 SCN 论坛上回答了这个问题。我cross-posted那里的问题。这是 link:

SAP Forum Question: SAP JCo: How to handle an Exception thrown by JCoContext.end()

总而言之,如果传入的 "destination" 参数为 NULL 或 SAP JCO 中存在错误,则 JCoContext.end() 方法只应引发异常。因此,您必须确保 "destination" 是 non-null。如果遇到其他问题,请向 SAP 提交支持请求。

完了。

-保罗