SMART deploy 〜 Creator 〜

SMART deployにおけるコンポーネントの自動登録にはCreatorというものが使われているらしい。そしてSeasar2のドキュメント「SMART deployの設定方法」によるとクラスの検出条件は「クラスのパッケージ名が『ルートパッケージ名.サフィックスを小文字にした文字列』で始まっている」となっている。ん〜、なんで「ルートパッケージ名.適当な文字列」でも動作したんだろう??
あと、daoの部分は機械的に作成してプログラマに意識させないようにjarにしてしまおうという構想もあるので、jarからも自動登録させる方法も見つけたいが・・・。

パッケージ名の規約

ざっと見た感じではコンポーネント定義の作成にパッケージ名を使っているようには見えません(org.seasar.framework.container.ComponentCreator#ComponentCreatorImpl)・・・。別に推奨パッケージ構成が気に食わない訳ではないので、推奨された通りには作るつもりですが。

jarからも自動登録

予想では「ルートパッケージ以下のクラスを全部取得」⇒「その中から(クラス名の)命名規則に合致するものを抽出」というような流れっぽい。ので元ネタにjarファイルのクラスも入れてあげればよさそう。ってことはCreatorの問題ではなさげ・・・。しかもFileSystemComponentAutoRegisterを使っているとこもなさそうだし、そのままでもいけそう(ただし、どこで自動登録の設定がされているかさっぱりわかってません・・・)。

検証

http://d.hatena.ne.jp/beerman-fukui/20070608 の準備編で作ったものを使用)

  1. daoパッケージとentityパッケージをjarファイルにする。
  2. 上で作成したjarファイルをBuild Pathに追加する。
  3. BeerDaoとBeerを削除する。

無事に動作しました。