eXtreme-Scale-Plug-ins mit OSGi Blueprint konfigurieren

Alle ObjectGrid- und BackingMap-Plug-ins von eXtreme Scale können mit dem OSGi-Blueprint-Service, der mit Eclipse Gemini und Apache Aries bereitgestellt wird, als OSGi-Beans und -Services definiert werden.

Vorbereitende Schritte

Bevor Sie Ihre Plug-ins als OSGi-Services konfigurieren können, müssen Sie Ihre Plug-ins in ein OSGi-Bundle packen und sich mit den grundlegenden Prinzipien der erforderlichen Plug-ins vertraut machen. Das Bundle muss die Server- bzw. Clientpakete von WebSphere eXtreme Scale sowie weitere abhängige Pakete, die von den Plug-ins benötigt werden, importieren oder eine Bundleabhängigkeit in den Server- bzw. Client-Bundles von eXtreme Scale erstellen. In diesem Artikel wird beschrieben, wie Sie die Blueprint-XML konfigurieren, um Plug-in-Beans zu erstellen und diese als OSGi-Services für eXtreme Scale bereitzustellen.

Informationen zu diesem Vorgang

Beans und Services werden in einer Blueprint-XML-Datei definiert, und der Blueprint-Container erkennt, erstellt und verbindet die Beans miteinander und stellt diese dann als Services bereit. Durch diesen Prozess werden die Beans anderen OSGi-Bundles, einschließlich den Server- und Client-Bundles von eXtreme Scale, zur Verfügung gestellt.

Wenn Sie angepasste Plug-in-Services für eXtreme Scale erstellen, muss das Bundle, in dem die Plug-ins gehostet werden sollen, für die Verwendung von Blueprint konfiguriert werden. Außerdem muss eine Blueprint-XML-Datei erstellt und im Bundle gespeichert werden. Informationen zum allgemeinen Verständnis der Spezifikation finden Sie unter Building OSGi applications with the Blueprint Container specification.

Vorgehensweise

  1. Erstellen Sie eine Blueprint-XML-Datei. Sie können die Datei beliebig nennen. Sie müssen jedoch den Blueprint-Namespace einschließen.
    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
    ...
    </blueprint>
  2. Erstellen Sie Bean-Definitionen in der Blueprint-XML-Datei für jedes eXtreme-Scale-Plug-in.
    Beans werden mit dem Element <bean> definiert, können mit anderen Bean-Referenzen verbunden werden und können Initialisierungsparameter enthalten.
    Wichtig: Beim Definieren einer Bean müssen Sie den richtigen Geltungsbereich verwenden. Blueprint unterstützt die Geltungsbereiche "Singleton" und "Prototyp". eXtreme Scale unterstützt auch einen angepassten Shard-Geltungsbereich.

    Definieren Sie die meisten eXtreme-Scale-Plug-ins als Beans mit dem Geltungsbereich "Prototyp" oder "Shard", weil alle Beans für jedes ObjectGrid-Shard bzw. jede BackingMap-Instanz, dem bzw. der sie zugeordnet ist, eindeutig sein muss. Beans mit dem Geltungsbereich "Shard" können hilfreich sein, wenn die Beans in anderen Kontexten verwendet werden, damit die richtige Instanz abgerufen wird.

    Zum Definieren einer Bean mit dem Geltungsbereich "Prototyp" verwenden Sie das Attribut scope="prototype" in der Bean:
    <bean id="myPluginBean" class="com.mycompany.MyBean" scope="prototype">
    ...
    </bean>
    Zum Definieren einer Bean mit dem Geltungsbereich "Shard" müssen Sie dem XML-Schema den Namespace objectgrid hinzufügen und das Attribut scope="objectgrid:shard" in der Bean verwenden:
    <?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. Erstellen Sie PluginServiceFactory-Bean-Definitionen für jede Plug-in-Bean. Alle eXtreme-Scale-Beans müssen eine definierte PluginServiceFactory-Bean haben, damit der richtige Bean-Geltungsbereich angewendet werden kann. eXtreme Scale enthält eine BlueprintServiceFactory, die Sie verwenden können. Sie enthält zwei Eigenschaften, die definiert werden müssen. Sie müssen die Eigenschaft blueprintContainer auf die blueprintContainer-Referenz und die Eigenschaft beanId auf den Bean-ID-Namen gesetzt werden. Wenn eXtreme Scale den Service für die Instanziierung der entsprechenden Beans sucht, sucht der Server die Bean-Komponenteninstanz mithilfe des Blueprint-Containers.
    bean id="myPluginBeanFactory"
        class="com.ibm.websphere.objectgrid.plugins.osgi.BluePrintServiceFactory">
        		<property name="blueprintContainer" ref="blueprintContainer"/>
    <property name="beanId" value="myPluginBean" />
    </bean>
  4. Erstellen Sie einen Servicemanager für jede PluginServiceFactory-Bean. Jeder Servicemanager stellt die PluginServiceFactory-Bean mithilfe des Elements <service> bereit. Das Element "service" gibt den Namen an, unter dem die Bean OSGi bereitgestellt wird, die Referenz auf die PluginServiceFactory-Bean, die bereitzustellende Schnittstelle und das Ranking des Service. eXtreme Scale verwendet das Service-Manager-Ranking, um Service-Upgrades durchzuführen, wenn das eXtreme-Scale-Grid aktiv ist. Wenn das Ranking nicht angegeben wird, nimmt das OSGi-Framework das Ranking 0 an. Weitere Informationen finden Sie im Artikel zum Aktualisieren von Service-Rankings.
    Blueprint enthält mehrere Optionen für die Konfiguration von Service-Managern. Zum Definieren eines einfachen Service-Managers für eine PluginServiceFactory-Bean erstellen Sie ein Element <service> für jede PluginServiceFactory-Bean:
    <service ref="myPluginBeanFactory"
        interface="com.ibm.websphere.objectgrid.plugins.osgi.PluginServiceFactory"
        ranking="1">
    </service> 
  5. Speichern Sie die Blueprint-XML-Datei im Plug-in-Bundle. Die Blueprint-XML-Datei muss im Verzeichnis OSGI-INF/blueprint gespeichert werden, damit sie vom Blueprint-Container erkannt wird.
    Wenn Sie die Blueprint-XML-Datei in einem anderen Verzeichnis speichern möchten, müssen Sie den folgenden Bundle-Blueprint-Manifestheader angeben:
    Bundle-Blueprint: OSGI-INF/blueprint.xml

Ergebnisse

Die eXtreme-Scale-Plug-ins sind jetzt für die Bereitstellung in einem OSGi-Blueprint-Container konfiguriert. Außerdem wurde die ObjectGrid-XML-Deskriptordatei so konfiguriert, dass sie auf die Plug-ins über den OSGi-Blueprint-Service verweist.