第29章 Seam アノテーション
Seam ではアノテーションを使用して宣言的なプログラミングを実現することができます。アノテーションのほとんどは EJB 3.0 仕様で定義されています。 また、 データ検証用のアノテーションは Hibernate Validator パッケージで定義されています。 ただし、 Seam は Seam 独自のアノテーションセットを持っており、 これは本章で説明します。
これらのアノテーションはすべてパッケージ
org.jboss.seam.annotations で定義されます。
29.1. コンポーネント定義のためのアノテーション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このアノテーショングループは Seam コンポーネントの定義に使用されます。 これらのアノテーションはコンポーネントクラスで見られます。
@Name@Name("componentName")@Name("componentName")Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスに対して Seam コンポーネント名を定義します。 このアノテーションは Seam の全コンポーネントに必要です。@Scope@Scope(ScopeType.CONVERSATION)
@Scope(ScopeType.CONVERSATION)Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネントのデフォルトコンテキストを定義します。EVENT、PAGE、CONVERSATION、SESSION、BUSINESS_PROCESS、APPLICATION、STATELESSなどのScopeTypeを列挙することで可能な値を定義します。スコープが明示的に指定されていない場合、 デフォルトはコンポーネントタイプにより異なります。 ステートレスセッション Bean の場合、 デフォルトはSTATELESSです。 エンティティ Bean およびステートフルセッション Bean なら、 デフォルトはCONVERSATIONです。JavaBeans のデフォルトはEVENTです。@Role@Role(name="roleName", scope=ScopeType.SESSION)
@Role(name="roleName", scope=ScopeType.SESSION)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Seam コンポーネントを複数のコンテキスト変数に結合できるようにします。@Nameと@Scopeのアノテーションは デフォルトロール を定義します。 各@Roleアノテーションは追加のロールを定義します。name− コンテキスト変数名です。scope− コンテキスト変数のスコープです。 スコープが明示的に指定されない場合、 デフォルトは上記のとおりコンポーネントタイプにより異なります。
@Roles@Roles({ @Role(name="user", scope=ScopeType.CONVERSATION), @Role(name="currentUser", scope=ScopeType.SESSION) })@Roles({ @Role(name="user", scope=ScopeType.CONVERSATION), @Role(name="currentUser", scope=ScopeType.SESSION) })Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数の追加ロールを指定することができます。@BypassInterceptors@BypassInterceptors
@BypassInterceptorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 特定のコンポーネントまたはコンポーネントメソッドにおける Seam インターセプタをすべて無効にします。@JndiName@JndiName("my/jndi/name")@JndiName("my/jndi/name")Copy to Clipboard Copied! Toggle word wrap Toggle overflow Seam が EJB コンポーネントの検索に使用する JNDI 名を指定します。 JNDI 名が明示的に指定されない場合、 Seam はorg.jboss.seam.core.init.jndiPatternで指定される JNDI パターンを使用します。@Conversational@Conversational
@ConversationalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 対話スコープのコンポーネントが対話用であることを指定します。 つまり長期実行の対話が起こっていない限り、 そのコンポーネントのメソッドは呼び出されません。@PerNestedConversation@PerNestedConversation
@PerNestedConversationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 対話スコープのコンポーネントのスコープを、 そのコンポーネントがインスタンス化された親対話だけに制限します。 そのコンポーネントのインスタンスは独自のインスタンス内で動作するネストされた子対話からは見えません。警告
これは推奨されるアプリケーション機能ではありません。 要求サイクルの特定部分にしかコンポーネントは見えないということになります。@Startup@Scope(APPLICATION) @Startup(depends="org.jboss.seam.bpm.jbpm")
@Scope(APPLICATION) @Startup(depends="org.jboss.seam.bpm.jbpm")Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションスコープのコンポーネントが初期化時に直ちに開始されることを指定します。 JNDI、 データソースなど重要なインフラストラクチャをブートストラップする組み込みコンポーネントに使用されます。@Scope(SESSION) @Startup
@Scope(SESSION) @StartupCopy to Clipboard Copied! Toggle word wrap Toggle overflow セッションスコープのコンポーネントがセッション作成時に直ちに開始されることを指定します。depends− 指定されたコンポーネントがインストールされている場合は、 そのコンポーネントを先に開始しなければならないことを指定します。
@Install@Install(false)
@Install(false)Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネントがデフォルトでインストールされないよう指定します (このアノテーションを指定しない場合はコンポーネントがインストールされます)。@Install(dependencies="org.jboss.seam.bpm.jbpm")
@Install(dependencies="org.jboss.seam.bpm.jbpm")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 依存関係として表示されているコンポーネント群もあわせてインストールされる場合にのみ、このコンポーネントをインストールすることを指定します。@Install(genericDependencies=ManagedQueueSender.class)
@Install(genericDependencies=ManagedQueueSender.class)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定のクラスで実装されるコンポーネントがインストールされる場合にのみ、 コンポーネントがインストールされることを指定します。必要な依存関係の名前が不定である場合に便利です。@Install(classDependencies="org.hibernate.Session")
@Install(classDependencies="org.hibernate.Session")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定されたクラスがクラスパス内にある場合にのみ、コンポーネントをインストールするよう指定します。@Install(precedence=BUILT_IN)
@Install(precedence=BUILT_IN)Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネントの優先度を指定します。 同じ名前のコンポーネントが複数存在する場合、 より高い優先度を持つコンポーネントがインストールされます。 定義される優先度の値は次の通りです (昇順)。BUILT_IN− すべての組み込み Seam コンポーネントの優先度FRAMEWORK− Seam を拡張するフレームワークのコンポーネントを使うための優先度APPLICATION− アプリケーションコンポーネントの優先度 (デフォルトの優先度)DEPLOYMENT− 特定のデプロイメントにおいてアプリケーションコンポーネントを上書きするコンポーネントを使うための優先度MOCK− テスト時に使うモックオブジェクトに対する優先度
@Synchronized@Synchronized(timeout=1000)
@Synchronized(timeout=1000)Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネントが複数のクライアントによって同時にアクセスされること、 Seam が要求をシリアライズすることを指定します。 要求が特定のタイムアウト期間内にコンポーネントでロックを取得できないと例外が発生します。@ReadOnly@ReadOnly
@ReadOnlyCopy to Clipboard Copied! Toggle word wrap Toggle overflow JavaBean コンポーネントまたはコンポーネントメソッドが呼び出しの終わりで状態の複製を必要としないことを指定します。@AutoCreate@AutoCreate
@AutoCreateCopy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネントが自動的に作成されるよう指定します。クライアントがcreate=trueを指定していなくても作成されます。