Actualización de una aplicación a través de programación
Puede actualizar una aplicación existente a través de la consola de administración, la herramienta wsadmin o mediante programación. Utilice este ejemplo para actualizar completamente una aplicación a través de programación.
Antes de empezar
En esta tarea se da por supuesto que se tienen conocimientos básicos de la programación de MBean. Si desea información sobre la programación de MBean, consulte la documentación de la interfaz de programación de aplicaciones (API) Java™ de MBean. En este Information Center, pulse .
Para poder actualizar una aplicación en WebSphere Application Server, debe instalar la aplicación.
Acerca de esta tarea
Lleve a cabo las tareas siguientes para actualizar por completo una aplicación a través de programación.
Procedimiento
- Conéctese a WebSphere Application Server.
- Cree un proxy de gestión de aplicaciones.
- Cree el filtro de notificación para recibir sucesos.
- Añada la escucha.
- Prepare el archivo archivador de empresa (EAR) llenándolo con información de enlace.
- Actualice la aplicación.
- Espere un poco para que el programa no finalice.
- Preste atención a las notificaciones de JMX (Java Management Extensions) para entender la realización de la operación.
- Una vez actualizada la aplicación, elimine la escucha y salga de la aplicación.
Resultados
Después de ejecutar satisfactoriamente el código, la aplicación se actualiza.
Ejemplo
En el ejemplo siguiente se muestra cómo actualizar una aplicación basándose en los pasos anteriores. Algunas sentencias están partidas en varias líneas para fines de impresión.
import java.lang.*;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import com.ibm.websphere.management.application.*;
import com.ibm.websphere.management.application.client.*;
import com.ibm.websphere.management.*;
import javax.management.*;
public class aa {
public static void main(String[] args) {
try {
// Conectarse a WebSphere Application Server.
String host = "localhost";
String port = "8880";
String target = "WebSphere:cell=cellName,node=nodeName,server=server1";
Properties config = new Properties();
config.put (AdminClient.CONNECTOR_HOST, host);
config.put (AdminClient.CONNECTOR_PORT, port);
config.put (AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
System.out.println ("Config: " + config);
AdminClient _soapClient = AdminClientFactory.createAdminClient(config);
// Crear el proxy de gestión de aplicaciones, AppManagement.
AppManagement proxy = AppManagementProxy.getJMXProxyForClient (_soapClient);
String appName = "MyApp";
![[Windows]](../images/windows.gif)
String fileContents = "C:\test\test.ear";
![[Linux]](../images/linux.gif)
![[HP-UX]](../images/hpux.gif)
![[Solaris]](../images/solaris.gif)
![[AIX]](../images/aixlogo.gif)
![[z/OS]](../images/ngzos.gif)
![[IBM i]](../images/iseries.gif)
String fileContents = "/test/test.ear";
// Crear el filtro de notificación.
NotificationFilterSupport myFilter = new NotificationFilterSupport();
myFilter.enableType (NotificationConstants.TYPE_APPMANAGEMENT);
//Añadir la escucha.
NotificationListener listener = new AListener(_soapClient, myFilter,
"Install: " + appName, AppNotification.INSTALL);
// Consulte el ejemplo de instalación para ver cómo se puede preparar el archivo archivador
// de empresa (EAR) llenándolo con información de enlace.
// Si se ha iniciado el código para la fase de preparación, ya tiene la tabla de opciones.
// Si no, cree una tabla nueva y añada la relación de módulo a servidor eliminando el comentario
// de la sentencia siguiente.
//Hashtable options = new Hashtable();
options.put (AppConstants.APPDEPL_LOCALE, Locale.getDefault());
options.put ((AppConstants.APPUPDATE_CONTENTTYPE, AppConstants.APPUPDATE_CONTENT_APP);
// Elimine el comentario de las sentencias siguientes para añadir el módulo a la tabla de relaciones de servidor si
// la fase de preparación no los recopila.
//Hashtable module2server = new Hashtable();
//module2server.put ("*", target);
//options.put (AppConstants.APPDEPL_MODULE_TO_SERVER, module2server);
// Actualizar la aplicación.
proxy.updateApplication ( appName,
null,
fileContents,
AppConstants.APPUPDATE_UPDATE,
options,
null);
// Espere un poco. La interfaz de programación de aplicaciones (API) es
// asíncrona y por lo tanto vuelve de inmediato.
// Si el programa no espera en este punto, finaliza.
Thread.sleep(300000); // Espere para que el programa no finalice.
}
catch (Exception e) {
e.printStackTrace();
}
}
}
// Especificar la escucha de notificaciones de JMX (Java Management Extensions) para los sucesos de JMX.
class AListener implements NotificationListener
{
AdminClient _soapClient;
NotificationFilterSupport myFilter;
Object handback;
ObjectName on;
String eventTypeToCheck;
public AListener(AdminClient cl, NotificationFilterSupport fl,
Object h, String eType) throws Exception
{
_soapClient = cl;
myFilter = fl;
handback = h;
eventTypeToCheck = eType;
Iterator iter = _soapClient.queryNames (new ObjectName(
"WebSphere:type=AppManagement,*"), null).iterator();
on = (ObjectName)iter.next();
System.out.println ("ObjectName: " + on);
_soapClient.addNotificationListener (on, this, myFilter, handback);
}
public void handleNotification (Notification notf, Object handback)
{
AppNotification ev = (AppNotification) notf.getUserData();
System.out.println ("!! JMX event Recd: (handback obj= " + handback+ "): " + ev);
//Cuando la instalación finalice, elimine la escucha y salga de la aplicación
if (ev.taskName.equals (eventTypeToCheck) &&
(ev.taskStatus.equals (AppNotification.STATUS_COMPLETED) ||
ev.taskStatus.equals (AppNotification.STATUS_FAILED)))
{
try
{
_soapClient.removeNotificationListener (on, this);
}
catch (Throwable th)
{
System.out.println ("Error removing listener: " + th);
}
System.exit (0);
}
}
}