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 の数を示します。

LiveRunUnitCount および LogicalRunUnitCount の値が一致しない場合、次の問題のいずれかが発生している可能性があります。

  • 1 つ以上の RunUnit が、クリーンに終了しなかった。RunUnit は、次のいずれかの方法でクリーンに終了できます。
    • RunUnit クラス自体で StopRun メソッドに呼び出しを追加します。
    • STOP RUN 呼び出しをアプリケーションに追加します。これによって、RunUnit が自動的に終了し、COBOLStopRunException が発生します。
  • LiveRunUnitCountLogicalRunUnitCount より大きい場合、RunUnit は、他のクラスによって保有されるため起動したままとなる可能性が非常に高いです。これを解決するには、RunUnit インスタンスの保存場所を確認し、そのインスタンスを null とするか終了するように設定し、RunUnit で StopRun メソッドを呼び出します。
注: RunUnit カウンターは常に 1 つ以上あります。これは、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 Focus では finally 句で MBean をリリースすることをお勧めします。次に例を示します。

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

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