Wicket1.5をいろいろ見てみる - その3 RequestCycleとIRequestCycleListener
今回はRequestCycle。
1.4まではReqeustCycleはその処理のほとんどをRequestCycleProcesserへ委譲していましたが、1.5からはRequestCycleProcessor自体がなくなっているようです。
また、onRuntimeExceptionも無くなっていて替わりにListenerが登場しています。
1.4にもあったonBeginRequestやonEndReqeustは存在したままですがIRequestCycleListenerを使ったほうがよいかと思われます。ちなみにIRequestCycleListenerのonBeginRequestとRequestCycleのonBginRquestの両方を拡張した場合はlistenerのonBeginRequestの直後にRequestCycleのonBeginRequestが実行される形になります。
IRequestCycleListenerにはその他に下記のようなメソッドが定義されています。実際に実装するのはAbstractRequestCycleListenerになると思われます。
- void onBeginRequest(RequestCycle cycle)
- RequestTargetに替わる(?)RequestHandlerの解決直前に実行される。RequestCycle#onBeginRequestよりもこちらが先に実行される。
- void onEndRequest(RequestCycle cycle)
- RequestCycle#onDetachの中で実行される。RequestCycle#onEndRequestの実行直後にこちらが実行される。
- void onDetach(RequestCycle cycle)
- RequestCycle#onDetachの処理の最後に実行される。
- void onRequestHandlerResolved(IRequestHandler handler)
- RequestHandlerが解決された直後に実行される。RequestHandlerが解決されなかった場合は実行されない。
- void onRequestHandlerScheduled(IRequestHandler handler)
- 各RequestHandlerがスケジューリング(?)されたタイミングで実行される。
- IRequestHandler onException(RequestCycle cycle, Exception ex)
- RequestCycleのprocessRequest内で例外が発生した場合に実行される。例外用のRequestHandlerを返すことができる。
- void onExceptionRequestHandlerResolved(IRequestHandler handler, Exception exception);
- 上記onExceptionにて例外用のRequestHandlerが解決(生成)された場合に実行される。
RequestCycleもリファクタリングと拡張がいろいろ施されていて1.4と比べながらソースを見ると凄く勉強になります。