java热部署的简单例子

本文纯粹就是将一篇英文文章的一个段落翻译一下,并将例子跑通。

 

原文出处:http://java.sun.com/developer/TechTips/2000/tt1027.html

 

我的目录结构是

d://hotdeploy//Client.java

d://hotdeploy//ServerItf.java

d://hotdeploy//server//ServerImpl.java

 

文件内容依次为:

 

//file Client.java
import java.net.URL;
import java.net.URLClassLoader;
import java.io.BufferedReader;
import java.io.InputStreamReader;


public class Client {
 static ClassLoader cl;

 static ServerItf server;

 public static void loadNewVersionOfServer() throws Exception {
  URL[] serverURLs = new URL[] { new URL("file://d:/hotdeploy/server/") };
  cl = new URLClassLoader(serverURLs);
  server = (ServerItf) cl.loadClass("ServerImpl").newInstance();
 }

 public static void test() throws Exception {
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  loadNewVersionOfServer();
  while (true) {
   System.out.print("Enter QUOTE, RELOAD, GC, or QUIT: ");
   String cmdRead = br.readLine();
   String cmd = cmdRead.toUpperCase();
   if (cmd.equals("QUIT")) {
    return;
   } else if (cmd.equals("QUOTE")) {
    System.out.println(server.getQuote());
   } else if (cmd.equals("RELOAD")) {
    loadNewVersionOfServer();
   } else if (cmd.equals("GC")) {
    System.gc();
    System.runFinalization();
   }
  }
 }

 public static void main(String[] args) {
  try {
   test();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

 -------------------------------------------------------------------------

 

public interface ServerItf {
  public String getQuote();
}

 

 

-------------------------------------------------------------------------

 


public class ServerImpl implements ServerItf {

 // catch the class being unloaded from the VM
 static Object reporter = new Reporter(ServerImpl.class);

 public String getQuote() {
  return "i love you";
 }
}

// file ServerImpl.java. Place this file
// in a subdirectory named 'server'.
class Reporter {
 Class cls;

 Reporter(Class cls) {
  this.cls = cls;
  System.out.println("ServerImpl class " + cls.hashCode()
    + " loaded into VM");
 }

 protected void finalize() {
  System.out.println("ServerImpl class " + cls.hashCode()
    + " unloaded from VM");
 }
}

 

-------------------------------------------------------------------------

 

运行的命令依次为:

D:/hotdeploy>javac Client.java

D:/hotdeploy>javac ServerItf.java

D:/hotdeploy>javac -cp d:/hotdeploy d:/hotdeploy/server/ServerImpl.java

D:/hotdeploy>java Client
ServerImpl class 1641745 loaded into VM
Enter QUOTE, RELOAD, GC, or QUIT: quote
i love you
Enter QUOTE, RELOAD, GC, or QUIT:

 

 -------------------------------------------------------------------------

 

编辑ServerImpl.java为:

 

public class ServerImpl implements ServerItf {

 // catch the class being unloaded from the VM
 static Object reporter = new Reporter(ServerImpl.class);

 public String getQuote() {
  return "you love me";
 }
}

// file ServerImpl.java. Place this file
// in a subdirectory named 'server'.
class Reporter {
 Class cls;

 Reporter(Class cls) {
  this.cls = cls;
  System.out.println("ServerImpl class " + cls.hashCode()
    + " loaded into VM");
 }

 protected void finalize() {
  System.out.println("ServerImpl class " + cls.hashCode()
    + " unloaded from VM");
 }
}

 

-------------------------------------------------------------------------

 

打开另外一个dos窗口,运行javac -cp d:/hotdeploy d:/hotdeploy/server/ServerImpl.java

 

-------------------------------------------------------------------------

 

回到原先的doc窗口,依次运行

Enter QUOTE, RELOAD, GC, or QUIT: reload
ServerImpl class 12677476 loaded into VM
Enter QUOTE, RELOAD, GC, or QUIT: quote
you love me
Enter QUOTE, RELOAD, GC, or QUIT:

 

可以看到效果。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值