![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
Transaktionszeitlimits im Modus ohne ASF vermeiden
Wenn Ihre Messaging-System im Modus ohne ASF (Application Server Facilities) ausgeführt wird, müssen Sie die Transaktionsserviceeigenschaft Zeitlimit für Gesamtlebensdauer der Transaktion und die angepasste Eigenschaft NON.ASF.RECEIVE.TIMEOUT des Nachrichten-Listener-Service richtig konfigurieren, um nicht erwünschte Transaktionszeitlimits zu vermeiden.
Vorbereitende Schritte
Damit die Schritte in dieser Task ausgeführt werden können, muss Ihr Messaging-System im Modus ohne ASF ausgeführt werden. Um den ASF-Status in einen Status ohne ASF zu ändern, fügen Sie die angepasste Eigenschaft NON.ASF.RECEIVE.TIMEOUT wie im Artikel Nachrichten-Listener-Service konfigurieren beschrieben zum Nachrichten-Listener-Service hinzu.
Informationen zu diesem Vorgang
In WebSphere Application Server Version 7
und höher sind Listener-Ports stabilisiert. Weitere
Informationen finden Sie im Artikel zu den stabilisierten Features. Deshalb sollten Sie die Migration Ihrer WebSphere MQ-MDB-Implementierungskonfigurationen
von Listener-Ports auf Aktivierungsspezifikationen planen. Weitere Informationen zum Konfigurieren der Aktivierungsspezifikationen für Nicht-ASF-Modus finden Sie unter Aktivierungsspezifikation für Nicht-ASF-Modus konfigurieren. Sie sollten die Migration jedoch erst dann durchführen, wenn Sie sicher sind, dass die Anwendung nicht in Anwendungsservern einer früheren Version als WebSphere Application Server Version 7 ausgeführt werden muss.
Wenn beispielsweise in einem Anwendungs-Server-Cluster einige Member Version 6.1 und andere Member eine höhere Version
haben, sollten Sie Anwendungen in diesem Cluster erst dann auf die Verwendung von Aktivierungsspezifikationen migrieren,
wenn Sie alle Anwendungsserver im Cluster auf die höhere Version migriert haben.
Wenn Ihr Messaging-System im Modus ohne ASF ausgeführt wird, müssen Sie, um nicht erwünschte Transaktionszeitlimitis zu vermeiden, ausreichend Zeit für die Verarbeitung zulassen, bevor das Zeitlimit für die Gesamtlebensdauer der Transaktion erreicht wird. Vergewissern Sie sich, dass der für die angepasste Eigenschaft NON.ASF.RECEIVE.TIMEOUT des Nachrichten-Listener-Service angegebene Wert kleiner ist als der Wert für die Eigenschaft Zeitlimit für Gesamtlebensdauer der Transaktion des Transaktionsservice und dass die Differenz zwischen den Werten der zwei Eigenschaften größer ist als der Wert für den Zeitraum, den die Methode onMessage() Ihrer MDB benötigt, um die Nachricht zu verarbeiten.
Vorgehensweise
- Führen Sie Schritt 8 im Artikel Transaktionseigenschaften für einen Anwendungsserver konfigurieren aus, um die Eigenschaft Zeitlimit für Gesamtlebensdauer der Transaktion des Transaktionsservice zu konfigurieren.
- Klicken Sie zum Konfigurieren der angepassten Eigenschaft NON.ASF.RECEIVE.TIMEOUT des Nachrichten-Listener-Service auf .
- Klicken Sie auf NON.ASF.RECEIVE.TIMEOUT. Daraufhin wird die Seite Allgemeine Eigenschaften angezeigt.
- Ändern Sie den Inhalt des Felds Wert. Der Wert der Eigenschaft NON.ASF.RECEIVE.TIMEOUT muss in Millisekunden angegeben werden. Vergewissern Sie sich, dass der angegebene Wert bei der Konvertierung in Sekunden (Division durch den Wert 1000) kleiner ist als der Wert für das Zeitlimit für Gesamtlebensdauer der Transaktion und dass die Differenz zwischen den Werten der zwei Eigenschaften größer ist als der Wert für den maximalen Zeitraum (angegeben in Sekunden), den die Methode onMessage() Ihrer MDB benötigt, um eine Nachricht zu verarbeiten.
- Klicken Sie auf OK.
- Stoppen Sie den Anwendungsserver und starten Sie ihn dann erneut.
Beispiel
- Der Listener-Port wird gestartet, ordnet einen Thread aus dem Thread-Pool zu und erstellt eine Transaktion im Thread.
- Der Thread ruft die Methode receive() auf, um die Empfangsbereitschaft für Nachrichten sicherzustellen.
- Nach 110 Sekunden erscheint eine Nachricht am Ziel.
- Der Thread entfernt die Nachricht aus dem Ziel und ruft die Methode onMessage() der MDB auf, um mit der Verarbeitung der Nachricht zu beginnen.
- Zehn Sekunden später ist das Transaktionszeitlimit erreicht. Der Anwendungsserver markiert die Transaktion für den Rollback.
- Fünf Sekunden später beendet die Methode onMessage() die Verarbeitung der Nachricht und versucht, die Transaktion festzuschreiben.
- Der gesamte Zeitraum, der seit dem Start der Transaktion verstrichen ist, beträgt 125 Sekunden (110 Sekunden auf eine Nachricht warten und 15 Sekunden zur Verarbeitung der Nachricht). Da dieser Zeitraum länger ist als das Transaktionszeitlimit, verhindert der Anwendungsserver, dass die Transaktion festgeschrieben wird, und sie wird zurückgesetzt.