Class DispatchHandler<TData,TResult,TSelf extends Handler<TData,TResult>>

java.lang.Object
nablarch.fw.handler.DispatchHandler<TData,TResult,TSelf>
Type Parameters:
TData - ハンドラに対する入力オブジェクトの型
TResult - ハンドラの処理結果オブジェクトの型
TSelf - 具象ハンドラの型
All Implemented Interfaces:
Handler<TData,TResult>
Direct Known Subclasses:
RequestPathJavaPackageMapping, RoutingHandlerSupport

public abstract class DispatchHandler<TData,TResult,TSelf extends Handler<TData,TResult>> extends Object implements Handler<TData,TResult>
ハンドラキューの委譲チェインとは独立したルールに従って、 ハンドラのディスパッチを行うハンドラ(ディスパッチャ)
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected Handler<TData,TResult>
    渡されたインスタンスからハンドラインスタンスを作成して返す。 指定されたクラスがHandlerインターフェースを実装している場合は そのインスタンスをキャストして返す。 対象のクラスがハンドラインターフェースを実装していない場合でも、 MethodBinderが実行コンテキストに設定されていれば、それを使用して Handlerインターフェースのラッパーを作成して返す。 MethodBinderも存在しない場合はnullを返す。
    protected abstract Class<?>
    処理を委譲するハンドラの型を決定する。
    入力データに対する処理を実行する。
    void
    ハンドラファクトリを設定する。 明示的に設定されない場合、デフォルト実装としてDefaultDelegateFactoryを使用する。
    setImmediate(boolean immediate)
    ディスパッチされたハンドラの実行タイミングを指定する。
    protected void
    アクセスログにディスパッチ先クラスを出力する。 デフォルトでは何もしない。 必要に応じてオーバーライドすること。

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • DispatchHandler

      public DispatchHandler()
  • Method Details

    • getHandlerClass

      protected abstract Class<?> getHandlerClass(TData input, ExecutionContext context) throws ClassNotFoundException
      処理を委譲するハンドラの型を決定する。
      Parameters:
      input - 入力データ
      context - 実行コンテキスト
      Returns:
      処理を委譲するハンドラ
      Throws:
      ClassNotFoundException - 指定されたクラスが存在しなかった場合。
    • handle

      public TResult handle(TData req, ExecutionContext ctx)
      入力データに対する処理を実行する。 このクラスの実装では、 #getHandlerClass() で指定されるクラスのインスタンスを生成し、 ハンドラキューに追加した後、後続のハンドラに処理を委譲する。 ハンドラの追加位置はimmediateの値に従って以下のように変化する。
         immediate = true : ハンドラキューの先頭に追加。(即時に実行される。)
         immediate = false: ハンドラキューの末尾に追加。 
       
      Specified by:
      handle in interface Handler<TData,TResult>
      Parameters:
      req - 入力データ
      ctx - 実行コンテキスト
      Returns:
      処理結果データ
    • createHandlerFor

      protected Handler<TData,TResult> createHandlerFor(Object delegate, ExecutionContext ctx)
      渡されたインスタンスからハンドラインスタンスを作成して返す。 指定されたクラスがHandlerインターフェースを実装している場合は そのインスタンスをキャストして返す。 対象のクラスがハンドラインターフェースを実装していない場合でも、 MethodBinderが実行コンテキストに設定されていれば、それを使用して Handlerインターフェースのラッパーを作成して返す。 MethodBinderも存在しない場合はnullを返す。
      Parameters:
      delegate - インスタンス
      ctx - 実行コンテキスト
      Returns:
      ハンドラインスタンス
    • setImmediate

      public TSelf setImmediate(boolean immediate)
      ディスパッチされたハンドラの実行タイミングを指定する。
      Parameters:
      immediate - trueの場合は、ディスパッチされたハンドラをハンドラキューの先端に追加する。 falseの場合は、ディスパッチされたハンドラをハンドラキューの最後尾に追加する。
      Returns:
      このオブジェクト自体
    • writeDispatchingClassLog

      protected void writeDispatchingClassLog(TData data, ExecutionContext context, String fqn)
      アクセスログにディスパッチ先クラスを出力する。 デフォルトでは何もしない。 必要に応じてオーバーライドすること。
      Parameters:
      data - 入力データオブジェクト
      context - 実行コンテキスト
      fqn - ディスパッチ先クラスの完全修飾クラス名
    • setDelegateFactory

      public void setDelegateFactory(DelegateFactory delegateFactory)
      ハンドラファクトリを設定する。 明示的に設定されない場合、デフォルト実装としてDefaultDelegateFactoryを使用する。
      Parameters:
      delegateFactory - ハンドラファクトリ