Package nablarch.fw.handler
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>
ハンドラキューの委譲チェインとは独立したルールに従って、
ハンドラのディスパッチを行うハンドラ(ディスパッチャ)
- Author:
- Iwauo Tajima
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncreateHandlerFor(Object delegate, ExecutionContext ctx) 渡されたインスタンスからハンドラインスタンスを作成して返す。 指定されたクラスがHandlerインターフェースを実装している場合は そのインスタンスをキャストして返す。 対象のクラスがハンドラインターフェースを実装していない場合でも、 MethodBinderが実行コンテキストに設定されていれば、それを使用して Handlerインターフェースのラッパーを作成して返す。 MethodBinderも存在しない場合はnullを返す。protected abstract Class<?>getHandlerClass(TData input, ExecutionContext context) 処理を委譲するハンドラの型を決定する。handle(TData req, ExecutionContext ctx) 入力データに対する処理を実行する。voidsetDelegateFactory(DelegateFactory delegateFactory) ハンドラファクトリを設定する。 明示的に設定されない場合、デフォルト実装としてDefaultDelegateFactoryを使用する。setImmediate(boolean immediate) ディスパッチされたハンドラの実行タイミングを指定する。protected voidwriteDispatchingClassLog(TData data, ExecutionContext context, String fqn) アクセスログにディスパッチ先クラスを出力する。 デフォルトでは何もしない。 必要に応じてオーバーライドすること。
-
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
入力データに対する処理を実行する。 このクラスの実装では、 #getHandlerClass() で指定されるクラスのインスタンスを生成し、 ハンドラキューに追加した後、後続のハンドラに処理を委譲する。 ハンドラの追加位置はimmediateの値に従って以下のように変化する。immediate = true : ハンドラキューの先頭に追加。(即時に実行される。) immediate = false: ハンドラキューの末尾に追加。
-
createHandlerFor
渡されたインスタンスからハンドラインスタンスを作成して返す。 指定されたクラスがHandlerインターフェースを実装している場合は そのインスタンスをキャストして返す。 対象のクラスがハンドラインターフェースを実装していない場合でも、 MethodBinderが実行コンテキストに設定されていれば、それを使用して Handlerインターフェースのラッパーを作成して返す。 MethodBinderも存在しない場合はnullを返す。- Parameters:
delegate- インスタンスctx- 実行コンテキスト- Returns:
- ハンドラインスタンス
-
setImmediate
ディスパッチされたハンドラの実行タイミングを指定する。- Parameters:
immediate- trueの場合は、ディスパッチされたハンドラをハンドラキューの先端に追加する。 falseの場合は、ディスパッチされたハンドラをハンドラキューの最後尾に追加する。- Returns:
- このオブジェクト自体
-
writeDispatchingClassLog
アクセスログにディスパッチ先クラスを出力する。 デフォルトでは何もしない。 必要に応じてオーバーライドすること。- Parameters:
data- 入力データオブジェクトcontext- 実行コンテキストfqn- ディスパッチ先クラスの完全修飾クラス名
-
setDelegateFactory
ハンドラファクトリを設定する。 明示的に設定されない場合、デフォルト実装としてDefaultDelegateFactoryを使用する。- Parameters:
delegateFactory- ハンドラファクトリ
-