2008年06月23日
loader constraint violation
SAStrutsはすばらしい。スーパーアジャイルなStrutsと言うことで、RoRに対抗してサクサク感を最大化したとのふれこみは伊達じゃないな。
Strutsもまぁ悪くはないんだけど、テンポは確かに悪い。めんどくさいし。
めんどくさいと言う要素は結構くせ者で、趣味のプログラミングでは「あれ作ろうかな。でもめんどくさいしやめとこ。」と言うことになり、先に進めなくなる。これはまずい。SAStrutsはstruts-config.xmlと言う呪縛から解放されるので、気軽にプログラミングができる。
そんな快適なSAStrutsだけど、今さっき躓いた。
クラスローダー関連のエラーLinkageError : loader constraint violationが出てしまう。
SAStrutsはHotデプロイ機能のため、動的にクラス定義を変えることができるようになっているんだけど、Seasar管理外の部分と連携するとクラス定義に不整合が起こるようだ。
具体的にはSAStrutsのWebアプリから通常のServletへ、とあるインスタンスをsetすると発生する。
SAStrutsのSeasar用クラスローダと、TomcatのWebappClassLoaderとがぶつかっているようだ。
ふーむ。どうすれば良いんだろう。
通常ServletもSeasar用クラスローダを使うHotデプロイ対象にすれば良いのか?しかしどうやって?
Hotデプロイをやめれば問題は出ないだろうけど、それではSAStrutsの意味がない。
SAStrutsとServletの連携が変態過ぎると言うこともあるけど、Cometの実装の都合上Strutsだけでは実現不可能だ。
SAStrutsとCometServletとの間をSocketにしたりして結合度を下げる解決策もあるだろうけどめんどくさい上になんか邪道だ。
うーん。どうしよう。
"loader constraint violation"へのコメントはまだありません。