Preparación de un modelo y adición de éste a una aplicación existente a través de programación

Puede añadir un módulo a una aplicación existente a través de la consola de administración, la herramienta wsadmin o mediante programación. Utilice este ejemplo para añadir un módulo 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 Reference (Referencia) > Mbean interfaces (Interfaces de Mbean).

Para poder añadir un módulo a una aplicación en WebSphere Application Server, debe instalar la aplicación.

Acerca de esta tarea

Lleve a cabo las tareas siguientes para añadir un módulo a una aplicación a través de programación.

Procedimiento

  1. Cree una instancia de controlador de despliegue de aplicaciones para llenar el archivo archivo de módulo con información de enlace.
  2. Guarde la información de enlace en el módulo.
  3. Obtenga las opciones de instalación.
  4. Si la fase de preparación (llenado del archivo EAR) no se lleva a cabo, lleve a cabo las acciones siguientes:
    1. Cree una tabla de opciones que se pase a la API de MBean updateApplication.
    2. Cree una tabla para relaciones de módulo a servidor añada la tabla a la tabla de opciones.
  5. Conéctese a WebSphere Application Server.
  6. Cree un proxy de gestión de aplicaciones.
  7. Cree el filtro de notificación.
  8. Añada la escucha.
  9. Añada el módulo a la aplicación.
  10. Especifique el destino del nuevo módulo.
  11. Espere un poco para que el programa no finalice.
  12. Preste atención a las notificaciones de JMX (Java Management Extensions) para entender la realización de la operación.

Resultados

Después de ejecutar satisfactoriamente el código, el módulo se añade a la aplicación.

Ejemplo

En el ejemplo siguiente se muestra cómo añadir un módulo a una aplicación basándose en los pasos anteriores. Algunas sentencias están partidas en varias líneas para fines de impresión.

//Entradas:
//moduleName especifica el nombre del módulo que se añade a la aplicación.
//moduleURI especifica un URI que ofrece la ubicación de destino del contenido 
//del archivo archivador del módulo en un sistema de archivos. El URI proporciona la ubicación del módulo 
//nuevo después de la instalación. El URI es relativo al URL de la aplicación.
//uniquemoduleURI especifica el URI que ofrece la ubicación de destino del 
// archivo del descriptor de despliegue. El URI es relativo al URL de la aplicación.
//target especifica la célula, el nodo y el servidor en el que está instalado el módulo.
[Windows]
String moduleName = "C:\apps\foo.jar";
[Linux][HP-UX][Solaris][AIX][z/OS][IBM i]
String moduleName = "/apps/foo.jar";
String moduleURI = "Increment.jar";
String uniquemoduleURI = "Increment.jar+META-INF/ejb-jar.xml";
String target = "WebSphere:cell=cellname,node=nodename,server=servername";

//Crear una instancia de controlador de despliegue, AppDeploymentController,
//para llenar el archivo archivador Java (JAR) con información de enlace. 
//La información de enlace es información de despliegue específica de WebSphere Application Server.

Hashtable preferences = new Hashtable();
preferences.put (AppConstants.APPDEPL_LOCALE, Locale.getDefault());
preferences.put (AppConstants.APPUPDATE_CONTENTTYPE, AppConstants.APPUPDATE_CONTENT_MODULEFILE);
AppDeploymentController controller = AppManagementFactory.readArchiveForUpdate(
				moduleName, 
				moduleURI, 
				AppConstants.APPUPDATE_ADD,
				preferences, 
									null);

Si el módulo que añada a la aplicación no tiene enlaces, añada los enlaces para que la actualización del módulo funcione. Recopile y añada los enlaces utilizando las API públicas que se proporcionan con el producto. Consulte la documentación de Java sobre la instancia com.ibm.websphere.management.application.client.AppDeploymentController para obtener más información sobre cómo recopilar y llenar tareas con información de enlace específica de WebSphere Application Server. La instancia de AppDeploymentController contiene metadatos definidos en los descriptores de despliegue basados en XML, así como las anotaciones definidas en las clases Java dentro del módulo de entrada.

//Después de recopilar toda la información de enlace, guárdela en el módulo.
controller.saveAndClose();

//Obtener las opciones de instalación.
Hashtable options = controller.getAppDeploymentSavedResults();

//Conectar el cliente administrativo, AdminClient, a WebSphere Application Server.
AdminClient client = ...;

//Crear el proxy de gestión de aplicaciones.
AppManagement proxy = AppManagementProxy.getJMXProxyForClient(client);

//Actualizar la aplicación existente, MyAPP, añadiendo el módulo.
String appName = "MyApp";

options.put (AppConstants.APPUPDATE_CONTENTTYPE, 
			AppConstants. APPUPDATE_CONTENT_MODULEFILE);

//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.UPDATE);

//Especifique el destino del nuevo módulo.
Hashtable mod2svr = new Hashtable();
options.put (AppConstants.APPDEPL_MODULE_TO_SERVER, mod2svr);
mod2svr.put (uniquemoduleURI, target);
proxy.updateApplication (	appName, 
				moduleURI, 
				moduleName,
				AppConstants.APPUPDATE_ADD,
				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);
        }
    }
}

Qué hacer a continuación

Una vez añadido el módulo correctamente, elimine la escucha y salga de la aplicación.


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=tjmx_add_module
File name: tjmx_add_module.html