SeamFramework.orgCommunity Documentation
この章は Seam アプリケーションから最善のパフォーマンスを引き出すためのコツを一箇所にドキュメント化したものです。
JSF dataTable や (ui:repeat のような)他の繰り返し制御で見られるような繰り返し参照される値バインディングが原因となって、完全なインタセプタスタックが Seam コンポーネントの呼び出しのたびに呼び出されます。この効果として、パフォーマンスへ大きな影響が及ぶという結果になります。特に、これはそのコンポーネントへのアクセスが何回も行われるときに顕著です。呼び出されようとしているSeam コンポーネントのインタセプタスタックを無効にすることでかなりパフォーマンスが向上させることが可能です。コンポーネントのインタセプターを無効にするには、@BypassInterceptors アノテーションをコンポーネントクラスに付加します。
Seam コンポーネントのインタセプターを無効にするということが暗に意味していることを知ることは重要です。バイジェクション、アノテーションによるセキュリティの制限、同期、などはコンポーネントに @BypassInterceptors をつけることで利用できなくなります。ほとんどの場合、これらの失われる機能を補うことも可能ではありますが (例: @In を使ってインジェクションをする代わりに Component.getInstance() を使う)、その結果については知っていることが重要です。
次のコードはインタセプターを無効にした Seam コンポーネントの例です。
@Name("foo")
@Scope(EVENT)
@BypassInterceptors
public class Foo
{
public String getRowActions()
{
// Role-based security check performed inline instead of using @Restrict or other security annotation
Identity.instance().checkRole("user");
// Inline code to lookup component instead of using @In
Bar bar = (Bar) Component.getInstance("bar");
String actions;
// some code here that does something
return actions;
}
}