1*f1fbf3c2SXin Li package sample.evolve; 2*f1fbf3c2SXin Li 3*f1fbf3c2SXin Li import javassist.*; 4*f1fbf3c2SXin Li 5*f1fbf3c2SXin Li /** 6*f1fbf3c2SXin Li * DemoLoader is a class loader for running a program including 7*f1fbf3c2SXin Li * an updatable class. This simple loader allows only a single 8*f1fbf3c2SXin Li * class to be updatable. (Extending it for supporting multiple 9*f1fbf3c2SXin Li * updatable classes is easy.) 10*f1fbf3c2SXin Li * 11*f1fbf3c2SXin Li * To run, type as follows: 12*f1fbf3c2SXin Li * 13*f1fbf3c2SXin Li * % java sample.evolve.DemoLoader <port number> 14*f1fbf3c2SXin Li * 15*f1fbf3c2SXin Li * Then DemoLoader launches sample.evolve.DemoServer with <port number>. 16*f1fbf3c2SXin Li * It also translates sample.evolve.WebPage, which sample.evolve.DemoServer 17*f1fbf3c2SXin Li * uses, so that it is an updable class. 18*f1fbf3c2SXin Li * 19*f1fbf3c2SXin Li * Note: JDK 1.2 or later only. 20*f1fbf3c2SXin Li */ 21*f1fbf3c2SXin Li public class DemoLoader { 22*f1fbf3c2SXin Li private static final int initialVersion = 0; 23*f1fbf3c2SXin Li private String updatableClassName = null; 24*f1fbf3c2SXin Li private CtClass updatableClass = null; 25*f1fbf3c2SXin Li 26*f1fbf3c2SXin Li /* Creates a <code>DemoLoader</code> for making class WebPage 27*f1fbf3c2SXin Li * updatable. Then it runs main() in sample.evolve.DemoServer. 28*f1fbf3c2SXin Li */ main(String[] args)29*f1fbf3c2SXin Li public static void main(String[] args) throws Throwable { 30*f1fbf3c2SXin Li Evolution translator = new Evolution(); 31*f1fbf3c2SXin Li ClassPool cp = ClassPool.getDefault(); 32*f1fbf3c2SXin Li Loader cl = new Loader(); 33*f1fbf3c2SXin Li cl.addTranslator(cp, translator); 34*f1fbf3c2SXin Li 35*f1fbf3c2SXin Li translator.makeUpdatable("sample.evolve.WebPage"); 36*f1fbf3c2SXin Li cl.run("sample.evolve.DemoServer", args); 37*f1fbf3c2SXin Li } 38*f1fbf3c2SXin Li } 39