リンケージ・プロパティー・ファイル

リンケージ・プロパティー・ファイル は、Java™ の実行時に使用されるテキスト・ファイルで、 リモート・プログラムを呼び出す方法の詳細を提供します。

呼び出し側の Java プログラムまたはラッパーを生成する場合は、実行時にリンケージ情報が必要であるという要求を指定できます。この指定を行うには、呼び出し先プログラムのリンケージ・オプションの値を次のように設定します。

リンケージ・プロパティー・ファイルは手書きしても構いませんが、(前述の設定に加えて) genProperties ビルド記述子オプションを GLOBAL または PROGRAM に設定して Java プログラムまたはラッパーを生成すると、EGL によってファイルが生成されます。

実行時のリンケージ・プロパティー・ファイルの識別

リンケージ・オプション・パーツ内で、呼び出し先プログラムの callLink 要素の remoteBind プロパティーに runtime を設定した場合、EGL は実行時にリンケージ・プロパティー・ファイルを検索しますが、ファイル名のソースは、以下のように決められます。
  • Java プログラムは、cso.linkageOptions.LO Java ランタイム・プロパティーを検査します。 LO は生成に使用されるリンケージ・オプション・パーツの名前です。 プロパティーが存在しない場合、EGL ランタイム・コードは、LO.properties という名前のリンケージ・プロパティー・ファイルを検索します。繰り返しますが、LO は、生成で使用されるリンケージ・オプション・パーツ名です。

    この場合、EGL ランタイム・コードがリンケージ・オプション・プロパティー・ファイルを検索して、それが見付からないと、リンケージ・オプション・プロパティー・ファイルの使用を要求する先頭の call 文でエラーが発生します。結果の詳細については、『例外処理』を参照してください。

  • Java ラッパーは、callOptions 型のプログラム・オブジェクト変数 callOptions に、リンケージ・プロパティー・ファイルの名前を保存します。生成されるファイル名は LO.properties です。LO は生成で使用されるリンケージ・オプション・パーツ名です。

    この場合、Java 仮想マシンがリンケージ・プロパティー・ファイルを検索しても、それが見付からないと、プログラム・オブジェクトは、CSOException 型の例外をスローします。

リンケージ・プロパティー・ファイルのデプロイ

リンケージ・プロパティー・ファイルは、そのファイルを使用する Java プログラムと同じプロジェクトに入っている必要があります。このファイルがアプリケーションのトップレベル・ディレクトリーに入っている場合は、cso.linkageOptions.LO Java ランタイム・プロパティーにこのファイル名を設定します (パス情報は省きます)。 このファイルがアプリケーションのトップレベル・ディレクトリーの下にある場合は、 トップレベル・ディレクトリーから始まるパスを使用し、 それぞれのレベルごとにスラッシュ (/) を組み込みます。 これは、アプリケーションが Windows プラットフォーム上で稼働する場合でも同様です。

J2EE プロジェクトを開発している場合、トップレベル・ディレクトリーは、 モジュールが常駐するプロジェクトの appClientModule、ejbModule、 または Web コンテンツ・ディレクトリーに対応します。 Java プロジェクトを開発している場合、トップレベル・ディレクトリーは、プロジェクト・ディレクトリーです。

リンケージ・プロパティー・ファイルの形式

実行時に使用するために、リンケージ・プロパティー・ファイルには、デプロイする生成済みの Java プログラムまたはラッパーからの各呼び出しを処理するための一連のエントリーが含まれます。

基本エントリーの型は cso.serverLinkage であり、基本エントリーには、リンケージ・オプション・パーツの callLink 要素に設定できるプロパティーと値の組みを指定できます。ただし、次の場合は例外です。
  • remoteBind プロパティーは、必ず runtime であり、無視されます。
  • type プロパティーを localCall にすることはできません。 ローカル呼び出しのリンケージは生成時に必ず確立されるからです。

cso.serverLinkage エントリー

基本的な事例では、リンケージ・プロパティー・ファイルの各エントリーの型は、cso.serverLinkage になる場合がほとんどです。エントリーのフォーマットは次のとおりです。
  cso.serverLinkage.programName.property=value
programName
ほとんどの場合、呼び出し先プログラムの名前です。呼び出し先プログラムが EGL によって生成された場合、指定した名前は、プログラム・パーツに固有の alias プロパティーの値ではなく、プログラム・パーツ名になります。
call ステートメントに linkageKey プロパティーが含まれている場合、特殊なケースが該当します。以下に、call ステートメントの例を示します。
call "MyProgram01" {linkageKey = "MyProgram02"};

この状態では、リンケージ・プロパティー・ファイル内の programName 修飾子を linkageKey 値に (この場合は MyProgram02 に) 設定します。

property
Java プログラムに適したプロパティー。ただし、remoteBind プロパティーと pgmName プロパティーは除きます。詳細については、『callLink 要素』を参照してください。 alias プロパティーには、externalName を使用します。 alias は使用しません。
value
指定したプロパティーに対して有効な値。
呼び出し先プログラム Xyz の例を次に示します。xxx は、大文字と小文字を区別するストリングを表しています。
  cso.serverLinkage.Xyz.type=remoteCall
  cso.serverLinkage.Xyz.remoteComType=TCPIP
  cso.serverLinkage.Xyz.remotePgmType=EGL
  cso.serverLinkage.Xyz.externalName=xxx
  cso.serverLinkage.Xyz.package=xxx
  cso.serverLinkage.Xyz.conversionTable=xxx
  cso.serverLinkage.Xyz.location=xxx
  cso.serverLinkage.Xyz.serverID=xxx
  cso.serverLinkage.Xyz.parmForm=COMMDATA
  cso.serverLinkage.Xyz.providerURL=xxx
  cso.serverLinkage.Xyz.luwControl=CLIENT

リテラル値である TCPIP や EGL などは大文字と小文字を区別しないので、有効なデータの例になります。

cso.application エントリー

いくつかの呼び出し先プログラムを参照する一連の cso.serverLinkage エントリーを作成する場合は、これらのエントリーを 1 つ以上の cso.application 型のエントリーの前に置きます。この場合の目的は、複数のプログラム名を 1 つのアプリケーション名で代用することです。コード後半部分に記述する cso.serverLinkage エントリーでは、programName の代わりにアプリケーション名を使用します。こうすると、前述の cso.serverLinkage エントリーによって、Java ランタイムで複数のプログラムへの呼び出しが処理されます。

cso.application エントリーのフォーマットは次のとおりです。
  cso.application.wildProgramName=appName
wildProgramName
有効な名前、アスタリスク、または有効な名前の先頭の数文字とそれに続くアスタリスク。 アスタリスクは、1 つ以上の文字に相当するワイルドカードであり、一連の名前を指定できます。以下の 2 つの特殊なケースが該当します。
  • linkageKey プロパティーが call ステートメント内にある場合、wildProgramName と突き合わせてテストされる値は linkageKey プロパティーの値です。
  • linkageKey プロパティーが call ステートメント内になく、呼び出し先プログラムが EGL によって生成された場合、wildProgramName と突き合わせてテストされる値は、そのパーツの alias プロパティーの値ではなく、プログラム・パーツの名前です。
appName
EGL 命名規則に適合する一連の文字。appName の値は、コードの後半部分に記述する cso.serverLinkage エントリーに使用します。
次に示す例では、アスタリスクをワイルドカード文字として使用しています。この例での cso.serverLinkage エントリーによる処理対象は、名前が Xyz で始まるプログラムの呼び出しです。
  cso.application.Xyz*=myApp
  cso.serverLinkage.myApp.type=remoteCall
  cso.serverLinkage.myApp.remoteComType=TCPIP
  cso.serverLinkage.myApp.remotePgmType=EGL
  cso.serverLinkage.myApp.externalName=xxx
  cso.serverLinkage.myApp.package=xxx
  cso.serverLinkage.myApp.conversionTable=xxx
  cso.serverLinkage.myApp.location=xxx
  cso.serverLinkage.myApp.serverID=xxx
  cso.serverLinkage.myApp.parmForm=COMMDATA
  cso.serverLinkage.myApp.luwControl=CLIENT
次に示す例では、複数のプログラムの先頭の数文字が同じではない場合でも、同じ cso.serverLinkage エントリーを使用して複数のプログラムの呼び出しを処理しています。
  cso.application.Abc=myApp
  cso.application.Def=myApp
  cso.application.Xyz=myApp
  cso.serverLinkage.myApp.type=remoteCall
  cso.serverLinkage.myApp.remoteComType=TCPIP
  cso.serverLinkage.myApp.remotePgmType=EGL
  cso.serverLinkage.myApp.externalName=xxx
  cso.serverLinkage.myApp.package=xxx
  cso.serverLinkage.myApp.conversionTable=xxx
  cso.serverLinkage.myApp.location=xxx
  cso.serverLinkage.myApp.serverID=xxx
  cso.serverLinkage.myApp.parmForm=COMMDATA
  cso.serverLinkage.myApp.luwControl=CLIENT

1 つのプログラムに対して複数の cso.application エントリーが有効な場合、EGL では、適用される最初のエントリーが使用されます。

詳しくは、「EGL 言語解説書」の『命名規則』および『例外処理』を参照してください。


フィードバック