DCEVM,Java类动态替换初级实验说明

概述

DCEVM,全称Dynamic Code Evolution,一个JVM补丁程序,其目的就是实现运行时的类替换。最新的项目地址为:https://dcevm.github.io/

下面将从安装、验证、搭建测试环境、测试等几个方面进行简要说明。

安装

首先登录网址:https://dcevm.github.io/,站点中明确给出了Binaries(二进制程序)的下载链接,该项目分为两个版本的发布程序,一个是light版本,另一个是full,区别在于full版本支持更多的特性,但对于一般的开发来说,light版本足矣,更多内容详情请参考原文。

二进制的文件下载后能够从中解压出一个带installer的jar文件,这个就是用于安装补丁文件的安装程序,运行方式如下:

java -jar installer.jar
如在Linux/Unix环境下运行,请命令最前方加sudo。程序运行后,会出现如下的安装画面:

DCEVM,Java类动态替换初级实验说明_第1张图片

接下来通过点击按钮“Add installation directory”选择要打上补丁的JAVA_HOME目录,选择完成后,分别点击“Replace by DCEVM”和“Install DCEVM as altjvm”来为目标JDK打上DCEVM补丁。

验证

安装完成后的效果,应该与上图类似,接下来我们可以通过控制台来进行安装验证。打开控制台终端程序,然后键入以下命令:

java -version

如果安装无误的话,则会出现以下信息,重点是最后一句话“Dynamic Code Evolution”。

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Dynamic Code Evolution 64-Bit Server VM (build 24.71-b01-dcevmlight-2, mixed mode)

搭建测试环境

接下来我们可以通过一个具体的实验来测试动态加载的效果,在测试前,先需要准备好相应的测试环境。

tomcat

到http://tomcat.apache.org去下载一个Tomcat服务器程序,这里选择的版本是7。解压后在其主目录的webapps下创建一个DCEVM目录,然后按照以下结构创建一个Web应用:

DCEVM/

├── META-INF

└── WEB-INF

    └── lib

Java项目

从eclipse中创建一个Java项目,目录结构如下:

/Users/i318043/z/workspace/eclipse/ExperimentDCEVM

├── WebContent

│   └── WEB-INF

│       └── classes

│           └── com

│               └── github

│                   └── dcevm

│                       └── test

└── src

    └── com

        └── github

            └── dcevm

                └── test

其中.project.xml和.classpath文件内容分别如下,该内容仅供参考,具体环境需要按需进行调整:

这里需要注意的是linkedResources,这是一个虚拟目录,其指向的是Tomcat中的DCEVM,目的是为了让编译后的二进制class文件直接输出到Tomcat中。

ExperimentDCEVM

org.eclipse.ui.externaltools.ExternalToolBuilder

auto,full,incremental,

LaunchConfigHandle

<project>/.externalToolBuilders/ExperimentDCEVM build.xml [Builder].launch

org.eclipse.wst.common.project.facet.core.builder

org.eclipse.jdt.core.javabuilder

org.eclipse.jdt.core.javanature

org.eclipse.wst.common.project.facet.core.nature

WebContent

2

/Users/Woody/z/apache-tomcat-7.0.61/webapps/DCEVM

至此,环境搭建完毕,接下来就可以进行编码测试了。

测试

在测试过程中,我们一共需要准备三个程序文件,两个Java和一个JSP;另外还需要一个配置文件web.xml;此外,如果需要使用Ant进行编译的话,可以在Java项目的图标上点击右键,选择Export,然后选择Ant Buildfiles即可自动生成build.xml。

源码清单

web.xml




    
        index.html
        index.xhtml
        index.htm
        index.jsp
        welcome.jsp
    


welcome.jsp



hi there!

HelloWorld.java
package com.github.dcevm.test;

public class HelloWorld /*4.2*/ extends AbstractHelloWorld {

	public String getGreetings() {
		/*5.0, 5.2*/ System.out.println("... ||x|| ...");
		/*1*/ return "Hello tricky?".concat(" ").concat(_getGreeting1()).concat(" ").concat(_getGreeting2()).concat(getAbstractGreeting());
	}

	/*2.1*/ private String _getGreeting1() {
		return "damn it!";
	}

	/*2.2*/ private String _getGreeting2() {
		return "Why nobody mentions this trap!";
	}

}

/*4.1*/ abstract class AbstractHelloWorld {
	protected String getAbstractGreeting() {
		return "";
	}
}
/*5.1*/ // ==> redefine auto-build approach
NewClass.java
package com.github.dcevm.test;

public class NewClass {

	public String getWord() {
		return "hmm ...";
	}
}

测试目标

  1. 修改既存类方法体,实现类自动替换
  2. 为既存类增加新的方法,实现类自动替换
  3. 创建新的抽象类,作为既存类的父类,并在子类中调研父类方法,实现父类与子类的自动替换
  4. 创建新类,并在JSP中调用新类的方法,实现新类的自动加载

测试步骤

  • JSP文件中注释掉所有的标签
  • 删除NewClass
  • 注释掉2.1、2.2和4.1、4.2标记的代码
  • debug模式启动Tomcat,命令为:sudo ./catalina.sh jpda run
  • eclipse中开启远程调试
  • JSP中打开与hwBean,并对代码中带有标记1的方法进行修改,完成测试目标1
  • 开启代码中2.1和2.2标记方法,完成测试目标2
  • 开启4.1和4.2,完成测试目标3
  • 开启JSP中与ncBean相关代码,并加入NewClass.java文件,完成测试目标4

关于Builders

源码中添加了Ant编译,通过鼠标右键点击项目,选择“Properties”,进入“Builder”,勾选掉“ExperimentDCEVM build.xml [Builder]”可以禁用Ant编译。PS:Ant编译主要针对使用eclipse的Java Builder不太适合的项目。

文档源码下载

http://download.csdn.net/detail/rcom10002/8612013

你可能感兴趣的:(Java)