Programmiermodell für rechenintensive Anwendungen

Rechenintensive Anwendungen verarbeiten rechenintensive Anforderungen, die nicht gut in das traditionelle Java-EE-Konzept (Java™ Platform, Enterprise Edition) von Antwort und Anforderung passen.

Rechenintensive Anwendungen

Es gibt eine Reihe von Merkmalen, die diese Anwendungen für traditionelle Java-EE-Programmiermodelle ungeeignet machen können:
  • Der Bedarf nach asynchroner Übergabe und Ausführung von Anforderungen.
  • Der Bedarf nach Anforderungen mit langer Laufzeit.
  • Der Bedarf nach individuellen Arbeitseinheiten, die von Bedienern und Administratoren erkannt und gesteuert werden können.
Das Programmiermodell für rechenintensive Anwendungen 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 Anforderungen.
  2. Eine geringfügige Erweiterung des auf asynchronen Beans basierenden Programmiermodells zur Unterstützung von Anforderungen mit langer Laufzeit.

Die folgenden Abschnitte bieten weitere Informationen zu den Erweiterungen des Programmiermodells mit asynchronen Beans.

Controller-Bean

Die Controller-Bean ist eine im Implementierungsdeskriptor der rechenintensiven Anwendung definierte Stateless-Session-Bean, mit der die Laufzeitumgebung Jobs für die Anwendung steuern kann. Die Implementierung dieser Stateless-Session-Bean wird vom Anwendungsserver bereitgestellt. Die Anwendung schließt die Stateless-Session-Bean, die in der folgenden Definition dargestellt ist, in den Implementierungsdeskriptor eines der Enterprise-Bean-Module ein. Für jede rechenintensive Anwendung muss genau eine Controller-Bean definiert werden. Da die Implementierung der Controller-Bean in der Laufzeitumgebung des Anwendungsservers bereitgestellt wird, dürfen Anwendungsimplementierer während der Implementierung rechenintensiver Anwendungen nicht die Implementierung von Enterprise-Beans anfordern.
<session id="geeigneten Name angeben">
   <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 mit einer Reihe von CIWork-Objekten und den Klassen, die zur Unterstützung dieser CIWork-Objekte erforderlich sind, wird in einem Enterprise-Bean-Modul in einer EAR-Datei der Java EE-Anwendung gepackt. Der Implementierungsdeskriptor für das Enterprise-Bean-Modul muss die Definition der zuvor beschriebenen Stateless-Session-Bean enthalten. Wenn die Anwendung selbst andere Enterprise-Beans oder Ressourcen verwendet, können die Definitionen für diese Beans und Ressourcen ebenfalls im Implementierungsdeskriptor enthalten sein. Java-EE-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 Java EE-Anwendungen, die Enterprise-Bean-Module und asynchrone Beans enthalten, der Fall ist. Zum Packen rechenintensiver Anwendungen können Sie auch die Task "pgcpackager" verwenden.

Lebenszyklus einer rechenintensiven Anwendung

Eine rechenintensive Anwendung wird vom Anwendungsserver auf dieselbe Weise gestartet wie andere Java EE-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 die Stateless-Session-Bean "CIControllerBean" auf, die im Implementierungsdeskriptor des EJB-Moduls der Anwendung definiert ist. Der JNDI-Name dieser Stateless-Session-Bean ist in der xJCL für den Job angegeben. Die Stateless-Session-Bean "CIControllerBean" führt für jeden Jobabschnitt die folgenden Aktionen aus:
  1. Sie instanziert das vom Element "classname" in der xJCL für den Jobabschnitt angegebene CIWork-Objekt mit dem argumentlosen Konstruktor der Klasse "CIWork".
  2. Sie ruft die Methode "setProperties()" des CIWork-Objekts auf, um alle Eigenschaften, die in der xJCL für den Jobabschnitt definiert sind, zu übergeben.
  3. Sie sucht den im Implementierungsdeskriptor 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 Bean "CIControllerBean" die Methode "release()" des CIWork-Objekts in einem 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 wird und die Methode "run()" ohne Rückgabe einer Ausnahme zurückkehrt, wurde der Job erfolgreich ausgeführt. Gibt die Methode "run()" eine Ausnahme zurück, lautet der Jobstatus Ausführung fehlgeschlagen. Nachdem die Methode "run()" erfolgreich oder mit einer Ausnahme zurückkehrt, werden keine weiteren Aufrufe an das Objekt "CIWork" abgesetzt. Alle Referenzen auf die Methode "run()" werden gelöscht.

Rechenintensiver Jobabschnitt

Anders als andere Stapeljobs bestehen rechenintensive Jobs nur aus einem einzigen Jobabschnitt. Dieser Jobabschnitt wird durch die Instanz einer Klasse, die die Schnittstelle "com.ibm.websphere.ci.CIWork" implementiert, dargestellt. Die Schnittstelle "CIWork" erweitert die Work-Schnittstelle "commonj.Work" aus dem Programmiermodell für asynchrone Beans des Anwendungsservers und JSR 237. Diese Erweiterungen bestehen aus zwei Methoden, die einen Weg zur Übergabe der im Job angegebenen jobspezifischen Eigenschaften an das "CIWork"-Objekt bereitstellen.

Weitere Einzelheiten finden Sie in der API-Dokumentation.

Weitere Informationen zu asynchronen Beans erfahren Sie im Artikel zur Verwendung von asynchronen Beans.


Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cgrid_schintensve
Dateiname:cgrid_schintensve.html