s)。在出现的向导中,输入以下信息:
Name:DWAnalyze
Superclass:使用 Browse 按钮添加 com.ibm.dtfj.analyzer.base.AnalyzerBase
Interfaces:使用 Add 按钮添加 com.ibm.dtfj.analyzer.ext.IAnalyze
单击 Finish 即可使用 stub 方法创建 DWAnalyze 分析程序类。
IBM的Java诊断,第4部分(4)
时间:2011-11-02 IBM Helen Beeken
要继续该示例,输入清单 1 所示的代码。这个简单的示例可以确定被分析的转储是否是在多处理器机 器上创建的。
清单 1. 实现 IAnalyze 的分析程序
package mypackage;
import com.ibm.dtfj.analyzer.base.AnalyzerBase;
import com.ibm.dtfj.analyzer.ext.IAnalyze;
import com.ibm.dtfj.image.DTFJException;
import com.ibm.dtfj.image.Image;
import com.ibm.util.SimpleVector;
/**
* This is the basic design required to implement an IAnalyze Interface
*/
public class DWAnalyze extends AnalyzerBase implements IAnalyze {
private static String description = "Check the number of processors";
/*
* This rule checks if the processor count is greater than 1
*/
private static String[] multiProcessorRules = {
"processorCount > 1 TRUE"
};
/**
* An analyzer to report if the dump was produced on a multiprocessor machine
*/
public DWAnalyze() {
defineRule("isMultiProcessor",multiProcessorRules);
}
/* (non-Javadoc)
* @see com.ibm.dtfj.analyzer.base.AnalyzerBase#getShortDescription()
*/
public String getShortDescription() {
return description;
}
/* (non-Javadoc)
* @see com.ibm.dtfj.analyzer.ext.IAnalyze#doAnalysis()
*/
public String[] doAnalysis() {
return checkProcessors(getContext().getCurrentImage());
}
/**
* This function uses the getProcessorCount() function from the Image class
* and then adds an entry into the ret[] array for parsing through the analysisRules[]
* array. The format for passing through the analysisRules needs to be of the type
* name=value
*/
private String[] checkProcessors(Image image) {
ret = null;
try {
int procNum = image.getProcessorCount();
ret = new String[1];
ret[0] = "processorCount=" + procNum;
} catch (DTFJException e) {
handleError("No processor information",e);
}
return ret;
}
}
从上面的示例可以看到,必须实现两种方法: getShortDescription() 和 doAnalysis()。 doAnalysis() 方法的目的是从转储中提取信息并以名称/值对的方式返回。这些信息将通过使用 AnalyzerBase(能够处理一些简单的分析规则)的默认行为进行进一步分析。针对名称/值对集使用各个 规则并选择一个特定的名称对值进行检验。在清单 1 中,如果名称为 processorCount 的一项的值大于 1,规则处理结果将为真(true)。
要查看分析模块的运行,可跳至 “运行分析程序” 一节。
IBM的Java诊断,第4 |