我需要找到获取特定配置对象的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获取第二行?
我刚读了一篇关于对象名称和包含路径的好文章,这有助于我理解我的问题,但没有提供解决方案。
我找到了获取信息的方法,但我确信有更好的方法......如果有人可以提供帮助,那就太棒了。
所以我想要我的服务器的会话管理器,但我有另一个为应用程序定义的会话管理器。
所以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
但这根本不优雅......任何人都有更好的方法吗?
答案 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的名称来查找您正在寻找的特定元素。