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