Dieser Artikel beschreibt, wie Sie eine einfache Stapelanwendung schreiben.
Vorbereitungen
Vor dem Starten dieser Task müssen Sie Ihre Umgebung einrichten. Sie können die angepasste Eigenschaft
"com.ibm.websphere.ejbcontainer.expandCMPCFJNDIName" konfigurieren, bevor Sie eine Compute-Grid-Stapelanwendung entwickeln.
Weitere Informationen zur Konfiguration finden Sie im Artikel
Angepasste Eigenschaften der Java Virtual Machine
.
Informationen zu dieser Task
Diese Beispiel-Task geht davon aus, dass der Benutzer Rational Application
Developer verwendet. Es können aber auch andere Entwicklungstools verwendet werden.
Prozedur
-
Erstellen Sie ein neues Unternehmensanwendungsprojekt mit dem Namen PostingsSample2.
-
Fügen Sie ein neues EJB-Projektmodul hinzu.
Damit wird eine neue EAR-Datei (Enterprise ARchive) und ein Enterprise-EJB-Projekt erstellt.
-
Fügen Sie batchruntime.jar zum Java-Erstellungspfad für das Projekt
PostingsSample2EJB hinzu. Die Datei "batchruntime.jar"
befindet sich im Ordner "<WAS_HOME>/lib".
-
Nehmen Sie an, es gibt eine vorhandene Java-Klasse AccountOp, das ein
Java-Objekt mit zwei öffentlichen Schnittstellenmethoden ist, 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 einer abstrakten Stapelabschnittsklasse übernommen wird. Führen Sie die folgenden Unterschritte aus, um den abstrakten Jobabschnitt
PostingSample2Step zu erstellen:
-
Erstellen Sie im Projekt "PostingsSample2EJB" die abstrakte Java-Klasse PostingSample2Step, die von
BatchJobStepInterface übernommen wird.
-
Fügen Sie BatchJobStepInterface hinzu.
-
Definieren Sie die Klasse als abstrakte Klasse.
-
Erstellen Sie die Stapel-Bean.
Diese Unterschritte 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 Implementierungsdeskriptor. 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 Implementierungsdeskriptor. Wie zuvor fügen Sie die Implementierung für die EJB später hinzu.
-
Erstellen Sie die Session-Bean des Stapeljobs.
Der Stapeljob ist eine Session-Bean, die
im Implementierungsdeskriptor 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 Implementierungsdeskriptor wird nur die Job-Session-Bean deklariert.
-
Ändern Sie den JNDI-Namen für WebSphere-Bindungen in ejb/com/ibm/ws/batch/PostingsSample2Job.
-
Fügen Sie eine EJB-Referenz zum PostingsSample2Job hinzu.
-
Wählen Sie die Bean PostingsSample2Data aus, und fügen Sie den folgenden Namen hinzu: ejb/PostingsSample2Data.
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 Ressourcenreferenz aus, klicken Sie auf Weiter, und geben Sie die folgenden Informationen an:
- Name: wm/BatchWorkManager
- Typ: commonj.work.WorkManager
- Authentifizierung: Container
- Bereich der gemeinsamen Nutzung: 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 Eingabestapeldatenstrom.
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.
Stapeldatenstromklassen (Batch Data Stream, BDS) sind POJO (Plain Old Java Object). 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 Posting2Class, um einen Datensatz aus dem Eingabedatenstrom darzustellen.
Diese Klasse ist die Objektdarstellung eines Datensatzes im Stapeleingabedatenstrom.
Sie wird erstellt, wenn ein Datensatz aus dem Eingabestapeldatenstrom gelesen wird, und an die Bean für Stapelverarbeitung übergeben.
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 PostingSample2Data, 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.