sabra

| コメント(0) | トラックバック(0)
すみません愛読書です。
B.L.T.と一緒にsabraをゲット。

RIMG0020.JPG

表紙がゴーオンシルバーの子だったのでつい・・・的な。


あと本日の苦行。
「Tomcat + Struts 2でTomcat終了時にLogFactory.getCachedFactoryでNullPointerExceptionが発生する」

なぜこんなことが起きてしまうのか。ざっくり言うと、

  • TomcatのWebappClassLoaderは、終了時に自分がロードした全クラスのstaticフィールドを強制的にnullにする
  • Struts 2が使用しているLogFactoryクラスは、クラスロード時にstatic factoriesフィールドにオブジェクトを設定し、メソッドはすべてfactoriesフィールド != nullであることを前提に実装している
  • Struts 2のDispatcherはstaticフィールド初期化時にLogFactory.getLogを呼び出すが、これがWebappClassLoaderの終了時に呼び出されてしまう(リフレクションの複雑な挙動に足を突っ込んでしまうので詳細は割愛。)

で、結果的にLogFactoryクラスが想定していない状態でメソッドが呼び出されてしまい、
ぬるぽになると・・・TomcatやStruts2やCommons Loggingのソース読んだりして3時間近く
使ってしまった。
ググってもあんまり情報が出てこなかったなぁ・・・終了時の例外なんてみんな気にしないのだろうか^^;

ちなみに、システムプロパティを変更することでWebappClassLoaderのフィールドリセット処理を
抑制できる。これでぬるぽは起きなくなる。(詳細はWebappClassLoaderのソースコードを
見ればわかる。)

眠い。寝よう。

トラックバック(0)

トラックバックURL: http://yzwlab.net/mt/mt-tb.cgi/402

コメントする

yacchin

本名: 谷沢 智史
電気通信大学大学院修士課程修了。
業務システム系会社、オンラインゲーム会社~DVD関連会社役員などを経て現在フリー中。

現在は色々模索中。
WEBアプリのあたりに舞い戻ったりとか。
エンターテインメントのあたりをうろうろとか。
WEBアプリいじりも兼ねてBlog開始。

mixiもやっとります。
yacchin(mixi)

2009年7月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

yacchin1205@ついったー

カテゴリ

ウェブページ

OpenID対応しています OpenIDについて