カスタム統計を更新するために、
Stats/PMI (Performance Monitoring Infrastructure) テンプレート、リソース・バンドル、Stats/PMI モジュールおよびメソッドにより定義された
メソッドを呼び出すようにアプリケーションを変更することができます。
このタスクについて
カスタム統計を更新するために、
Stats/PMI テンプレート、リソース・バンドル、Stats/PMI モジュールおよびメソッドにより定義された
メソッドを呼び出すようにアプリケーションを変更することができます。カスタム PMI を使用してコンポーネントを実装するには、
以下のプロセスが必要です。
- Stats/PMI テンプレート (xml ファイル) を定義します。
- リソース・バンドル (properties ファイル) を定義します。
- StatsFactory を使用して Stats/PMI モジュールを定義し、Stats/PMI オブジェクトを作成します。
- カスタム統計を更新するためにアプリケーションが使用するメソッドを定義します。
- アプリケーションを変更し、前のステップで定義されたメソッドが適切に呼び出されるようにします。
- アプリケーションにアクセスします。
- Tivoli Performance Viewer (TPV) に接続し、カスタム PMI 統計を表示します。
手順
- Stats/PMI テンプレートを定義します。 StatsFactory はランタイム・コンポーネントが XML テンプレートを使用して
カスタム Stats/PMI モジュールを作成できるようにします。
テンプレートは DTD com/ibm/websphere/pmi/xml/stats.dtd に従う必要があります。
以下は、サンプル・アプリケーションで使われるテンプレートの例です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Stats SYSTEM "stats.dtd">
<Stats type="com.stats.MyStats">
<description>MyStats.desc</description>
<resourceBundle>com.stats.MyStatsResourceBundle</resourceBundle>
<CountStatistic ID="1" name="MyStats.NumRequests">
<level>low</level>
<unit>MyStats.unit.none</unit>
<description>MyStats.NumRequests.desc</description>
<statisticSet>basic</statisticSet>
</CountStatistic>
<BoundedRangeStatistic ID="2" name="MyStats.expensiveStat ">
<level>high</level>
<unit>MyStats.unit.none</unit>
<description>MyStats.expensiveStat.desc</description>
<updateOnRequest>true</updateOnRequest>
</BoundedRangeStatistic>
</Stats>
- リソース・バンドルを定義します。 リソース・バンドルは、適切な言語/言い回しで統計の名前と説明を定義できるようにします。
以下は、リソース・バンドルの例です。
MyStats.desc=My View PMI Module
MyStats.NumRequests=Request Count
MyStats.NumRequests.desc=Total number of My view requests served.
MyStats.unit.none=None
MyStats.expensiveStat = Expensive Stat
MyStats. expensiveStat.desc = Number of Expensive stats
MyStats.Group= My Group
MyStats.Instance=My Instance
- StatsFactory を使用して Stats/PMI モジュールを定義し、Stats/PMI オブジェクトを作成します。
- StatisticActions を拡張するクラスを作成します。
public class MyStatisticsModule extends StatisticActions
- タイプ SPI* のカウント変数を宣言します。(SPICountStatistc および SPIBoundedRangeStatistic など)
private SPICountStatistic numReqs;
private SPIBoundedRangeStatistic expensiveStat;
- タイプ StatsGroup の StatsGroup およびタイプ StatsInstance の StatsInstance を作成します。
private static StatsGroup stocksStatisticsGroup = null;
private StatsInstance stocksStatistics = null;
MyStatisticsGroup = StatsFactory.createStatsGroup("MyStats.Group", template, null);
MyStatistics = StatsFactory.createStatsInstance("MyStats.Instance”,MyStatisticGroup,null,this);
ここで、template は、xml ファイルが存在する場所のアプリケーション内のパスです。
以下に例を示します。
String template = "/com/stats/MyStats.xml";
- StatsInstance 内に統計が作成されると、Stats インスタンス内に統計が作成されたことを示すために statisticCreated が呼び出されます。
上記で宣言した統計を、適切な統計に割り当てることができます。
public void statisticCreated (SPIStatistic s) {
// Called when the Statistics are created in the Stats Instance
if (s.getId() == MyStats.NUMREQS)
{
numReqs = (SPICountStatistic)s; // Assign Statistic
}
}
- カスタム統計を更新するためにアプリケーションが使用するメソッドを定義します。
public void onRequestArrival(){
if (numReqs != null)
{
numReqs.increment(); // Increment/Decrement Statistic as per Req
}
}
- クライアントまたは任意のその他のモニター・アプリケーションによる特定の要求に応じて統計を更新するために、updateStaisticRequest メソッドを実装することもできます。
public void updateStatisticOnRequest (int dataId) {
if (dataId == MyStats.expensiveStat)
{
expensiveStat.set(xxxxx);
}
}
上記の例で、dataId は更新される統計の ID です。
- メソッド (前のステップで定義済み) を適切に呼び出すために、アプリケーションを更新します。
- アプリケーションにアクセスします。
- Tivoli Performance Viewer に接続し、カスタム PMI 統計を表示します。
トラブルの回避 (Avoid trouble): Network Deployment 環境にカスタム PMI が実装されている
場合は、Stats/PMI xml ファイルおよびリソース・バンドル・プロパティー・ファイルが WebSphere Application Server クラス・ローダー
には可視ではないために、カスタム PMI カウンターを表示できないことがあります。Stats/PMI.xml ファイル
およびリソース・バンドル・プロパティー・ファイルは、アプリケーション内部に
あります。カスタム PMI カウンターを表示できるようにするには、
Stats/PMI.xml ファイルおよびリソース・バンドル・プロパティー・ファイル
をクラスパスに置く必要があります。
Stats/PMI.xml ファイルおよびリソース・バンドル・プロパティー・ファイル
の以下のファイル構造で jar を作成し、これらのファイルを
WAS_HOME¥lib¥ext フォルダーに入れることによって、
カスタム PMI カウンターを可視にします。
そうすると、カスタム PMI カウンターは、クラス・ローダーに対して可視になります。
com/ibm/app/temp/tempstats.xml --- path of the Stats/PMI.xml
com/ibm/app/temp/resourcebundle.props --- path of the resource bundle property file
gotcha