Jersey2がどんな風にHK2を使って、DIをコントロールしてるんだろう?って気になって。なので、Jersey2のソースコード読んでみることにしました。何か分かんないことがあっても、うらがみさんがいるから、安心(๑•̀ㅂ•́)و✧
ApplicationHandlerのinitializeとapply読むのおぬぬめ!
— うらがみ (@backpaper0) 2015, 12月 12
まずはゴールと、やらないことから。
ゴール
リクエストが来てからレスポンスを返すまでの基本的な流れを理解する。
やらないこと
Jersey2やJAX-RS 2.0全体の読み込みは、やらない。
ServletContainer
ってことで、子どもたちが背中に飛び乗ってくる土曜の昼間から、読み始めました。 org.glassfish.jersey.servlet.ServletContainer をServletFilterとして使うやり方があるので、そこから入ってみる。
jersey/ServletContainer.java at 2.22.1 · jersey/jersey · GitHub
ServletとしてもFilterとしても動くようになってる。のでフィルターとしては doFilter を見たら良さそう。色々やってるけど、結局 serviceImpl の中で webComponent の serviceImpl を呼び出してるすね。なかなか味のあるコードだなー。実装の理由をコメントで残してるのって読むときに助かるから良いね。
WebComponent
てことでWebComponentを読もう。
jersey/WebComponent.java at 2.22.1 · jersey/jersey · GitHub の serviceImpl を見てみる。
final ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri, servletRequest.getMethod(), getSecurityContext(servletRequest), new ServletPropertiesDelegate(servletRequest)); initContainerRequest(requestContext, servletRequest, servletResponse, responseWriter); appHandler.handle(requestContext);
お、うらがみさんが言ってたappHandlerが出てきた。appHandler読めたら目標達成できそうだなー。と思いつつ initContainerRequest を見たら、その中で RequestScopedInitializerProvider というものを使ってる。ふむ・・・。
RequestScopedInitializerProvider
ほんで DEFAULT_REQUEST_SCOPE_INITIALIZER_PROVIDER あたりをぼーっと見てて。「あ・・・これずっと避けてきてたやつや・・・」ってなりました。
private final Type REQUEST_TYPE = (new TypeLiteral<Ref<HttpServletRequest>>() {}).getType(); private final Type RESPONSE_TYPE = (new TypeLiteral<Ref<HttpServletResponse>>() {}).getType();
TypeLiteralを理解できるように頑張るか・・・。
ジェネリクスの旅
Nagiseさんの記事を読み読みφ(..)
すごいなぁ。
- Javaのジェネリクスとリフレクション - プログラマーの脳みそ
- ほほー。んで、Java8でまたちょっと変わってるみたいだなーと見ながら、応用編へ進む。
- Javaのジェネリクスとリフレクション応用編 - プログラマーの脳みそ
- けど、まずはその中の入門編リンクを見ていくことにした。3種類の山括弧?
- Javaジェネリクス再入門 - プログラマーの脳みそ
- ふむふむ。3種類の山括弧かぁ。なるほど。
- ジェネリクスの基礎と応用 JJUG CCC 2012 Fall
- 上級編は頭から煙が出始めたのでスルーで!
- ジェネリクスの基礎とクラス設計への応用
- ちょっと言い方が優しくなってるw
- Javaのジェネリクスとリフレクション応用編 - プログラマーの脳みそ
- からの、戻ってきました!半分くらい理解できた!面白かった!
イマココ。
次回
ということで、次回はTypeLiteralの理解に進めそうです!良い一週間を!