2009-07-23 19 views
0

私はJSFバッキングBean、要求スコープを持っているとします。これにはメンバーとしてListがあります。 バッキングBeanには、ページ上のボタンにバインドされたメソッドがあります。基本キャッシュの質問

ボタンが最初に押されると、メソッドはEJBを使用してリストを作成します。 ボタンを押すと、メソッドがDBを呼び出さないようにします。

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

そうでない場合は、リストがすでに取り込まれますので、必要に応じていないDBコール:

だから、私はチェックを追加しました。 これはキャッシング機構にとって満足できるものですか?

答えて

1

Beanはリクエストスコープであるため、そのメンバーは単一リクエストの存続期間中のみ存在します。したがって、ページが要求されるたびにデータが取得されます。

あなたができることは、キャッシュされたデータが異なるスコープ(セッションやアプリケーションなど)にあることです。

<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> 

サンプルコード:

public class RequestBean { 

    private ExpensiveBean cachedAsset; 

    public ExpensiveBean getCachedAsset() { 
    return cachedAsset; 
    } 

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

} 

そのように維持要求レベルアーチファクトを分離しながら、簡単にリクエストスコープ豆からのデータを参照できます。

一部のフレームワークでは、ページスコープのサポートが追加されているため、データはビューの存続期間に結びついています。それはあなたのニーズに応じて、別のオプションかもしれません。