Beispiel: Schreibgeschützte Entity-Bean verwenden
Im Folgenden werden ein Einsatzszenario und ein Beispiel für das Schreiben einer EJB-Anwendung beschrieben, die eine schreibgeschützte Entity-Bean verwendet.
Einsatzszenario
Ein Kunde hat eine Datenbank mit Katalogpreisen und Versandtarifen, die täglich spätestens um 22:00 Ortszeit aktualisiert wird. Der Kunde möchte eine EJB-Anwendung schreiben, die auf diese Daten im Lesezugriff zugreift, d. h. die Anwendung soll die Datenbank nicht aktualisieren. Die Aktualisierung soll von einer anderen Anwendung durchgeführt werden.
Beispiel
Die lokale Schnittstelle der Entity-Bean des Kunden ist wie folgt definiert:
public interface ItemCatalogData extends EJBLocalObject {
public int getItemPrice();
public int getShippingCost(int destinationCode);
}
Der Code in der Methode der Stateless-Session-Bean (beispielsweise TxRequired), die diese Entity-Bean aufruft, um die Gesamtkosten inklusive Versand zu ermitteln, könnte wie folgt aussehen:
.....
// Bis zu diesem Punkt finden einige transaktionsorientierte Schritte statt, z. B. Entfernen eines Artikels
// aus dem Inventar usw.
// Jetzt den Preis des Artikels abrufen und mit der Berechnung der Gesamtkosten für den Käufer beginnen
ItemCatalogData theItemData =
(ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber);
int totalcost = theItemData.getItemPrice();
// ... Dazwischen andere Verarbeitungsschritte durchführen
// ...
// ...
// Versandkosten hinzufügen
totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
Veraltetes Feature: Die Attribute "reloadInterval" und "reloadingEnabled" der Erweiterungen für IBM Implementierungsdeskriptoren sind veraltet. Dies gilt sowohl für die Erweiterung für WAR-Dateien (WEB-INF/ibm-web-ext.xmi) als auch für die Anwendungserweiterung (META-INF/ibm-application-ext.xmi).depfeat
Beim ersten Aufruf der Methode "getItemPrice()" nach 22:00 Uhr lädt der EJB-Container die Preisinformationen erneut aus der Datenbank. Sollte dieser Zeitpunkt zwischen den Aufruf von getItemPrice() und getShippingCost() fallen, gibt die Methode getShippingCost() den Wert zurück, den sie vor der Aktualisierung der Datenbank ermittelt hatte, da der erste Methodenaufruf in dieser Transaktion vor 22:00 Uhr erfolgt ist. Damit bleiben die verwendeten Artikelpreise und Versandkosten synchron.