bkail 是在正确的轨道上。您需要确保您的搜索字符串是正确的。利用:
print AdminControl.queryNames('type=Server,*')
在交互式 wsadmin.sh 会话中列出单元中所有正在运行的服务器。然后使用:
'type=Server,name=JVM_NAME,*'
为您的搜索字符串。其中 JVM_NAME 由您刚刚运行的 queryNames 的输出确定。
另外,我会避免使用 AdminControl.completeObjectName。我不确定其中的含义,但文档中的这个片段让我认为它可能不会像你认为的那样做:
使用 completeObjectName 命令创建基于片段的完整 ObjectName 值的字符串表示形式。此命令不与服务器通信以查找匹配的 ObjectName 值。如果系统找到多个与片段匹配的 MBean,则该命令返回第一个。
以下是 IBM 在 WAS_ROOT/scriptLibraries/servers/V70/AdminServerManagement.py 中的做法(第 814-815 行):
runningServer = AdminControl.queryNames("type=Server,node="+nodeName+",name="+serverName+",*")
if (len(runningServer) > 0 and AdminControl.getAttribute(runningServer, "state") == "STARTED"):
...
以我的经验, AdminControl.queryNames 只会返回正在运行的服务器。因此,根据您的需要,只需检查 len(runningServer) 的返回值就足够了。此外,在真正的 IBM 方式中,文档中没有任何内容列出 AdminControl.getAttribute(runningServer, "state") 的可能返回值。我只能找到对“STARTED”的引用。