Ejecución de contenedores eXtreme Scale con plug-ins no dinámicos en un entorno OSGi

Si no necesita utilizar la capacidad dinámica de un entorno OSGi, puede aprovechar un acoplamiento más estrecho, el empaquetado declarativo y las dependencias del servicio que ofrece la infraestructura OSGi.

Antes de empezar

  1. Desarrolle su aplicación utilizando las APIs deWebSphere eXtreme Scale y los plug-ins.
  2. Empaquete la aplicación en uno o más paquetes OSGi con las dependencias de importación o exportación adecuadas que se declaran en uno o más manifiestos de paquete. Asegúrese de que todas las clases o paquetes necesarios para los plug-ins, agentes, objetos de datos, etc., se exportan.

Acerca de esta tarea

Con los plug-ins dinámicos, puede actualizar sus plug-ins sin detener la cuadrícula. Para utilizar esta función, el original y los nuevos plug-ins deben ser compatibles. Si no necesita actualizar plug-ins, o puede permitirse detener la cuadrícula para actualizarlos, puede que no necesite la complejidad de los plug-ins dinámicos. No obstante, todavía hay buenas razones para ejecutar la aplicación eXtreme Scale en un entorno OSGi. Estas razones incluyen un acoplamiento estrecho, un paquete declarativo, unas dependencias de servicio, etc.

Un problema que puede ocurrir al alojar una cuadrícula o un cliente en un entorno OSGi sin utilizar plug-ins dinámicos (más específicamente, sin declarar los plug-ins utilizando los servicios OSGi) es cómo el paquete de eXtreme Scale carga las clases de plug-in. El paquete de eXtreme Scale confía en los servicios de OSGi para cargar las clases de plug-in, lo que permite que el paquete llame los métodos de objetos de las clases en otros paquetes sin importar directamente los paquetes de dichas clases.

Cuando los plug-ins no están disponibles a través de los servicios OSGi, el paquete de eXtreme Scale debe poder cargar las clases de plug-in directamente. En lugar de modificar el manifiesto del paquete de eXtreme Scale para importar clases de usuario y paquetes, cree un fragmento de paquete que añada las importaciones necesarias del paquete. El fragmento también puede importar las clases necesarias para otras clases de usuario que no sean plug-ins, como objetos de datos y clases de agente.

Procedimiento

  1. Cree un fragmento OSGi que utilice el paquete de eXtreme Scale (cliente o servidor, dependiendo del entorno de despliegue deseado) como su host. El fragmento declara dependencias (Importar-Paquete) en todos los paquetes que deben cargar uno o varios plug-ins. Por ejemplo, si está instalando un plug-in de serializador cuyas clases residen en el paquete com.mycompany.myapp.serializers y depende de clases en el paquete com.mycompany.myapp.common, entonces el fragmento de su archivo META-INF/MANIFEST.MF se parecerá al siguiente ejemplo:
    Bundle-ManifestVersion: 2
    Bundle-Name: Plug-in fragment for XS serializers
    Bundle-SymbolicName: com.mycompany.myapp.myfragment; singleton:=true
    Bundle-Version: 1.0.0
    Fragment-Host: com.ibm.websphere.xs.server; bundle-version=7.1.1
    Manifest-Version: 1.0
    Import-Package: com.mycompany.myapp.serializers,
     com.mycompany.myapp.common
    …
    Este manifiesto debe empaquetarse en un fragmento de archivo JAR, que en este ejemplo es com.mycompany.myapp.myfragment_1.0.0.jar.
  2. Despliegue el fragmento recién creado, el paquete eXtreme Scale y los paquetes de aplicaciones para su entorno OSGi. Ahora, inicie los paquetes.

Resultados

Ahora puede probar y ejecutar su aplicación en el entorno OSGi sin utilizar los servicios OSGi para cargar clases de usuario, como plug-ins y agentes.