id:higayasuo:20060510#1147231845
ひがさんに改めて説明していただいたので、早速試してみました。Tomcatを上げたままで以下のクラス
package examples.hotdeploy.util;
public class CalcUtil {
public int add(int augend, int addend) {
return augend + addend;
}
}
を作成して、AddActionのcalculateメソッドを以下のように変更します
public class AddAction {
. . .
public String calculate() {
CalcUtil calcUtil = new CalcUtil();
addDto.setResult(calcUtil.add(addDto.getArg1(), addDto.getArg2()));
return null;
}
. . .
これで動いちゃいますね。Tomcat再立ち上げとかは一切無し。CalcUtilの中身をいじっても即座に反映されます。
このことで、rootPackageName以下のクラスであれば、newされるクラスに対してもHOT deployが適用されることがわかりました。
ここで、HogeUtilはstatic系だったっけということで、staticメソッドに変えてみます(privateコンストラクタを作成とか、そのへんは割愛します)。Tomcatはまだ立ち上げたままです。
public class AddAction {
. . .
public String calculate() {
addDto.setResult(CalcUtil.add(addDto.getArg1(), addDto.getArg2()));
return null;
}
. . .
package examples.hotdeploy.util;
public class CalcUtil {
public static int add(int augend, int addend) {
return augend + addend;
}
}
この変更もTomcatを上げたままで可能でした。わざとAddActionだけ先に変更してエラー画面を出し、その後にCalcUtilを修正してもきちんと動作します。これで、staticメソッドに関してもHOT deployが適用できることがわかりました。