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
- 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>
- 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>
...
- 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>
- 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>
- 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.