Вводящее в заблуждение сообщение об ошибке после необработанного исключения в скрипте wsadmin

Я разрабатываю инфраструктуру автоматизации, и я испытал странное поведение wsadmin инструмент. Проблема воспроизводима в WAS 6.1, 7.0 и 8.0 (я не пробовал с версии 8.5).

Мне интересно, если это ошибка в wsadmin (довольно странно, что никто еще не заметил это, вероятно, после WAS 5!)...

Примеры сценариев могут безопасно выполняться в любой среде WAS без какого-либо вреда.

try:
    # this line throws WAS exception
    AdminConfig.list('NonExistentType')
except:
    # exception is being handled
    print 'Handled wsadmin exception'
print 'Raising another exception'
# eventually the script throws a non-WAS exception
x = 1/0

Если я правильно понимаю, вышеприведенный скрипт завершается с ошибкой при делении на ноль. Но wsadmin вывод немного сбивает с толку:

Handled wsadmin exception
Raising another exception
WASX7017E: Exception received while running file "ex.py"; exception information: com.ibm.websphere.management.exception.InvalidConfigDataTypeException
com.ibm.websphere.management.exception.InvalidConfigDataTypeException: ADMG0007E: The configuration data type NonExistentType is not valid.

Что действительно интересно, у Жака, похоже, та же проблема:

if [catch { puts [$AdminConfig list NonExistentType] } result] {
    puts "Handled wsadmin exception"
}
puts "Raising another exception"
set x [expr 1 / 0]

wsadmin также не печатает никакой информации о фактическом исключении, которое прервало сценарий:

Handled wsadmin exception
Raising another exception
WASX7017E: Exception received while running file "ex.jacl"; exception information: com.ibm.websphere.management.exception.InvalidConfigDataTypeException
com.ibm.websphere.management.exception.InvalidConfigDataTypeException: ADMG0007E: The configuration data type NonExistentType is not valid.

После небольшого изменения обоих сценариев (во избежание исключения WAS) вывод обоих сценариев будет правильным.

try:
    # this line does not throw any exception
    AdminConfig.list('Cell')
except:
    # exception is being handled
    print 'Handled wsadmin exception'
print 'Raising another exception'
# eventually the script throws a non-WAS exception
x = 1/0

Если сценарий не генерирует / обрабатывает исключение WAS, выходные данные выглядят как ожидалось:

Raising another exception
WASX7017E: Exception received while running file "ex1.py"; exception information: com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
  File "<string>", line 9, in ?
ZeroDivisionError: integer division or modulo

То же самое с Жаклом:

if [catch { puts [$AdminConfig list Cell] } result] {
    puts "Handled wsadmin exception"
}
puts "Raising another exception"
set x [expr 1 / 0]

wsadmin выводит следующее, что опять-таки вполне ожидаемо:

wdrCell(cells/wdrCell|cell.xml#Cell_1)
Raising another exception
WASX7017E: Exception received while running file "ex1.jacl"; exception information: com.ibm.bsf.BSFException: error while eval'ing Jacl expression:
divide by zero
    while executing
"expr 1 / 0"
    invoked from within
"set x [expr 1 / 0]"

Я должен немного признаться: причина, по которой я задаю этот вопрос, заключается в том, что я действительно сообщил о проблеме в службу поддержки WebSphere. Я не полностью удовлетворен их ответами все же. Эксперты Wsadmin/Jython/Jacl/Python/Tcl: что вы думаете об этом?

Я делаю что-то неправильно?

Это ошибка в wsadmin?

Это ожидаемое поведение???

1 ответ

Решение

Проблема будет исправлена ​​в следующих пакетах FixPack для WSAS 6.1, 7.0, 8.0 и 8.5.

IBM Support был немного обеспокоен нарушением совместимости с предыдущими реализациями (ну, это спорно, но некоторые сценарии могут полагаться на этой ошибке), поэтому правильное поведение должно быть явно включено с помощью com.ibm.ws.scripting.exceptionPropagation=thrown Собственность JVM.

Мне известны два способа передачи этого свойства в виртуальную машину Java от wsadmin:

  • javaOption переменная окружения
  • javaoption вариант

Переменная среды:

export javaOption=-Dcom.ibm.ws.scripting.exceptionPropagation=thrown
./wsadmin.sh -lang jython -f script.py

Опция командной строки:

./wsadmin.sh -javaoption -Dcom.ibm.ws.scripting.exceptionPropagation=thrown-lang jython -f script.py

Исправление решает проблему как для Jython, так и для Jacl.

Ссылка на официальный документ: http://www-01.ibm.com/support/docview.wss?uid=swg1PM80400

Другие вопросы по тегам