SeamFramework.org Community Documentation

- 前のページ
- 次のページ

## 第36章 パフォーマンスチューニング

この章は Seam アプリケーションから最善のパフォーマンスを引き出すためのコツを一箇所にドキュメント化したものです。

## 36.1. インタセプターの迂回

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

- 前のページ第35章 クラスタリングと EJB パッシベーション
- 上に戻る
- ホーム
- 次のページ第37章 Seamアプリケーションのテスト