Java类中热替换的概念、设计与实现(7)

  53.    // 收到升级控制实体的开始升级命令消息时,会触发该方法被调用

  54.    public void startUpgrade(String worker_name) {

  55.        doUpgrade();

  56.        ugc.getMsgQueue().enqueue(new FinishUpgradeCMD(ugc,this));

  57.    }

  58.

  59.    // 收到升级控制实体的继续工作命令消息时,会触发该方法被调用

  60.    public void continueWork(String worker_name) {

  61.        switchToTaskQueue();

  62.    }

  63.

  64.    // 收到定时命令消息时,会触发该方法被调用

  65.    public void doWork() {

  66.        foo.sayHello();

  67.    }

  68.

  69.    // 实际升级动作

  70.    private void doUpgrade() {

  71.        hscl = new HowswapCL("../swap", new String[]{"Foo"});

  72.        Class cls = hscl.loadClass("Foo");

  73.        foo = (IFoo)cls.newInstance();

  74.        foo.SetState(state);

  75.    }

  76.}

  77.

  78.//IFoo 接口定义

  79.interface IFoo {

  80.    void SetState(String);

  81.    void sayHello();

  82.}

  在Foo类第一个版本的实现中,只是把设置进来的字符串直接打印出来。在第二个版本中,会先把设置进来的字符串变为大写,然后打印出来。例子很简单,旨在表达规则或者算法方面的升级变化。另外,我们并没有提及诸如:消息超时、升级失败等方面的异常情况,这在实际产品开发中是必须要考虑的。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpgdg.html