北海道のバーで、他にだれもお客さんがいない中、ヒガさんと話してたときに
「SeasarのホットデプロイってJSPがやってるのとは違うんですか?」
と聞くと、アルコール度数60度のジンをストーレートで飲みながら
「JSPみたいに他から呼び出されないクラスならホットデプロイは簡単」
と答えてもらったので、Visual Web Packが生成するマネージドビーンも同じように簡単にホットデプロイ作れるということだな、と思った。
FacesServletの替わりに
class HotdeployFacesServlet extends HttpServlet{ //JSPとクラスローダーの対応付け private Mapclmap=new HashMap(); //JSPとマネージドビーンクラスの対応付け private Map cmap = new HashMap(); private Servlet deploy(){ //managed-bean.xmlが書き換わってたら読み込みなおし //呼び出されたJSPを取得 if(false){//JSPがmanaged-bean.xmlに登録されてないなら //普通にFacesServletで処理 return new FacesServlet();//TODO:キャッシュする } if(true || //対応するクラスローダーがない true){ //クラスファイルが書き換わっている //クラスローダーを作成 //クラスファイル読み込み } return クラスローダーを使ってFacesServlet作成;//TODO キャッシュする } public void doGet(...){ deploy().doGet(request, response); } public void doPost(...){ deploy().doPost(request, response); } }
みたいなサーブレットを使えばいけるのかも。