Вводящее в заблуждение сообщение об ошибке после необработанного исключения в скрипте 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