Dieser Artikel beschreibt, wie Sie eine einfache Stapelanwendung schreiben.
Vorbereitungen
Vor dem Starten dieser Task müssen Sie Ihre Umgebung einrichten.
Gründe und Szenarios für die Ausführung dieser Task
Diese Beispiel-Task geht davon aus, dass Sie Rational Application
Developer (RAD) verwenden. Es können aber auch andere Entwicklungstools verwendet werden.
- Erstellen Sie ein neues Enterprise-Anwendungsprojekt mit dem Namen PostingsSample2.
- Fügen Sie ein neues EJB-Projektmodul hinzu. Dabei werden eine neue
EAR-Datei und ein EJB-Projekt erstellt.
- Fügen Sie BATCH_RUNTIME zum Java-Erstellungspfad für das Projekt
PostingsSample2EJB hinzu.
- Nehmen Sie an, es gibt eine vorhandene Java-Klasse AccountOp und ein
Java-Objekt mit zwei öffentlichen Schnittstellenmethoden, creditAccount(..) und debitAccount(..).
Diese Methoden werden bei Bedarf von der Stapel-Bean aufgerufen. Importieren Sie diese Klasse aus dem Arbeitsbereich
oder schreiben Sie eine Klasse, die die Stapelanwendung aufruft.
- Erstellen Sie die Klasse BatchStep. Die Stapel-Bean ist eine Entity-Bean,
die von der abstrakten Klasse BatchStep erbt. Gehen Sie wie folgt vor, um den abstrakten Jobabschnitt
PostingSample2Step zu erstellen:
- Erstellen Sie im Projekt PostingsSample2EJB eine abstrakte Java-Klasse PostingSample2Step, die von
BatchJobStepInterface erbt.
- Fügen Sie BatchJobStepInterface hinzu.
- Definieren Sie die Klasse als abstrakte Klasse.
- Erstellen Sie die Stapel-Bean (Entity-EJB). Diese Schritte beschreiben, wie die Stapel-Bean
manuell erstellt wird. Die Stapel-Bean verwendet die Klassen BatchJobStepLocalInterface,
BatchJobStepKey und BatchJobStepLocalHome aus dem bereitgestellten
Programmiermodell. Diese Klassen werden nicht erneut erstellt.
Es wird nur die Implementierung der Stapel-Bean generiert.
- Erstellen Sie im Projekt PostingSample2EJB eine neue CMP-EJB mit dem Namen PostingsSample2Data.
- Wählen Sie für die Local-Home-Schnittstellenklasse BatchJobStepLocalHomeInterface aus.
- Wählen Sie für die Local-Schnittstellenklasse BatchJobStepLocalInterface aus.
- Wählen Sie die Option Einfachen Schlüsselattributtyp für die Schlüsselklasse verwenden ab.
- Wählen Sie für die Schlüsselklasse BatchJobStepKey aus.
- Entfernen Sie die CMP-Attribut-ID.
- Fügen Sie im CMP-Attribut die beiden CMP-Attribute jobID und stepID der Typzeichenfolge hinzu.
- Fügen Sie jobID als Name und java.lang.String als Typ hinzu.
Wählen Sie Schlüssel aus.
- Fügen Sie stepID hinzu und geben Sie java.lang.String im Feld
Schlüssel ein.
- Wählen Sie BeanSuperclass aus. Erstellen Sie einen entsprechenden Typ PostingStep2.
Damit wird die neue EJB erstellt, aber in den Projekten wird nur die EJB-Bean-Klasse angezeigt.
Die Local-Schnittstelle, die Home-Schnittstelle und die Schlüsselklasse werden
den mit dem Programmiermodell bereitgestellten Klassen entnommen.
- Editieren Sie den Deployment-Deskriptor. Nehmen Sie die folgenden Änderungen in der Datei
ejb-jar.xml für PostingSample2Data vor.
- Ändern Sie auf der Registerkarte Bean den Namen der CMP-Verbindungs-Factory in jdbc/lree und den
Berechtigungstyp für den Container in Per_Connection_Factory.
- Setzen Sie auf der Registerkarte Assemblierung für die Containertransaktionen alle Methoden (*) von PostingsSample2Data auf Erforderlich.
- Ändern Sie den JNDI-Namen unter "WebSphere-Bindings" in ejb/com/ibm/ws/batch/sample/PostingsSample2Data.
- Speichern und schließen Sie den Deployment-Deskriptor. Wie zuvor fügen Sie die Implementierung für die EJB später hinzu.
- Erstellen Sie die Session-Bean für den Stapeljob. Der Stapeljob ist eine Session-Bean, die
im Deployment-Deskriptor deklariert wird, aber keine generierten Klassen hat, weil diese alle zur Laufzeitumgebung gehören.
- Klicken Sie für die Datei ejb-jar.xml auf der Registerkarte Bean
auf Hinzufügen, um eine neue Session-EJB zu erstellen. Geben Sie der Bean den Namen PostingsJob2.
- Ändern Sie den Transaktionstyp in "Bean".
- Geben Sie für die Bean-Klasse, die Remote-Home-Schnittstelle und die Remote-Schnittstelle die folgenden Zeichenfolgen ein:
- Bean-Klasse: com.ibm.ws.batch.BatchJobControllerBean
- Remote-Schnittstelle: com.ibm.ws.batch.BatchJobController
- Remote-Home-Schnittstelle: com.ibm.ws.batch.BatchJobControllerHome
Beachten Sie, dass keine neue Klasse generiert wird, weil alle Klassen in der Laufzeitumgebung vorhanden sind.
Im Deployment-Deskriptor wird nur die Job-Session-Bean deklariert.
- Ändern Sie den JNDI-Namen für WebSphere-Bindings in ejb/com/ibm/ws/batch/PostingsSample2Job.
- Fügen Sie eine Referenz auf PostingsSample2Job mit dem Typ "EJB-Verweis" hinzu.
- Wählen Sie PostingsSample2Data Bean aus und fügen Sie den Namen ejb/PostingsSample2Data
hinzu. Wählen Sie den Referenztyp "Lokal" aus.
- Erstellen Sie die Referenz auf den Arbeitsmanager.
- Klicken Sie für die Bean PostingSample2Job auf der Registerkarte Verweise auf Hinzufügen.
Wählen Sie Ressourcenverweis aus und klicken Sie auf Weiter.
- Name: wm/BatchWorkManager
- Typ: commonj.work.WorkManager
- Authentifizierung: Container
- Bereich der gemeinsamen Benutzung: Shareable
- Ändern Sie den JNDI-Namen von
wm/BatchWorkManger in wm/default.
- Speichern und schließen Sie die Datei ejb-jar.xml.
- Erstellen Sie den Eingabedatenstrom für den Stapeljob. Es kann 0, 1 oder n
Eingabe- und/oder Ausgabedatenströme geben. In diesem Beispiel gibt es einen Eingabedatenstrom,
der aus einer Datei liest, und keinen Ausgabedatenstrom. Die Ausgabe wird in die Konsole geschrieben.
Die BDS-Klassen sind POJO. Führen Sie zum Erstellen des Eingabedatenstroms die folgenden Schritte aus:
- Erstellen Sie eine neue Klasse im Paket com.ibm.ws.batch.sample mit dem Namen PostingsSample2InputStream.
- Implementieren Sie die Schnittstelle BatchDataStream. Damit wird die neue
Datenstromklasse PostingSample2Input erstellt. Sie können die Implementierung später hinzufügen.
- Erstellen Sie die Klasse Posting2, um einen Datensatz aus den Eingabedatenstrom darzustellen.
Diese Klasse ist die Objektdarstellung eines Datensatzes im Stapeleingabedatenstrom.
Sie wird erstellt, während ein Datensatz aus dem Eingabe-BDS gelesen wird, und an die Stapel-Bean weitergegeben.
Diese Klasse ist mit einer Daten- oder Cargo-Bean zu vergleichen, die Attribute und entsprechende Setter und Getter
für die Felder im Eingabedatenstrom enthält.
- Erstellen Sie eine neue Klasse mit dem Namen Posting2, die die Schnittstelle Serializable
implementiert. Implementierungen können später hinzugefügt werden.
- Fügen Sie den Klassen Implementierungen hinzu.
- Fügen Sie jetzt, wie in den mitgelieferten Klassendateien definiert, Implementierungen zu PostingSample2DataBean, PostingSample2Step
und PostingSample2InputStream hinzu. Dieses Beispiel wird aus Verarbeitungsperspektive
einfach gehalten, um die Schritte für die Entwicklung einer neuen Stapelanwendung
klar herauszuheben. Nachdem Sie die Implementierungsklassen hinzugefügt haben, können Sie die EJB implementieren.
Nächster Artikel
Erweitern Sie in der Navigationsstruktur der Administrationskonsole den Eintrag Laufzeitoperationen und wählen Sie Jobverwaltung aus.
Stellen Sie sicher, dass die rechte Anzeige eine leere Jobtabelle ohne Fehlernachrichten enthält.