Eine Stapelanwendung in WebSphere Extended Deployment Version 6.1 wird als einfaches Plain Old Java Object (POJO) implementiert und für die Implementierung als EJB-Modul (Enterprise JavaBeans) in (EJB) in EAR-Dateien gepackt. Das Erstellen einer POJO-basierten Stapelanwendung ist die bevorzugte Methode für das Erstellen einer Stapelanwendung.
In den folgenden Abschnitten werden die Komponenten einer Stapelanwendung beschrieben.
Eine Stapelanwendung kann sich aus einem oder mehreren Stapelabschnitten zusammensetzen. Jeder Stapelabschnitt ist ein POJO, das die Schnittstelle "com.ibm.websphere.batch.BatchJobStepInterface" implementiert. Die Implementierung dieser Schnittstelle stellt die Geschäftslogik des Stapelabschnitts bereit, die von der Stapellaufzeitumgebung aufgerufen wird, um die Stapelanwendung auszuführen.
Beim Packen einer Stapelanwendung wird jeder Stapelabschnitt als CMP-Entity-Bean deklariert, und die Geschäftslogik im POJO wird der Bean über einen Umgebungseintrag im EJB-Implementierungsdeskriptor zugeordnet. Die CMP-Entity-Bean tritt als Wrapper für Stapeljobabschnitte auf. Die Implementierung wird von der Laufzeitumgebung von WebSphere Extended Deployment bereitgestellt. Deshalb wird die Bean im EJB-Implementierungsdeskriptor deklariert und eigentlich nicht gepackt. Es werden mehrere Abschnitte in einer einzigen Stapelanwendung definiert.
Eine Stapelanwendung enthält auch eine Stateless-Session-Bean, die von der Laufzeitumgebung von WebSphere Extended Deployment bereitgestellt wird und als Controller für die Jobabschnitte agiert. Wie die CMP-Entity-Bean für die Abschnitte wird die Controller-Stateless-Session-Bean im Implementierungsdeskriptor der Anwendung deklariert. Sie deklarieren die Controller-Bean einmal pro Stapelanwendung.
Jeder Stapelabschnitt kann keinen oder mehrere Stapeldatenströme für die Eingabe und Ausgabe von Daten verwenden. Ein Stapeldatenstrom ist ein POJO, das die Schnittstelle "com.ibm.websphere.batch.BatchDataStream" implementiert.
Prüfpunktalgorithmen helfen der Stapellaufzeitumgebung zu entscheiden, wie oft die globale Transaktion, unter der Stapelabschnitte aufgerufen werden, festgeschrieben wird. Prüfpunktalgorithmen werden als POJOs erstellt, indem die Schnittstelle "com.ibm.wsspi.batch.CheckpointAlgorithm" implementiert wird. Die Stapellaufzeitumgebung stellt sofort einsatzfähige zeit- und datensatzbasierte Prüfpunktalgorithmen bereit.
Die Ergebnisalgorithmen, eine Zusatzfunktion des Stapelprogrammiermodells, werden verwendet, um die Rückkehrcodes von Stapeljobs zu bearbeiten. Die Stapellaufzeitumgebung stellt einen einfachen Ergebnisalgorithmus bereit, der den höchsten numerischen RC-Wert aller Jobabschnitte zurückgibt.
Komponente | Typ | Implementierung | Provider |
---|---|---|---|
Abschnitte eines Stapeljobs | POJO | com.ibm.websphere.BatchJobStepInterface | Stapelanwendung |
Stapeldatenstrom | POJO | com.ibm.websphere.batchDataStream | Stapelanwendung |
Prüfpunktalgorithmus | POJO | com.ibm.wsspi.batchCheckpointAlgorithm | Stapelanwendung (kann stattdessen die in der Laufzeitumgebung bereitgestellte Implementierung verwenden) |
Ergebnisalgorithmen | POJO | com.ibm.wsspi.batchResultsAlgorithm | Stapelanwendung (kann stattdessen die in der Laufzeitumgebung bereitgestellte Implementierung verwenden) |
Komponente | Typ | Implementierung | Provider |
---|---|---|---|
Stapeljobcontroller | Session-Bean | Stapellaufzeitumgebung | |
Wrapper für Stapeljobabschnitte | CMP-Entity-Bean | Stapellaufzeitumgebung | |
Prüfpunktalgorithmus | POJO | Stapellaufzeitumgebung (Anwendungen können eine eigene bereitstellen) | |
Ergebnisalgorithmen | POJO | Stapellaufzeitumgebung (Anwendungen können eine eigene bereitstellen) |
EJB-Implementierungsdeskriptor:
<ejb-jar id="ejb-jar_ID"> <display-name>POJOSampleEJBs</display-name> <enterprise-beans> <!--Stapeljobcontroller-Bean--> <session id="POJOJob"> <ejb-name>POJOJob</ejb-name> <home>com.ibm.ws.batch.BatchJobControllerHome</home> <remote>com.ibm.ws.batch.BatchJobController</remote> <ejb-class>com.ibm.ws.batch.BatchJobControllerBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <ejb-local-ref id="EJBLocalRef_1168709876999"> <ejb-ref-name>ejb/POJOStep1</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <ejb-link>POJOStep1</ejb-link> </ejb-local-ref> <ejb-local-ref id="EJBLocalRef_1127247535990"> <ejb-ref-name>ejb/POJOStep2</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface</local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <ejb-link>POJOStep2</ejb-link> </ejb-local-ref> <resource-ref id="ResourceRef_1168711637701"> <!-- Standard-Work-Manager für Stapeljobs --> <res-ref-name>wm/BatchWorkManager</res-ref-name> <res-type>commonj.work.WorkManager</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </session> <!-- Stapeljobabschnitt # 1 --> <entity id="POJOStep1"> <ejb-name>POJOStep1</ejb-name> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <!-- Wrapper für Stapeljobabschnitte --> <ejb-class>com.ibm.ws.batch.DefaultBatchJobStepBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>com.ibm.websphere.batch.BatchJobStepKey </prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>POJOStep1</abstract-schema-name> <cmp-field id="CMPAttribute_1168709093522"> <field-name>jobID</field-name> </cmp-field> <cmp-field id="CMPAttribute_1168709093542"> <field-name>stepID</field-name> </cmp-field> <!-- Umgebungseintrag, der Abschnitts-POJO dem Wrapper zuordnet --> <env-entry> <description>POJO class name for the batch step</description> <env-entry-name>POJOclass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <!-- Implementierung von POJO-Jobabschnitten --> <env-entry-value>com.ibm.websphere.samples.POJOStep1</env-entry-value> </env-entry> </entity> <!-- Stapeljobabschnitt # 2 --> <entity id="POJOStep2"> <ejb-name>POJOStep2</ejb-name> <local-home>com.ibm.websphere.batch.BatchJobStepLocalHomeInterface </local-home> <local>com.ibm.websphere.batch.BatchJobStepLocalInterface</local> <!-- Wrapper für Stapeljobabschnitte --> <ejb-class>com.ibm.ws.batch.DefaultBatchJobStepBean</ejb-class> <persistence-type>Container</persistence-type> <prim-key-class>com.ibm.websphere.batch.BatchJobStepKey</prim-key-class> <reentrant>False</reentrant> <cmp-version>2.x</cmp-version> <abstract-schema-name>POJOStep2</abstract-schema-name> <cmp-field id="CMPAttribute_1127248451496"> <field-name>jobID</field-name> </cmp-field> <cmp-field id="CMPAttribute_1127248451497"> <field-name>stepID</field-name> </cmp-field> <!-- Umgebungseintrag, der Abschnitts-POJO dem Wrapper zuordnet --> <env-entry> <description>POJO class name for the batch step</description> <env-entry-name>POJOclass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <!-- Implementierung von POJO-Jobabschnitten --> <env-entry-value>com.ibm.websphere.samples.POJOStep2</env-entry-value> </env-entry> </entity> </enterprise-beans> <assembly-descriptor id="AssemblyDescriptor_1168711087550"> <container-transaction> <method> <ejb-name>POJOStep1</ejb-name> <method-name>*</method-name> </method> <method> <ejb-name>POJOStep2</ejb-name> <method-name>*</method-name> </method> <!-- TX ERFORDERLICH --> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>