Interstage Application Server アプリケーション作成ガイド (データベース連携サービス編)
目次 索引 前ページ次ページ

第10章 サーバアプリケーションの開発(トランザクションアプリケーション/COBOL)

10.4 ソースのコンパイル・リンク

IDLファイルのコンパイル

 IDLファイルをコンパイルすることにより、クライアント、サーバそれぞれのアプリケーションの言語に合わせたスタブファイルとスケルトンファイルが作成されます。IDLファイルのコンパイルには、tdcコマンドを使用します。tdcコマンドを使用した例を以下に示します。

>tdc tdsample1.idl

%OD_HOME=/opt/FSUNod
%export OD_HOME
%TD_HOME=/opt/FSUNtd
%export TD_HOME
%tdc tdsample1.idl

スケルトンとサーバアプリケーションのソースとのコンパイル・リンク

 サーバアプリケーションのソースとスケルトンのコンパイル方法、およびリンク方法について説明します。
 COBOLでアプリケーションを作成した場合について、コンパイルとリンクの手順の流れを以下に示します。

 サーバアプリケーションは、APMと動的に結合します。このため、サーバアプリケーションは共用ライブラリとし、動的結合ができる状態にしておく必要があります。この共用ライブラリには、サーバアプリケーションが使用するライブラリを結合してください。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。

[リンク時に指定するライブラリ]

ライブラリ名

格納場所

用途

f3fmalcapi.lib

Interstageインストールフォルダ\td\lib

コンポーネントトランザクションサービスランタイム(必須)

libextpapiskl.lib

Interstageインストールフォルダ\extp\lib

コンポーネントトランザクションサービスランタイム(必須)

odcobcbl.lib

Interstageインストールフォルダ\odwin\lib

CORBAサービスランタイム(注)

(注) 中継用サーバアプリケーションを作成するときに必要です。

 サーバアプリケーションとスケルトンをPowerCOBOL97でコンパイル後、リンクする場合のオプションの例を以下に示します。

[コンパイルオプションの例]

 PowerCOBOL97でコンパイルする場合は、以下の表に示すコンパイルオプションを設定してください。

項目

設定値

登録集名

CORBA="Interstageインストールフォルダ\odwin\include\cobol"

SSOUT

任意の文字列(注)

(注) サーバアプリケーションでDISPLAY文を使用している場合に必要です。また、ワークユニット定義の環境変数ステートメントに、“任意の文字列”を環境変数として、DISPLAY文を出力するファイル名を指定します。指定されたファイルは、ワークユニット定義のカレントフォルダステートメントで指定されたフォルダ配下の“ワークユニット名\プロセスID”フォルダ配下に出力されます。以下に設定方法を示します。

   Environment Variable: 任意の文字列=ファイル名

注意

 スレッドライブラリ(libthread.so)は、スレッドモードで作成する場合にのみ必要です。

 サーバアプリケーションは、APMと動的に結合します。このため、サーバアプリケーションは共用ライブラリとし、動的結合ができる状態にしておく必要があります。この共用ライブラリには、サーバアプリケーションが使用するライブラリを結合してください。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。

スレッドモードのアプリケーションのコンパイルとリンク

[リンク時に指定するライブラリ]

ライブラリ名

格納場所

用途

libthread.so

/usr/lib

スレッドライブラリ(必須) (注1)

libtdalcapi.so

コンポーネントトランザクションサービスのインストールディレクトリ/lib

コンポーネントトランザクションサービス ランタイム(必須)

libextpapiskl.so

EXTPのインストールディレクトリ/lib

コンポーネントトランザクションサービス ランタイム(必須)

librcobol.so

COBOLのインストールディレクトリ/lib

COBOL ランタイム(必須)

libOMcbl.so
libOMcblMT.so

CORBAサービスのインストールディレクトリ/lib

CORBAサービスランタイム(注2)

(注1)
 スレッドライブラリは必ず結合するライブラリの中で先頭に指定してください。

(注2)
 中継用サーバアプリケーションを作成するとき、および、例外を使用するときに必要です。ただし、Sun日本語COBOLでアプリケーションを作成する場合と、PowerCOBOL97でアプリケーションを作成する場合で、リンクするライブラリが異なります。

 リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。

 なお、リンカにより結合処理を行う場合、以下のオプションを指定してください。

-dy -G

 サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。

[コンパイル・リンク手順の例]

\:継続行を示します。

Sun 日本語COBOLの場合

%CORBA=/opt/FSUNod/include/COBOL
 %export CORBA
 %cobol -c tdsample1_s.cbl
 %cobol -c TD_TDSAMPLE1_INTF_skel.cbl
 %cobol -G -dy -o libtdsample1.so -lthread -L/opt/FSUNtd/lib                    \
 -ltdalcapi -L/opt/FSUNextp/lib -lextpapiskl -L/opt/FJSVCOPop/lib -lrcobol      \
 tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o

PowerCOBOL97の場合

  %CORBA=/opt/FSUNod/include/COBOL
  %export CORBA
  %cobol -c tdsample1_s.cbl
  %cobol -c TD_TDSAMPLE1_INTF_skel.cbl
  %cobol -G -dy -Tm -o libtdsample1.so -lthread -L/opt/FSUNtd/lib -ltdalcapi  \
  -L/opt/FSUNextp/lib -lextpapiskl tdsample1_s.o                              \
  TD_TDSAMPLE1_INTF_skel.o

注意

 PowerCOBOL97でアプリケーションを作成する場合には、以下の注意が必要です。
 ・リンクオプションに-Tmオプションを指定してください。また、ソースのコンパイルとリンクは分けて実施し、リンク時のオプションにのみ-Tmオプションを指定してください。

 ・リンクオプションに-Tmオプションを指定することで、自動的にlibrcobol.soをリンクします。このため、リンクライブラリにlibrcobol.soを指定する必要はありません。

プロセスモードのアプリケーションのコンパイルとリンク

 サーバアプリケーションのリンク時に指定するライブラリを以下に示します。

[リンク時に指定するライブラリ]

ライブラリ名

格納場所

用途

libtdalcapi_nt.so

TDのインストールディレクトリ/lib

TD ランタイム(必須)

libextpapiskl_nt.so

EXTPのインストールディレクトリ/lib

TD ランタイム(必須)

libcobol.so

COBOLのインストールディレクトリ/lib

COBOL ランタイム(必須)

libOMcbl.so

ODのインストールディレクトリ/lib

ODランタイム(注)

(注)
 中継用サーバアプリケーションを作成するとき、および、例外を使用するときに必要です。

 リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。

 なお、リンカにより結合処理を行う場合、以下のオプションを指定してください。

-dy -G

 サーバアプリケーションとスケルトンをコンパイル後、リンクする手順について例を以下に示します。

[コンパイル・リンク手順の例]

\:継続行を示します。

Sun 日本語COBOLの場合

  %cobol -c TD_TDSAMPLE1_INTF_skel.cbl
  %cobol -G -o libtdsample1.so -L/opt/FSUNtd/lib -ltdalcapi_nt
  -L/opt/FSUNextp/lib -lextpapiskl_nt -L/opt/FJSVCOBop/lib -lcobol tdsample1_s.o  \
  TD_TDSAMPLE1_INTF_skel.o

PowerCOBOL97の場合

  %cobol -c TD_TDSAMPLE1_INTF_skel.cbl
  %cobol -G -o libtdsample1.so -L/opt/FSUNtd/lib -ltdalcapi_nt             \
  -L/opt/FSUNextp/lib -lextpapiskl_nt tdsample1_s.o                        \
  TD_TDSAMPLE1_INTF_skel.o

注意

 作成したアプリケーションライブラリにスレッドライブラリが結合されていないことを確認してください。

 アプリケーションのコンパイル/リンクの手順に誤りがあった場合や、libthread.soがリンクされている場合、ワークユニット起動/停止処理またはクライアントとの通信が無応答状態となる可能性があります。その場合、以下の対処を行ってください。

1. 当該ワークユニット配下で動作しているアプリケーションプロセスのプロセスIDを特定します。

 % ps -ef | grep ワークユニット名

2. 当該ワークユニット配下で動作しているアプリケーションプロセスの強制停止

 % kill -9 プロセスID

について

 あるインタフェースで定義したオペレーションを、別のインタフェースに引き継ぐことを可能にするための機能です。継承を利用した場合、クライアントからは継承を意識せずに、継承したオペレーションを呼び出すことができます。
 メソッドの呼び出しイメージについて以下に示します。

 継承は、IDL定義ファイルに継承の指定を記述することによって使用することができます。継承先インタフェースは、継承元インタフェースのスコープ名をコロン(":")に続いて指定します。継承の指定例を以下に示します。
 この例では、インタフェース“A”が継承元インタフェース、インタフェース“B”が継承先インタフェースとなります。

   interface A {
           long op1(in long a);
   };
   interface B:M::A {
           long op2(in long b);
   };
    M:module名
    A、B:interface名

 継承先のidl定義内に継承元のidl定義をincludeする記述が必要です。include方法の例を以下に示します。

 継承を使用する場合、モジュール作成時に継承元のインタフェースを実装しているライブラリをリンクします。継承を使用したアプリケーションの作成時に必要な注意点を、以下に示します。

継承元のインタフェースの状態

 継承先のidl定義をidlコンパイルする場合、継承元は以下の状態であることが考えられます。ここでは、以下の状態の注意点を説明します。

継承元のインタフェースがインタフェースリポジトリに登録されていない場合

 tdcコマンド実行時に -I オプションを指定してください。tdcコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。

継承元のインタフェースがインタフェースリポジトリに登録されている場合

 継承先のidl定義に継承元のidl定義をincludeする記述を追加します。tdcコマンドは、-Iオプションと共に、-updateオプションを設定して実行してください。tdcコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。

継承元のライブラリの所在

 継承先のサーバアプリケーションをコンパイルする場合の注意点を説明します。

継承元インタフェースが実装されているライブラリのリンク

 継承を使用する場合のサーバアプリケーション作成方法

(1) 継承先のidl定義ファイル(Y.idl)をtdcコマンドでコンパイルします。
(2) 継承元となるAの実装部は、スケルトンと別ライブラリとして作成します。
(3) 継承先となるBの実装部をコンパイルし、ライブラリを作成します。
(4) (1)で生成されたスケルトンをコンパイルします。
(5) (2)(3)(4)で生成されたライブラリをリンクします。

ライブラリ
 ダイナミックリンクライブラリ(.lib)
モジュール
 ダイナミックリンクライブラリ(.dll)

ライブラリ
 ダイナミックリンクライブラリ(.so)
モジュール
 ダイナミックリンクライブラリ(.so)

継承元インタフェースが実装されているライブラリのパスの設定

 継承元インタフェースが実装されているライブラリのパスの設定は、ワークユニット定義で設定します。

 "path for Application"ステートメントに、継承元インタフェースへのパスを記述します。

 "Library for Application"ステートメントに、継承元インタフェースへのパスを記述します。

アプリケーションの登録

 サーバアプリケーションを他のアプリケーションからアクセス可能にするためには、目的のアプリケーションを識別するためのオブジェクトリファレンスを作成する必要があります。また、同時に作成したオブジェクトリファレンスをネーミングサービスに登録することによって、他のアプリケーションからのアクセスが可能になります。

 トランザクションアプリケーションの場合、オブジェクトリファレンスの作とネーミングサービスへの登は、次の2つの方法で行うことができます。

 ワークユニット起動による自動登の場合は、ワークユニットを起動するとワークユニットで指定された各アプリケーションごとにオブジェクトリファレンスが作成され、ネーミングサービスに登録されます。この場合、ワークユニットを停止すると、オブジェクトリファレンスは、自動的にネーミングサービスから削除され、無効となります。
 OD_or_admコマンドによる手動登の場合は、ワークユニットの起動前に、事前にOD_or_admコマンドによりオブジェクトリファレンスの作成とネーミングサービスへの登録を行います。この場合は、ワークユニットの起動、停止にかかわらず、オブジェクトリファレンスは有効です。

 2つの方法とも、ネーミングサービスには以下の名前でオブジェクトリファレンスを登録します。

モジュール名::インタフェース名


 また、インタフェースリポジトリIDとしては、以下のIDを使用します。

ワークユニット種別 : FUJITSU-Interstage-TDLC

 なお、ワークユニット種別は、ワークユニット定義で指定する必要があります。詳細は“OLTPサーバ運用ガイド”を参照してください。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED