При использовании SAP JCO (v3.0), как мне обработать исключение во время JCoContext.end()?

Все,

В настоящее время мы разработали клиентское приложение Java, которое взаимодействует с SAP через API JCO v3.0. Во время вызова с отслеживанием состояния, когда вызывается несколько функций BAPI, мы используем класс JCoContext для установления сеанса с сохранением состояния. Мы вызываем JCoContext.begin() перед выполнением JCoFunctions и JCoContext.end() в блоке finally после завершения всех функций.

Проблема возникает на JCoContext.end(). Это может потенциально вызвать JCoException. В документации не очень ясно, почему может возникать Исключение или как с ним обращаться. В ходе тестирования я смог наблюдать исключение, когда целевое значение NULL передается методу JCoContext.end(). Хотя это может произойти, это определенно не произойдет в нашем производственном коде. Таким образом, остается вопрос, есть ли другие причины, по которым будет выдвинуто исключение?

Кроме того, я наблюдал странное поведение, если метод JCoContext.end() не вызывается. В этих случаях я видел, что последующие вызовы BAPI не завершались успешно. Это указывает на то, что если метод end () не завершится успешно, он может оставить JCo в плохом состоянии. Итак, как мы должны обрабатывать исключение, которое происходит здесь. Какие у меня есть ресурсы в качестве разработчика? Похоже, что единственная гарантия, которую я имею, - это закрыть программу.

Дайте мне знать, если у вас есть идеи, спасибо,

Пол Мэннинг

2 ответа

Решение

На вопрос ответил сотрудник SAP на форумах SCN. Я сделал кросс-пост там. Вот ссылка:

Форум SAP Вопрос: SAP JCo: как обработать исключение, выданное JCoContext.end()

Таким образом, метод JCoContext.end() должен вызывать исключение только в том случае, если переданный параметр "destination" имеет значение NULL или в SAP JCO имеется ошибка. Таким образом, вы должны убедиться, что "назначение" не является нулевым. Если вы столкнулись с другой проблемой, отправьте заявку в службу поддержки SAP.

Конец связи.

-Павел

Основное понимание исключений JCo может быть достигнуто с помощью этого описания. И документация SAP утверждает этот стиль обработки исключений:

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);
}
Другие вопросы по тегам