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が影響したのだろうか? これは未だに謎である。うーむ。