<目次>
(1) CORBA通信とは?概要やアーキテクチャについて
(1-1) CORBA通信とは?
(1-2) CORBAのアーキテクチャについて
(1) CORBA通信とは?概要やアーキテクチャについて
(1-1) CORBA通信とは?
CORBAは「Common Object Request Broker Architecture」の略で、分散システムにおいて異なるプログラム言語(同じ言語同士でも可能)のオブジェクト間での通信(処理の要求/応答の通信)を行う目的で作られたプロトコルです。
分かりやすく言葉の補足をして書き直すと、CORBAは分散システム(複数のサーバから成るシステム)において、異なる言語(C++とJavaなど)のオブジェクト間の通信(お互いのメソッド呼び出しなど)をするためのプロトコル(規約)です。そのCORBAを使った通信をCORBA通信と呼んでいます。
その中でも「ORB (Object Request Broker)」機能が分散システムにおけるCORBA通信の中核を担っており、ライブラリやプロセス等から構成され、オブジェクト間の通信を可能にします。
●CORBAの特徴
CORBAはOMG(Object Management Group)という組織により作られており、特徴としては異なるサーバ間/異なるOS間/異なるプログラム言語であっても通信が出来る、といった環境間の差異を吸収して連携が出来る点があります。
●利用シーン
CORBAの主な利用シーンとしては、CL(クライアント=利用者の端末)とSV(サーバ=利用者にサービスを提供するマシン)間などでオブジェクト間のプログラム呼び出し(リモートのオブジェクトのメソッドを実行)を透過的に(存在を意識せずに利用できる)行うために使います。
●CORBA通信の主な流れ
①クライアント側のリクエスト(要求)に対応するサーバ側のオブジェクトを特定する
②上記①で特定したオブジェクトを透過的に有効化する
③オブジェクトにリクエスト(要求)を届ける
④クライアント側にレスポンス(応答)を返す
(図111)
またCORBAには中核をなす「ORBコア」機能があり、CORBAは実態としては通信を担うORBの「設計仕様」であるとも言えます。次の節でそのアーキテクチャについて見ていきます。
(1-2) CORBAのアーキテクチャについて
CORBAのアーキテクチャは大きくCL(クライアント側)とSV(サーバ側)に分ける事ができ、おおまかには次のような構成になっています。(表A)にて各部分の概要を記載しています。
(図121)
(表A)
■図中No. |
■CL(クライアント)/SV(サーバ) |
■項目 |
■説明 |
① |
CL |
IDLスタブ
(IDL Stub Interface) |
●概要
CL(クライアント側)とORBとの仲介役。
「IDLスタブ」は「IDLコンパイラ」によって生成され、クライアント側のアプリにリンクされます。IDLスタブを構成する関数は、クライアント側とORBの間をマッピングし、言語の差異を吸収してくれます(オブジェクト参照を取得する)。
●IDLスタブの役割
・リモートのSV(サーバ側)オブジェクトへ接続するインターフェイスの役割
・CL(クライアント側)のORBのための変換指示
※IDLはオブジェクトのIF(インターフェイス)を作るための言語 |
② |
CL/SV |
・ORBインターフェイス
(ORB Interface) |
●概要
CL(クライアント側)とSV(サーバ側)の両方から呼ばれるインターフェイスです。ORBのうち、クライアント側から直接アクセスされ得る機能(例:SV側のオブジェクトへの参照を取得する)などを提供します。
●ORBインターフェイスの主な提供機能
ネーミングサービス、ルートPOAなど
(「list_initial_services」、「resolve_initial_refererences」等のメソッドを利用)
(例)
ORB orb = ORB.init(args, null);
orb.resolve_initial_references(“NameService”); |
④ |
CL/SV |
・ORBコア |
ORBの根底に存在する機能で、主にOSI参照モデルのトランスポート層(第4層)で使用される、基本的な通信の機能(クライアント側からの要求とサーバ側部品の通信)を実現します。
(例)Javaの場合の例(コマンドのオプション)
・ORBInitialHost ⇒サーバ側のホスト名を指定
・ORBInitialPort ⇒ネームサーバを起動したいポート番号を指定
・ORBHost ⇒接続をする際にリッスンするホストの指定
↓
※Linuxでのコマンド例
$ orbd -ORBInitialPort [ポート番号] -ORBInitialHost [ホスト名] |
③ |
CL |
動的呼び出し(Dynamic Invocation) |
●概要
ランタイム(実行時)の動的なリクエスト(要求)をする仕様を実現する為のインターフェイスです。
通信相手オブジェクトのインターフェイスが実行時点で不明な場合に必要となります。その際、動的呼び出し(Dynamic Invocation)がインターフェイスリポジトリ(Interface Repository)と一緒に動作する事で、通常必要となるIDLインターフェイスをリンクせずにORBの機能を使用する事ができます。 |
⑤ |
SV |
OA
(Object Adapters) |
●概要
OAは一般的には、クライアント側のリクエストとサーバ側のメソッドを紐付けを「オブジェクト参照」により実現する機能です。
OAはサーバ側オブジェクトの実装(⇒⑦)に対して、ORBの機能を提供しています。OAには次の3方向のIFがあります。
①「IDLスケルトンIF」へのプライベートなIF
②「ORB Core」へのプライベートなIF
③「SV側オブジェクト」へのパブリックなIF
●OAの主な機能
・メソッド呼び出し
(例:JavaではXXXPOA.java内の「_invoke」といったメソッド)
・SV側オブジェクトの有効化/無効化
(例:case文での有効化制御:「switch (__method.intValue ()) { case 0: ~」)
・オブジェクト参照(※注1)と、その実装のマッピング
(例:case文内でのメソッドの呼び出しなど:「$result = this.sayHello ();」)
(※注1)
CORBA通信では、他のオブジェクトから自身を呼び出すためには、まず「オブジェクト参照」を取得します。その方法はいくつかあり、例えばネーミングサービスや、LDAPサーバ、JNDI等を使ったりします。 |
⑤ |
SV |
IDLスケルトン
(IDL Skeleton Interface) |
●概要
サーバ側オブジェクトとORBとの仲介役。
「IDLスケルトン」は「IDLコンパイラ」によって生成され、CL(クライアント側)からのリクエスト(要求)に応じたメソッドを呼び出す際に、SV(サーバ側)のORBとサーバ側オブジェクトの間のインターフェイスの役割を果たします(どのメソッドが利用可能かを検知する)
●IDLスケルトンの役割
・SV(サーバ側)のORBとサーバ側オブジェクトの間のIF
・SV(サーバ側)のORBに対して、逆変換の指示を出す(クライアント側から送られたパラメータを解読できるように) |
⑦ |
SV |
サーバ側オブジェクトの実装 |
CL(クライアント側)が要求する、呼び出し対象のSV(サーバ側)のオブジェクト。 |