slim3のHotReloadingでエラーが発生した(2)
slim3のHotReloadingでエラーが発生した - あおうさ@日記の続き。
現象がなんとなくわかりました。HOT reloadableではないパッケージのクラスからHOT reloadableなクラスをnewしようとするとエラーが発生するようです。
パッケージ
- study.app
- study.app.cool
- study.slim3wrapper
web.xml
<context-param> <param-name>slim3.rootPackage</param-name> <param-value>study.app</param-value> </context-param>
上記の構成で
study.slim3wrapperのパッケージのクラスからHOT reloadableなクラスであるstudy.app配下のmodelパッケージのクラスをnewしていたのが問題でした。
slim3のHOT reloadingに関する制約
MLで次のように記載されています。
Singleton、ServletのFilter、ContextListenerなどは、
root.coolパッケージ配下に置くようにしてください。
root.cool.service, root.cool.servlet ...HOT reloadableなクラスは、coolなクラスにアクセスできますが、
coolなクラスは、HOT reloadableなクラスにアクセスすることはできません。HOT reloadingに関する制約はこれだけです。
ばっちり太字のところにひっかかってました。私のミスです。
package構成を見ればわかるとおりstudy.slim3wrapperがappのpackageに依存している時点でpackage構成がおかしいのです。それを修正して解決しました。
解決したのはいいのですが、新しい疑問が出てきました。この構成の場合に下記packageで違いはなにかあるのでしょうか。
- study.app.cool
- study.slim3wrapper
特に違いがないとしたら、「Singleton、ServletのFilter、ContextListenerなどをstudy.app配下のパッケージで作成したい場合にはcoolパッケージに入れなさい。」ということでなのでしょうか。study.app配下ではない場合はcoolというパッケージ名をつけなくても同様の動作になる?