2012-09-14 79 views
0

我最近開始構建JSF 2.0應用程序,我在想,如果有人可以幫助我的想法,我不得不使用它們。緩存對象和JSF

我有對象(從查找表拉),我知道這並不經常更改列表(假設國家的列表)。國家是一個列表的簡單例子,它不會經常更改,但列表可能很容易變成例如每隔幾周改變一次的對象。

在一個會話作用域的bean我最常做的是從數據庫加載該列表。

現在我的問題是這樣的:有什麼辦法保持這樣一個清單(或課程的列表)中,經過一段時間後失效緩存和重新加載名單到期後? 希望有人會面臨同樣的「問題」,並可以分享他的經驗!

在此先感謝!

回答

3

我不會做它在UI層,但使用的Ehcache而緩存你的查找方法。如果你使用hibernate,你可以使用它的二級緩存(也可以查詢查詢緩存)。如果你使用Spring,你可以很容易地標註您的服務方法是這樣的:

@Cacheable("countries") 
public List<Country> findCountries(){ 
    // ... your lookup code here.... 
} 

您也可以緩存失效當一個國家被更新:

@CacheEvict(value = "countries", allEntries=true) 
public void saveCountry(Country country){ 
    // your code for saving a country 
} 
在ehcache.xml中,你可以

最後定義緩存的實時時間(timeToLiveSeconds)。你甚至可以定義它永遠不應該失效(永恆=真),當你確定只能通過你的服務門面應用更改。

<cache name="countries" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"/> 

更新1:

所以,你的支持bean本身甚至可以要求或視圖作用域:

@ManagedBean 
@ViewScoped 
public class Bean{ 

    @Inject 
    private CountryService countryService; 

    public List<Country> getCountries(){ 
     return countryService.findCountries(); 
    } 

}