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と比べながらソースを見ると凄く勉強になります。