Kijimuna対応

新・たけぞう瀕死の日記
http://www3.vis.ne.jp/~asaki/p_diary/diary.cgi?Date=2008-01-28#2008012800

たけぞうさんのところでKijimunaの不具合報告があった。プロジェクトのプロパティページでバリデーションの設定をしても、Eclipseを再起動すると設定がデフォルト状態に戻ってしまう、というもの。ということで設定周りのコードを調べてみたところ、kijimunaの全ての設定は「workspace/.metadata/.plugins/org.seasar.kijimuna.core/.recorder/<プロジェクト名?>.model」のようなファイルに保存されているようだ・・?それらはpluginのstop時(Plugin#stopメソッド呼び出し時)に保存されている。で、プロジェクトのプロパティページに設定した内容がうまく保存されていないのではないかな・・と現時点では推測している。

訂正:ウソでした。正しくは「workspace/.metadata\.plugins\org.eclipse.core.runtime\.settings\org.seasar.kijimuna.core.prefs」にKijimunaの各種設定が保存されています。

ところで、僕の知っている限りでは基本的にEclipseでは

  1. プロジェクト単位
  2. ワークスペース単位

で設定内容を保存できて、特に再起動しても設定状態を保持したいとき(永続化時)は

  1. の場合はproject/.settings/*.pref
  2. の場合はworkspace/.metadata/.plugins/pluginID/*.pref

に保存するのが一般的だと考えていた(といっても実際のファイル書き込み作業はEclipseがやってくれる)。あ、prefファイルは単純なキーと値のマップなので、複雑なデータを格納するときは自前でxml等に書き出すこともあるか。

たしかKijimunaにはRTTIというJDTのASTモデルを扱いやすくするモノが独自に実装されてて、そいつのキャッシュデータなんかがKijimunaの設定と共に、上記の.modelファイルに保存されているのではないかと推測してみた。たしかにキャッシュデータ等はワークスペース単位で持っていても問題ないと思うが、単純なkijmuna自体の設定内容はそれとは別に保存しておいたほうがいいのではないかな〜と思ったり。訂正

で一番重要なのは、プロジェクト独自の設定内容は、ワークスペースの設定として保存するのではなく、プロジェクトごとに保存しとくべきではないかな、と思います(つまり上記(1))。そうするとソースをSCMで管理するときもkijimunaの設定が共有されるから。

と、いろいろ書いてみたもののソースを全て追いきれているわけではないので、根本的に勘違いしているかもしれません・・。ツッコミよろしくお願いします。嘘ついてたらごめんなさい・・orz。明日また続きを調査しよう。。

【追記】うぉ。2004年のkijimunaの発表スライド見てたら、想像以上にKijimunaが複雑なことをやっていることが発覚。これはまじめにコードリーディングしなきゃ迷子になりそうだな・・。

【さらに追記】id:r-matudaさんの日記を見ていたら、さらにさらに複雑そうなことがわかった。そっか〜S2Containerをエミュレートしているのね〜〜。先は長そうです。上の調査結果もあやしいな。