第23章 組み込み Seam コンポーネント

本章では Seam の組み込みコンポーネント、 その設定プロパティについて説明していきます。

@Name を使って独自のクラスで組み込みコンポーネントの名前を指定すると、 組み込みコンポーネントを独自の実装に簡単に置き換えることができます。

また、 組み込みコンポーネントは修飾名を使用しますが、 そのほとんどはデフォルトで非修飾名にエイリアスされているので注意してください。 こうしたエイリアスは auto-create="true" を指定するため、 組み込みコンポーネントをその非修飾名でインジェクトする場合に create=true を使う必要はありません。

23.1. コンテキストインジェクションのコンポーネント

最初の組み込みコンポーネントセットは、 単純にさまざまな文脈上のオブジェクトのインジェクトをサポートするために存在しています。 たとえば、 次のコンポーネントインスタンスの変数はインジェクトされた Seam セッションのコンテキストオブジェクトを持つことになります。

@In private Context sessionContext;
org.jboss.seam.core.eventContext

イベントコンテキストオブジェクトの管理コンポーネント

org.jboss.seam.core.pageContext

ページコンテキストオブジェクトの管理コンポーネント

org.jboss.seam.core.conversationContext

対話コンテキストオブジェクトの管理コンポーネント

org.jboss.seam.core.sessionContext

セッションコンテキストオブジェクトの管理コンポーネント

org.jboss.seam.core.applicationContext

アプリケーションコンテキストオブジェクトの管理コンポーネント

org.jboss.seam.core.businessProcessContext

ビジネスプロセスコンテキストオブジェクトの管理コンポーネント

org.jboss.seam.core.facesContext

FacesContext コンテキストオブジェクト (正確には Seam コンテキストではない) の管理コンポーネント

これらコンポーネントはすべて常にインストールされます。

23.2. ユーティリティコンポーネント

これらのコンポーネントが役に立つ機会はあまりありません。

org.jboss.seam.core.facesMessages

ブラウザリダイレクト全体に伝播するよう faces が正しくメッセージングできるようにします。

  • add(FacesMessage facesMessage) — faces メッセージを追加します。 このメッセージは現在の変換で発生する次のレンダリング応答フェーズ中に表示されます。

  • add(String messageTemplate) — EL 表現を含んでいる可能性がある特定のメッセージテンプレートからレンダリングされる faces メッセージを追加します。

  • add(Severity severity, String messageTemplate) — EL 表現を含んでいる可能性がある特定のメッセージテンプレートからレンダリングされる faces メッセージを追加します。

  • addFromResourceBundle(String key) — Seam リソースバンドル内で定義されるメッセージテンプレートからレンダリングされる faces メッセージを追加します。 EL 表現を含んでいる可能性があります。

  • addFromResourceBundle(Severity severity, String key) — Seam リソースバンドル内で定義されるメッセージテンプレートからレンダリングされる faces メッセージを追加します。 EL 表現を含んでいる可能性があります。

  • clear() — 全てのメッセージを消去します。

org.jboss.seam.core.redirect

パラメータつきでリダイレクトを行う場合に便利な API です (特にブックマーク可能な検索結果画面などに役立ちます)。

  • redirect.viewId — リダイレクト先の JSF ビュー ID です。

  • redirect.conversationPropagationEnabled — リダイレクト全体に変換が伝播するかどうかを確定します。

  • redirect.parameters — 値に対するリクエストパラメータ名のマップです。 リダイレクトリクエスト内で渡されます。

  • execute() — 直ちにリダイレクトを行います。

  • captureCurrentRequest() — 現在の GET リクエスト (対話コンテキスト内) のリクエストパラメータとビュー ID を格納します。 後で execute() をコールして使用します。

org.jboss.seam.core.httpError

HTTP エラーを送信する場合に便利な API です。

org.jboss.seam.core.events

@Observer のメソッドまたは components.xml 内のメソッドバインディング経由で監視できるイベントを引き起こす API です。

  • raiseEvent(String type) — 特定タイプのイベントを引き起こし、 監視している人全員に配信します。

  • raiseAsynchronousEvent(String type) — EJB3 タイマーサービスにより非同期的に処理されるイベントを引き起こします。

  • raiseTimedEvent(String type, ....) — EJB3 タイマーサービスにより非同期的に処理されるイベントをスケジュールします。

  • addListener(String type, String methodBinding) — 特定イベントタイプの監視者を追加します。

org.jboss.seam.core.interpolator

Strings に JFS EL 表現の値を補完するための API です。

  • interpolate(String template)#{...} 形式の JSF EL 表現用のテンプレートをスキャンし、 それを評価された値と置き換えます。

org.jboss.seam.core.expressions

値とメソッドバインティングを作成するための API です。

  • createValueBinding(String expression) — 値バインディングオブジェクトを作成します。

  • createMethodBinding(String expression) — メソッドバインディングオブジェクトを作成します。

org.jboss.seam.core.pojoCache

JBoss Cache PojoCache インスタンスの管理コンポーネントです。

  • pojoCache.cfgResourceName — 設定ファイルの名前です。 treecache.xml にデフォルトで設定します。

org.jboss.seam.core.uiComponent

EL からの ID で JSF UIComponent へのアクセスを許可します。 たとえば、 @In("#{uiComponent['myForm:address'].value}") と記述することができます。

これらコンポーネントはすべて常にインストールされます。

23.3. 国際化とテーマのコンポーネント

次のコンポーネントグループは Seam を使用した国際化ユーザーインターフェースのビルドを容易にします。

org.jboss.seam.core.locale

Seam のロケールです。 このロケールはセッションスコープです。

org.jboss.seam.core.timezone

Seam のタイムゾーンです。 タイムゾーンはセッションスコープです。

org.jboss.seam.core.resourceBundle

Seam リソースバンドルです。 リソースバンドルはセッションスコープです。 Seam リソースバンドルは Java リソースバンドルの一覧でキーの縦型検索を行います。

  • resourceBundle.bundleNames — 検索する Java リソースバンドルの名前です。 デフォルトで messages に設定されます。

org.jboss.seam.core.localeSelector

設定時間またはランタイム時のユーザーのいずれかでロケール選択をサポートします。

  • select() — 指定されたロケールを選択します。

  • localeSelector.locale — 実際の java.util.Locale です。

  • localeSelector.localeString — ロケールの文字列表現です。

  • localeSelector.language — 指定ロケールの言語です。

  • localeSelector.country — 指定ロケールの国名です。

  • localeSelector.variant — 指定ロケールのバリアントです。

  • localeSelector.supportedLocalesjsf-config.xml 内に一覧表示されるサポートロケールをを表している SelectItem の一覧です。

  • localeSelector.cookieEnabled — クッキーで存続されるべきロケール選択を指定します。

org.jboss.seam.core.timezoneSelector

設定時間またはランタイム時のユーザーのいずれかでタイムゾーン選択をサポートします。

  • select() — 指定されたロケールを選択します。

  • timezoneSelector.timezone — 実際の java.util.TimeZone です。

  • timezoneSelector.timeZoneId — タイムゾーンの文字列表現です。

  • timezoneSelector.cookieEnabled — クッキーで存続されるべきタイムゾーン選択を指定します。

org.jboss.seam.core.messages

Seam リソースバンドル内で定義されるメッセージテンプレートからレンダリングされる国際化メッセージを含んでいるマップです。

org.jboss.seam.theme.themeSelector

設定時間またはランタイム時のユーザーのいずれかでテーマ選択をサポートします。

  • select() — 指定されたテーマを選択します。

  • theme.availableThemes — 定義されたテーマの一覧です。

  • themeSelector.theme — 選択されたテーマです。

  • themeSelector.themes — 定義されたテーマを示している SelectItem の一覧です。

  • themeSelector.cookieEnabled — クッキーで存続されるべきテーマ選択を指定します。

org.jboss.seam.theme.theme

テーマエントリを含んでいるマップです。

これらコンポーネントはすべて常にインストールされます。

23.4. 対話を制御するためのコンポーネント

次のコンポーネントグループを使うとアプリケーションまたはユーザーインターフェースにより対話の制御を行うことができるようになります。

org.jboss.seam.core.conversation

現在の Seam 対話の属性をアプリケーション制御するための API です。

  • getId() — 現在の対話 ID を返します。

  • isNested() — 現在の対話がネストされる場合 true を返します。

  • isLongRunning() — 現在の対話が長期の対話の場合 true を返します。

  • getId() — 現在の対話 ID を返します。

  • getParentId() — 親対話の対話 ID を返します。

  • getRootId() — root 対話の対話 ID を返します。

  • setTimeout(int timeout) — 現在の対話のタイムアウトを設定します。

  • setViewId(String outcome) — conversation switcher、 conversation list、 breadcrumbs のいずれかから現在の対話に切り替える場合に使用されるビュー ID を設定します。

  • setDescription(String description) — conversation switcher、 conversation list、 または breadcrumbs で表示される現在の対話の詳細を設定します。

  • redirect() — この対話に対して詳細に定義された最後のビューにリダイレクトします (ログイン試行後に便利)。

  • leave() — 実際に対話を終了することなく、 この対話のスコープを終了します。

  • begin() — 長期の対話を開始します (@Begin と同等)。

  • beginPageflow(String pageflowName) — ページフロー付きの長期の対話を開始します (@Begin(pageflow="...") と同等)。

  • end() — 長期の対話を終了します (@End と同等)。

  • pop() — 親対話に戻り対話スタックをポップします。

  • root() — 対話スタックの root 対話に戻ります。

  • changeFlushMode(FlushModeType flushMode) — 対話のフラッシュモードを変更します。

org.jboss.seam.core.conversationList

対話一覧の管理コンポーネントです。

org.jboss.seam.core.conversationStack

対話スタックの管理コンポーネントです (breadcrumbs)。

org.jboss.seam.core.switcher

conversation switcher です。

これらコンポーネントはすべて常にインストールされます。

23.5. jBPM 関連のコンポーネント

jBPM と併用するコンポーネントになります。

org.jboss.seam.core.pageflow

Seam ページフローの API 制御です。

  • isInProcess() — 現在プロセスにページフローがある場合に true を返します。

  • getProcessInstance() — 現在のページフローに対して jBPM ProcessInstance を返します。

  • begin(String pageflowName) — 現在の対話のコンテキストでページフローを開始します。

  • reposition(String nodeName) — 現在のページフローを特定のノードに再配置します。

org.jboss.seam.core.actor

現在のセッションに関する jBPM actor の属性をアプリケーション制御するための API です。

  • setId(String actorId) — 現在のユーザーの jBPM アクター ID をセットします。

  • getGroupActorIds() — 追加される可能性のある現在のユーザーのグループに対する jBPM actor ids に Set を返します。

org.jboss.seam.core.transition

現在のタスクに対する jBPM 移行のアプリケーション制御を目的とする API です。

  • setName(String transitionName) — 現在のタスクが @EndTask 経由で終了される場合に使用される jBPM 移行名をセットします。

org.jboss.seam.core.businessProcess

対話とビジネスプロセス間の関連性をプログラム制御するための API です。

  • businessProcess.taskId — 現在の対話と関連付けられているタスクの ID です。

  • businessProcess.processId — 現在の対話と関連付けられているプロセスの ID です。

  • businessProcess.hasCurrentTask() — 現在の対話と関連付けられているタスクインスタンスです。

  • businessProcess.hasCurrentProcess() — 現在の対話と関連付けられているプロセスインスタンスです。

  • createProcess(String name) — 名前付けされたプロセス定義のインスタンスを作成して現在の対話と関連付けます。

  • startTask() — 現在の対話と関連付けされているタスクを開始します。

  • endTask(String transitionName) — 現在の対話と関連付けられているタスクを終了します。

  • resumeTask(Long id) — 特定の ID を持つタスクを現在の対話と関連付けます。

  • resumeProcess(Long id) — 特定の ID を持つプロセスを現在の対話と関連付けます。

  • transition(String transitionName) — 移行を誘発します。

org.jboss.seam.core.taskInstance

jBPM TaskInstance の管理コンポーネントです。

org.jboss.seam.core.processInstance

jBPM ProcessInstance の管理コンポーネントです。

org.jboss.seam.core.jbpmContext

イベントスコープ JbpmContext の管理コンポーネントです。

org.jboss.seam.core.taskInstanceList

jBPM task list の管理コンポーネントです。

org.jboss.seam.core.pooledTaskInstanceList

jBPM pooled task list の管理コンポーネントです。

org.jboss.seam.core.taskInstanceListForType

jBPM タスクリスト集の管理コンポーネントです。

org.jboss.seam.core.pooledTask

pooled task 割り当てのアクションハンドラです。

org.jboss.seam.core.jbpm がインストールされると、 これらの全コンポーネントが必ずインストールされます。

23.6. セキュリティ関連のコンポーネント

これらのコンポーネントはウェブ層のセキュリティに関連しています。

org.jboss.seam.core.userPrincipal

現在のユーザー Principal の管理コンポーネントです。

org.jboss.seam.core.isUserInRole

現在の principal が使用できるロールに応じて、 JSF ページがコントロールのレンダリングを選択できるようにします。 <h:commandButton value="edit" rendered="#{isUserInRole['admin']}"/>

23.7. JMS 関連のコンポーネント

これらのコンポーネントは管理対象の TopicPublisher および QueueSender との併用を目的としています (下記参照)。

org.jboss.seam.jms.queueSession

JMS QueueSession の管理コンポーネントです。

org.jboss.seam.jms.topicSession

JMS TopicSession の管理コンポーネントです。

23.8. メール関連のコンポーネント

Seam の Email サポートと併用して使用されるコンポーネントです。

org.jboss.seam.mail.mailSession

JavaMail Session の管理コンポーネントです。

  • org.jboss.seam.mail.mailSession.host — 使用する SMTP サーバーのホスト名です。

  • org.jboss.seam.mail.mailSession.port — 使用する SMTP サーバーのポートです。

  • org.jboss.seam.mail.mailSession.username — SMTP サーバーへの接続に使用するユーザー名です。

  • org.jboss.seam.mail.mailSession.password — SMTP サーバーへの接続に使用するパスワードです。

  • org.jboss.seam.mail.mailSession.debug — JavaMail のデバッグを有効にします (非常に冗長)。

  • org.jboss.seam.mail.mailSession.sessionJndiName — JNDI に対してバウンドされる javax.mail.Session 配下の名前です。

23.9. 基盤となるコンポーネント

非常に重要となるプラットフォームの基盤を提供するコンポーネントです。 org.jboss.seam.core.init.componentClasses 設定プロパティでコンポーネントのクラス名を含ませるとインストールすることができます。

org.jboss.seam.core.init

Seam の初期化設定です。 常にインストールされます。

  • org.jboss.seam.core.init.jndiPattern — セッションビーンのルックアップに使用される JNDI パターンです。

  • org.jboss.seam.core.init.debug — Seam デバッグモードを有効にします。

  • org.jboss.seam.core.init.clientSideConversationstrue にセットすると、 Seam は対話コンテキストの変数を HttpSession 内に保存せずクライアント内に保存するようになります。

  • org.jboss.seam.core.init.userTransactionName — JTA UserTransaction オブジェクトをルックアップする場合に使用する JNDI 名です。

org.jboss.seam.core.manager

Seam ページおよび対話コンテキスト管理用の内部コンポーネントです。 常にインストールされます。

  • org.jboss.seam.core.manager.conversationTimeout — 対話コンテキストのミリ秒単位のタイムアウトです。

  • org.jboss.seam.core.manager.concurrentRequestTimeout — 長期の対話コンテキストでロックの取得試行するスレッドに対する最大待機時間です。

  • org.jboss.seam.core.manager.conversationIdParameter — 対話 ID の伝播に使用されるリクエストパラメータで、 デフォルトでは conversationId に設定されます。

  • org.jboss.seam.core.manager.conversationIsLongRunningParameter — 対話が長期であるかどうかに関する情報を伝播するために使用されるリクエストパラメータで、 デフォルトでは conversationIsLongRunning に設定されます。

org.jboss.seam.core.pages

Seam ワークスペースの管理用の内部コンポーネントです。 常にインストールされます。

  • org.jboss.seam.core.pages.noConversationViewId — サーバー側に対話エントリが見つからない場合にリダイレクトするリダイレクト先のビュー ID のグローバル設定です。

org.jboss.seam.core.ejb

JBoss Embeddable EJB3 コンテナをブートストラップします。 クラス org.jboss.seam.core.Ejb としてインストールします。 Java EE 5 アプリケーションサーバーのコンテキストの外にある EJB コンポーネントと Seam を併用する場合に便利です。

基本的な Embedded EJB 設定は jboss-embedded-beans.xml で定義されます。 追加のマイクロコンテナ設定 (例、 追加データソース) は jboss-beans.xml またはクラスパス内の META-INF/jboss-beans.xml で指定することができます。

org.jboss.seam.core.microcontainer

JBoss マイクロコンテナをブートストラップします。 クラス org.jboss.seam.core.Microcontainer としてインストールします。 Seam を Hibernate と併用し Java EE アプリケーションサーバーのコンテキストの外には EJB コンポーネントがない場合に便利です。 マイクロコンテナは JNDI、 JTA、 JCA データソース及び Hibernate で部分的な EE 環境を実現します。

マイクロコンテナの設定は jboss-beans.xml またはクラスパス内の META-INF/jboss-beans.xml で指定することができます。

org.jboss.seam.core.jbpm

JbpmConfiguration をブートストラップします。クラス org.jboss.seam.core.Jbpm としてインストールします。

  • org.jboss.seam.core.jbpm.processDefinitions — ビジネスプロセス群の編成に使用される jPDL ファイル群のリソース名の一覧です。

  • org.jboss.seam.core.jbpm.pageflowDefinitions — 対話ページフローの編成に使用される jPDL ファイル群のリソース名の一覧です。

org.jboss.seam.core.conversationEntries

リクエスト間のアクティブな長期の対話を記録するセションスコープの内部コンポーネントです。

org.jboss.seam.core.facesPage

ページに関連付けられる対話コンテキストを記録するページスコープの内部コンポーネントです。

org.jboss.seam.core.persistenceContexts

現在の対話に使用された永続コンテキストを記録する内部コンポーネントです。

org.jboss.seam.jms.queueConnection

JMS QueueConnection を管理します。 管理 QueueSender がインストールされると必ずインストールされます。

  • org.jboss.seam.jms.queueConnection.queueConnectionFactoryJndiName — JMS QueueConnectionFactory の JNDI 名です。 デフォルトでは UIL2ConnectionFactory に設定されます。

org.jboss.seam.jms.topicConnection

JMS TopicConnection を管理します。 管理 TopicPublisher がインストールされると必ずインストールされます。

  • org.jboss.seam.jms.topicConnection.topicConnectionFactoryJndiName — JMS TopicConnectionFactory の JNDI 名です。 デフォルトでは UIL2ConnectionFactory に設定されます。

org.jboss.seam.persistence.persistenceProvider

JPA プロバイダの標準化されていない機能に対する抽出層です。

org.jboss.seam.core.validation

Hibernate Validator サポート用の内部コンポーネントです。

org.jboss.seam.debug.introspector

Seam Debug Page のサポートです。

org.jboss.seam.debug.contexts

Seam Debug Page のサポートです。

23.10. 特殊なコンポーネント

特定の特殊な Seam コンポーネントクラスは Seam 設定内で指定される name の配下で複数回のインストールが可能です。 例えば、 components.xml 内の次の行は Seam コンポーネントを 2 つインストールして設定します。

<component name="bookingDatabase"
          class="org.jboss.seam.core.ManagedPersistenceContext">
    <property name="persistenceUnitJndiName">java:/comp/emf/bookingPersistence</property>
</component>

<component name="userDatabase"
          class="org.jboss.seam.core.ManagedPersistenceContext">
    <property name="persistenceUnitJndiName">java:/comp/emf/userPersistence</property>
</component>

Seam コンポーネント名は bookingDatabaseuserDatabase です。

<entityManager>, org.jboss.seam.core.ManagedPersistenceContext

拡張永続コンテキストを持つ対話スコープで管理対象の EntityManager の管理コンポーネントです。

  • <entityManager>.entityManagerFactoryEntityManagerFactory のインスタンスに対して評価を行う値バインディングです。

    <entityManager>.persistenceUnitJndiName — entity manager factory の JNDI 名です。 デフォルトでは java:/<managedPersistenceContext> に設定します。

<entityManagerFactory>, org.jboss.seam.core.EntityManagerFactory

JPA EntityManagerFactory を管理します。 EJB 3.0 サポート環境以外で JPA を使用する場合に最適となります。

  • entityManagerFactory.persistenceUnitName — 永続ユニット名です。

設定プロパティの詳細については API JavaDoc をご覧ください。

<session>, org.jboss.seam.core.ManagedSession

対話スコープで管理対象の Hibernate Session の管理コンポーネントです。

  • <session>.sessionFactorySessionFactory のインスタンスに対して評価を行う値バインディング表現です。

    <session>.sessionFactoryJndiName — session factory の JNDI 名です。 デフォルトでは java:/<managedSession> に設定します。

<sessionFactory>, org.jboss.seam.core.HibernateSessionFactory

Hibernate SessionFactory を管理します。

  • <sessionFactory>.cfgResourceName — 設定ファイルへのパスです。 デフォルトでは hibernate.cfg.xml に設定されます。

設定プロパティの詳細については API JavaDoc をご覧ください。

<managedQueueSender>, org.jboss.seam.jms.ManagedQueueSender

イベントスコープで管理対象の JMS QueueSender の管理コンポーネントです。

  • <managedQueueSender>.queueJndiName — JMS キューの JNDI 名です。

<managedTopicPublisher>, org.jboss.seam.jms.ManagedTopicPublisher

イベントスコープで管理対象の JMS TopicPublisher の管理コンポーネントです。

  • <managedTopicPublisher>.topicJndiName — JMS トピックの JNDI 名です。

<managedWorkingMemory>, org.jboss.seam.drools.ManagedWorkingMemory

対話スコープで管理対象の Drools WorkingMemory の管理コンポーネントです。

  • <managedWorkingMemory>.ruleBaseRuleBase のインスタンスに対して評価を行う値表現です。

<ruleBase>, org.jboss.seam.drools.RuleBase

アプリケーションスコープの Drools RuleBase の管理コンポーネントです。 新しいルールの動的インストールをサポートしていないため、 実稼働での使用はまったく対象とされていないことに注意してください

  • <ruleBase>.ruleFiles — Drools のルールを含んでいるファイルの一覧です。

    <ruleBase>.dslFile — Drools DSL 定義です。

<entityHome>, org.jboss.seam.framework.EntityHome
<hibernateEntityHome>, org.jboss.seam.framework.HibernateEntityHome
<entityQuery>, org.jboss.seam.framework.EntityQuery
<hibernateEntityQuery>, org.jboss.seam.framework.HibernateEntityQuery