javax.naming.NamingException: 名前付けコンテキストはこのクラスローダにバインドされていません

IT, Java

STSでSVNから最新を取得し、
Tomcatを起動したらわけのわからないエラーが発生しました。
Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Hoge]]
so no cleanup was performed for that container
javax.naming.NamingException: 名前付けコンテキストはこのクラスローダにバインドされていません
上記のようなエラーメッセージが流れていました。
見慣れないエラーメッセージに嫌な予感がしました。
案の定、貴重な時間をごっそり奪われることに……。


対処

軽く調査してみると、「ライブラリの重複が原因かもしれない」
と書いてあったのでMavenプロジェクトの更新を行いました。

残念ながら全く変化なし。


次にサーバーを削除して入れ直したら直った、
という情報を入手。
さっそく試してみました。
なんとなくですが、直るような予感がしていました。
……がダメ。これも何の変化もおこせず。


困った僕はとりあえずPCを再起動しました。
よくわからない事象でもとりあえず再起動したら直ったという経験が過去にあります。
……これもダメ。


エラーメッセージを漫然と眺めていると
「invalid loc header (bad signature)」という文章が目につきました。
エラーメッセージでググると、
jar ファイルのバージョンがおかしくなっているかもよ、という情報をゲット。
Mavenのローカルリポジトリを削除すると直るらしいです。
STSを一旦落とし、ローカルリポジトリ「C:\Users\ユーザー\.m2」 を削除。
再度、STSを起動し、Tomcatを再起動。
……これもまさかのNG。


途方にくれた僕は打つ手もないので、
上記のローカルリポジトリの削除を再度試行。
……あれ?
なぜかエラーが出ない……?
直りました。
手順は前回と全く同じのはずですが、
なぜか正常動作に移行しました。

まとめ

Mavenを使っているならとりあえずローカルリポジトリを削除すれば直るかもしれません。
その後、調査しているとけっこう同じ問題でもがき苦しんでいる方がいました。
誰もが一度は襲われるエラーなのかもしれません。

IT, Java

Posted by raishin