COBOL アプリケーションの管理および監視のための Java 管理対象 Bean の使用

Java 技術には、アプリケーション、オブジェクト、およびデバイスの管理と監視のサポートが含まれます。JVM COBOL は、RunUnit の管理と監視を可能にする管理対象 Bean (MBean) を提供します。

RunUnit MBean を有効にする方法

RunUnit MBean は、次のいずれかの方法で有効にできます。

  • 特定の RunUnit レベルに対して
  • 作成したすべての RunUnit に対して

特定の RunUnit レベルに対して RunUnit MBean を有効にする RunUnit クラスの使用:

RunUnit 上のコンストラクターには、UseManagementBean と呼ばれる新しい値を含む RunUnitStartupOptions 列挙が含まれます。UseManagementBean オプションで RunUnitStartupOptions 列挙を使用する方法は以下の通りです。

 RunUnit myRUBean = new RunUnit("MyApplication", 
                  RunUnitStartupOptions.UseManagementBean)
 try
 {
   myRUBean.add(new PROGRAM1());  // Where PROGRAM1 is the COBOL program
 } 
 finally
 {
    myRUBean.stopRun();
 }    

作成したすべての RunUnit の MBean を有効にするための cobconfig.properties テキスト ファイルの使用:

  1. ファイル customers-xml.cpy を作成するには、テキスト エディターを使用します。
  2. ファイルに以下の内容を追加してください。
    mbeans=true
  3. アプリケーションの .jar ファイルまたはクラス ファイルを保存しているディレクトリに、テキスト ファイルを保存します。

問題を特定するための MBean の使用

Oracle の Java Mission Control や JConsole など、さまざまなプログラムで MBean を表示および使用できます。

JRE のバージョンによっては、MBean を使う前にアプリケーションの動的アタッチメントを有効にする必要があります。そのためには、Java コマンド ラインから以下のコマンドを実行します。

-Dcom.sun.management.jmxremote

MBean は、ライブになっている RunUnit の数を視覚的に表示できる以下の 2 つの属性を提供します。

LogicalRunUnitCount
終了済みの RunUnit 数を作成済みの RunUnit 数から引いた、ローリング カウンターを提供します。
LiveRunUnitCount
ガベージ コレクションされていない RunUnit の数を示します。

LiveRunUnitCountLogicalRunUnitCount の値が一致しない場合、以下の問題のいずれかが発生している可能性があります。

  • 1 つ以上の RunUnit が、クリーンに終了しなかった。RunUnit は、次のいずれかの方法でクリーンに終了できます。
    • RunUnit クラス自体で StopRun メソッドに呼び出しを追加します。
    • STOP RUN 呼び出しをアプリケーションに追加します。これによって、RunUnit が自動的に終了し、COBOLStopRunException が発生します。
  • LiveRunUnitCountLogicalRunUnitCount より大きい場合、RunUnit が他のクラスの保有されているため起動したままとなる可能性が非常に高いです。これを解決するには、RunUnit インスタンスの保存場所をチェックし、そのインスタンスが null になるか、または終了するように設定し、RunUnit で StopRun メソッドを呼び出します。
注: 常に、最低でも 1 つの RunUnit カウンターがあります。RunUnit クラスを使用しないアプリケーションには、初期またはデフォルト RunUnitが自動的に作成されるためです。

下図は、Java Mission Control ツールによるリークの表示例を示しています。

図 1. Oracle の Java Mission Control Tool で表示されるリークの例

長時間動作している RunUnit を識別するための MBean の使用

MBean 操作 dumpAllLongRunningRunUnitInfo を使用して、一定時間動作している RunUnit を識別できます。この MBean 操作は、ミリ秒単位の時間を指定する long 型パラメーターを使用します。

Oracle の Java Mission Control アプリケーションでは、[com.microfocus.runtimeservices] の [Operations] タブと [MBean Tree] セクションにあります。下図を参照してください。

図 2. Oracle の Java Mission Control Tool における長時間動作中の RunUnit の分析 Analysis of a long running RunUnit

MBean から返された情報によって、名前、ID、開始時間、GUID、RunUnit が作成された場所のスタック トレースを確認できます。

最も古い RunUnit の ID は必ず 1 であり、それは初期またはデフォルト RunUnit です。

ベスト コーディング プラクティスの推奨

同一の方法で RunUnit を作成および使用した場合、Micro Focusfinally 句で MBean をリリースすることを推奨します。以下に例を示します。

RunUnit myRUBean = new RunUnit("MyApplication", 
                  RunUnitStartupOptions.UseManagementBean)
 try
 {
    ... use the myRUBean object
 } 
 finally
 {
    myRUBean.stopRun();
 }        

詳細については、次の URL を参照してください。