MyFacesでアップロード(の続き)
先週MyFacesでアップロード(id:ma2:20050906:p1)というエントリを書いた。MyFacesのアップロード機能を使うと謎のエラー(NoSuchMethodError)が出てしまうというもの。その後色々調べたら,意外な犯人が判明した。
- 「JBoss NoSuchMethodError」でGoogle検索するとものすごくたくさんヒットする。個々の現象は異なるが,全て原因は同じで「同じ名前の古いjarがJBossにバンドルされていて,そっちが実行されている」というもの。
- warにパッケージしたjarが最優先で使われるんじゃなかったの?
- JBOSS_HOME/lib/endorsedなら最優先利用されるみたいだけど,そこには何もない。
- JBossには,commons-fileupload.jarはバンドルされていない。
- サーバ上にJBossを別にビルドして,そっちを起動して対象のwarをデプロイしてみた。
- ちゃんと動く!
- 現在共有サーバ上で動作しているいくつかのwarを持ってきて,デプロイしてみる。
- とあるwarをデプロイした途端にアップロードが動かなくなった!
- そのwarはStrutsを使っており,commons-fileupload.jarも含まれていた。こいつか?
- 犯人warを展開してcommons-fileupload.jarだけ最新版に入れ換えて再デプロイ。
- これで無事にアップロードも動作するようになったのであった。
しかしなぜ?
なぜ他のWEBアプリに含まれているjarが影響したのだろうか? これは未だに謎である。うーむ。