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
-
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) 入力データに対する処理を実行する。void
setDelegateFactory
(DelegateFactory delegateFactory) ハンドラファクトリを設定する。 明示的に設定されない場合、デフォルト実装としてDefaultDelegateFactory
を使用する。setImmediate
(boolean immediate) ディスパッチされたハンドラの実行タイミングを指定する。protected void
writeDispatchingClassLog
(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
- ハンドラファクトリ
-