IDLファイルのコンパイル
IDLファイルをコンパイルすることにより、クライアント、サーバそれぞれのアプリケーションの言語に合わせたスタブファイルとスケルトンファイルが作成されます。IDLファイルのコンパイルには、tdcコマンドを使用します。tdcコマンドのオプションは、使用する言語により異なります。tdcコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。tdcコマンドを使用した例を以下に示します。
>tdc -cpp -mcpp tdsample1.idl |
%OD_HOME=/opt/FSUNod |
%OD_HOME=/opt/FJSVod |
注意:
サーバアプリケーションで例外使用時で、かつサーバ側でトランザクション制御する場合、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" ステートメントに、継承元インタフェースへのパスを記述します。