ページの先頭行へ戻る
Interstage Application Server V13.0.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

11.5.4 サーバアプリケーションのライブラリ化の例

C言語C++言語の場合

サーバのメソッド部をIDLファイルのインタフェース定義単位で分割し、ライブラリ化する場合、以下の点に注意してください。
1つのモジュール内に1つのインタフェースが定義されている場合を例に説明します。

[ X.idl ]
module M {
    interface I1 {
        ... 
    };
};

(1) IDLファイルのコンパイル

IDLファイルをコンパイルしてスタブ・スケルトンを生成する場合、以下のオプションを指定する必要があります。


C言語の場合
IDLc -dy X.idl

C++言語の場合
IDLc -dy -cpp X.idl

-dyオプションを指定することで、IDLファイルに定義されたインタフェースごとにスケルトンを生成します。ライブラリは、生成されたスケルトンファイルごとに作成します。


(2) アプリケーションコンパイル時の手順

IDLファイルから生成されたスケルトンをコンパイルして*.oファイルを作成した後、Cコンパイラのライブラリ作成オプション(-Gなど)を指定することで、ライブラリを作成します。

cc -I$OD_HOME/include  -D_REENTRANT -DNeedFunctionPrototypes
   -lsocket -lnsl -lthread -L$OD_HOME/lib -lOM -o X_M_I1_skel.o  -c X_M_I1_skel.c
cc -G -Kpic -I$OD_HOME/include  -D_REENTRANT -DNeedFunctionPrototypes
   -lsocket -lnsl -lthread -L$OD_HOME/lib -lOM -o libM_I1.so  X_M_I1_skel.o

gcc -I$OD_HOME/include  -D_REENTRANT -DNeedFunctionPrototypes
    -Wl -E -lnsl -lpthread -L$OD_HOME/lib -lOM -o X_M_I1_skel.o  -c X_M_I1_skel.c
gcc -shared -fPIC -I$OD_HOME/include  -D_REENTRANT -DNeedFunctionPrototypes
    -Wl -E -lnsl -lpthread -L$OD_HOME/lib -lOM -o libM_I1.so  X_M_I1_skel.o

(3) OD_impl_instでの登録

IDLファイルから作成したライブラリをOD_impl_instコマンドの定義ファイルで指定します。

OD_impl_inst -ax X_def

X_def:定義ファイル


定義ファイルX_defに“IDL:M/I1:1.0 = /user/libM_I1.so”を指定することにより、実際にクライアントからの要求時に/user/libM_I1.soが読み込まれ、サーバメソッドが呼び出されます。


(4) 継承を使用する場合のOD_impl_instでの登録

継承機能を使用する場合は、OD_impl_instコマンドの定義ファイルに以下を指定します。


モジュール名:M、インタフェース名:I1、継承名:I2の場合

IDL:M/I1:1.0 = /user/lib/libM_I1.so
IDL:M/I2:1.0 = /user/lib/libM_I2.so,,IDL:M/I1:1.0

COBOL場合

サーバのメソッド部をIDLファイルのインタフェース定義単位で分割し、ライブラリ化する必要があります。このとき、以下の点に注意してください。
1つのモジュール内に1つのインタフェースが定義されている場合を例に説明します。

[ X.idl ]
module M {
     interface I1 {
          ... 
     };
};

(1) IDLファイルのコンパイル

IDLファイルをコンパイルしてスタブ/スケルトンを生成する場合、以下のオプションを指定する必要があります。

IDLc -cobol IDLファイル名

(2) アプリケーションコンパイル時の手順

IDLファイルから生成されたスケルトンをコンパイルして*.oファイルを作成した後、COBOLコンパイラのライブラリ作成オプション(-Gなど)を指定することで、ライブラリを作成します。

cobol  -G  -o libX_cdr.so  X_cdr.cbl
cobol  -G  -o libX_skel.so  X_skel.cbl 
cobol  -G  -o libX_M_I1_skel.so  X_M_I1_skel.cbl 
cobol  -G  -lcobol -L$OD_HOME/lib -lOMcbl -o libM-I1.so -lX_cdr -lX_skel -lX_M_I1_skel M_I1.cbl

注意

  • 環境変数LD_LIBRARY_PATHに、COBOLのランタイムlibcobol.soの格納ディレクトリおよびアプリケーション作成時のカレントディレクトリを指定する必要があります。

  • 本製品の提供する登録集を参照するため、あらかじめ環境変数CORBAに以下を設定すると、COBOLソースのコンパイルが容易になります。

    CORBA = $OD_HOME/include/COBOL
  • COBOLのサーバアプリケーションは、ライブラリの形態で利用されます。ライブラリの名称は、以下のとおりです。ライブラリファイル名のモジュール名とインタフェース名部分は、IDL定義の内容にかかわらず大文字となります。

    libモジュール名-インタフェース名.so

    作成するライブラリを構成するモジュールを以下に示します(IDLファイル:X.idl)。

    libX_cdr.so 
    libX_skel.so 
    libX_MM_I1_skel.so

    また、ユーザ作成のサーバ実装部から他の関数をCALLする場合、同様にライブラリ化し、環境変数LD_LIBRARY_PATHなどに設定する必要があります。詳細については、COBOLのマニュアルを参照してください。

  • COBOLソースコンパイル時に“-dy”オプションを指定しないでください。


(3) OD_impl_instでの登録

IDLファイルから作成したライブラリをOD_impl_instコマンドの定義ファイルで指定します。

OD_impl_inst  -ax  X_def        (X_def:定義ファイル)

定義ファイルX_defに“IDL:M/I1:1.0=/user/libM-I1.so”を指定することにより、実際にクライアントからの要求時に/user/libM-I1.soが読み込まれ、サーバメソッドが呼び出されます。

注意

定義ファイルに指定するライブラリのファイル名には、“アプリケーションコンパイル時の手順”で作成したライブラリのファイル名を指定してください。このとき、大文字小文字も一致させてください。


(4) 継承を使用する場合のOD_impl_instでの登録

継承機能を使用する場合、OD_impl_instコマンドの定義ファイルに以下を指定します。

モジュール名:M、インタフェース名:I1、継承名:I2の場合

IDL:M/I1:1.0 = /user/lib/libM-I1.so
IDL:M/I2:1.0 = /user/lib/libM-I2.so,,IDL:M/I1:1.0

(5) COBOLでの“IDL:BAD_OPERATION:1.0”の発生条件について

以下にシステム例外として“IDL:BAD_OPERATION:1.0”が通知された場合のサーバアプリケーションの見直しのポイントを示します。


アプリケーションの誤り

COBOLコンパイルの指定方法誤り

環境設定の誤り