そう、ここ数日、Tomcat6のコードを読んだりしていました。いまさら何でそんなことを?というと、そこにコードがあったから。
嘘。Cometの実装を読みたかったのと、Tomcatのブートプロセスを抑えたかったから。
Cometは、CometServletとCometEventListenerというクラスがあるので、それを読んで見てください。このCometという非同期通信は、HTTPというプロトコルを使ってやることなのかな?確かにWebを見るために実装されているブラウザ上で、サーバサイドからPushするにはこの方法しかないのだろうけど、HTTPの良い部分は霞んでしまうような気がする。Webブラウザ上で(Flashとかを使わないで)驚きを与えられるのはよいのかもしれない。
Tomcatのブートプロセスは、思ったよりも簡単で Bootstrap(!)というクラスから設定の読み込み、ClassLoaderの生成などを行っている。今回のバージョンから、common/shareなどのClassLoaderなどの分け方が無くなったということだったので、実装自体が無くなったのかと思っていたら、しっかりと設定ファイルにもありました。common以外は空欄になっているだけなので、設定を追加すれば問題なく過去のバージョンと同じように使えるらしい。ブートプロセスだけではなくて、プロパティファイルも一緒に読んで言ったので、確認事態は非常に楽でした。この手のものは、実装だけを見ても辛い。設定ファイルを見ながら、自分ならどう実装するか考えながら読むと理解が進むと思う。あと、普段は使わないけど、Javaのセキュリティ機構(SecurityManager)もミドルウェアの実装を見ていくと必要なものだと言うことがわかってくるから面白い。他にJspClassLoaderとかも参考になりました。
でも、Architectの意図を理解してないせいか、不要に思えるところでリフレクションを使ってインスタンス生成とメソッド呼び出しをしていたのは気になる。クラス名(パッケージ名)が変わることによるソースコードの変更を最小限に抑えるため、くらいしか意図が推測できなかった。そこまでメンテナンスに気を使ったコードを書いたことが無いので分からないけど、そういうものなのかな。結構、バギーなコードに見えてしまいました。
それはそうと、Tomcatの実装を見ていて気になったのは、author。
Craig McClanahanもかかわっていたのね。StrutsとJSFだけなのかと思ったらそうでもない。色々なところに顔を出しているのだなぁ。天才的な、とかは思わないけど実行力、行動力は凄いなぁ。見習わないと。
最近のコメント