Сообщение об ошибке WebSphere wsadmin testConnection - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь написать сценарий для проверки всех источников данных 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, но поскольку они существуют, только если серверы запущены, я быстро отказался от них.

Я надеюсь, что кто-то знает, как получить доступ к сообщениям об ошибках, которые я вижу, когда не перехватываю исключение.

заранее спасибо

1 Ответ

0 голосов
/ 23 мая 2019

После всех исследований и тестирования AdminControl, кажется, является не чем иным, как фасадом удобства для некоторых широко используемых MBeans.

Поэтому я попытался запустить Службу тестового соединения (как в примере с Java здесь * 1003)*https://www.ibm.com/support/knowledgecenter/en/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/cdat_testcon.html) напрямую:

    ds_id = AdminConfig.list("DataSource").splitlines()[0]
    # other queries may be 'process=server1' or 'process=dmgr'
    ds_cfg_helpers = __wat.AdminControl.queryNames("WebSphere:process=nodeagent,type=DataSourceCfgHelper,*").splitlines()

    try:
        # invoke MBean method directly
        warning_cnt = __wat.AdminControl.invoke(ds_cfg_helpers[0], "testConnection", ds_id)
        if warning_cnt == "0":
            print = "success"
        else:
            print "%s warning(s)" % warning_cnt

    except ScriptingException as exc:
        # get to the root of all evil ignoring exception wrappers
        exc_cause = exc
        while exc_cause.getCause():
            exc_cause = exc_cause.getCause()
        print exc_cause

Это работает так, как я надеялся.Недостатком является то, что код становится намного сложнее, если нужно протестировать источники данных, которые определены во всех видах областей (ячейка / узел / кластер / сервер / приложение).

Мне это не нужно, поэтому яоставьте это, но я все еще надеюсь, что этот пример будет полезен и другим.

...