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

第8章 サーバアプリケーションの開発(トランザクションアプリケーション/C言語)

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

IDLファイルのコンパイル

 IDLファイルをコンパイルすることにより、クライアント、サーバそれぞれのアプリケーションの言語に合わせたスタブファイルとスケルトンファイルが作成されます。IDLファイルのコンパイルには、tdcコマンドを使用します。tdcコマンドのオプションは、使用する言語により異なります。tdcコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。tdcコマンドを使用した例を以下に示します。

> tdc -c -mc tdsample1.idl

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

%OD_HOME=/opt/FJSVod
%export OD_HOME
%TD_HOME=/opt/FJSVtd
%export TD_HOME
tdc-c -mc tdsample1.idl

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

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

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

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

ライブラリ名

格納場所

用途

f3fmalcapi.lib

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

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

libextpapiskl.lib

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

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

odsv.lib

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

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

odcnsv.lib

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

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

odifsv.lib

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

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

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

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

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

 以下の表に示すオプションを設定してください。
 Microsoft(R) Visual C++(R) .NET Standard/Microsoft(R) Visual C++(R) .NET Standard 2003/ Microsoft(R) Visual Studio 2005 の場合は、[プロジェクト]-[プロパティ]-[構成プロパティ]-[C/C++]で設定画面を表示することができます。

カテゴリー

項目

設定値

コード生成

構造体メンバのアライメント

4バイト

使用するランタイム

マルチスレッド(DLL)

プリプロセッサ

プリプロセッサの定義

"OM_PC","OM_WIN32_BUILD", "__STDC__" を追加

 また、コンパイル時に利用するインクルードファイルおよびライブラリファイルの格納ディレクトリを登録してください。

 Microsoft(R) Visual C++(R) .NET Standard/Microsoft(R) Visual C++(R) .NET Standard 2003の場合は、[ツール]-[オプション]-[Projects]-[VC++ ディレクトリ]の「インクルード ファイル」、「ライブラリ ファイル」で設定画面を表示することができます。
 Microsoft(R) Visual Studio 2005の場合は、[ツール]-[オプション]-[プロジェクトおよびソリューション]- [VC++ ディレクトリ]の「インクルード ファイル」、「ライブラリ ファイル」で設定画面を表示することができます。

登録例)

  (InterstageをC:\INTERSTAGEにインストールした場合)

    −  インクルードファイル
        C:\INTERSTAGE\odwin\include
        C:\INTERSTAGE\td\include
        C:\INTERSTAGE\extp\include
        C:\INTERSTAGE\ots\include
    −  ライブラリファイル
        C:\INTERSTAGE\odwin\lib
        C:\INTERSTAGE\td\lib
        C:\INTERSTAGE\ots\lib

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

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

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

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

ライブラリ名

格納場所

用途

libthread.so

/usr/lib

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

libtdalcapi.so

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

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

libextpapiskl.so

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

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

libsocket.so

/usr/lib

ソケットライブラリ(注2)

libnsl.so

/usr/lib

nslライブラリ(注2)

libOM.so

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

CORBAサービスランタイム

libOMcn.so

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

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

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

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

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

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

-dy -G

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

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

 \:継続行を示します。

   %cc -c -D_REENTRANT -I/opt/FSUNod/include -I/opt/FSUNtd/include tdsample1_s.c
   %cc -c -D_REENTRANT -l/opt/FSUNod/include -l/opt/FSUNtd/include                 \
   TD_TDSAMPLE1_INTF_skel.c
   %cc -G -o libsample1.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o -lthread         \
    -L/opt/FSUNtd/lib  -ltdalcapi -L/opt/FSUNextp/lib -lextpapiskl
   %

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

 アプリケーションをプロセスモードで動作させる場合は、以下のオプションは指定しないでください。

 -mt -D_REENTRANT

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

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

ライブラリ名

格納場所

用途

libtdalcapi_nt.so

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

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

libextpapiskl_nt.so

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

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

libOM.so

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

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

libsocket.so

/usr/lib

ソケットライブラリ(注)

libnsl.so

/usr/lib

TLIライブラリ(注)

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

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

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

 -dy -G

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

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

 \:継続行を示します。

  %cc -c -I/opt/FSUNod/include -I/opt/FSUNtd/include tdsample1_s.c
  %cc -c -I/opt/FSUNod/include -I/opt/FSUNtd/include TD_TDSAMPLE1_INTF_skel.c
  %cc -G -o libtdsample1_nt.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o          \
   -L/opt/FSUNtd/lib -ltdalcapi_nt -L/opt/FSUNextp/lib -lextpapiskl_nt 
  %

注意

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

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

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

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

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

 % kill -9 プロセスID

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

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

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

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

ライブラリ名

格納場所

用途

libpthread.so

/usr/lib

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

libtdalcapi.so

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

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

libextpapiskl.so

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

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

libnsl.so

/usr/lib

nslライブラリ(注2)

libOM.so

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

CORBAサービスランタイム

libOMcn.so

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

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

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

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

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

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

-shared -fpic または
-shared -fPIC

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

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

 \:継続行を示します。

   %gcc -c -D_REENTRANT -I/opt/FJSVod/include -I/opt/FJSVtd/include tdsample1_s.c
   %gcc -c -D_REENTRANT -l/opt/FJSVod/include -l/opt/FJSVtd/include                 \
   TD_TDSAMPLE1_INTF_skel.c
   %gcc -shared -fpic -o libsample1.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o -lpthread \
    -L/opt/FJSVtd/lib  -ltdalcapi -L/opt/FJSVextp/lib -lextpapiskl
   %

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

 アプリケーションをプロセスモードで動作させる場合は、以下のオプションは指定しないでください。

 -D_REENTRANT

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

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

ライブラリ名

格納場所

用途

libtdalcapi_nt.so

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

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

libextpapiskl_nt.so

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

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

libOM.so

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

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

libnsl.so

/usr/lib

TLIライブラリ(注)

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

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

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

 -shared -fpic または
 -shared -fPIC

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

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

 \:継続行を示します。

  %gcc -c -I/opt/FJSVod/include -I/opt/FJSVtd/include tdsample1_s.c
  %gcc -c -I/opt/FJSVod/include -I/opt/FJSVtd/include TD_TDSAMPLE1_INTF_skel.c
  %gcc -shared -fpic -o libtdsample1_nt.so tdsample1_s.o TD_TDSAMPLE1_INTF_skel.o          \
   -L/opt/FJSVtd/lib -ltdalcapi_nt -L/opt/FJSVextp/lib -lextpapiskl_nt 
  %

注意

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

 アプリケーションのコンパイルならびにリンクの手順に誤りがあった場合や、libpthread.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を使用します。

ワークユニット種別がORBの場合 : FUJITSU-Interstage-TDLC
ワークユニット種別がWRAPPERの場合 : FUJITSU-Interstage-TDRC

ワークユニット種別がORBの場合 : FUJITSU-Interstage-TDLC

 なお、2つの方法のどちらを使用するかは、ワークユニット定義で指定する必要があります。詳細は“OLTPサーバ運用ガイド”を参照してください。


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

Copyright 2008 FUJITSU LIMITED