5.2.7. コンポーネント名

すべての Seam コンポーネントには名前が必要です。 @Name アノテーションを使用してコンポーネントに名前を割り当てます。
@Name("loginAction") 
@Stateless 
public class LoginAction implements Login { ... }
これが Seam コンポーネント名 で、 EJB 仕様で定義された他の名前との関連はありません。 しかし、Seam コンポーネント名は JSF 管理 Bean 名のような働きをするため、 同一の条件と考えることができます。
@Name だけがコンポーネント名を定義する唯一の方法ではありませんが、 この名前は常に指定しなければなりません。 名前が定義されていないと他の Seam アノテーションが機能しません。
Seam はコンポーネントのインスタンス化を行うときに、 その新しいインスタンスをコンポーネントの設定スコープ内のコンポーネント名と一致する変数にバインドします。 これは Seam により XML ではなくアノテーションでこのマッピングを設定できるという点以外、 JSF 管理 Bean の動作とまったく同じです。 また、 プログラムによってコンポーネントをコンテキスト変数にバインドすることもできます。 これは特定の 1 コンポーネントがシステム内で複数のロールを担っている場合に便利です。 たとえば、 現在の UsercurrentUser セッションコンテキスト変数にバインドする一方、管理機能の対象となる Useruser 対話コンテキスト変数にバインドすることがあります。 Seam コンポーネントを参照するコンテキスト変数を上書きすることは可能なため、プログラムによってバインドを行う場合は注意してください。
非常に大規模なアプリケーションの場合や組み込み Seam コンポーネントの場合には、 命名競合を避けるため修飾コンポーネント名がよく使用されます。
@Name("com.jboss.myapp.loginAction") 
@Stateless 
public class LoginAction implements Login { ... }
Java コードや JSF の式言語中でも修飾コンポーネント名を使用することができます。
<h:commandButton type="submit" value="Login" 
   action="#{com.jboss.myapp.loginAction.login}"/>
これは混雑しているため、Seam は修飾名を簡易名にエイリアスする機能も提供しています。 以下のような行を components.xml ファイルに追加します。
<factory name="loginAction" scope="STATELESS" 
         value="#{com.jboss.myapp.loginAction}"/>
すべての組み込み Seam コンポーネントには修飾名がありますが、 Seam の 名前空間をインポートする 機能によって非修飾名でもアクセスすることができます。 Seam JAR に含まれる components.xml ファイルは以下の名前空間を定義します。
<components xmlns="http://jboss.com/products/seam/components"> 
  <import>org.jboss.seam.core</import> 
  <import>org.jboss.seam.cache</import> 
  <import>org.jboss.seam.transaction</import> 
  <import>org.jboss.seam.framework</import> 
  <import>org.jboss.seam.web</import> 
  <import>org.jboss.seam.faces</import> 
  <import>org.jboss.seam.international</import> 
  <import>org.jboss.seam.theme</import> 
  <import>org.jboss.seam.pageflow</import> 
  <import>org.jboss.seam.bpm</import> 
  <import>org.jboss.seam.jms</import> 
  <import>org.jboss.seam.mail</import> 
  <import>org.jboss.seam.security</import> 
  <import>org.jboss.seam.security.management</import>  
  <import>org.jboss.seam.security.permission</import> 
  <import>org.jboss.seam.captcha</import> 
  <import>org.jboss.seam.excel.exporter</import> 
  <!-- ... ---> 
</components>
非修飾名の解決を試行すると、 Seam は順にそれぞれの名前空間を調べます。 アプリケーション固有となる追加の名前空間をアプリケーションの components.xml ファイルに含めることができます。