使用 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 提交支持请求。
完了。
-保罗
所有,
我们目前开发了一个 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 提交支持请求。
完了。
-保罗