3

请找到以下代码

runningServer1 = AdminControl.completeObjectName("type=Server,node=nodename,process=processname,*")
print "server running --->",runningServer1
if len(runningServer1) == 0:

    print "Error: Server not running...",process_name

输出是

“错误:服务器未运行...”

虽然我的服务器正在运行并且我能够启动应用程序。而且还没有打印 runningServer1 变量,为什么我无法为服务器获取对象?

关于我在下面的 IBM 论坛中发布的问题的更多信息

https://www.ibm.com/developerworks/forums/thread.jspa?threadID=374216

4

1 回答 1

1

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”的引用。

于 2011-06-17T20:30:52.167 回答