使用 wsadmin 脚本编制工具更新已安装的应用程序

使用 wsadmin 工具和脚本来更新应用程序服务器上安装的应用程序。

关于此任务

update 命令和 updateinteractive 命令都支持一组选项。还可以使用 options 命令获取企业归档 (EAR) 文件支持的选项列表,例如:

使用 Jacl:
$AdminApp options
使用 Jython:
print AdminApp.options()

您可以在批处理方式下使用选项来设置或更新配置值。为了确定要设置或更新哪个配置对象,将使用只读字段的值来查找相应的配置对象。只读字段的所有值都必须与现有配置对象匹配,否则命令将失败。

注意: 如果应用程序正在运行,那么更改应用程序设置将导致应用程序重新启动。在独立服务器上,应用程序在您保存更改后将重新启动。在多服务器产品上,应用程序将在您保存更改后重新启动,并且在安装应用程序的节点上,文件将同步。要控制对多服务器产品进行同步的时间,请取消选择控制台首选项页面上的将更改与节点同步

执行以下步骤更新应用程序:

过程

  1. 启动 wsadmin 脚本编制工具。
  2. 使用下列其中一个选项更新已安装的应用程序。
    • 以下命令更新已部署的应用程序中的单个文件:
      • 使用 Jacl:

        [AIX Solaris HP-UX Linux Windows]
        $AdminApp update app1 file {-operation update -contents c:/apps/app1/my.xml 
         -contenturi app1.jar/my.xml}
        [z/OS]
        $AdminApp update app1 file {-operation update -contents /apps/app1/my.xml 
         -contenturi app1.jar/my.xml}
        [IBM i]
        $AdminApp update app1 file {-operation update -contents 
         /home/myProfile/apps/app1/my.xml -contenturi app1.jar/my.xml}
      • 使用 Jython 字符串:

        [AIX Solaris HP-UX Linux Windows]
        AdminApp.update('app1', 'file', '[-operation update -contents c:/apps/app1/my.xml  
         -contenturi app1.jar/my.xml]')
        [z/OS]
        AdminApp.update('app1', 'file', '[-operation update -contents /apps/app1/my.xml  
         -contenturi app1.jar/my.xml]')
        [IBM i]
        AdminApp.update('app1', 'file', '[-operation update -contents /home/myProfile/ 
         apps/app1/my.xml -contenturi app1.jar/my.xml]')
      • 使用 Jython 列表:

        [AIX Solaris HP-UX Linux Windows]
        AdminApp.update('app1', 'file', ['-operation', 'update', '-contents', 
         'c:/apps/app1/my.xml', '-contenturi', 'app1.jar/my.xml'])
        [z/OS]
        AdminApp.update('app1', 'file', ['-operation', 'update', '-contents', 
         '/apps/app1/my.xml',  '-contenturi', 'app1.jar/my.xml'])
        [IBM i]
        AdminApp.update('app1', 'file', ['-operation', 'update', '-contents', 
         '/home/myProfile/apps/app1/my.xml', '-contenturi', 'app1.jar/my.xml'])
      表 1. update file 命令元素. 运行 update 命令以更改已安装的应用程序文件。
      元素 定义
      $ 是使用其值替换变量名的 Jacl 运算符
      AdminApp 是支持应用程序对象管理的对象
      更新 是 AdminApp 命令
      app1 是要更新的应用程序的名称
      file 是内容类型值
      operation update 命令的选项
      更新 是 operation 选项的值
      contents update 命令的选项
      /apps/app1/my.xml 是 contents 选项的值
      contenturi update 命令的选项
      app1.jar/my.xml 是 contenturi 选项的值
    • 以下命令将模块添加到已部署的应用程序(如果该模块不存在)。否则,会更新现有模块。
      • 使用 Jacl:

        [AIX Solaris HP-UX Linux Windows]
        $AdminApp update app1 modulefile {-operation addupdate -contents 
         c:/apps/app1/Increment.jar -contenturi Increment.jar -nodeployejb
         -BindJndiForEJBNonMessageBinding {{"Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc}}}
        [z/OS]
        $AdminApp update app1 modulefile {-operation addupdate -contents 
         /apps/app1/Increment.jar -contenturi Increment.jar -nodeployejb
         -BindJndiForEJBNonMessageBinding {{"Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc}}}
        [IBM i]
        $AdminApp update app1 modulefile {-operation addupdate -contents  
         /home/myProfile/apps/app1/Increment.jar -contenturi Increment.jar -nodeployejb
          -BindJndiForEJBNonMessageBinding {{"Increment EJB module"  Increment Increment.jar,META-INF/ejb-jar.xml Inc}}}
      • 使用 Jython 字符串:

        [AIX Solaris HP-UX Linux Windows]
        AdminApp.update('app1', 'modulefile', '[-operation addupdate -contents 
         c:/apps/app1/Increment.jar -contenturi Increment.jar -nodeployejb
         -BindJndiForEJBNonMessageBinding [["Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc]]]')
        [z/OS]
        AdminApp.update('app1', 'modulefile', '[-operation addupdate -contents 
         /apps/app1/Increment.jar -contenturi Increment.jar -nodeployejb
         -BindJndiForEJBNonMessageBinding [["Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc]]]')
        [IBM i]
        AdminApp.update('app1', 'modulefile', '[-operation addupdate -contents 
         /home/myProfile/apps/app1/Increment.jar -contenturi Increment.jar -nodeployejb
         -BindJndiForEJBNonMessageBinding [["Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc]]]')
      • 使用 Jython 列表:

        [AIX Solaris HP-UX Linux Windows]
        bindJndiForEJBValue = [["Increment EJB module", "Increment", "Increment.jar,META-INF/ejb-jar.xml", 
        "Inc"]]  AdminApp.update('app1', 'modulefile', ['-operation', 'addupdate', '-contents', 
         'c:/apps/app1/Increment.jar', '-contenturi','Increment.jar' '-nodeployejb',
         `-BindJndiForEJBNonMessageBinding', bindJndiForEJBValue])
        [z/OS]
        bindJndiForEJBValue = [["Increment EJB module", "Increment", "Increment.jar,META-INF/ejb-jar.xml", 
        "Inc"]]  AdminApp.update('app1', 'modulefile', ['-operation', 'addupdate', '-contents', 
         '/apps/app1/Increment.jar', '-contenturi','Increment.jar' '-nodeployejb', `-BindJndiForEJBNonMessageBinding', 
         bindJndiForEJBValue])
        [IBM i]
        bindJndiForEJBValue = [["Increment EJB module", "Increment", "Increment.jar,META-INF/ejb-jar.xml", 
        "Inc"]]  AdminApp.update('app1', 'modulefile', ['-operation', 'addupdate', '-contents', 
         '/home/myProfile/apps/app1/Increment.jar', '-contenturi','Increment.jar'
         '-nodeployejb', `-BindJndiForEJBNonMessageBinding', bindJndiForEJBValue])
      表 2. update modulefile 命令元素. 运行 update 命令以更改已安装的模块文件。
      元素 定义
      $ 是使用其值替换变量名的 Jacl 运算符
      AdminApp 是支持应用程序对象管理的对象
      更新 是 AdminApp 命令
      app1 是要更新的应用程序的名称
      modulefile 是内容类型值
      operation update 命令的选项
      addupdate 是 operation 选项的值
      contents update 命令的选项
      /apps/app1/Increment.jar 是 contents 选项的值
      contenturi update 命令的选项
      Increment.jar 是 contenturi 选项的值
      nodeployejb update 命令的选项
      BindJndiForEJBNonMessageBinding update 命令的选项
      “Increment EJB module” Increment Increment.jar,META-INF/ejb-jar.xml Inc 是 BindJndiForEJBNonMessageBinding 选项的值。此选项的值是在应用程序配置中定义的。要确定此选项的值,请使用下列 Jython 命令或 Jacl 命令:
      使用 Jython:
      AdminApp.view('myAppName')
      使用 Jacl:
      $AdminApp view myAppName
      bindJndiForEJBValue 是包含 BindJndiForEJBNonMessageBinding 选项的值的 Jython 变量
    • 以下命令使用部分应用程序来更新已部署的应用程序:
      • 使用 Jacl:

        [AIX Solaris HP-UX Linux Windows]
        $AdminApp update app1 partialapp {-contents c:/apps/app1/app1Partial.zip}
        [z/OS]
        $AdminApp update app1 partialapp {-contents /apps/app1/app1Partial.zip}
        [IBM i]
        $AdminApp update app1 partialapp {-contents /home/myProfile/apps/app1/app1Partial.zip}
      • 使用 Jython 字符串:

        [AIX Solaris HP-UX Linux Windows]
        AdminApp.update('app1', 'partialapp', '[-contents 
         c:/apps/app1/app1Partial.zip]')
        [z/OS]
        AdminApp.update('app1', 'partialapp', '[-contents /apps/app1/app1Partial.zip]')
        [IBM i]
        AdminApp.update('app1', 'partialapp', '[-contents
         /home/myProfile/apps/app1/app1Partial.zip]')
      • 使用 Jython 列表:

        [AIX Solaris HP-UX Linux Windows]
        AdminApp.update('app1', 'partialapp', ['-contents', 
         'c:/apps/app1/app1Partial.zip'])
        [z/OS]
        AdminApp.update('app1', 'partialapp', ['-contents', 
         '/apps/app1/app1Partial.zip'])
        [IBM i]
        AdminApp.update('app1', 'partialapp', ['-contents', 
         '/home/myProfile/apps/app1/app1Partial.zip'])
      表 3. update partialapp 命令元素. 运行 update 命令以更改已安装应用程序的部件。
      元素 定义
      $ 是使用其值替换变量名的 Jacl 运算符
      AdminApp 是支持应用程序对象管理的对象
      更新 是 AdminApp 命令
      app1 是要更新的应用程序的名称
      partialapp 是内容类型值
      contents update 命令的选项
      /apps/app1/app1Partial.zip 是 contents 选项的值
    • 更新整个已部署的应用程序。

      要使用现有侦听器端口而不使用或创建新的激活规范,请确定 EJB JAR 版本是否早于 2.1。当指定 -usedefaultbindings 选项以部署应用程序时,系统将自动创建并使用激活规范。如果激活规范存在,那么系统将忽略侦听器端口并改为使用该激活规范。要使用已定义的侦听器端口(而不使用新的激活规范)并通过版本高于或等于 2.1 的 EJB JAR 来部署应用程序,请将 com.ibm.websphere.management.application.dfltbndng.mdb.preferexisting 系统属性(位于相关概要文件的属性目录中的 wsadmin.properties 文件中)设置为 true

      • 使用 Jacl:

        [AIX Solaris HP-UX Linux Windows]
        $AdminApp update app1 app {-operation update -contents c:/apps/app1/newApp1.jar 
         -usedefaultbindings -nodeployejb -BindJndiForEJBNonMessageBinding {{"Increment EJB module" Increment 
         Increment.jar,META-INF/ejb-jar.xml Inc}}}
        [z/OS]
        $AdminApp update app1 app {-operation update -contents /apps/app1/newApp1.jar 
         -usedefaultbindings -nodeployejb -BindJndiForEJBNonMessageBinding {{"Increment EJB module" Increment 
         Increment.jar,META-INF/ejb-jar.xml Inc}}}
        [IBM i]
        $AdminApp update app1 app {-operation update -contents 
         /home/myProfile/apps/app1/newApp1.jar -usedefaultbindings -nodeployejb
         -BindJndiForEJBNonMessageBinding {{"Increment EJB module" 
         Increment Increment.jar,META-INF/ejb-jar.xml Inc}}}
      • 使用 Jython 字符串:

        [AIX Solaris HP-UX Linux Windows]
        AdminApp.update('app1', 'app', '[-operation update -contents 
         c:/apps/app1/newApp1.ear  -usedefaultbindings -nodeployejb
         -BindJndiForEJBNonMessageBinding [["Increment EJB module" Increment 
         Increment.jar,META-INF/ejb-jar.xml Inc]]]')
        [z/OS]
        AdminApp.update('app1', 'app', '[-operation update -contents 
         /apps/app1/newApp1.ear -usedefaultbindings -nodeployejb
         -BindJndiForEJBNonMessageBinding [["Increment EJB module" Increment 
         Increment.jar,META-INF/ejb-jar.xml Inc]]]')
        [IBM i]
        AdminApp.update('app1', 'app', '[-operation update -contents 
         /home/myProfile/apps/app1/ newApp1.ear -usedefaultbindings -nodeployejb -BindJndiForEJBNonMessageBinding [["Increment EJB module" 
         Increment Increment.jar,META-INF/ejb-jar.xml Inc]]]')
      • 使用 Jython 列表:

        [AIX Solaris HP-UX Linux Windows]
        bindJndiForEJBValue = [["Increment EJB module", "Increment", "Increment.jar,META-INF/ejb-jar.xml", 
        "Inc"]]  AdminApp.update('app1', 'app', ['-operation', 'update', '-contents', 
         'c:/apps/app1/NewApp1.ear', '-usedefaultbindings', '-nodeployejb', `-BindJndiForEJBNonMessageBinding', bindJndiForEJBValue]) 
         
        [z/OS]
        bindJndiForEJBValue = [["Increment EJB module", "Increment", "Increment.jar,META-INF/ejb-jar.xml", 
        "Inc"]]  AdminApp.update('app1', 'app', ['-operation', 'update', '-contents', 
         '/apps/app1/NewApp1.ear', '-usedefaultbindings', '-nodeployejb', `-BindJndiForEJBNonMessageBinding', bindJndiForEJBValue]) 
        [IBM i]
        bindJndiForEJBValue = [["Increment EJB module", "Increment", "Increment.jar,META-INF/ejb-jar.xml", 
        "Inc"]]  AdminApp.update('app1', 'app', ['-operation', 'update', '-contents', 
         '/apps/app1/NewApp1.ear', '-usedefaultbindings', '-nodeployejb', `-BindJndiForEJBNonMessageBinding', bindJndiForEJBValue]) 
      表 4. update app 命令元素. 运行 update 命令以更改已安装的应用程序。
      元素 定义
      $ 是使用其值替换变量名的 Jacl 运算符
      AdminApp 是支持应用程序对象管理的对象
      更新 是 AdminApp 命令
      app1 是要更新的应用程序的名称
      app 是内容类型值
      operation update 命令的选项
      更新 是 operation 选项的值
      contents update 命令的选项
      /apps/app1/newApp1.ear 是 contents 选项的值
      usedefaultbindings update 命令的选项
      nodeployejb update 命令的选项
      BindJndiForEJBNonMessageBinding update 命令的选项
      “Increment EJB module” Increment Increment.jar,META-INF/ejb-jar.xml Inc 是 BindJndiForEJBNonMessageBinding 选项的值。此选项的值是在应用程序配置中定义的。要确定此选项的值,请使用下列 Jython 命令或 Jacl 命令:
      使用 Jython:
      AdminApp.view('myAppName')
      使用 Jacl:
      $AdminApp view myAppName
      bindJndiForEJBValue 是包含 BindJndiForEJBNonMessageBinding 选项的值的 Jython 变量
  3. 保存配置更改。
    请使用以下命令示例来保存配置更改:
    AdminConfig.save()
  4. (仅限于 Network Deployment 环境)使节点同步。
    使用 AdminNodeManagement 脚本库中的 syncActiveNode 或 syncNode 脚本将配置更改传播至一个或多个节点。
    • 使用 syncActiveNodes 脚本将更改传播至单元中的每个节点,如以下示例所示:
      AdminNodeManagement.syncActiveNodes()
    • 使用 syncNode 脚本将更改传播至特定节点,如以下示例所示:
      AdminNodeManagement.syncNode("myNode")

下一步做什么

如果系统成功更新应用程序,那么此任务中的步骤将返回成功消息。但是,这些步骤可能会在系统解压缩二进制文件之前成功完成。例如,在网络部署环境中,在完成节点同步后解压缩二进制文件。在系统解压缩所有二进制文件后,您才能启动应用程序。在启动应用程序前使用 AdminApp 对象的 isAppReadygetDeployStatus 命令来验证系统是否已解压缩二进制文件。

如果系统已准备就绪,可以启动应用程序,那么 isAppReady 命令将返回值 true,如果系统未准备就绪,无法启动应用程序,那么该命令将返回值 false。如果系统未准备好,无法启动应用程序,那么系统可能正在展开应用程序二进制文件。用于通常在更新应用程序后将其启动的脚本将循环对 isAppReady 的调用,直到其返回值 true,再尝试启动应用程序:

使用 Jython:
import time
result = AdminApp.isAppReady('application1')
while (result == "false"):
   ### Wait 5 seconds before checking again
   time.sleep(5)
   result = AdminApp.isAppReady('application1')
print("Starting application...")
使用 Jacl:
set result [$AdminApp isAppReady application1]
while {$result == "false"} {
   ### Wait 5 seconds before checking again
   after 5000
   set result [$AdminApp isAppReady application1]
}
puts "Starting application..."
使用 getDeployStatus 命令来显示有关二进制文件展开状态的更多信息,如下例所示:
AdminApp.getDeployStatus('app1')

运行 getDeployStatus 命令(其中 app1DefaultApplication)将产生类似于以下内容的关于 DefaultApplication 的状态信息:

ADMA5071I: Distribution status check started for application DefaultApplication.
WebSphere:cell=myCell01,node=myNode01,distribution=unknown,expansion=unknown
ADMA5011I: The cleanup of the temp directory for application DefaultApplication is complete.
ADMA5072I: Distribution status check completed for application DefaultApplication.
WebSphere:cell=myCell01,node=myNode01,distribution=unknown,expansion=unknown

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_updatingapp
文件名:txml_updatingapp.html