Configuración de plug-ins de eXtreme Scale con OSGi Blueprint

Todos los plug-ins de eXtreme Scale ObjectGrid y BackingMap se pueden definir como servicios y beans OSGi utilizando el servicio OSGi Blueprint disponible con Eclipse Gemini o Apache Aries.

Antes de empezar

Antes de configurar los plug-ins como servicios OSGi, primero debe empaquetar los plug-ins en un paquete OSGi y conocer los principios fundamentales de los plug-ins necesarios. El paquete debe importar los paquetes de servidor o cliente de WebSphere eXtreme Scale y otros paquetes dependientes necesarios para los plug-ins o crear una dependencia de paquete en los paquetes de servidor o cliente de eXtreme Scale. Este tema describe cómo configurar el XML de Blueprint para crear beans de plug-ins y exponerlos como servicios OSGi para que eXtreme Scale los utilice.

Acerca de esta tarea

Los beans y servicios están definidos en un archivo XML Blueprint y el contenedor Blueprint descubre, crea y conecta los beans entre ellos y los expone como servicios. El proceso deja los beans disponibles para otros paquetes OSGi, incluidos los paquetes de servidor y cliente de eXtreme Scale.

Al crear servicios de plug-in personalizados para utilizarlos con eXtreme Scale, el paquete que va a alojar los plug-ins, debe estar configurado para utilizar Blueprint. Además, se debe crear y almacenar un archivo XML Blueprint dentro del paquete. Para obtener una visión general de la especificación, lea la información sobre la creación de aplicaciones OSGi con la especificación de contenedor Blueprint.

Procedimiento

  1. Cree un archivo XML Blueprint. Puede utilizar el nombre que desee para el archivo. No obstante, debe incluir el espacio de nombre blueprint:
    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    ...
    </blueprint>
  2. Cree definiciones de bean en el archivo XML Blueprint para cada plug-in de eXtreme Scale.
    Los beans se definen utilizando el elemento <bean>, se pueden conectar a otras referencias de bean y pueden incluir parámetros de inicialización.
    Importante: Al definir un bean, debe utilizar el ámbito correcto. Blueprint soporta los ámbitos de singleton y prototipo. eXtreme Scale también soporta un ámbito de fragmento personalizado.

    Defina la mayoría de los plug-ins de eXtreme Scale como beans de ámbito de fragmento o prototipo, ya que todos los beans deben ser exclusivos para cada fragmento ObjectGrid o instancia de BackingMap con los que estén asociados. Los beans de ámbito de fragmento pueden ser útiles cuando se utilizan los beans en otros contextos para permitir recuperar la instancia correcta.

    Para definir un bean de ámbito de prototipo, utilice el atributo scope="prototype" en el bean:
    <bean id="myPluginBean" class="com.mycompany.MyBean" scope="prototype">
    ...
    </bean>
    Para definir un bean de ámbito de fragmento, debe añadir el espacio de nombres objectgrid al esquema XML y utilizar el atributo scope="objectgrid:shard" en el bean:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
               xmlns:objectgrid="http://www.ibm.com/schema/objectgrid"
               
    	   xsi:schemaLocation="http://www.ibm.com/schema/objectgrid
                    http://www.ibm.com/schema/objectgrid/objectgrid.xsd">
        
        <bean id="myPluginBean" class="com.mycompany.MyBean" 
    			scope="objectgrid:shard">
        ...
        </bean>
    
    ...
  3. Cree definiciones de bean PluginServiceFactory para cada bean de plug-in. Todos los beans de eXtreme Scale deben tener un bean PluginServiceFactory definido para que se pueda aplicar el ámbito de bean correcto. eXtreme Scale incluye un BlueprintServiceFactory que se puede utilizar. Incluye dos propiedades que se deben establecer. Debe establecer la propiedad blueprintContainer en la referencia blueprintContainer y la propiedad beanId se debe establecer en el nombre de identificador de bean. Cuando eXtreme Scale busca el servicio para instanciar los beans adecuados, el servidor busca la instancia de componente de bean utilizando el contenedor Blueprint.
    bean id="myPluginBeanFactory"
        class="com.ibm.websphere.objectgrid.plugins.osgi.BluePrintServiceFactory">
        		<property name="blueprintContainer" ref="blueprintContainer"/>
    <property name="beanId" value="myPluginBean" />
    </bean>
  4. Crear un administrador de servicios para cada bean PluginServiceFactory. Cada administrador de servicios expone el bean PluginServiceFactory, utilizando el elemento <service>. El elemento de servicio identifica el nombre a exponer en OSGi, la referencia al bean PluginServiceFactory, la interfaz a exponer y la clasificación del servicio. eXtreme Scale utiliza la clasificación de administrador de servicios para realizar actualizaciones de servicio cuando la cuadrícula de eXtreme Scale está activa. Si no se especifica la clasificación, la infraestructura OSGi supone una clasificación de 0. Lea la información sobre la actualización de clasificaciones de servicio para obtener más información.
    Blueprint incluye varias opciones para configurar administradores de servicios. Para definir un administrador de servicios simple para un bean PluginServiceFactory, cree un elemento <service> para cada bean PluginServiceFactory:
    <service ref="myPluginBeanFactory"
        interface="com.ibm.websphere.objectgrid.plugins.osgi.PluginServiceFactory"
        ranking="1">
    </service> 
  5. Almacene el archivo XML Blueprint en el paquete de plug-ins. El archivo XML Blueprint debe almacenarse en el directorio OSGI-INF/blueprint para que se descubra el contenedor Blueprint.
    Para almacenar el archivo XML Blueprint en un directorio diferente, debe especificar la siguiente cabecera de manifiesto Bundle-Blueprint:
    Bundle-Blueprint: OSGI-INF/blueprint.xml

Resultados

Los plug-ins de eXtreme Scale están ahora configurados para exponerse en un contenedor OSGi Blueprint. Además, el archivo XML de descriptor ObjectGrid está configurado para hacer referencia a los plug-ins utilizando el servicio OSGi Blueprint.