Configuration des plug-in eXtreme Scale avec OSGi Blueprint

Tous les plug-in eXtreme Scale ObjectGrid et BackingMap peuvent être définis comme beans et services OSGi en utilisant le service OSGi Blueprint disponible avec Eclipse Gemini ou Apache Aries.

Avant de commencer

Pour pouvoir configurer vos plug-in comme services OSGi, vous devez regrouper les plug-in dans un ensemble OSGi et connaître les concepts de base des plug-in requis. L'ensemble doit importer les modules client ou serveur WebSphere eXtreme Scale et d'autres packages dépendants nécessaires aux plug-in ou créer une dépendance d'ensemble dans les ensembles de serveur ou de client eXtreme Scale. Cette rubrique explique comment configurer le fichier XML Blueprint XML pour créer des beans de plug-in et les exposer comme services OSGi pour que eXtreme Scale les utilise.

Pourquoi et quand exécuter cette tâche

Les beans et services sont définis dans un fichier XML Blueprint et le conteneur Blueprint découvre, crée et interconnecte les beans et les expose comme services. Le processus rend les beans accessibles aux autres ensembles OSGi, y compris les ensembles de serveur et de client eXtreme Scale.

Lors de la création de services de plug-in personnalisés pour les utiliser avec eXtreme Scale, l'ensemble qui doit héberger les plug-in doit être configuré pour utiliser Blueprint. En outre, un fichier XML Blueprint doit être créé et stocké dans l'ensemble. Lisez la rubrique relative à la création d'applications OSGi avec la spécification Blueprint Container qui décrit de manière générale la spécification.

Procédure

  1. Créez un fichier XML Blueprint. Attribuez-lui un nom de votre choix. Toutefois, vous devez inclure l'espace de nom Blueprint :
    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    ...
    </blueprint>
  2. Créez des définitions de bean dans le fichier XML Blueprint pour chaque plug-in eXtreme Scale.
    Les beans sont définis en utilisant l'élément <bean>, ils peuvent être connectés à d'autres références de bean et ils peuvent inclure des paramètres d'initialisation.
    Important : Lors de la définition d'un bean, vous devez utiliser la portée correcte. Blueprint prend en charge les portées singleton et prototype. eXtreme Scale prend également en charge une portée de fragment personnalisée.

    Définissez la plupart des plug-in eXtreme Scale comme prototype ou beans à portée de fragment, car tous les beans doivent être uniques pour chaque fragment ObjectGrid ou instance BackingMap auquel ou à laquelle ils sont associés. Les beans à portée de fragment peuvent être utiles lorsque vous utilisez les beans dans d'autres contextes pour pouvoir extraire l'instance correcte.

    Pour définir un bean à portée prototype, utilisez l'attribut scope="prototype" sur le bean :
    <bean id="myPluginBean" class="com.mycompany.MyBean" scope="prototype">
    ...
    </bean>
    Pour définir un beans à portée de fragment, vous devez ajouter l'espace de nom objectgrid au schéma XML et utiliser l'attribut scope="objectgrid:shard" sur le 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. Créez des définitions de bean PluginServiceFactory pour chaque bean de plug-in. Tous les beans eXtreme Scale doivent avoir un bean PluginServiceFactory défini pour que la portée de bean correcte puisse être appliquée. eXtreme Scale inclut une fabrique BlueprintServiceFactory que vous pouvez utiliser. Elle contient deux propriétés que vous devez définir. Vous devez affecter à la propriété blueprintContainer la référence blueprintContainer et attribuer à la propriété beanId le nom de l'identificateur du bean. Lorsque eXtreme Scale recherche le service pour instancier les beans appropriés, le serveur recherche l'instance du composant bean en utilisant le conteneur Blueprint.
    bean id="myPluginBeanFactory"
        class="com.ibm.websphere.objectgrid.plugins.osgi.BluePrintServiceFactory">
        <property name="blueprintContainer" ref="blueprintContainer"/>
        <property name="beanId" value="myPluginBean" />
    </bean>
  4. Créez un gestionnaire de service pour chaque bean PluginServiceFactory. Chaque gestionnaire de service expose le bean PluginServiceFactory en utilisant l'élément <service>. L'élément de service identifie le nom à exposer à OSGi, la référence au bean PluginServiceFactory et l'interface à exposer, ainsi que le classement du service. eXtreme Scale utilise le classement du gestionnaire de service pour effectuer des mises à niveau de service lorsque la grille eXtreme Scale est active. Si le classement n'est pas défini, l'infrastructure OSGi utilise le classement 0 par défaut. Consultez la rubrique relative à la mise à jour des classements de service pour plus d'informations.
    Blueprint contient diverses options de configuration des gestionnaires de service. Pour définir un gestionnaire de service simple pour un bean PluginServiceFactory, créez un élément <service> pour chaque bean PluginServiceFactory :
    <service ref="myPluginBeanFactory"
        interface="com.ibm.websphere.objectgrid.plugins.osgi.PluginServiceFactory"
        ranking="1">
    </service> 
  5. Stockez le fichier XML Blueprint dans l'ensemble de plug-in. Le fichier XML Blueprint doit être stocké dans le répertoire OSGI-INF/blueprint du conteneur Blueprint pour être découvert.
    Pour stocker le fichier XML Blueprint dans un répertoire différent, vous devez définir l'en-tête de manifeste Bundle-Blueprint suivant :
    Bundle-Blueprint: OSGI-INF/blueprint.xml

Résultats

Les plug-in eXtreme Scale sont maintenant configurés pour être exposés dans un conteneur OSGi Blueprint. En outre, le fichier XML descripteur ObjectGrid est configuré pour référencer les plug-in en utilisant le service OSGi Blueprint.