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