開発日誌1999年10月

Linux で CORBA は使えるか? (1999/10/10)

 Linux のページに書くには、あまりにも開発ネタなんでこちらに書きます。Windows な世界では COM/DCOM という仕組みがあるわけですが、今時の UNIX な世界では CORBA が使われるようになりました。UNIX でも DCOM があることにはあるのですが、まだまだ主流とはなりえていないようです。一昔前は DCE が主流でして、実は今やってる仕事もこれを使ってます。DCE の場合も IDL でインターフェースを定義するところなんか CORBA と同じ。そんなこと言ったら COM/DCOM だって IDL を記述するわけですから同じか。(笑)

 さて、今回 Linux で CORBA を試すにあたって omniORB2 を使うことにしました。Linux 2.0.x glibc 用と Windows NT,95 用のアーカイブを Get して環境を整えてみました。まず、Linux 側の環境の構築です。Get したアーカイブを /opt に展開しました。README.Linux と README.unix を読みながらコンパイル&環境の構築です。glibc 用ということでバイナリそのまま動くことを期待してたのですが、どうやら egcs 及びライブラリのバージョンが違うようでして再コンパイルが必要でした。

  • config.h と i586_linux_2.0_glibc.mk の修正./config/config.h を見ると platform として i586_linux_2.0_glibc が定義されてますので修正はありません。しかし、./mk/platforms/i586_linux_2.0_glibc.mk は修正が必要でした。TurboLinux の環境では cpp と gcc のインストール場所が /usr/local 配下ではありません。そこで、CPP=/lib/cpp と CX=/usr/bin/g++ と修正が必要でした。
  • makemake export でOK
  • ライブラリパス/etc/ld.so.conf に /opt/omniORB_280/lib を追加して ldconfig
  • ログディレクトリの作成/var/omninames を作成
  • omniNames 環境の作成export OMNINAMES_LOGDIR=/var/omninames とし omniNames を以下のように起動。
    ./bin/omniNames -start ポート番号
    標準出力された IOR の値を ./omniORB.cfg を作成して記述(コピー)する。
    NAMESERVICE IOR:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    また、ホスト名、ポート番号を以下のように記述する。
    ORBInitialHost ホスト名
    ORBInitialPort ポート番号
    最後に、/etc/services にポート番号を書いておいてやりました。
  • 環境変数の定義export OMNINAMES_LOGDIR=/var/omninames
    export OMNIORB_CONFIG=/opt/omniORB_280/omniORB.cfg
    を .bashrc に記述。

 以上で、環境構築はほぼ終了。あと、omniNames の起動スクリプトを書いて /etc/rc.d/init.d に入れて rc3.d と rc5.d にリンクをはってやりました。Windows 環境のほうは、Get した zip を c:\ に展開して c:\omniORB_280\bin\x86_win32 にパスを設定してやります。Linux 環境で作成した omniORB.cfg を c:\omniORB_280 に入れて、autexec.bat に環境変数 OMNIORB_CONFIG=c:\omniORB_280\omniORB.cfg を設定してやります。c:\Windows\services に通信ポート番号を書いて再起動。

 サンプルプログラムが ./src/examples に入ってますので、その中の echo というプログラムで動作を確認しました。Linux 側、Windows 側とも make してやって、Linux 側で omniNames を起動。サンプルプログラム eg3_impl は Linux 側で動かしておき、Windows 側で eg3_clt を動かすとなんなく動きました。

 ということで、omniORB2 で Windows と Linux の分散オブジェクト環境が構築できることがわかりました。例えば Oracle for Linux を動かして、ビジネスロジックは SP で、ミドルウェアは PRO/C と omniORB2 で構築。クライアントは Windows + Visual C++ で開発できます。

タイトルとURLをコピーしました