Как установить кеш запросов на вызов, выданный механизмом шва - PullRequest
0 голосов
/ 23 июня 2011
@In
Identity identity;

Boolean newValue = identity.hasPermission(target, action);

Любой вызов вышеупомянутого метода также выполняет вызов "select role from Role r", который вызывается из основного механизма шва.Как установить кэш запроса для этого вызова в качестве подсказки запроса (например, флага org.hibernate.cacheable), чтобы он не вызывался снова.

Примечание. Информация о роли никогда не должна изменяться, следовательно,Я рассматриваю это как ненужный вызов SQL.

1 Ответ

0 голосов
/ 28 сентября 2011

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

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

С уважением, Александр.

/**
 * Extended Identity to implement i.e. caching
 */
@Name("org.jboss.seam.security.identity")
@Scope(SESSION)
@Install(precedence = Install.APPLICATION)
@BypassInterceptors
@Startup
public class MyIdentity extends Identity {

  // place a concurrent hash map here

  @Override
  public boolean hasPermission(Object name, String action) {
    // either use the use the cached result in the hash map ... 
    // ... or call super.hasPermission() and cache the result
  }

}
...