Daten für einen Zeitgeberservice zwischenspeichern
Wenn Sie den Datenbankzugriff und die SQL-Aufrufe für einen EJB-Zeitgeberservice optimieren möchten, können Sie den Anwendungsserver so konfigurieren, dass er die Daten für diesen Zeitgeber zwischenspeichert. Das Caching ermöglicht dem Anwendungsserver, Zeitgeberdaten wiederzuverwenden, ohne die Datenbank jedes Mal erneut abfragen zu müssen, wenn Daten erforderlich sind.
Informationen zu diesem Vorgang
Die Spezifikation für Enterprise-Beans erfordert, dass für jeden Aufruf der Schnittstelle "javax.ejb.Timer" ein SQL-Aufruf an die Datenbank abgesetzt wird, sodass die Anwendung sicherstellen kann, dass der EJB-Zeitgeber die aktuellsten verfügbaren Daten verwendet. Wenn diese Methoden häufig aufgerufen werden oder wenn Sie viele EJB-Zeitgeber haben, die eine dieser Methoden aufrufen, generiert der Anwendungsserver in sehr kurzer Zeit sehr viele SQL-Anweisungen. Es kann Situationen geben, in denen sich die strenge Einhaltung dieser Anforderung nachteilig auf die Leistung auswirkt und mehr Aufwand als zugesichert erzeugt.
Angenommen, ein Zeitgeber läuft immer nur montags um 12:00 Uhr morgens ab. Im Laufe der Woche bewirkt jeder Aufruf einer Methode in der Zeitgeberschnittstelle die Erstellung eines SQL-Aufrufs, aber der Aufruf gibt immer dieselben Daten zurück. Wenn eine Anwendung die Methode "ejbTimeout" für einen Zeitgeber aufruft, können die Daten, die diesem Zeitgeber zugeordnet sind, außerdem nicht mehr geändert werden. Die Daten des Zeitgebers, die in der Datenbank gespeichert sind, können nicht aktualisiert werden, während eine Methode "ejbTimeout" für diesen Zeitgeber aktiv ist. Deshalb bewirken alle nachfolgenden Methodenaufrufe, die Anwendungen innerhalb des Zeitlimitintervalls absetzen, die Generierung unnötiger SQL-Aufrufe und unnötige Interaktionen mit der Datenbank.
Wenn Sie jedoch das Caching für Zeitgeberdaten aktivieren, fragt der Anwendungsserver die Datenbank nur beim ersten Aufruf einer konfigurierten Methode ab. Für alle nachfolgenden Aufrufe einer der konfigurierten Methoden verwendet der Anwendungsserver die zwischengespeicherten Daten für die Lebensdauer des Zeitgeberobjekts, und es wird kein neuer SQL-Aufruf generiert.

- Wenn dieses Feature aktiviert ist, ist Ihre Konfiguration mit der EJB-Spezifikation nicht mehr kompatibel.
- Dieses Feature kann dazu führen, dass ein Zeitgeber unter Umständen veraltete Daten verwendet.
Zwischengespeicherte Daten für einen Zeitgeberservice sind nach dem nächsten Ablaufzeitraum für den Zeitgeber veraltet.
Angenommen, Sie haben einen Zeitgeber mit einem konfigurierten Ablaufzeitraum von einer Stunde. Wenn Sie das Zeitgeberobjekt erstellen und speichern, sind die Daten, die der Anwendungsserver für dieses Objekt zwischenspeichert nur eine Stunde lang aktuell. Die zwischengespeicherten Daten sind identisch mit den Daten, die in der Datenbank gespeichert sind.
Wenn Sie innerhalb der ersten Stunde Zeitgebermethoden aufrufen, sind die Zeitgeberdaten aktuell. Nach diesem Ablaufzeitraum sind die zwischengespeicherten Daten für den Zeitgeber jedoch veraltet und spiegeln unter Umständen die Daten, die in der Datenbank gespeichert sind, nicht mehr exakt wider. Wenn Sie in diesem Beispiel den EJB-Container für alle Zeitgeber nach anderthalb Stunden abfragen, erhält die Anwendung ein neues Zeitgeberobjekt, das zwischengespeicherte Daten enthält, die noch dreißig Minuten lang aktuell bleiben. Dies ist darauf zurückzuführen, dass der Zeitgeber bei Stunde 2 erneut abläuft und alle zwischengespeicherten Daten dann veraltet sind.
Vorgehensweise
Beispiel
- App1#EJBJar1.jar#EJBTimer1
- App2#EJBJar2.jar#EJBTimer2
- Beispiel 1
- In diesem Beispiel wird das Caching auf alle Methoden für alle Zeitgeber und für alle Anwendungen angewendet.
Verwenden Sie einen der folgenden Werte:
- Verwendung der Standardwerte:
*
- Angabe eines ganzzahligen Werts:
*=127
- Verwendung der Standardwerte:
- Beispiel 2
- In diesem Beispiel wird das Caching auf die Methode "getInfo" in allen Zeitgebern für alle Anwendungen angewendet.
Verwendung des folgenden Werts:
*=2
- Beispiel 3
- In diesem Beispiel wird das Caching auf die Methoden "getHandle" und "getNextTimeout" in EJBTimer2 angewendet.Verwendung des folgenden Werts:
App2#EJBJar2.jar#EJBTimer2=5
- Beispiel 4
- In diesem Beispiel wird das Caching angewendet auf
- die Methode "getInfo" in EJBTimer1,
- die Methoden "getNextTimeout" und "getTimeRemaining" in EJBTimer2.
App1#EJBJar1.jar#EJBTimer1=2:App2#EJBJar2.jar#EJBTimer2=12