WebSphere Extended Deployment Compute Grid, Version 6.1.1
             Betriebssysteme: AIX, HP-UX, Linux, Solaris, Windows


POJO-Programmiermodell

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.

Abschnitte eines Stapeljobs

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.

Stapelcontroller-Bean

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.

Stapeldatenströme

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

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.

Ergebnisalgorithmen

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.

Komponenten einer Stapelanwendung

Tabelle 1. Komponenten einer Stapelanwendung, die von Entwicklern von Stapelanwendungen bereitgestellt werden
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)
Tabelle 2. Komponenten einer Stapelanwendung, die von der Stapellaufzeitumgebung bereitgestellt werden
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)

Beispiel

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>



Zugehörige Konzepte
Stapelprogrammiermodell
Zugehörige Tasks
Eine einfache Stapelanwendung entwickeln
Eine Stapelanwendung mit POJO erstellen
Konzeptartikel    

Nutzungsbedingungen | Feedback

Letzte Aktualisierung: 24.09.2009 16.46 Uhr EDT
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r1m1/index.jsp?topic=/com.ibm.websphere.gridmgr.doc/info/scheduler/ccgpojomodel.html