Actualización de aplicaciones instaladas mediante la herramienta de scripts wsadmin

Utilice la herramienta y los scripts wsadmin para actualizar las aplicaciones instaladas en un servidor de aplicaciones.

Acerca de esta tarea

El mandato update y el mandato updateinteractive dan soporte a un conjunto de opciones. También puede obtener una lista de las opciones soportadas para un archivo EAR (Enterprise Archive) utilizando el mandato options, por ejemplo:

Utilizando Jacl:
$AdminApp options
Utilizando Jython:
print AdminApp.options()

Puede establecer o actualizar un valor de configuración mediante opciones en modalidad por lotes. Para identificar qué objeto de configuración se va a establecer o actualizar, los valores de campos de sólo lectura se utilizan para buscar el objeto de configuración correspondiente. Todos los valores de campos de sólo lectura tienen que coincidir con un objeto de configuración existente; de lo contrario el mandato da error.

Atención: Si se está ejecutando una aplicación y se cambia un valor de la aplicación, ésta se reiniciará. En servidores autónomos, la aplicación se reinicia después de guardar el cambio. En productos de varios servidores, la aplicación se reinicia después de guardar el cambio y de que se hayan sincronizado los archivos en el nodo en el que está instalada la aplicación. Para controlar cuándo se produce la sincronización en productos con varios servidores, deseleccione Sincronizar cambios con nodos en la página de preferencias de la consola.

Siga estos pasos para actualizar una aplicación:

Procedimiento

  1. Inicie la herramienta de scripts wsadmin.
  2. Actualice la aplicación instalada utilizando una de las opciones siguientes.
    • El mandato siguiente actualiza un solo archivo en una aplicación desplegada:
      • Utilizando 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/miPerfil/apps/app1/my.xml -contenturi app1.jar/my.xml}
      • Utilizando la serie 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]')
      • Utilizando la lista 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/miPerfil/apps/app1/my.xml', '-contenturi', 'app1.jar/my.xml'])
      Tabla 1. Elementos del mandato update file. Ejecute el mandato update para cambiar un archivo de una aplicación instalada.
      Elemento Definición
      $ es un operador Jacl para sustituir un nombre de variable por su valor
      AdminApp es un objeto que da soporte a la gestión de objetos de aplicación
      actualizar es un mandato AdminApp
      app1 es el nombre de la aplicación que se va a actualizar
      file es el valor del tipo de contenido
      operación es una opción del mandato update
      actualizar es el valor de la opción operation
      contents es una opción del mandato update
      /apps/app1/my.xml es el valor de la opción contents
      contenturi es una opción del mandato update
      app1.jar/my.xml es el valor de la opción contenturi
    • El mandato siguiente añade un módulo a la aplicación desplegada, si no existe el módulo. De lo contrario, se actualiza el módulo existente.
      • Utilizando 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}}}
      • Utilizando la serie 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]]]')
      • Utilizando la lista 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])
      Tabla 2. Elementos del mandato update modulefile. Ejecute el mandato update para cambiar un archivo de un módulo instalado.
      Elemento Definición
      $ es un operador Jacl para sustituir un nombre de variable por su valor
      AdminApp es un objeto que da soporte a la gestión de objetos de aplicación
      actualizar es un mandato AdminApp
      app1 es el nombre de la aplicación que se va a actualizar
      modulefile es el valor del tipo de contenido
      operación es una opción del mandato update
      addupdate es el valor de la opción operation
      contents es una opción del mandato update
      /apps/app1/Increment.jar es el valor de la opción contents
      contenturi es una opción del mandato update
      Increment.jar es el valor de la opción contenturi
      nodeployejb es una opción del mandato update
      BindJndiForEJBNonMessageBinding es una opción del mandato update
      "Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc es el valor de la opción BindJndiForEJBNonMessageBinding. El valor de esta opción se define en la configuración de la aplicación. Para determinar el valor de esta opción, utilice el siguiente mandato Jython o Jacl:
      Utilizando Jython:
      AdminApp.view('myAppName')
      Utilizando Jacl:
      $AdminApp view myAppName
      bindJndiForEJBValue es una variable Jython que contiene el valor de la opción BindJndiForEJBNonMessageBinding
    • El mandato siguiente utiliza una aplicación parcial para actualizar una aplicación desplegada:
      • Utilizando 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}
      • Utilizando la serie 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/miPerfil/apps/app1/app1Partial.zip]')
      • Utilizando la lista 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/miPerfil/apps/app1/app1Partial.zip'])
      Tabla 3. Elementos del mandato update partialapp. Ejecute el mandato update para cambiar parte de una aplicación instalada.
      Elemento Definición
      $ es un operador Jacl para sustituir un nombre de variable por su valor
      AdminApp es un objeto que da soporte a la gestión de objetos de aplicación
      actualizar es un mandato AdminApp
      app1 es el nombre de la aplicación que se va a actualizar
      partialapp es el valor del tipo de contenido
      contents es una opción del mandato update
      /apps/app1/app1Partial.zip es el valor de la opción contents
    • Actualice la aplicación desplegada completa.

      Para utilizar el puerto de escucha existente en lugar de utilizar o crear una nueva especificación de activación, determine si la versión JAR de EJB es anterior a la 2.1. El sistema crea y utiliza automáticamente una especificación de activación si especifica la opción -usedefaultbindings para desplegar una aplicación. Si existe una especificación de activación, el sistema ignora el puerto de escucha y, en su lugar, utiliza la especificación de activación. Para desplegar una aplicación con una versión JAR de EJB mayor o igual a 2.1 con los puertos de escucha definidos en lugar de una nueva especificación de activación, establezca la propiedad del sistema com.ibm.websphere.management.application.dfltbndng.mdb.preferexisting en true en el archivo wsadmin.properties del directorio de propiedades del perfil de interés.

      • Utilizando 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}}}
      • Utilizando la serie 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]]]')
      • Utilizando la lista 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]) 
      Tabla 4. Elementos del mandato update app. Ejecute el mandato update para cambiar una aplicación instalada.
      Elemento Definición
      $ es un operador Jacl para sustituir un nombre de variable por su valor
      AdminApp es un objeto que da soporte a la gestión de objetos de aplicación
      actualizar es un mandato AdminApp
      app1 es el nombre de la aplicación que se va a actualizar
      app es el valor del tipo de contenido
      operación es una opción del mandato update
      actualizar es el valor de la opción operation
      contents es una opción del mandato update
      /apps/app1/newApp1.ear es el valor de la opción contents
      usedefaultbindings es una opción del mandato update
      nodeployejb es una opción del mandato update
      BindJndiForEJBNonMessageBinding es una opción del mandato update
      "Increment EJB module" Increment Increment.jar,META-INF/ejb-jar.xml Inc es el valor de la opción BindJndiForEJBNonMessageBinding. El valor de esta opción se define en la configuración de la aplicación. Para determinar el valor de esta opción, utilice el siguiente mandato Jython o Jacl:
      Utilizando Jython:
      AdminApp.view('myAppName')
      Utilizando Jacl:
      $AdminApp view myAppName
      bindJndiForEJBValue es una variable Jython que contiene el valor de la opción BindJndiForEJBNonMessageBinding
  3. Guarde los cambios de configuración.
    Utilice el siguiente ejemplo de mandatos para guardar los cambios de configuración:
    AdminConfig.save()
  4. En un entorno sólo de despliegue de red, sincronice el nodo.
    Utilice los scripts syncActiveNode o syncNode en la biblioteca de scripts AdminNodeManagement para propagar los cambios en la configuración en un nodo o nodos.
    • Utilice el script syncActiveNodes para propagar los cambios en todos los nodos de la célula, como se demuestra en el ejemplo siguiente:
      AdminNodeManagement.syncActiveNodes()
    • Utilice el script syncNode para propagar los cambios en un nodo específico, como se demuestra en el ejemplo siguiente:
      AdminNodeManagement.syncNode("miNodo")

Qué hacer a continuación

Los pasos de esta tarea devuelven un mensaje de éxito si el sistema actualiza satisfactoriamente la aplicación. Sin embargo, los pasos pueden realizarse satisfactoriamente antes de que el sistema extraiga cada archivo binario. Por ejemplo, en un entorno de Network Deployment, los archivos binarios se extraen cuando finaliza cada sincronización de nodos. No puede iniciar la aplicación hasta que el sistema extraiga todos los archivos binarios. Utilice los mandatos isAppReady y getDeployStatus del objeto AdminApp para verificar que el sistema ha extraído los archivos binarios antes de iniciar la aplicación.

El mandato isAppReady devuelve un valor de true si el sistema está preparado para iniciar la aplicación o un valor de false si no lo está. Si el sistema no está preparado para iniciar la aplicación, el sistema puede estar expandiendo archivos de aplicación. Un script que actualiza e inicia una aplicación normalmente creará un bucle en una llamada a isAppReady hasta que se devuelva un valor true antes de intentar iniciar la aplicación, como se muestra en el ejemplo siguiente:

Utilizando 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...")
Utilizando 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..."
Utilice el mandato getDeployStatus para mostrar información adicional sobre el estado de expansión del archivo binario, como se muestra en el ejemplo siguiente:
AdminApp.getDeployStatus('app1')

Al ejecutar el mandato getDeployStatus, donde app1 es DefaultApplication da como resultado información de estado sobre DefaultApplication parecida a la siguiente:

ADMA5071I: Se ha iniciado la comprobación de estado de la distribución para la aplicación DefaultApplication.
WebSphere:cell=myCell01,node=myNode01,distribution=unknown,expansion=unknown
ADMA5011I: La limpieza del directorio temporal de la aplicación DefaultApplication ha finalizado.
ADMA5072I: Se ha completado la comprobación de estado de la distribución de la aplicación DefaultApplication.
WebSphere:cell=myCell01,node=myNode01,distribution=unknown,expansion=unknown

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=txml_updatingapp
File name: txml_updatingapp.html