2011-06-23 5 views
0
@In 
Identity identity; 

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

上記のメソッドを呼び出すと、下位の継ぎ目エンジンから呼び出される「ロールからロールを選択」呼び出しも行われます。この呼び出しのクエリキャッシュをクエリヒント(たとえば、org.hibernate.cacheableフラグ)として設定して、再度呼び出されないようにするにはどうすればよいですか。シームエンジンによって発行された呼び出しでクエリキャッシュを設定するには

注:ロール情報は決して変更されないため、これは不要なSQL呼び出しと見なされます。

答えて

0

私は休止状態ではありませんが、この質問には依然として答えられていないため、いくつかの理由で継ぎ目の標準アイデンティティクラスを拡張しました。結果をキャッシュするのに役立つように拡張することもできます。

このキャッシュはセッションスコープであるため、ユーザーが再びログオン/ログオフするときにリロードされる可能性がありますが、これは要件によって異なります。

お礼、 アレクサンダー。

/** 
* 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 
    } 

}