Rechenintensive Anwendungen verarbeiten rechenintensive Arbeitsvorgänge, die nicht gut in das traditionelle J2EE-Konzept von Antwort und Anforderung passen.
Das Jobkonzept wird von allen Anwendungen mit langer Laufzeit gemeinsam genutzt und ist an anderer Stelle beschrieben. Die folgenden Abschnitte bieten weitere Informationen zu den Erweiterungen des Asynchronous-Beans-Programmiermodells.
Rechenintensive Jobabschnitte
Wie alle Jobs mit langer Laufzeit sind alle rechenintensiven Jobs in mehrere Jobabschnitte unterteilt. Im Falle der rechenintensiven Jobs wird jeder Jobabschnitt durch die Instanz einer Klasse, die das Interface com.ibm.websphere.ci.CIWork implementiert, dargestellt. Das Interface CIWork erweitert das Work-Interface commonj.Work aus dem Asynchronous-Beans-Programmiermodell und JSR 237. Diese Erweiterungen bestehen aus zwei Methoden, die einen Weg zur Übergabe der im Job angegebenen jobspezifischen Merkmale an das CIWork-Objekt bereitstellen.
Weitere Informationen finden Sie in der API-Dokumenation.
Informationen zu Asynchronous Beans enthält der Artikel Asynchronous Beans verwenden des InfoCenter von WebSphere Application Server.
Controller-Bean
<session id="supply a suitable name here"> <ejb-name>CIController</ejb-name> <home>com.ibm.ws.ci.CIControllerHome</home> <remote>com.ibm.ws.ci.CIController</remote> <ejb-class>com.ibm.ws.ci.CIControllerBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <resource-ref id="WorkManager_ResourceRef"> <description> WorkManager, der zum Ausführen von Jobs verwendet wird. <res-ref-name>wm/CIWorkManager</res-ref-name> <res-type>commonj.work.WorkManager</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope>
Eine rechenintensive Anwendung packen
Die Logik für eine rechenintensive Anwendung (eine Reihe von CIWork-Objekten und die Klassen, die zur Unterstützung dieser CIWork-Objekte erforderlich sind) wird in einem Enterprise-Bean-Modul in einer EAR-Datei der J2EE-Anwendung gepackt. Beachten Sie, dass der Deployment-Deskriptor für das Enterprise-Bean-Modul die Definition der oben dargestellten Stateless-Session-Bean enthalten muss. Wenn die Anwendung selbst andere Enterprise-Beans oder Ressourcen verwendet, können die Definitionen für diese Beans und Ressourcen ebenfalls im Deployment-Deskriptor erscheinen. J2EE-Entwicklungstools, wie z. B. IBM Rational Application Developer, können verwendet werden, um rechenintensive Anwendungen zu entwickeln und zu packen, und zwar auf dieselbe Weise, wie dies beim Erstellen von J2EE-Anwendungen, die Enterprise-Bean-Module und Asynchronous Beans enthalten, der Fall ist.
Lebenszyklus einer rechenintensiven Anwendung
Wenn der Job abgebrochen wird, bevor die Methode run() zurückgegeben wird, ruft die CIControllerBean die Methode release() des CIWork-Objekts für einen separaten Thread auf. Es obliegt dem Entwickler der Anwendung mit langer Laufzeit, entsprechende Logik in die Methode release() einzufügen, die bewirkt, dass die Methode run() unmittelbar zurückgegeben wird. Der Job bleibt im Status Abbrechen anstehend, bis die Methode run() zurückgegeben wird.
Wenn der Job nicht abgebrochen und die Methode run() ohne Ausnahmebedingung zurückgegeben wird, gilt der Job als erfolgreich abgeschlossen. Wenn die Methode run() eine Ausnahmebedingung auslöst, wird der Job wie folgt gekennzeichnet: Ausführung fehlgeschlagen. Wird die Methode run() zurückgegeben (auf normalem Wege oder durch Auslösen einer Ausnahmebedingung), werden keine weiteren Aufrufe an das CIWork-Objekt abgesetzt.
Related concepts
Anwendungen mit langer Laufzeit entwickeln