2009-07-23 2 views
0

Скажите, что у меня есть бэк-компонент JSF, область запроса, в которой есть Список. В бэкбонге у меня есть метод, связанный с кнопкой на странице.Основной вопрос кеша

При первом нажатии кнопки метод использует EJB для заполнения списка. После последующих нажатий кнопки я не хочу, чтобы метод вызывал БД.

Итак, я добавил чек:

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

В противном случае список уже будет заполнен, поэтому нет DB вызов необходимо. Является ли это удовлетворительным для механизма кеширования?

ответ

1

Поскольку боб является областью запроса, ее члены будут существовать только для срока службы одного запроса. Таким образом, данные будут извлекаться каждый раз, когда запрашивается страница.

Одна вещь, которую вы могли бы сделать, - иметь кешированные данные в другой области (например, сеанс или приложение).

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

} 

Таким образом, вы можете легко ссылаться на данные из области действия запроса боба, сохраняя при этом артефакты запроса на уровне отдельно.

В некоторых фреймах добавлена ​​поддержка области страниц, которая привязывает данные к времени жизни представления. Это может быть другой вариант, в зависимости от ваших потребностей.