WebSphere wsadmin testConnection 错误消息
WebSphere wsadmin testConnection error message
我正在尝试编写一个脚本来测试 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
函数并不总是 return 字符串,但也可能抛出异常。
所以我简单地使用了一个 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
。
我也看过 DataSource MBean,但由于它们仅在服务器启动时才存在,所以我很快就放弃了。
我希望有人知道如何访问我在未捕获异常时看到的错误消息。
提前致谢
在所有的研究和测试之后,AdminControl 似乎只不过是一些常用 MBean 的便利外观。
所以我尝试发布测试连接服务(就像这里的 java 示例 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
这按照我希望的方式工作。不利的一面是,如果需要测试在各种范围 (Cell/Node/Cluster/Server/Application) 上定义的数据源,代码会变得更加复杂。
我不需要这个所以省略了,但我仍然希望这个例子对其他人也有用。
我正在尝试编写一个脚本来测试 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
函数并不总是 return 字符串,但也可能抛出异常。
所以我简单地使用了一个 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
。
我也看过 DataSource MBean,但由于它们仅在服务器启动时才存在,所以我很快就放弃了。
我希望有人知道如何访问我在未捕获异常时看到的错误消息。
提前致谢
在所有的研究和测试之后,AdminControl 似乎只不过是一些常用 MBean 的便利外观。
所以我尝试发布测试连接服务(就像这里的 java 示例 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
这按照我希望的方式工作。不利的一面是,如果需要测试在各种范围 (Cell/Node/Cluster/Server/Application) 上定义的数据源,代码会变得更加复杂。
我不需要这个所以省略了,但我仍然希望这个例子对其他人也有用。