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>