我们已经将一个ear文件部署到我们的WebSphere实例。默认情况下,所有* .jar和* .war模块都映射到jvm。
我们也希望将所有* .war模块也映射到Web服务器。
我创建了以下jython脚本,将其他模块映射到Web服务器:
modules = AdminApp.listModules('${p:appName}', '-server')
splitted = modules.splitlines()
for moduleLine in splitted:
print "Mapping module: " + moduleLine
appName, moduleUri, target = moduleLine.split("#")
print appName
print moduleUri
print target
if moduleUri.find('.war') >= 0:
print "It's a war: " + moduleUri
module, webXml = moduleUri.split("+")
print module
print webXml
AdminApp.edit('${p:appName}', ['-MapModulesToServers', [[module, module + ',' + webXml, target]]])
当模块的名称与uri中引用的名称相同时,以上脚本起作用。但是,在某些情况下,web.xml包含另一个名称作为“显示名称”。当我们执行-MapModulesToServers时,似乎要看模块的显示名称,而不是uri。
例如:
在WebSphere控制台中,我们将有以下行:
Module URI Module type
Demo be.fictive.company.demo.war,WEB-INF/web.xml Web Module
'AdminApp.listModules'方法返回uri名称(be.fictive.company.demo.war),而我需要模块的名称(Demo)。
我是否缺少某些内容,或者还有另一种方法来检索模块名称,所以我可以使用AdminApp.edit('$ {p:appName}',['-MapModulesToServers',[[module,module +',' + webXml,目标]]])更新目标?
管理脚本控制台不可用,所以我没有找到检索已发出命令的方法。
您可以使用通配符来匹配模块的名称。替换
AdminApp.edit('$ {p:appName}',['-MapModulesToServers',[[module,module +','+ webXml,target]]])]
with
AdminApp.edit('$ {p:appName}',['-MapModulesToServers',[['。*',module +','+ webXml,目标]]]]]]