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が適用できることがわかりました。