Package nablarch.fw

Class ExecutionContext

Direct Known Subclasses:
ServletExecutionContext, StandaloneExecutionContext

public class ExecutionContext extends HandlerQueueManager<ExecutionContext>
一連のハンドラ実行において、共通して読み書きするデータを保持するクラス。

具体的には以下の情報を保持する。

  • ハンドラキュー
  • データリーダ もしくは データリーダファクトリ
  • ユーザセッションスコープ情報
  • リクエストスコープ情報
本クラスのセッションスコープはスレッドアンセーフである。 複数スレッドから使用する場合はセッションスコープにスレッドセーフなMap実装を設定すること。
  • Field Details

    • FW_PREFIX

      public static final String FW_PREFIX
      各種スコープ上の変数をフレームワークが使用する際に 名前に付けるプレフィックス(予約名)
      See Also:
    • THROWN_EXCEPTION_KEY

      public static final String THROWN_EXCEPTION_KEY
      例外をリクエストスコープから取得する際に使用するキー
      See Also:
    • THROWN_APPLICATION_EXCEPTION_KEY

      public static final String THROWN_APPLICATION_EXCEPTION_KEY
      ApplicationExceptionをリクエストスコープから取得する際に使用するキー
      See Also:
  • Constructor Details

    • ExecutionContext

      @Published(tag="architect") public ExecutionContext()
      デフォルトコンストラクタ
    • ExecutionContext

      public ExecutionContext(ExecutionContext original)
      元となる実行コンテキストから、新たな実行コンテキストのオブジェクトを作成する。

      作成される実行コンテキストの状態は以下の通り。

      • ハンドラキューには、元のオブジェクトからシャローコピーを作成して設定する。
      • リクエストスコープには、新規インスタンスを設定する(コピーされない)。
      • それ以外のフィールドには、元のオブジェクトの参照を設定する。
      Parameters:
      original - 元となる実行コンテキスト
  • Method Details

    • getHandlerQueue

      public List<Handler> getHandlerQueue()
      Description copied from class: HandlerQueueManager
      現在のハンドラキューの内容を返す。
      Specified by:
      getHandlerQueue in class HandlerQueueManager<ExecutionContext>
      Returns:
      現在のハンドラキューの内容
    • handleNext

      @Published public <TData, TResult> TResult handleNext(TData data) throws NoMoreHandlerException, ClassCastException
      ハンドラキュー上の次のハンドラに処理を委譲する。
      Type Parameters:
      TData - 処理対象データの型
      TResult - 処理結果データの型
      Parameters:
      data - 処理対象データ
      Returns:
      実行結果
      Throws:
      NoMoreHandlerException - 次のハンドラが存在しない場合。
      ClassCastException - ハンドラの型変数と実際のハンドラの戻り値の型が異なる場合。
    • getNextHandler

      public <TData, TResult> Handler<TData,TResult> getNextHandler() throws NoMoreHandlerException, ClassCastException
      ハンドラキュー上の次のハンドラを取得する。
      Type Parameters:
      TData - 処理対象データの型
      TResult - 処理結果データの型
      Returns:
      次のハンドラ
      Throws:
      NoMoreHandlerException - 次のハンドラが存在しない場合。
      ClassCastException - ハンドラの型変数と実際のハンドラの戻り値の型が異なる場合。
    • findHandler

      public <T> T findHandler(Object data, Class<T> targetType, Class<?> stopType)
      ハンドラキュー上の後続ハンドラのうち、 指定されたクラスもしくはインタフェースを実装している直近のハンドラを返す。

      該当するハンドラが登録されていなかった場合はnullを返す。

      Type Parameters:
      T - 検索対象のハンドラ型
      Parameters:
      data - このハンドラに対する入力オブジェクト
      targetType - 検索対象のハンドラ型
      stopType - このタイプのハンドラよりも後続にあるハンドラを検索対象から除外する。
      Returns:
      検索結果 (該当するハンドラが存在しなかった場合はnullを返す。)
    • selectHandlers

      public <T> List<T> selectHandlers(Object data, Class<T> targetType, Class<?> stopType)
      ハンドラキュー上の後続ハンドラのうち、 指定されたクラスもしくはインタフェースを実装しているものを全て返す。

      該当するハンドラが登録されていなかった場合は空のリストを返す。

      Type Parameters:
      T - 検索対象のハンドラ型
      Parameters:
      data - このハンドラに対する入力オブジェクト
      targetType - 検索対象のハンドラ型
      stopType - このタイプのハンドラよりも後続にあるハンドラを検索対象から除外する。
      Returns:
      検索結果
    • copy

      public final ExecutionContext copy()
      自身の複製を返す。

      複製処理の本体はcopyInternal()に委譲している。

      Returns:
      自身の複製。
    • copyInternal

      protected ExecutionContext copyInternal()
      自身の複製を返す。

      当メソッドが返すインスタンスはレシーバと同じ型でなければいけない。
      つまりobj.getClass() == obj.copy().getClass()がtrueでなければいけない。当メソッドをサブクラスでオーバーライドする場合はこの制約に注意して実装すること。

      Returns:
      自身の複製。
    • readNextData

      public <TData> TData readNextData()
      この実行コンテキスト上のデータリーダを使用して、次のデータを読み込む。
      Type Parameters:
      TData - データリーダが読み込むデータの型
      Returns:
      読み込んだデータ
    • getLastReadData

      public <TData> TData getLastReadData()
      この実行コンテキストが最後に読み込んだデータオブジェクトを返す。
      Type Parameters:
      TData - データオブジェクトの型
      Returns:
      この実行コンテキストが最後に読み込んだデータオブジェクト
    • clearLastReadData

      public void clearLastReadData()
      この実行コンテキストが最後に読み込んだデータオブジェクトをクリアする。
    • putDataOnException

      public void putDataOnException(Throwable e, Object data)
      例外に関連するデータを追加する。

      指定された例外およびデータはリクエストスコープに保持する。

      Parameters:
      e - 例外
      data - 例外に関連するデータ
    • getDataProcessedWhenThrown

      public Object getDataProcessedWhenThrown(Throwable e)
      指定した例外を送出したスレッドが、例外発生時に処理していた入力データを返す。
      Parameters:
      e - 例外
      Returns:
      指定した例外を送出したスレッドが例外発生時に処理していた入力データ。存在しない場合はnull
    • hasNextData

      public boolean hasNextData()
      この実行コンテキスト上のデータリーダから次に読み出すことができるデータが残っているかどうか。
      Returns:
      次に読み出すデータが存在する場合はtrue
    • getDataReader

      public <TData> DataReader<TData> getDataReader()
      データリーダを取得する。

      データリーダが設定されていない場合は、 データリーダファクトリを使用してリーダを生成し、その結果を返す。 ファクトリも設定されていない場合はnullを返す。

      Type Parameters:
      TData - データリーダが読み込むデータ型
      Returns:
      データリーダ
    • setDataReader

      public <TData> ExecutionContext setDataReader(DataReader<TData> reader)
      データリーダを設定する。
      Type Parameters:
      TData - データリーダが読み込むデータ型
      Parameters:
      reader - データリーダ
      Returns:
      このオブジェクト自体
    • setDataReaderFactory

      public <TData> ExecutionContext setDataReaderFactory(DataReaderFactory<TData> factory)
      データリーダのファクトリを設定する。
      Type Parameters:
      TData - ファクトリが生成するデータリーダが読み込むデータ型
      Parameters:
      factory - 設定するデータリーダファクトリ
      Returns:
      このオブジェクト自体
    • closeReader

      public ExecutionContext closeReader()
      現在使用しているデータリーダを閉じる。

      リーダを閉じる際に例外が発生した場合は、ワーニングログを出力し、 処理を継続する。

      Returns:
      このオブジェクト自体
    • getException

      public Throwable getException()
      リクエストスコープから例外を取得する。

      THROWN_EXCEPTION_KEYキーを使用する。

      Returns:
      例外。リクエストスコープに例外が設定されていない場合はnull
    • getApplicationException

      public ApplicationException getApplicationException()
      リクエストスコープからApplicationExceptionを取得する。

      THROWN_APPLICATION_EXCEPTION_KEYキーを使用する。

      Returns:
      ApplicationException。 リクエストスコープにApplicationExceptionが設定されていない場合はnull
    • setException

      public void setException(Throwable e)
      リクエストスコープに例外を設定する。

      THROWN_EXCEPTION_KEYキーに例外を設定する。 さらに、例外がApplicationExceptionの場合は、 THROWN_APPLICATION_EXCEPTION_KEYキーにも設定する。

      Parameters:
      e - 例外
    • isProcessSucceeded

      public boolean isProcessSucceeded()
      処理が正常終了したかどうかを取得する。
      Returns:
      正常終了した場合true
    • setCurrentRequestObject

      public void setCurrentRequestObject(Object currentRequestObject)
      現在処理中のリクエストオブジェクトを設定する。
      Parameters:
      currentRequestObject - 現在処理中のリクエストオブジェクト
    • getCurrentRequestObject

      public Object getCurrentRequestObject()
      現在処理中のリクエストオブジェクトを取得する。

      本メソッドは、またはの処理中にリクエストオブジェクトを取得する際に使用する。

      Returns:
      現在処理中のリクエストオブジェクト
    • setProcessSucceeded

      public void setProcessSucceeded(boolean processSucceeded)
      処理が正常終了したかどうかを設定する。
      Parameters:
      processSucceeded - 正常終了の場合true
    • setRequestScopeMap

      public ExecutionContext setRequestScopeMap(Map<String,Object> m)
      リクエストスコープを設定する。
      Parameters:
      m - リクエストスコープ上の変数を格納するMap
      Returns:
      このオブジェクト自体
    • getRequestScopeMap

      @Published public Map<String,Object> getRequestScopeMap()
      リクエストスコープ上の変数を格納したMapオブジェクトへの参照を返す。

      このMapへの変更はリクエストスコープに直接反映される。

      Returns:
      リクエストスコープへの参照
    • getRequestScopedVar

      @Published public <T> T getRequestScopedVar(String varName) throws ClassCastException
      リクエストスコープ上の変数の値を取得する。
      Type Parameters:
      T - 期待する変数の型
      Parameters:
      varName - 変数名
      Returns:
      変数の値
      Throws:
      ClassCastException - 実際の変数の型が期待する変数の型と適合しなかった場合。
    • setRequestScopedVar

      @Published public ExecutionContext setRequestScopedVar(String varName, Object varValue)
      リクエストスコープ上の変数の値を設定する。

      既に定義済みの変数は上書きされる。

      Parameters:
      varName - 変数名
      varValue - 変数の値
      Returns:
      このオブジェクト自体
    • setSessionStoreMap

      public ExecutionContext setSessionStoreMap(Map<String,Object> m)
      セッションストア上の変数を格納したMapを設定する。
      Parameters:
      m - セッションストア上の変数を格納したMap
      Returns:
      このオブジェクト自体
    • getSessionStoreMap

      public Map<String,Object> getSessionStoreMap()
      セッションストア情報を格納したMapオブジェクトへの参照を返す。

      このMapへの変更はセッションストアに直接反映される。

      Returns:
      セッションストアへの参照
    • getSessionStoredVar

      public <T> T getSessionStoredVar(String varName) throws ClassCastException
      セッションストア上の変数の値を取得する。
      Type Parameters:
      T - 期待する変数の型
      Parameters:
      varName - 変数名
      Returns:
      変数の値
      Throws:
      ClassCastException - 実際の変数の型が期待する変数の型と適合しなかった場合。
    • setSessionStoredVar

      public ExecutionContext setSessionStoredVar(String varName, Object varValue)
      セッションストア上の変数の値を設定する。

      既に定義済みの変数は上書きされる。

      Parameters:
      varName - 変数名
      varValue - 変数の値
      Returns:
      このオブジェクト自体
    • setSessionScopeMap

      public ExecutionContext setSessionScopeMap(Map<String,Object> m)
      セッションスコープ上の変数を格納したMapを設定する。
      Parameters:
      m - リクエストスコープ上の変数を格納したMap
      Returns:
      このオブジェクト自体
    • getSessionScopeMap

      @Published public Map<String,Object> getSessionScopeMap()
      セッションスコープ情報を格納したMapオブジェクトへの参照を返す。

      このMapへの変更はセッションスコープに直接反映される。

      Returns:
      セッションスコープへの参照
    • getSessionScopedVar

      @Published public <T> T getSessionScopedVar(String varName) throws ClassCastException
      セッションスコープ上の変数の値を取得する。
      Type Parameters:
      T - 期待する変数の型
      Parameters:
      varName - 変数名
      Returns:
      変数の値
      Throws:
      ClassCastException - 実際の変数の型が期待する変数の型と適合しなかった場合。
    • setSessionScopedVar

      @Published public ExecutionContext setSessionScopedVar(String varName, Object varValue)
      セッションスコープ上の変数の値を設定する。

      既に定義済みの変数は上書きされる。

      Parameters:
      varName - 変数名
      varValue - 変数の値
      Returns:
      このオブジェクト自体
    • invalidateSession

      @Published public ExecutionContext invalidateSession()
      現在のリクエストに紐付けられたセッションスコープを無効化する。
      Returns:
      このオブジェクト自体
    • isNewSession

      @Published public boolean isNewSession()
      新規セッションであるかどうか。
      Returns:
      新規セッションである場合はtrue
    • hasSession

      public boolean hasSession()
      セッションがあるかどうか。
      Returns:
      セッションがある場合[@code true}
    • setLastRecordNumber

      public void setLastRecordNumber(int lastRecordNumber)
      データリーダが、現時点で物理的に読み込んでいるレコードのレコード番号を設定する。
      Parameters:
      lastRecordNumber - 現時点で物理的に読み込んでいるレコードのレコード番号
    • getLastRecordNumber

      @Published public int getLastRecordNumber()
      データリーダが、現時点で物理的に読み込んでいるレコードのレコード番号を返却する。

      本メソッドは、FileDataReaderを使用してファイルを読み込んでいる場合にのみ値を返却する。 FileDataReader以外を使用している場合は0を返す。

      Returns:
      現時点で物理的に読み込んでいるレコードのレコード番号