IBM 的 Java 诊断,第 4 部分: 使用分析模块扩展 IBM Dump Analyzer for Java
2010-04-01 00:00:00 来源:WEB开发网从上面的示例可以看到,必须实现两种方法: getShortDescription() 和 doAnalysis()。doAnalysis() 方法的目的是从转储中提取信息并以名称/值对的方式返回。这些信息将通过使用 AnalyzerBase(能够处理一些简单的分析规则)的默认行为进行进一步分析。针对名称/值对集使用各个规则并选择一个特定的名称对值进行检验。在清单 1 中,如果名称为 processorCount 的一项的值大于 1,规则处理结果将为真(true)。
要查看分析模块的运行,可跳至 “运行分析程序” 一节。
实现 IReport 的分析程序
在创建实现 IReport 接口的分析模块时,可遵循上一节中介绍的新类创建步骤。但是,这一次应该在 New Class 向导中输入以下信息:
Name:DWReport
Superclass:使用 Browse 按钮添加 com.ibm.dtfj.analyzer.base.AnalyzerBase
Interfaces:使用 Add 按钮添加 com.ibm.dtfj.analyzer.ext.IReport
清单 2 中的代码演示了可以实现 IReport 接口的类。这个简单的示例将输出创建转储的机器的类型。这个类没有制定任何决策,它的惟一功能就是创建一个报告。将清单 2 中的内容输入新创建的 DWReport 类中,以继续本文的示例。
清单 2. 实现 IReport 的分析程序
package mypackage;
import com.ibm.dtfj.analyzer.base.AnalyzerBase;
import com.ibm.dtfj.analyzer.base.AnalyzerContext;
import com.ibm.dtfj.analyzer.ext.IAnalysisReport;
import com.ibm.dtfj.analyzer.ext.IAnalyzerContext;
import com.ibm.dtfj.analyzer.ext.IReport;
import com.ibm.dtfj.image.DTFJException;
import com.ibm.dtfj.image.Image;
/**
* This is the basic design required to implement an IReport Interface
*/
public class DWReport extends AnalyzerBase implements IReport {
private static String description = "DWReport example";
public DWReport() {}
/*
* (non-Javadoc)
* @see com.ibm.dtfj.analyzer.base.AnalyzerBase#getShortDescription()
*/
public String getShortDescription() {
return description;
}
/*
* (non-Javadoc)
* @see com.ibm.dtfj.analyzer.ext.IReport#produceReport()
*/
public IAnalysisReport produceReport() {
IAnalysisReport ret = allocateReport();
IAnalyzerContext ctx = getContext();
if (ctx instanceof AnalyzerContext) {
try {
Image p = ((AnalyzerContext)ctx).getCurrentImage();
ret.printLiteral("Image created on " + p.getSystemType());
} catch (DTFJException e) {
e.printStackTrace();
}
}
return ret;
}
}
更多精彩
赞助商链接