如何在Steam引擎发出的调用上设置查询缓存

时间:2011-06-23 07:32:10

标签: seam seam2

@In
Identity identity;

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

对上述方法的任何调用也会执行“从角色r中选择角色”调用,该调用从底层连接引擎调用。如何将此调用的查询缓存设置为查询提示(例如org.hibernate.cacheable标志),以便不再调用它。

注意:角色信息永远不会被更改,因此我将其视为不必要的SQL调用。

1 个答案:

答案 0 :(得分:0)

我不是在休眠,但由于这个问题仍然没有答案:我们扩展了标准的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
  }

}