分散システムに対応したアプリケーションを開発するためには、複数のアプリケーションやデータとの間で連携するための通信機能が必要となる。
ORBはこれらの通信の連携のために、各オブジェクトに対するサービス機能を持っているので、アプリケーション開発者がこれを利用することで開発作業が容易になる。
主なサービスは、以下のようなものである。
オブジェクトを名前で管理するためのサービスである。
オブジェクトの実体を指すIDと、名前、タイプをレコードに持つデータベース(Object Context)である。
このサービスは、次のオペレーションを用いてオブジェクトの検索、登録、削除などをおこなう。
- オブジェクトの登録:bind( )
- オブジェクトの検索:resolve( )
- オブジェクトの削除:unbind( )
データベースは、階層化して名前管理をすることができる。
オブジェクト間で非同期に通信を行うためのサービスである。
クライアントがこのサービスを利用するときは、オブジェクト間の通信を制御するEvent Channelを生成し、これを経由して相手のオブジェクトがデータを受信する。
- EventChannelにデータを送る:push( )
- EventChannelからデータを受け取る:pull( )
オブジェクトを新しく定義するとき、そのオブジェクトを生成するためのサービスである。
オブジェクトの生成、削除、複製、移動などの機能がある。
ファイルやデータベースの入出力を行うためのサービスである。
このサービスでは、ファイルやデータベースを管理するPDS(Persistent Data Service)を利用することによって、ファイル固有のインターフェースの違いを吸収する。
また、ファイルやデータベースに書き込んだデータの位置を、PID(Persistent Object Manager)に保存しておき、クライアントにデータの位置を回答する。
- PDSと接続する:connect( )
- PDSとの接続を切る:disconnect( )
RDBやODBなどのデータベースの検索処理を行うサービスである。
このサービスには、結果が帰ってくるまで待ち状態になる同期型と、結果を待たないで次の処理を継続する非同期型がある。
データの検索はQuery言語によって行う。標準として、OQL-93Basic、OQL-92をサポートしている。
- 同期型で検索する:evaluate( )
- 非同期型で検索する:execute( )
トランザクション処理を実行するためのサービスである。
処理が成功したか失敗しかのどちらかを決定し、異常終了のときはデータを実行前の状態に戻す。
- 処理の開始:begin( )
- 処理の正常終了を行う:commit( )
- 処理を取り消す:rollback( )
- 取消可能のマークを付ける:rollback_only( )
- 状況を調べる:get_status( )
- トランザクション名を返す:get_transaction_name( )
- 時間を制限する:set_timeout( )