OSGi-Stapelanwendung implementieren
Sie können eine vorhandene Stapelanwendung als OSGi-Anwendung packen. Anschließend implementieren Sie das Paket so, dass Sie Stapelartefakte als Services bereitstellen können, die damit für den Stapelcontainer sichtbar werden.
Informationen zu diesem Vorgang
Packen Sie eine OSGi-Stapelanwendung, ändern Sie die Blueprint-XML-Datei, um die Stapelartefakte als Services zu beschreiben, und exportieren Sie die OSGi-Stapelanwendung dann als Unternehmens-Bundle-Archiv (EBA, Enterprise Bundle Archive). Erstellen Sie dann die xJCL. Implementieren Sie abschließend die OSGi-Stapelanwendung.
Vorgehensweise
- OSGi-Stapelanwendung packen.
Sie packen die OSGi-Stapelanwendung als EBA-Datei. Die EBA-Datei enthält mindestens Ihr Stapel-Bundle, das ein Blueprint-Bundle ist. Das API-Bundle und die Dispatcher-Bundles werden ein einziges Mal im internen Bundle-Repository installiert.
Lesen Sie den Artikel zum erstellen eines Client-Bundles, und folgen Sie den Schritten zum Packen Ihrer OSGi-Anwendung.
- Blueprint-XML-Datei umschreiben.
Sie müssen die Jobabschnitte und Stapeldatenströme (BDS, Batch Data Streams) als Services deklarieren, damit sie vom Scheduler aufgerufen werden können. Wenn Ihre OSGi-Stapelanwendung einen Algorithmus für Prüfpunktrichtlinien oder einen Ergebnisalgorithmus implementiert, müssen Sie auch jeden Algorithmus, der von der Anwendung implementiert wird, als Service deklarieren.
- Deklarieren Sie jeden Jobabschnitt als Blueprint-Service.
- Definieren Sie das Attribut "interface".
- Wenn der Abschnitt ein rechenintensiver Abschnitt ist, setzen Sie das Attribut auf com.ibm.websphere.ci.CIWork.
- Wenn der Abschnitt ein transaktionsorientierter Stapelabschnitt ist, setzen Sie das Attribut auf com.ibm.websphere.batch.BatchJobStepInterface.
- Setzen Sie das Attribut "ref" auf die Bean-ID, die die Abschnittsbean deklariert.
- Deklarieren Sie eine Eigenschaft mit dem Schlüssel "xjcl:classname" und einem Wert, der die Java™-Klasse angibt, die den Abschnitt implementiert.
- Deklarieren Sie eine Bean für die Java-Klasse, die den Abschnitt implementiert.
- Setzen Sie das Attribut "scope" auf prototype.
Beispiel für einen rechenintensiven Abschnitt:
<bean id="IVTStep1" class="com.ibm.websphere.batch.samples.tests.steps.GenerateDataStep" scope="prototype"/> <service ref="IVTStep1" interface="com.ibm.websphere.ci.CIWork" id="step1"> <service-properties> <entry key="xjcl:classname" value="com.ibm.websphere.batch.samples.tests.steps.GenerateDataStep"/> </service-properties> </service>
Beispiel für einen transaktionsorientierten Stapelabschnitt:
<bean id="EchoStep2" class="com.ibm.websphere.batch.samples.tests.steps.TestBatchJobStep" scope="prototype"/> <service ref="EchoStep2" interface="com.ibm.websphere.batch.BatchJobStepInterface" id="echostep1"> <service-properties> <entry key="xjcl:classname" value="com.ibm.websphere.batch.samples.tests.steps.TestBatchJobStep"/> </service-properties> </service>
- Definieren Sie das Attribut "interface".
- Deklarieren Sie jeden Stapeldatenstrom als Blueprint-Service.deklarieren.
- Setzen Sie das Attribut "interface" auf com.ibm.websphere.batch.BatchDataStream.
- Setzen Sie das Attribut "ref" auf die Bean-ID, die die Stapeldatenstrombean deklariert.
- Deklarieren Sie eine Eigenschaft mit dem Schlüssel "xjcl:classname" und einem Wert, der die Java-Klasse angibt, die den Stapeldatenstrom implementiert.
- Deklarieren Sie eine Bean für die Java-Klasse, die den Stapeldatenstrom implementiert.
- Setzen Sie das Attribut "scope" auf prototype.
Beispiel für einen Stapeldatenstrom:
<bean id="output" class="com.ibm.websphere.batch.samples.tests.bds.TestOutputBatchDataStream" scope="prototype"/> <service ref="output" interface="com.ibm.websphere.batch.BatchDataStream" id="out1"> <service-properties> <entry key="xjcl:impl-class" value="com.ibm.websphere.batch.samples.tests.bds.TestOutputBatchDataStream"/> </service-properties> </service>
- Deklarieren Sie den Algorithmus für Prüfpunktrichtlinien als Blueprint-Service.
Wenn Ihre OSGi-Stapelanwendung einen Algorithmus für Prüfpunktrichtlinien implementiert, deklarieren Sie den Algorithmus als Blueprint-Service. Andernfalls können Sie diesen Schritt überspringen.
- Setzen Sie das Attribut "interface" auf com.ibm.wsspi.batch.CheckpointPolicyAlgorithm.
- Setzen Sie das Attribut "ref" auf die Bean-ID, die die Prüfpunktbean deklariert.
- Deklarieren Sie eine Eigenschaft mit dem Schlüssel "xjcl:classname" und einem Wert, der die Java-Klasse angibt, die den Algorithmus für Prüfpunktrichtlinien implementiert.
- Deklarieren Sie eine Bean für die Java-Klasse, die den Algorithmus für Prüfpunktrichtlinien implementiert.
- Setzen Sie das Attribut "scope" auf prototype.
Beispiel für einen Algorithmus für Prüfpunktrichtlinien:
<bean id="chkpt" class="com.ibm.websphere.batch.samples.MyCheckpointAlgorithm" scope="prototype"/> <service ref="chkpt" interface="com.ibm.wsspi.batch.CheckpointPolicyAlgorithm" id="ck1"> <service-properties> <entry key="xjcl:impl-class" value="com.ibm.websphere.batch.samples.MyCheckpointAlgorithm"/> </service-properties> </service>
- Deklarieren Sie den Ergebnisalgorithmus als Blueprint-Service.
Wenn Ihre OSGi-Stapelanwendung einen Ergebnisalgorithmus implementiert, deklarieren Sie den Algorithmus als Blueprint-Service. Andernfalls können Sie diesen Schritt überspringen.
- Setzen Sie das Attribut "interface" auf com.ibm.wsspi.batch.ResultsAlgorithm.
- Setzen Sie das Attribut "ref" auf die Bean-ID, die die Bean für den Ergebnisalgorithmus deklariert.
- Deklarieren Sie eine Eigenschaft mit dem Schlüssel "xjcl:classname" und einem Wert, der die Java-Klasse angibt, die den Ergebnisalgorithmus implementiert.
- Deklarieren Sie eine Bean für die Java-Klasse, die den Ergebnisalgorithmus implementiert.
- Setzen Sie das Attribut "scope" auf prototype.
Beispiel für einen Ergebnisalgorithmus:
<bean id="myres" class="com.ibm.websphere.batch.samples.MyResultsAlgorithm" scope="prototype"/> <service ref="myres" interface="com.ibm.wsspi.batch.ResultsAlgorithm" id="r1"> <service-properties> <entry key="xjcl:impl-class" value="com.ibm.websphere.batch.samples.MyResultsAlgorithm"/> </service-properties> </service>
- Deklarieren Sie jeden Jobabschnitt als Blueprint-Service.
- OSGi-Stapelanwendung als EBA-Datei exportieren.
- xJCL erstellen. Erstellen Sie die xJCL unter Berücksichtigung von einigen wenigen Abweichungen wie für jede andere Stapelanwendung:
- Geben Sie mit dem Attribut "application-name" im Jobabschnitt den Namen der implementierten Anlage an. Die implementierte Anlage ist eine Kompositionseinheit.
- Definieren Sie das Unterelement "classname" des Abschnitts so, dass es der Eigenschaft "xjcl:classname"
des Abschnittsservice entspricht.
Im folgenden Beispiel wird die Eigenschaft "xjcl:classname" von "com.ibm.websphere.batch.samples.tests.steps.TestBatchJobStep" aus dem Beispiel für den transaktionsorientierten Stapelabschnitte weiter vorn in dieser Prozedur verwendet.
<step id=”step1”> <classname> com.ibm.websphere.batch.samples.tests.steps.TestBatchJobStep</classname> </step>
- OSGi-Stapelanwendung implementieren.
Lesen Sie den Artikel zum Implementieren einer OSGi-Anwendung als Geschäftsanwendung, und folgen Sie den dort beschriebenen Schritten.
Ergebnisse
Sie haben eine OSGi-Stapelanwendung gepackt, die Blueprint-XML-Datei geändert, um die Stapelartefakte als Services zu beschreiben, und die OSGi-Stapelanwendung dann als Unternehmens-Bundle-Archiv (EBA, Enterprise Bundle Archive) exportiert. Anschließend haben Sie die xJCL erstellt. Abschließend haben Sie die OSGi-Stapelanwendung implementiert.
Unterartikel
OSGi-Stapelanwendungen
OSGi-Stapelanwendungen sind Stapelanwendungen, die Sie als OSGi-Anwendungen packen und implementieren können, um Stapelartefakte als Services bereitzustellen.


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tgrid_cgbatchosgi
Dateiname:tgrid_cgbatchosgi.html