我有一个java代理,它测试字节码。 我正在使用java 6中的attach apis来允许用户使用我的java代理动态加载代理和工具以及解除代码。 我正在使用Boot-Class-Path清单属性来确保我的javagent类在引导类路径中,以便我的用户可以使用ArrayList等工具类。Javaagent类卸载
但是,版本控制会带来问题。 可以说用户动态地附加了我的代理的版本1。 然后我给了他第2版。现在,由于他的应用程序服务器从未关闭,因为他连接了我的代理的版本1,所以版本1的类仍然被加载。
我需要某种方式,当我的客户端版本2的Javaagent,版本1被卸载。
我知道一个办法是写一个客户类加载器为我javaagent的课程,并设置类加载器引用设置为null。 然而,在那种情况下,我不能在引导类路径中检测类,因为我的类加载器将在引导类加载器的层次结构中处于下方,因此我的用户不能像ArrayList那样的工具类,因为如果我在ArrayList的方法中添加一个调用,我的代理程序的类的方法引导类加载程序将无法看到它们。
那么有什么办法来解决引导类路径问题,并仍然卸载以前的代理类?
您可能想看看JavaRebel(http://www.zeroturnaround.com/javarebel/),它是您试图执行的商业实现。它可能会告诉你什么是和不可能的。 – skaffman 2009-08-12 17:06:18