Web Beansの大きな強みは、Unified ELと統合されていることだ。おかげで、JSFコンポーネントやJSP、設定ファイルに至るまで、さまざまな箇所でELを用いることができる。たとえば以下のようなコードが書ける。

リスト18

    <h:outputText value="#{japaneseGoodMorning.greetingMessage}"/>

リスト18の例で使用されている「japaneseGoodMorning」は、「コンポーネントの名称」だ。ほとんどすべてのコンポーネントには名前が付いており、EL内から参照可能だ。デフォルトでは、以下のようなルールにより名前が自動生成される。

  • コンポーネントクラスの場合、クラス名の一文字目を小文字にした文字列
  • プロデューサメソッドの場合、メソッド名と同じ。ただし、プロデューサメソッドがgetterメソッドの場合は、JavaBeanプロパティ名

また、名前をカスタマイズすることもできる。@Namedアノテーションにコンポーネント名を渡せばよい。

リスト19

    @Component
    @Named("ohayou")
    public class JapaneseGoodMorning extends GoodMorning {
      ...
    }

また名前によるインスタンスの検索は、現在のスレッドに関連づいた「コンテキスト」に紐付くスコープ内で行われる。たとえばHTTPリクエストによって呼び出されたメソッドであれば、リクエスト/セッション/アプリケーションと言ったスコープが関連づいている、と言う具合だ。スコープを探索する順序などはまだ仕様がはっきりしていないが、恐らくリクエスト→カンバセーション→セッション→アプリケーションと言ったものだと予想される。

web-beans.xmlについて

Web Beansはアノテーションによって設定を行うのと同様、XML形式の設定ファイルを利用することもできる。それがweb-beans.xmlだ。web-beans.xmlはJARファイルのMETA-INFディレクトリに格納 (よって、web-beans.xmlは一つのアプリケーションに複数存在可能) される。

XMLのスキーマは、まだあまり仕様が詰められていない部分ではあるが、たとえばコンポーネントの定義をリスト20のようにして行うことができる。

リスト20

  <component>
    <class>examples.JapaneseGoodMorning</class>
    <scope>javax.webbeans.Dependent</scope>
    <binding>examples.Japanese</binding>
  </component>