intra-mart Accel Platform アクセスコンテキスト仕様書 第7版 2018-08-01

4.3. アクセスコンテキスト設定

ここでは、アクセスコンテキストを利用するための設定方法を説明します。

4.3.1. 概要

intra-mart Accel Platform で利用するアクセスコンテキストの情報と実行環境は、アクセスコンテキスト設定ファイルで定義します。
ここでは、アクセスコンテキスト設定ファイルの詳細を説明します。
フォーマットファイル(xsd) WEB-INF/schema/context-config.xsd
設定場所 WEB-INF/conf/context-config/{任意のファイル名}.xml

設定例

<?xml version="1.0"?>
<context-config
    xmlns="http://intra-mart.co.jp/foundation/context/context-config"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://intra-mart.co.jp/foundation/context/context-config ../../schema/context-config.xsd">

    <!-- アカウントコンテキスト -->
    <context name="jp.co.intra_mart.foundation.context.model.AccountContext"
            depends="jp.co.intra_mart.foundation.context.model.ClientContext">

        <!-- システム実行環境用コンテキストビルダ -->
        <builder target="platform">
            <builder-class>jp.co.intra_mart.system.context.impl.GenericContextBuilder</builder-class>
            <init-param>
                <param-key>context-class</param-key>
                <param-value>jp.co.intra_mart.system.admin.context.BasicAccountContext</param-value>
            </init-param>
        </builder>

    </context>

</context-config>

4.3.2. アクセスコンテキストの設定

  • コンテキスト種別の設定

    アクセスコンテキストを利用するには、context タグの name 属性に、コンテキスト種別を指定します。
    <context name="sample.SampleContext"
             depends="jp.co.intra_mart.foundation.context.model.AccountContext jp.co.intra_mart.foundation.user_context.model.UserContext">
    
       :
    
    </context>
    
    context タグ中に、「 コンテキストビルダの設定 」を行うことで、実行環境が定義されます。
  • 依存先アクセスコンテキストの設定

    アクセスコンテキストには、依存関係を設定することが可能です。
    依存先のアクセスコンテキストを指定することで、依存先の生成処理が完了してから、自身の生成処理を行うように順序制御することが可能です。
    依存関係を設定するためには、context タグの depends 属性に依存先のアクセスコンテキストのコンテキスト種別を指定します。
    依存先のアクセスコンテキストが複数ある場合は、「␣(スペース)」区切りで指定します。
    上記の記述例では、 SampleContextAccountContextClientContext に依存するよう設定しています。

4.3.3. コンテキストビルダの設定

コンテキストビルダの設定には、以下の役割があります。
  • コンテキストビルダが実行される実行環境を定義する。
  • コンテキストビルダの実行クラスを定義する。
コンテキストビルダは「ターゲット」を持ち、設定ファイル内の target 属性に指定します。
「ターゲット」は、コンテキストビルダがどのライフサイクル操作処理で実行されるかを定義する値です。
「ターゲット」には、ライフサイクル操作処理の実行時に指定するリソースIDを設定します。

4.3.3.1. 設定方法

  • 基本設定

    コンテキストビルダを利用するには、context タグ内に builder タグを指定します。
    <builder target="sample.resource.id">
        <!-- コンテキストビルダの実装クラスを指定します。 -->
        <builder-class>sample.SampleContextBuilder</builder-class>
        <!-- 初期パラメータを必要な数だけ指定します。 -->
        <init-param>
            <param-key>sample-param</param-key>
            <param-value>test</param-value>
        </init-param>
    </builder>
    
    builder タグの target 属性に、ターゲットとなるリソースIDを指定します。
    リソースIDは「␣(スペース)」区切りで複数指定することが可能です。
    builder タグ内の builder-class タグには、コンテキストビルダの実装クラスを指定します。
    新しいアクセスコンテキストを作成した場合は、必要なリソースIDの数だけコンテキストビルダの設定を行います。
    必要なリソースID は、以下の通りです。
    • 対象とする実行環境の開始処理のリソースID
    • 対象とする切替処理のリソースID
    リソースID一覧 」を参照して、必要なリソースIDを確認してください。
    新しい実行環境や切替処理を定義する場合は、新しいリソースIDを定義して設定してください。
  • 初期パラメータの設定

    コンテキストビルダで利用するパラメータを init-param タグで指定することが可能です。
    設定した初期パラメータは、 ContextBuilder インタフェースの init() メソッドを実装して取得します。

    実装例

    @Override
    public void init(final String contextType, final BuilderInfo builderInfo) {
    
        // コンテキストビルダ設定情報
        this.builderInfo = builderInfo;
    
        // 初期パラメータの取得
        List<InitParam> params = this.builderInfo.getInitParam();
    }
    
    また、基底クラス ContextBuilderSupport を継承した場合は、継承クラス内で以下のメソッドを利用して取得することが可能です。

    getInitParameter(String key)

4.3.3.2. 実行環境の定義

コンテキストビルダのターゲットに実行環境開始処理用のリソースIDを指定することで、実行環境とその実行環境で利用可能なアクセスコンテキストが有効になります。
intra-mart Accel Platform が提供する実行環境を表すリソースIDは、あらかじめ定義されています。
リソースID一覧 」を参照して、必要な実行環境のリソースIDを設定ファイルに指定してください。

4.3.3.3. デフォルトコンテキストビルダの設定

デフォルトの切替処理用コンテキストビルダの設定方法を説明します。

4.3.3.3.1. デフォルトコンテキストビルダとは

切替処理は、特定のアクセスコンテキストだけではなく、現在の実行環境に存在する全てのアクセスコンテキストを対象として実行されます。
そのため、切替処理を追加したい場合は、定義されている全てのアクセスコンテキストに対して切替処理を実装する必要があります。
しかし、アクセスコンテキストはモジュールとして自由に追加されるため、切替処理を定義した実装者が、別のモジュールとして追加された未知のアクセスコンテキストに対して切替処理を実装することはできません。
このような場合に対応するため、アクセスコンテキストの実装者は、あらかじめデフォルトの切替処理を定義することができます。
切替処理実行時に、設定ファイルに未定義のリソースIDが指定された場合は、デフォルトコンテキストビルダを利用して切替処理が実行されます。
例えば、 Context A に依存する Context B というアクセスコンテキストがあるとします。
Context B を定義するモジュールでは、 Context A の状態をチェックして情報を最新化するような処理を作成し、デフォルトコンテキストビルダとして定義しておきます。
特定のモジュールで Context A を切り替えるような新しい切替処理を定義して実行した場合、デフォルトの切替処理が実行され、 Context B の状態が最新化されます。

4.3.3.3.2. デフォルトコンテキストビルダの設定

デフォルトコンテキストビルダを定義するためには、以下の設定を行う必要があります。
  1. デフォルトコンテキストビルダとして動作するコンテキストビルダを定義する。
  2. ライフサイクル開始処理用のコンテキストビルダ設定に、デフォルトコンテキストビルダを利用する設定を行う。
ライフサイクルの開始処理用のコンテキストビルダは、ContextBuilderSupport クラスを継承している必要があります。
デフォルトコンテキストビルダには、制約はありません。
Web実行環境用の標準アクセスコンテキストは、 デフォルトコンテキストビルダをサポートしています。
以下に設定手順を説明します。
設定は、コンテキストスイッチ、コンテキストスタック、それぞれに対して行います。
  1. デフォルトコンテキストビルダとして動作するコンテキストビルダを定義する。

    通常のコンテキストビルダ設定を行い、デフォルトコンテキストビルダのリソースIDを target 属性に指定します。
    リソースIDは任意の文字列を指定します。

    実装例

    <!-- コンテキストスイッチ用デフォルトコンテキストビルダの定義 -->
    <builder target="sample.switch.default">
        <builder-class>sample.DefaultSwitchContextBuilder</builder-class>
    </builder>
    
    <!-- コンテキストスタック用デフォルトコンテキストビルダの定義 -->
    <builder target="sample.stack.default">
        <builder-class>sample.DefaultStackContextBuilder</builder-class>
    </builder>
    
  2. ライフサイクル開始処理用のコンテキストビルダ設定に、デフォルトコンテキストビルダを利用する設定を行う。

    ライフサイクル開始処理用のコンテキストビルダ設定の初期パラメータに、デフォルトコンテキストビルダのリソースIDを指定します。
    切替処理 初期パラメータのキー 設定値
    コンテキストスイッチ default-switch-resource-id コンテキストスイッチ用のデフォルトコンテキストビルダのリソースID
    コンテキストスタック default-stack-resource-id コンテキストスタック用のデフォルトコンテキストビルダのリソースID

    実装例

    <!-- Web実行環境開始処理用のコンテキストビルダ設定 -->
    <builder target="platform.request">
        <builder-class>sample.SampleContextBuilder</builder-class>
    
        <!-- コンテキストスイッチ用デフォルトコンテキストビルダ設定 -->
        <init-param>
            <param-key>default-switch-resource-id</param-key>
            <param-value>sample.switch.default</param-value>
        </init-param>
    
        <!-- コンテキストスタック用デフォルトコンテキストビルダ設定 -->
        <init-param>
            <param-key>default-stack-resource-id</param-key>
            <param-value>sample.stack.default</param-value>
        </init-param>
    
    </builder>
    

4.3.4. コンテキストデコレータの設定

  • コンテキストデコレータの設定

    コンテキストデコレータを利用するには、builder タグ内に decorator タグを指定します。
    <builder target="sample.resource.id">
        <!-- ContextBuilderSupport を継承したコンテキストビルダクラスを指定します。 -->
        <builder-class>sample.SampleContextBuilder</builder-class>
        <!-- コンテキストデコレータを必要な数だけ指定します。 -->
        <decorator>
    	    <!-- コンテキストデコレータの実装クラスを指定します。 -->
    	    <decorator-class>sample.SampleContextDecorator</decorator-class>
    	    <!-- 初期パラメータを必要な数だけ指定します。 -->
    	    <init-param>
    	        <param-key>decorator-param</param-key>
    	        <param-value>Sample Value</param-value>
    	    </init-param>
        </decorator>
    </builder>
    
  • 初期パラメータの設定

    コンテキストデコレータで利用するパラメータを init-param タグで指定することが可能です。
    設定した初期パラメータは、 ContextDecorator インタフェースの init() メソッドを実装して取得します。

    実装例

    @Override
    public void init(final String contextType, final DecoratorInfo decoratorInfo) {
    
        // コンテキストデコレータ設定情報
        this.decoratorInfo = decoratorInfo;
    
        // 初期パラメータの取得
        List<InitParam> params = this.decoratorInfo.getInitParam();
    }
    
    また、基底クラス ContextDecoratorSupport を継承した場合は、継承クラス内で以下のメソッドを利用して取得することが可能です。

    getInitParameter(String key)