Я пытаюсь написать сценарий для проверки всех источников данных WebSphere Cell / Node / Cluster. Хотя это возможно из консоли администратора, сценарий лучше подходит для определенной аудитории.
Итак, я нашел следующую статью от IBM https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/txml_testconnection.html, которая выглядит многообещающе, поскольку описывает именно то, что мне нужно.
После базового сценария, например:
ds_ids = AdminConfig.list("DataSource").splitlines()
for ds_id in ds_ids:
AdminControl.testConnection(ds_id)
Я испытал какое-то недокументированное поведение. В отличие от статьи выше, функция testConnection
не всегда возвращает строку, но может также вызвать исключение.
Так что я просто использую блок try-catch:
try:
AdminControl.testConnection(ds_id)
except: # it actually is a com.ibm.ws.scripting.ScriptingException
exc_type, exc_value, exc_traceback = sys.exc_info()
теперь, когда я печатаю exc_value
, вот что получается:
com.ibm.ws.scripting.ScriptingException: com.ibm.websphere.management.exception.AdminException: javax.management.MBeanException: Exception thrown in RequiredModelMBean while trying to invoke operation testConnection
Теперь это сообщение об ошибке всегда одинаково независимо от того, что не так. Я проверил ошибки аутентификации, отсутствующие переменные WebSphere и отсутствующие классы драйверов.
Пока консоль администратора печатает разумные сообщения, скрипт продолжает печатать одно и то же бессмысленное сообщение.
Очень странная вещь: до тех пор, пока я не уловлю исключение, а скрипт просто выйдет по ошибке, появится описательное сообщение об ошибке.
Доступ к Java-исключениям приводит к тому, что exc_value.getCause()
дает None
.
Я также взглянул на MBean-компоненты DataSource, но поскольку они существуют, только если серверы запущены, я быстро отказался от них.
Я надеюсь, что кто-то знает, как получить доступ к сообщениям об ошибках, которые я вижу, когда не перехватываю исключение.
заранее спасибо