WebSphere Extended Deployment, Version 6.0.x     Betriebssysteme: AIX, HP-UX, Linux, Solaris, Windows, z/OS

Programmiermodell für rechenintensive Anwendungen

Rechenintensive Anwendungen verarbeiten rechenintensive Arbeitsvorgänge, die nicht gut in das traditionelle J2EE-Konzept von Antwort und Anforderung passen.

Es gibt eine Reihe von Merkmalen, die diese Anwendungen für traditionelle J2EE-Programmiermodelle ungeeignet machen können:
Das Programmiermodell für rechenintensive Anwendungen von WebSphere Extended Deployment stellt eine Umgebung bereit, die diesen Bedarf berücksichtigt. Dieses Programmiermodell konzentriert sich auf zwei Grundkonzepte:
  1. Die Verwendung von Jobs zur asynchronen Übergabe und Steuerung von Arbeitsvorgängen.
  2. Eine geringfügige Erweiterung des auf Asynchronous Beans basierenden Programmiermodells zur Unterstützung von Arbeitsvorgängen mit langer Laufzeit.

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

Die Controller-Bean ist eine im Deployment-Deskriptor der rechenintensiven Anwendung definierte Stateless-Session-Bean, mit der die Ausführungsumgebung Jobs für die Anwendung steuern kann. Die Implementierung dieser Stateless-Session-Bean wird von WebSphere bereitgestellt. Die Anwendung ist lediglich zuständig dafür, die Stateless-Session-Bean, die in der folgenden Definition dargestellt ist, in den Deployment-Deskriptor eines der Enterprise-Bean-Module aufzunehmen. Beachten Sie, dass für jede rechenintensive Anwendung genau eine Controller-Bean definiert werden muss. Da die Implementierung der Controller-Bean in der WebSphere-Laufzeit bereitgestellt wird, dürfen Anwendungsimplementierer während der Implementierung rechenintensiver Anwendungen nicht die Implementierung von Enterprise-Beans anfordern.
<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

Eine rechenintensive Anwendung wird vom Anwendungsserver auf dieselbe Weise gestartet wie andere J2EE-Anwendungen. Wenn die Anwendung Startup-Beans definiert, werden diese beim Starten des Anwendungsservers ausgeführt. Wenn ein Job für die Anwendung eingeht, ruft die rechenintensive Umgebung (LREE.ear) die Stateless-Session-Bean CIControllerBean auf, die im Deployment-Deskriptor des EJB-Moduls der Anwendung definiert ist. Der JNDI-Name dieser Stateless-Session-Bean ist in der xJCL für den Job angegeben. Für jeden Jobabschnitt führt die CIControllerBean folgende Aktionen aus:
  1. Sie instanziert das vom Element "classname" in der xJCL für den Jobabschnitt angegebene CIWork-Objekt mit dem no-argument-Konstruktor der CIWork-Klasse.
  2. Sie ruft die Methode setProperties() des CIWork-Objekts auf, um alle Merkmale, die in der xJCL für den Jobabschnitt definiert sind, zu übergeben.
  3. Sie lokalisiert den im Deployment-Deskriptor des Enterprise-Bean-Moduls definierten Work Manager und verwendet ihn, um die Methode run() des CIWork-Objekts asynchron aufzurufen.

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

Konzeptartikel    

Nutzungsbedingungen | Feedback Letzte Aktualisierung: Mar 23, 2006 9:54:23 AM EST
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/index.jsp?topic=?topic=/com.ibm.websphere.xd.doc/info/scheduler/cschintensve.html

© Copyright IBM 2005, 2006. Alle Rechte vorbehalten.
Dieses Information Center beruht auf der Eclipse-Technologie. (http://www.eclipse.org)