Websphere jython获取正确的配置ID

时间:2014-10-15 16:33:14

标签: websphere jython

我需要找到获取特定配置对象的object-id的方法,但我似乎无法获得我想要的结果。

请考虑以下代码:

wsadmin>print AdminConfig.list('SessionManager')
(cells/labwas11Node01Cell/applications/isclite.ear/deployments/isclite|deployment.xml#SessionManager_1162483845425)
(cells/labwas11Node01Cell/nodes/labwas11/servers/server1|server.xml#SessionManager_1183122130078)

有没有办法只使用狡猾的AdminConfig.getid获取第二行?

我刚读了一篇关于对象名称和包含路径的好文章,这有助于我理解我的问题,但没有提供解决方案。

http://blog.xebia.com/2009/11/23/websphere-scripting-with-wsadmin-containment-paths-configuration-ids-and-object-names/

我找到了获取信息的方法,但我确信有更好的方法......如果有人可以提供帮助,那就太棒了。

所以我想要我的服务器的会话管理器,但我有另一个为应用程序定义的会话管理器。

所以AdminConfig.list不够好

我能做的是我想要的会话管理器有一个反映它的上下文的属性。 (为清楚起见,我删除了一些行)

print AdminConfig.show('SessionManager(cells/labwas11Node01Cell/nodes/labwas11/servers/server1|server.xml#SessionManager_1183122130078)')
[accessSessionOnTimeout true]
[allowSerializedSessionAccess false]
[context (cells/labwas11Node01Cell/nodes/labwas11/servers/server1|server.xml#WebContainer_1183122130078)]
[enable true]
[enableCookies true]
[enableProtocolSwitchRewriting false]
[enableSSLTracking false]
[enableSecurityIntegration true]
[enableUrlRewriting false]
[maxWaitTime 5]
[properties []]
[sessionPersistenceMode NONE]

上下文对象是此会话管理器应用的WebContainer。

所以我应该能够比较这两个并找到我想要的会话管理器。

SesMgrList = AdminConfig.list('SessionManager').splitlines()
for SesMgr in SesMgrList:
    if AdminConfig.showAttribute( SesMgr, 'context') == AdminConfig.list('WebContainer'):
        Modify my session manager custom properties

但这根本不优雅......任何人都有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

仅使用包含路径很难获得某些WebSphere对象。在您的特定情况下,最好从Server对象开始,找到WebContainer,然后找到它的SessionManager。到达目的地后,您就可以修改会话管理设置:

server = AdminConfig.getid('/Cell:labwas11Node01Cell/Node:labwas11/Server:server1/')
webContainer = AdminConfig.list('WebContainer', server)
sessionManager = AdminConfig.list('SessionManager', webContainer)
tuningParams = AdminConfig.showAttribute(sessionManager, 'tuningParams')
print AdminConfig.showAttribute(tuningParams, 'maxInMemorySessionCount')
AdminConfig.modify(tuningParams, [ ['maxInMemorySessionCount', '1234'] ])
print AdminConfig.showAttribute(tuningParams, 'maxInMemorySessionCount')
# AdminConfig.save() # when uncommented - changes will be saved

您还可以查看https://github.com/WDR/WDR/上的WDR库(以及http://wdr.github.io/WDR/处的文档),这样可以使脚本更具可读性和可维护性:

server = getid1('/Cell:labwas11Node01Cell/Node:labwas11/Server:server1/')
webContainer = server.listConfigObjects('WebContainer')[0]
sessionManager = webContainer.listConfigObjects('SessionManager')[0]
tuningParams = sessionManager.tuningParams
print tuningParams.maxInMemorySessionCount
tuningParams.maxInMemorySessionCount = 1234
# since in WDR is type-aware, you can even do that:
tuningParams.maxInMemorySessionCount += 10
print tuningParams.maxInMemorySessionCount
# save() ; sync() # when uncommented - changes will be saved and synchronized

答案 1 :(得分:1)

由于我目前正在实施一组用于自动化WebSphere部署的脚本,因此我倾向于采用系统化的方式来尽可能地导航配置。 在这种情况下,我希望通过包含路径检索Web容器和会话管理器。 我对Marcin的方法赞成这一点的原因是它只是一次调用来检索我想要的元素。

这是我发现的作品:

<强> AdminConfig.getid( '/细胞:/节点:/服务器:/ ApplicationServer的:/ Web容器:/ SessionManager:/')

您当然可以添加Node和Server的名称来查找您正在寻找的特定元素。