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

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

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

IDLファイルのコンパイル

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

>tdc -cpp -mcpp tdsample1.idl

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

%OD_HOME=/opt/FJSVod
%export OD_HOME
%TD_HOME=/opt/FJSVtd
%export TD_HOME
%tdc -cpp -mcpp tdsample1.idl

注意:
 サーバアプリケーションで例外使用時で、かつサーバ側でトランザクション制御する場合、tdcコマンドには、-noexオプションを指定してください。

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

 サーバアプリケーションのソースとスケルトンのコンパイル方法、およびリンク方法について説明します。

 C++言語でアプリケーションを作成した場合について、コンパイルとリンクの手順の流れを以下に示します。

 サーバアプリケーション実行可能ファイルは、スケルトンとサーバアプリケーションが使用するライブラリで静的に結合します。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。

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

ライブラリ名

格納場所

用途

fjotsld.obj

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

グローバルトランザクション連携用オブジェクト(必須)

libservapl.lib

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

グローバルトランザクション連携用ライブラリ(必須)

libservaplcpp.lib

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

グローバルトランザクション連携用ライブラリ(必須)

libtdcurrent.lib

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

グローバルトランザクション連携用ライブラリ(通常時必須、中継サーバアプリケーション作成時不要)

libtacebasent.lib

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

グローバルトランザクション連携用ライブラリ(必須)

libfjots.lib

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

グローバルトランザクション連携用ライブラリ(必須)

odsv.lib

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

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

odsvcpp.lib

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

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

odcnscpp.lib

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

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

libtdtmapmcpp.lib

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

TDランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合は不要。libtdtmapmcntcpp.lib選択する)

libtdtmapmcntcpp.lib

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

TDランタイム(中継サーバアプリケーションのデータベースアクセスなしの場合)(注)

libextpapmlibTD.lib

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

TDランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.lib選択)

libextpapmlibTDNORMCNT.lib

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

TDランタイム(中継サーバアプリケーションのデータベースアクセスなしの場合)(注)

libextpapiskl.lib

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

TDランタイム(必須)

f3fmalcapi.lib

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

TDランタイム(必須)

f3fmapicpp.lib

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

TDランタイム(必須)

libextpapmcom.lib

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

TDランタイム(必須)

libextpapmbase.lib

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

TDランタイム(必須)

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

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

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

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

 以下の表に示すオプションを設定してください。
 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\extp\lib
        C:\INTERSTAGE\ots\lib

注意

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

 サーバアプリケーション実行可能ファイルは、スケルトンとサーバアプリケーションが使用するライブラリで静的に結合します。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。

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

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

 Forte Developer 6シリーズ、Sun ONE Studio 7シリーズ、Sun ONE Studio 8シリーズ、Sun Studio 9を使用する場合

ライブラリ名

格納場所

用途

libthread.so

/usr/lib

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

libtdservapl_mt.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libservaplcpp50_mt.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libtdCurrent.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libCurrent_CPP50.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libtacebase.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libfjotsthr.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libsocket.so

/usr/lib

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

libnsl.so

/usr/lib

Nslライブラリ(注2)

libOM.so

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

CORBAサービスランタイム

libOMcncpp50.so

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

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

libOMcpp50.so

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

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

libtdtmapmcomcpp.so

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

コンポーネントトランザクションサービスランタイム(必須。中継アプリケーションの場合、不要です)

libtdtmapmorb50.so

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

コンポーネントトランザクションサービスランタイム。(必須。中継アプリケーションの場合も指定します)

libtdtmapmcomcntcpp.so

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

コンポーネントトランザクションサービスランタイム(中継アプリケーションを作成する場合に指定します。

libextpapmlibTD50.so

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

コンポーネントトランザクションサービスランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.so選択)

libextpapmlibTDNORMCNT50.so

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

コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合)

libextpapiskl.so

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

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

libtdalcapi.so

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

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

libtdapicpp50.so

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

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

libextpapmcom50.so

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

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

libextpapmbase50.so

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

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

(注1):
 
スレッドライブラリは必ず結合するライブラリの中で先頭に指定してください。
(注2):
 
中継用サーバアプリケーションを作成するときに必要です。

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

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

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

 Forte Developer 6シリーズ、Sun ONE Studio 7シリーズ、Sun ONE Studio 8シリーズ、Sun Studio 9を使用する場合

%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include -D_REENTRANT                                   \
     -o tdsample1_s.o -c tdsample1_s.C
%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include -D_REENTRANT                                   \
     -o TD_TDSAMPLE1_INTF_skel_c++.o                                        \
     -c TD_TDSAMPLE1_INTF_skel_c++.C
%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include -D_REENTRANT                                   \
     -o TD_tdsample1_c++.o -c TD_tdsample1_c++.C
%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include -D_REENTRANT                                   \
     -o tdsample1_s tdsample1_s.o                                           \
      TD_TDSAMPLE1_INTF_skel_c++.o TD_tdsample1_c++.o                       \
     -lthread -lsocket -lnsl                                                \
      /opt/FSUNots/lib/libotsxaora.o                                        \
     -L/opt/oracle8/lib -lclntsh -lclient8 -lsql8 -lcommon8                 \
     -lcore8 -lnls8                                                         \
     -L/opt/FSUNots/lib  -ltdservapl_mt -lservaplcpp50                      \
     -ltdCurrent -ltacebase -lfjotsthr                                      \
     -L/opt/FSUNod/lib -lOMcpp50 -lOM -lOMcncpp50                           \
     -L/opt/FSUNextp/lib -lextpapiskl  -lextpapmbase50                      \
     -lextpapmcom50 -lextpapmlibTDNORM50  -lextpapmTDNORM50                 \
     -lextpmomo -lextpmomo_sys                                              \
     -L/opt/FSUNtd/lib -ltdtmapmcomcpp -ltdtmapmorb50  -ltdalcapi           \
     -ltdapicpp50                                                           \
%

注意

 Forte Developer 6シリーズ、Sun ONE Studio 7シリーズ、Sun ONE Studio 8シリーズ、Sun Studio 9を使用してアプリケーションを作成する場合、リンクオプションに“-lC”および“-lCrun”を指定しないでください。

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

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

 -mt -D_REENTRANT

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

 Forte Developer 6シリーズ、Sun ONE Studio 7シリーズ、Sun ONE Studio 8シリーズ、Sun Studio 9を使用する場合

ライブラリ名

格納場所

用途

libservapl.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libservaplcpp50.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libCurrentnt.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libCurrent_CPP50.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libtacebasent.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libfjots.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libsocket.so

/usr/lib

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

libnsl.so

/usr/lib

Nslライブラリ(注)

libOM.so

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

CORBAサービスランタイム

libOMcncpp50.so

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

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

libOMcpp50.so

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

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

libtdtmapmcomcpp_nt.so

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

コンポーネントトランザクションサービスランタイム(必須。中継サーバアプリケーションを作成する場合は不要です。)

libtdtmapmorb50_nt.so

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

コンポーネントトランザクションサービスランタイム(必須。中継サーバアプリケーションの場合でも指定します。)

libtdtmapmcomcntcpp_nt.so

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

コンポーネントトランザクションサービスランタイム(中継サーバアプリケーションを作成する場合に指定します)

libextpapmlibTD50_nt.so

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

コンポーネントトランザクションサービスランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.so選択)

libextpapmlibTDNORMCNT50_nt.so

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

コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合)

libextpapiskl_nt.so

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

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

libtdalcapi_nt.so

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

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

libtdapicpp50_nt.so

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

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

libextpapmcom50_nt.so

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

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

libextpapmbase50_nt.so

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

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

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

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

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

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

 Forte Developer 6シリーズ、Sun ONE Studio 7シリーズ、Sun ONE Studio 8シリーズ、Sun Studio 9を使用する場合

%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include                                                \
     -o tdsample1_s.o -c tdsample1_s.C
%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include                                                \
     -o TD_TDSAMPLE1_INTF_skel_c++.o                                        \
     -c TD_TDSAMPLE1_INTF_skel_c++.C
%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include                                                \
     -o TD_tdsample1_c++.o -c TD_tdsample1_c++.C
%CC -I. -I/opt/FSUNod/include -I/opt/FSUNtd/include                         \
     -I/opt/FSUNextp/include                                                \
     -o tdsample1_s tdsample1_s.o                                           \
      TD_TDSAMPLE1_INTF_skel_c++.o TD_tdsample1_c++.o                       \
      -lsocket -lnsl                                                        \
      /opt/FSUNots/lib/libotsxaora.o                                        \
     -L/opt/oracle8/lib -lclntsh -lclient8 -lsql8 -lcommon8                 \
     -lcore8 -lnls8                                                         \
     -L/opt/FSUNots/lib  -lservapl -lservaplcpp50                           \
     -lCurrentnt -lCurrent -ltacebasent -lfjots                             \
     -L/opt/FSUNod/lib -lOMcpp50 -lOM -lOMcncpp50                           \
     -L/opt/FSUNextp/lib -lextpapiskl_nt  -lextpapmbase50_nt                \
     -lextpapmcom50_nt -lextpapmlibTDNORM50_nt  -lextpapmTDNORM50_nt        \
     -lextpmomo_nt -lextpmomo_sys_nt                                        \
     -L/opt/FSUNtd/lib -ltdtmapmcomcpp_nt -ltdtmapmorb50_nt -ltdalcapi_nt   \
     -ltdapicpp50_nt                                                        \
%

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

注意

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

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

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

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

 % kill -9 プロセスID

注意

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

 サーバアプリケーション実行可能ファイルは、スケルトンとサーバアプリケーションが使用するライブラリで静的に結合します。データベース管理システムのライブラリ以外で、サーバアプリケーションのリンク時に指定するライブラリを以下に示します。

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

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

ライブラリ名

格納場所

用途

libpthread.so

/usr/lib

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

libC.so

/usr/lib

Cライブラリ(必須)

libtdservapl_mt.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libservaplcpp_mt.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libtdCurrent.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libCurrent_CPP.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libtacebase.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libfjotsthr.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libnsl.so

/usr/lib

Nslライブラリ(注2)

libOM.so

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

CORBAサービスランタイム

libOMcncpp.so

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

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

libOMcpp.so

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

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

libtdtmapmcpp.so

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

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

libtdtmapmcntcpp.so

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

コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合)

libextpapmlibTD.so

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

コンポーネントトランザクションサービスランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.so選択)

libextpapmlibTDNORMCNT.so

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

コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合)

libextpapiskl.so

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

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

libtdalcapi.so

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

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

libtdapicpp.so

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

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

libextpapmcom.so

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

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

libextpapmbase.so

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

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

(注1):
 
スレッドライブラリは必ず結合するライブラリの中で先頭に指定してください。
(注2):
 
中継用サーバアプリケーションを作成するときに必要です。
 リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。

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

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

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

 \:継続行を示します。

%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                        \
     -I/opt/FJSVextp/include -D_REENTRANT                                   \
     -o tdsample1_s.o -c tdsample1_s.C

%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                        \
     -I/opt/FJSVextp/include -D_REENTRANT                                   \
     -o TD_TDSAMPLE1_INTF_skel_c++.o                                        \
     -c TD_TDSAMPLE1_INTF_skel_c++.C

%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                        \
     -I/opt/FJSVextp/include -D_REENTRANT                                   \
     -o TD_tdsample1_c++.o -c TD_tdsample1_c++.C

%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                       \
     -I/opt/FJSVextp/include -D_REENTRANT                                   \
     -o tdsample1_s tdsample1_s.o                                           \
      TD_TDSAMPLE1_INTF_skel_c++.o TD_tdsample1_c++.o                       \
     -lpthread -lnsl                                                        \
      /opt/FJSVots/lib/libotsxaora.o                                        \
     -L/opt/oracle9i/lib -lclntsh -lclient9 -lsql9 -lcommon9                \
     -lcore9 -lnls9                                                         \
     -L/opt/FJSVots/lib  -ltdservapl_mt -lservaplcpp                        \
     -ltdCurrent -ltacebase -lfjotsthr                                      \
     -L/opt/FJSVod/lib -lOMcpp -lOM -lOMcncpp                               \
     -L/opt/FJSVextp/lib -lextpapiskl  -lextpapmbase                        \
     -lextpapmcom -lextpapmlibTDNORM  -lextpapmTDNORM                       \
     -lextpmomo -lextpmomo_sys                                              \
     -L/opt/FJSVtd/lib -ltdtmapmcpp -ltdalcapi -ltdapicpp                     \
     -L/opt/SUNWspro/lib -lC
 %

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

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

 -D_REENTRANT

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

ライブラリ名

格納場所

用途

libC.so

/usr/lib

Cライブラリ(必須)

libservapl.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libservaplcpp.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libCurrentnt.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libCurrent_CPP.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(中継サーバアプリケーション時不要)

libtacebasent.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libfjots.so

データベース連携サービスのインストールディレクトリ/lib

グローバルトランザクション連携用ライブラリ(必須)

libnsl.so

/usr/lib

Nslライブラリ(注)

libOM.so

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

CORBAサービスランタイム

libOMcncpp.so

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

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

libOMcpp.so

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

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

libtdtmapmcpp_nt.so

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

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

libtdtmapmcntcpp_nt.so

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

コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合)

libextpapmlibTD_nt.so

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

コンポーネントトランザクションサービスランタイム(通常時必須、中継サーバアプリケーションのデータベースアクセスなしの場合、libextpapmlibTDNORMCNT.so選択)

libextpapmlibTDNORMCNT_nt.so

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

コンポーネントトランザクションサービスランタイム(グローバルトランザクションとローカルトランザクションが混在する場合)

libextpapiskl_nt.so

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

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

libtdalcapi_nt.so

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

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

libtdapicpp_nt.so

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

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

libextpapmcom_nt.so

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

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

libextpapmbase_nt.so

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

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

(注):
 
中継用サーバアプリケーションを作成するときに必要です。
 リンクは、表の上から順番に行う必要があります。必要なものだけをリンクしてください。

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

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

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

%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                        \
     -I/opt/FJSVextp/include                                                \
     -o tdsample1_s.o -c tdsample1_s.C
%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                        \
     -I/opt/FJSVextp/include                                                \
     -o TD_TDSAMPLE1_INTF_skel_c++.o                                        \
     -c TD_TDSAMPLE1_INTF_skel_c++.C
%g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                        \
     -I/opt/FJSVextp/include                                                \
     -o TD_tdsample1_c++.o -c TD_tdsample1_c++.C
% g++ -I. -I/opt/FJSVod/include -I/opt/FJSVtd/include                       \
     -I/opt/FJSVextp/include                                                \
     -o tdsample1_s tdsample1_s.o                                           \
      TD_TDSAMPLE1_INTF_skel_c++.o TD_tdsample1_c++.o                       \
     -lnsl                                                                  \
      /opt/FJSVots/lib/libotsxaora.o                                        \
     -L/opt/oracle9i/lib -lclntsh -lclient9 -lsql9 -lcommon9                \
     -lcore9 -lnls9                                                         \
     -L/opt/FJSVots/lib  -lservapl -lservaplcpp                             \
     -lCurrentnt  -ltacebasent -lfjots                                      \
     -L/opt/FJSVod/lib/nt -lOM -L/opt/FJSVod/lib  -lOMcpp  -lOMcncpp        \
     -L/opt/FJSVextp/lib -lextpapiskl_nt  -lextpapmbase_nt                  \
     -lextpapmcom_nt -lextpapmlibTDNORM_nt  -lextpapmTDNORM_nt              \
     -lextpmomo_nt -lextpmomo_sys_nt                                        \
     -L/opt/FJSVtd/lib -ltdtmapmcpp_nt -ltdalcapi_nt -ltdapicpp_nt          \
     -L/opt/SUNWspro/lib -lC
 %

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

注意

 作成したアプリケーションライブラリにスレッドライブラリが結合されていないことを確認してください。
 アプリケーションのコンパイルならびにリンクの手順に誤りがあった場合や、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)
モジュール
 実行モジュール(.exe)

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

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

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

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

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


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

Copyright 2008 FUJITSU LIMITED