WebSphere - 通过 Jython 将模块映射到目标

WebSphere - Map Module to Target through Jython

我们已经将 ear 文件部署到我们的 WebSphere 实例。默认情况下,所有 *.jar & *.war 模块都映射到 jvm.

我们想将所有 *.war 模块也映射到网络服务器。

我创建了以下 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 包含另一个名称 'display name'。当我们执行 -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, target]]]) 来更新目标?

管理脚本控制台不可用,因此我看不到检索已发出的命令的方法。

您可以使用通配符来匹配模块的名称。替换

AdminApp.edit('${p:appName}', ['-MapModulesToServers', [[module, module + ',' + webXml, target]]])

AdminApp.edit('${p:appName}', ['-MapModulesToServers', [['.*', module + ',' + webXml, target]]])