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

第11章 CORBAアプリケーションの高度な使い方> 11.4 ライブラリの作成方法

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

C言語、C++言語の例

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

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

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

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

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

 -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の例

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

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

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

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

  IDLc -cobol IDLファイル名             /* COBOLの場合 */

(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

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

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

注3) COBOLのサーバアプリケーションはライブラリの形態で利用されます。ライブラリの名称は以下のとおりです。
  libモジュール名_インタフェース名.so
 作成するライブラリを構成するモジュールを以下に示します。(IDLファイルがX.idlの場合)
  libX_cdr.so
  libX_skel.so
  libX_MM_I1_skel.so
 また、ユーザ作成のサーバ実装部から他の関数をCALLする場合、同様にライブラリ化し、環境変数LD_LIBRARY_PATH等に設定する必要があります。詳細については、COBOLのマニュアルを参照してください。

注4) 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コンパイルの指定方法誤り

環境設定の誤り


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

All Rights Reserved, Copyright(C) 富士通株式会社 2005