2009-07-23 12 views
0

Angenommen, ich habe eine JSF-Backing-Bean, Request-Bereich, der eine Liste als Mitglied hat. In der Backing-Bean habe ich eine Methode, die an eine Schaltfläche auf der Seite gebunden ist.Basic-Cache-Frage

Wenn die Schaltfläche zum ersten Mal gedrückt wird, verwendet die Methode ein EJB zum Auffüllen der Liste. Nach dem Drücken der Taste möchte ich nicht, dass die Methode die DB aufruft.

Also, habe ich einen Scheck:

if(list == null || list.size() == 0) 
    //populate the list 

Andernfalls wird die Liste bereits aufgefüllt werden, so dass kein DB-Aufruf notwendig. Ist dies für einen Caching-Mechanismus zufriedenstellend?

Antwort

1

Da es sich bei der Bean um einen Anforderungsbereich handelt, sind ihre Member nur für die Lebensdauer einer einzelnen Anforderung vorhanden. Daher werden die Daten jedes Mal abgerufen, wenn eine Seite angefordert wird.

Eine Sache, die Sie tun könnten, wäre, die zwischengespeicherten Daten in einem anderen Bereich (wie Sitzung oder Anwendung) zu haben.

<managed-bean> 
    <managed-bean-name>expensiveBean</managed-bean-name> 
    <managed-bean-class>lifetime.ExpensiveBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
    <managed-bean-name>requestBean</managed-bean-name> 
    <managed-bean-class>lifetime.RequestBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>cachedAsset</property-name> 
     <property-class>lifetime.ExpensiveBean</property-class> 
     <value>#{expensiveBean}</value> 
    </managed-property> 
    </managed-bean> 

Beispielcode:

public class RequestBean { 

    private ExpensiveBean cachedAsset; 

    public ExpensiveBean getCachedAsset() { 
    return cachedAsset; 
    } 

    public void setCachedAsset(ExpensiveBean cachedAsset) { 
    this.cachedAsset = cachedAsset; 
    } 

} 

Auf diese Weise könnte man leicht die Daten aus einer Anfrage Umfang bean Referenz während der Anforderungsstufe Artefakte getrennt zu halten.

Einige Frameworks fügen Unterstützung für den Seitenbereich hinzu, wodurch Daten an die Lebensdauer der Ansicht gebunden bleiben. Das kann eine andere Option sein, abhängig von Ihren Bedürfnissen.