При использовании 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);
}