5.5. 条件付きインストール
@Install アノテーションは、特定のデプロイメントシナリオでは必要とされるがそれ以外では必要とされないコンポーネントの条件付きインストールを制御します。これは以下の場合に役立ちます。
- 試験的に基盤となる模擬コンポーネントを作成する
- 特定のデプロイメントシナリオでコンポーネント実装を変更する、または
- コンポーネントの依存部分が利用可能な場合に、 そのコンポーネントをインストールする (フレームワークの作成者に便利)。
@Install で 優先順位 と 依存性 を指定することができます。
コンポーネントの優先順位は、 クラスパスに同じコンポーネント名を持つクラスが複数ある場合にインストールすべきコンポーネントの決定に Seam が使用する番号です。 Seam はより優先順位が高いコンポーネントを選択します。事前定義された優先順位の値があります (昇順)。
BUILT_IN− 最も優先順位が低いコンポーネントは Seam に組み込まれたコンポーネントです。FRAMEWORK− サードパーティのフレームワークによって定義されたコンポーネントは組み込みコンポーネントより優先させることができますが、 アプリケーションコンポーネントにより優先されます。APPLICATION− デフォルトの優先順位です。ほとんどのアプリケーションコンポーネントにはこれが適切です。DEPLOYMENT− デプロイメント固有のアプリケーションコンポーネント用です。MOCK− テストで使用されるモックオブジェクト用です。
JMS キューと対話する
messageSender という名前のコンポーネントがあるとします。
ユニットテストでは、 有効な JMS キューがないのでこのメソッドをスタブにしたいと思うでしょう。ユニットテストの実行中にクラスパスには存在しているがアプリケーションでは絶対にデプロイされない モック コンポーネントを作成します。
precedence はクラスパスで両方のコンポーネントを発見したときに Seam が使用するバージョンを決定するときに役立ちます。
クラスパスにどのクラスがあるのかを正確に制御できるなら、これはすばらしいことです。 しかし、多くの依存性を持つ再利用可能なフレームワークを記述している場合、 複数の
jar 全体に渡りそのフレームワークを分散させたいとは思わないでしょう。 インストール済みの別のコンポーネントやクラスパスにある使用可能なクラスに応じてインストールするコンポーネントを決定する方が好まれるはずです。 @Install アノテーションはこの機能も制御します。Seam は多くの組み込みコンポーネントの条件付きインストールを実現するために内部でこのメカニズムを使用します。