WebSphere eXtreme Scale stellt ein Feature für die Deklaration von POJOs (Plain Old Java Object) als Erweiterungspunkte in der Datei objectgrid.xml und eine Methode für die Benennung der Beans und die anschließende Spezifikation des Klassennamens bereit. Normalerweise werden Instanzen der angegebenen Klasse erstellt, und diese Objekte werden dann als Plug-ins verwendet. Jetzt kann eXtreme Scale das Abrufen von Instanzen dieser Plug-in-Objekte an Spring delegieren. Wenn eine Anwendung Spring verwendet, müssen solche POJOs gewöhnlich mit dem Rest der Anwendung verbunden werden.
In einigen Szenarien, wie im folgenden Beispiel, müssen Sie Spring verwenden, um ein Plug-in zu konfigurieren:
<objectGrid name="Grid">
<bean id="TransactionCallback" className="com.ibm.websphere.objectgrid.jpa.JPATxCallback">
<property name="persistenceUnitName" type="java.lang.String" value="employeePU" />
</bean>
...
</objectGrid>
Die integrierte TransactionCallback-Implementierung, die Klasse "com.ibm.websphere.objectgrid.jpa.JPATxCallback", ist als TransactionCallback-Klasse konfiguriert. Diese Klasse wird, wie im vorherigen Beispiel gezeigt, mit der Eigenschaft persistenceUnitName konfiguriert. Die Klasse "JPATxCallback" besitzt auch das Attribut "JPAPropertyFactory", das den Typ "java.lang.Object" hat. Die ObjectGrid-XML-Konfiguration unterstützt diesen Typ von Konfiguration nicht.
Die Integration von Spring in eXtreme Scale löst dieses Problem, indem die Bean-Erstellung an das Spring-Framework delegiert wird. Die überarbeitete Konfiguration folgt:
<objectGrid name="Grid">
<bean id="TransactionCallback" className="{spring}jpaTxCallback"/>
...
</objectGrid>
Die Spring-Datei für das Objekt "Grid" enthält die folgenden Informationen:
<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
<property name="persistenceUnitName" value="employeeEMPU"/>
<property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.
JPAPropFactoryImpl" scope="shard">
</bean>
Hier ist TransactionCallback mit {spring}jpaTxCallback angegeben, und die Beans "jpaTxCallback" und "jpaPropFactory" werden in der Spring-Datei, wie im vorherigen Beispiel gezeigt, konfiguriert. Mit der Spring-Konfiguration kann eine JPAPropertyFactory-Bean als Parameter des JPATxCallback-Objekts konfiguriert werden.
Standard-Spring-Bean-Factory
Wenn eXtreme Scale ein Plug-in oder eine Erweiterungs-Bean (z. B. ObjectTransformer, Loader, TransactionCallback usw.) mit einem classname-Wert findet, der mit dem Präfix {spring} beginnt, verwendet eXtreme Scale den restlichen Teil des Namens als Namen für die Spring-Bean und ruft die Bean-Instanz über die Spring-Bean-Factory ab.
Wenn keine Bean-Factory für ein bestimmtes ObjectGrid registriert wurde, wird standardmäßig versucht, eine Datei ObjectGridName_spring.xml zu finden. Wenn Ihr Datengrid beispielsweise "Grid" heißt, hat die XML-Datei den Namen /Grid_spring.xml. Diese Datei muss im Klassenpfad oder in einem Verzeichnis META-INF im Klassenpfad enthalten sein. Wenn diese Datei gefunden wird, erstellt eXtreme Scale über diese Datei einen Anwendungskontext und über diese Bean-Factory die Beans.
Angepasste Spring-Bean-Factory
WebSphere eXtreme Scale stellt auch eine API "ObjectGridSpringFactory" bereit, über die eine Spring-Bean-Factory-Instanz für ein bestimmtes ObjectGrid registriert werden kann. Diese API registriert eine Instanz von BeanFactory mit der folgenden statischen Methode bei eXtreme Scale:
void registerSpringBeanFactoryAdapter(String objectGridName, Object springBeanFactory)
Seit Version 2.0 hat Spring einen Mechanismus für schemabasierte Erweiterungen für das Spring-XML-Basisformat für die Definition und Konfiguration von Beans. ObjectGrid verwendet dieses neue Feature, um ObjectGrid-Beans zu definieren und zu konfigurieren. Mit der Spring-XML-Schemaerweiterung sind einige der integrierten Implementierungen von eXtreme-Scale-Plug-ins und einige ObjectGrid-Beans im Namespace "objectgrid" vordefiniert. Wenn Sie die Spring-Konfigurationsdateien schreiben, müssen Sie den vollständigen Klassennamen der integrierten Implementierungen nicht angeben. Stattdessen können Sie die vordefinierten Beans referenzieren.
Außerdem sinkt mit den Attributen der Beans, die im XML-Schema definiert sind, das Risiko, dass falsche Attributnamen angegeben werden. Die XML-Validierung, die auf dem XML-Schema basiert, kann diese Art von Fehlern früher im Entwicklungszyklus abfangen.
Die folgenden Beans sind in den XML-Schemaerweiterungen definiert:
Diese Beans sind in der XML-Schemadatei "objectgrid.xsd" definiert. Diese XSD-Datei wird als Datei com/ibm/ws/objectgrid/spring/namespace/objectgrid.xsd in der Datei ogspring.jar geliefert. Ausführliche Beschreibungen der XSD-Datei und der in der XSD-Datei definierten Beans finden Sie in Spring-XML-Deskriptordatei.
Verwenden Sie das JPATxCallback-Beispiel aus dem vorherigen Abschnitt. Im vorherigen Abschnitt wurde die JPATxCallback-Bean wie folgt konfiguriert:
<bean id="jpaTxCallback" class="com.ibm.websphere.objectgrid.jpa.JPATxCallback" scope="shard">
<property name="persistenceUnitName" value="employeeEMPU"/>
<property name="JPAPropertyFactory" ref ="jpaPropFactory"/>
</bean>
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl" scope="shard">
</bean>
Mit dem Namespace-Feature kann die Spring-XML-Konfiguration wie folgt geschrieben werden:
<objectgrid:JPATxCallback id="jpaTxCallback" persistenceUnitName="employeeEMPU"
jpaPropertyFactory="jpaPropFactory" />
<bean id="jpaPropFactory" class="com.ibm.ws.objectgrid.jpa.plugins.JPAPropFactoryImpl"
scope="shard">
</bean>
Beachten Sie, dass hier die Klasse com.ibm.websphere.objectgrid.jpa.JPATxCallback nicht wie im vorherigen Beispiel angegeben wird, sondern dass die vordefinierte Bean objectgrid:JPATxCallback direkt verwendet wird. Wie Sie sehen, ist diese Konfiguration weniger ausführlich und in Bezug auf die Fehlerprüfung komfortabler.
Eine Beschreibung für die Arbeit mit Spring-Beans finden Sie unter Container-Server mit Spring starten.