[ C++で開発 ]

TAO : The Ace Orb
オープンソースなCORBA実装


概要

TAOとは、Real-time仕様やQoS機能を含んだCORBA2.6仕様を実装しているオープンソースのCORBA実装製品です。対象言語はC++で、対象OSはWindows OS、各種UNIX系OS、各種リアルタイムOSなど幅広く対応しています。

TAOの開発は、Vanderbilt大学Insutitte for Software Integrated Systems、Washington大学Department of Computer Science、California大学Irvine校Electrical and Computer Engineeringによって構成される分散オブジェクトコンピューティンググループ(DOC)が行っています。

TAOは、The ACE Orbの略称でACEと呼ばれるクロスプラットフォームなC++ライブラリの上に構築されています。このACEとは、The ADAPTIVE Communication Environmentの略称で、クロスプラットフォームなオブジェクト指向ネットワークプログラミング用フレームワークです。

オープンソースながらTAOの使用実績は豊富です。米ボーイング/マクダネルダグラス社の航空機搭載用電子機器のソフトウェア、軍用シミュレーション(HLA)の基盤ソフトウェア、独ジーメンス社などの医療用ソフトウェア基盤、VoIPシステムや通信制御機器、製鉄所圧延制御、電力制御、その他多くのシステム・製品に使用されています。

また、ACEやTAOの技術サポートを有償で提供する会社が幾社もあります。

CIAOとは、CORBA コンポーネントモデル(CCM:CORBA Component Model)仕様をTAOの上で実装したものです。CORBA 3仕様で追加されたものです。

DDSとは、OMGで標準化されたpublish/subscribeアーキテクチャに基づくデータ配信モデル(Data Distribution Data)の仕様をTAOの上で実装したものです。

主要な情報源

Web情報

プロジェクトホームページ

ソースコードの入手、ビルド手順、ドキュメントは上記ページから辿ります。

書籍・雑誌情報

日本語

英語

ソースコードの構成

ACEとTAOは、多数の「パッケージ」から構成されます。

ディレクトリ構成(主要部分)

ACE+TAO+CIAOを展開すると、以下のディレクトリ構成(主要ディレクトリのみ記載)となっています。

ACE_wrappers
  +-- TAO
  |     +-- orbsvcs
  |     |     +-- Concurrency_Service
  |     |     +-- CosEvent_Service
  |     |     +-- Dump_Schedule
  |     |     +-- Event_Service
  |     |     +-- FTRT_Event_Service
  |     |     +-- FT_ReplicationManager
  |     |     +-- Fault_Detector
  |     |     +-- Fault_Notifier
  |     |     +-- IFR_Service
  |     |     +-- ImplRepo_Service
  |     |     +-- LifeCycle_Service
  |     |     +-- LoadBalancer
  |     |     +-- Logging_Service
  |     |     +-- Mobility_Service
  |     |     +-- Naming_Service
  |     |     +-- Notify_Service
  |     |     +-- PSS
  |     |     +-- Scheduling_Service
  |     |     +-- TAO_Service
  |     |     +-- Time_Service
  |     |     +-- Trading_Service
  |     |     +-- examples
  |     |     +-- orbsvcs
  |     |     |     +-- AV
  |     |     |     +-- Concurrency
  |     |     |     +-- CosEvent
  |     |     |     +-- ESF
  |     |     |     +-- ETCL
  |     |     |     +-- Event
  |     |     |     +-- FaultTolerance
  |     |     |     +-- FtRtEvent
  |     |     |     +-- HTIOP
  |     |     |     +-- IFRService
  |     |     |     +-- LifeCycle
  |     |     |     +-- LoadBalancing
  |     |     |     +-- Log
  |     |     |     +-- Naming
  |     |     |     +-- Notify
  |     |     |     +-- PortableGroup
  |     |     |     +-- Property
  |     |     |     +-- RTCosScheduling
  |     |     |     +-- SSLIOP
  |     |     |     +-- Sched
  |     |     |     +-- Security
  |     |     |     +-- Time
  |     |     |     +-- Trader
  |     |     +-- performance-tests
  |     |     +-- tests
  |
  |     +-- tao
  |     |     +-- AnyTypeCode
  |     |     +-- BiDir_GIOP
  |     |     +-- CodecFactory
  |     |     +-- Codeset
  |     |     +-- Compression
  |     |     +-- CSD_Framework
  |     |     +-- CSD_ThreadPool
  |     |     +-- DiffServPolicy
  |     |     +-- Domain
  |     |     +-- DynamicAny
  |     |     +-- DynamicInterface
  |     |     +-- EndpointPolicy
  |     |     +-- FlResource
  |     |     +-- IFR_Client
  |     |     +-- IORInterceptor
  |     |     +-- IORManipulation
  |     |     +-- IORTable
  |     |     +-- ImR_Client
  |     |     +-- Messaging
  |     |     +-- ObjRefTemplate
  |     |     +-- PI
  |     |     +-- PI_Server
  |     |     +-- PortableServer
  |     |     +-- QtResource
  |     |     +-- RTCORBA
  |     |     +-- RTPortableServer
  |     |     +-- RTScheduling
  |     |     +-- SmartProxies
  |     |     +-- Strategies
  |     |     +-- TkResource
  |     |     +-- TransportCurrent
  |     |     +-- TypeCodeFactory
  |     |     +-- Utils
  |     |     +-- Valuetype
  |     |     +-- XtResource
  |     +-- TAO_IDL
  |     +-- docs
  |     +-- examples
  |     +-- interop-tests
  |     +-- performance-tests
  |     +-- tests
  |     +-- utils
  |           +-- NamingViewer
  |           +-- catior
  |           +-- nslist
  |           +-- wxNamingViewer
  +-- ACEXML
  +-- ASNMP
  +-- ChangeLogs
  +-- Kokyu
  +-- MPC
  |     +-- config
  |     +-- history
  |     +-- modules
  |     +-- template
  |
  +-- ace
  |     +-- QoS
  |     +-- SSL
  |     +-- os_include
  +-- apps
  |     +-- FaCE
  |     +-- Gateway
  |     +-- JAWS
  |     +-- JAWS2
  |     +-- JAWS3
  |     +-- drwho
  |     +-- gperf
  |     +-- mkcsregdb
  |     +-- soreduce
  +-- bin
  |     +-- ChangeLogEditor
  |     +-- DependencyGenerator
  |     +-- FOCUS
  |     +-- MakeProjectCreator
  |     +-- PerlACE
  +-- contrib
  +-- docs
  +-- etc
  +-- examples
  +-- include
  |     +-- makeinclude
  +-- lib
  +-- m4
  +-- netsvcs
  +-- performance-tests
  +-- protocols
  |     +-- ace
  |           +-- HTBP
  |           +-- RMCast
  |           +-- TMCast
  +-- tests
  +-- websvcs










ACEの構成

ACE Ver. 5.4.8におけるACEのコンポーネント構成は以下の通りです。

コンポーネント名 ディレクトリ 内容
ace ace ACEのコア
QoS ace/QoS ASE QoS API。Windows上ではMicrosoft GQOS API†1を使用し、UNIX上ではRSVP API†2を使用している。
SSL ace/SSL SSLによるSocketを扱う。OpenSSL†3を必要とする。
HTBP protocols/ace/HTBP 双方向HTTPトネリングプロトコル
RMCast protocols/ace/RMCast 小規模な信頼性あるマルチキャストプロトコル
TMCast protocols/ace/TMCast トランザクション指向マルチキャストプロトコル
ACEXML ACEXML XMLパーサ・フレームワーク(SAX2.0)
ASNMP ASNMP ACE+SNMP!(Another SNMP API)
netsvcs netsvcs 名前サービス、ロギングサービス、時刻サービス、排他サービスといったネットワークサービスを提供する
websvcs websvcs Webクライアント/サーバ構築に役立つクラス
FaCE apps/FaCE PocketPC2002上のテスト・デバッグフレームワーク
Gateway apps/Gateway コネクション指向のアプリレベルで発信元もしくは宛先に基づくルーティングを行うGateway
JAWS apps/JAWS ACEで書かれた高性能HTTP Webサーバ
JAWS2 apps/JAWS2
JAWS3 apps/JAWS3
drwho apps/drwho 分散RWHO
gperf apps/gperf IDLコンパイラ等が使用するGNU perfect hash function generator
mkcsregdb apps/mkcsregdb
soreduce apps/soreduce
†1
Microsoft GQOS APIは、Platform SDKに含まれており、ライブラリws2_32.libとリンクすることで利用可能となる。
†2
RAPI APIは、ISIより入手可能である。2006年2月5日現在、rsvpd.rel.4.2a4-1.tar.gzが最新のようです。
†3
OpenSSLは、ここより入手可能である。2006年2月5日現在、OpenSSL 0.9.7iが最新のようです。

TAOに必要な最小限のコンポーネントは、aceおよびgperfの2つです。なお、TAOにおいてSSL over IIOPを使用するならSSLが必要となります。また、TAOにおいてQOSを使用するならQoSが必要となります。

TAOの構成

TAO Ver. 1.4.8におけるACEのコンポーネント構成は以下の通りです。

コンポーネント名 ディレクトリ 内容
tao tao TAOのコア
AnyTypeCode tao/AnyTypeCode
RTCORBA tao/RTCORBA
BiDir_GIOP tao/BiDir_GIOP 双方向IIOP通信
CSD_Framework tao/CSD_Framework
CDS_ThreadPool tao/CDS_ThreadPool
CodecFactory tao/CodecFactory
Domain tao/Domain セキュリティ
DynamicAny tao/DynamicAny
DynamicInterface tao/DynamicInterface
IFR_Client tao/IFR_Client
IORInterceptor tao/IORInterceptor
IORManipulation tao/IORManipulation
IORTable tao/IORTable クライアント側からURLでアクセス可能にするにはサーバ側でIORTableへオブジェクトを登録する
ImR_Client tao/ImR_Client
Messaging tao/Messaging QoS メッセ-ジングコンポーネント
ObjRefTemplate tao/ObjRefTemplate
PI tao/PI
PI_Server tao/PI_Server
PortableServer tao/PortableServer POAに関するコンポーネント
RTPortableServer tao/RTPortableServer
SmartProxies tao/SmartProxies 自前でProxyクラスを作りたいときに利用する(キャッシュ機構など)
TypeCodeFactory tao/TypeCodeFactory
Utils tao/Utils
Valuetype tao/Valuetype
diffs tao/diffs
TAO_IDL TAO_IDL IDLコンパイラ
CosEvent_Service orbsvcs/CosEvent_Service COSイベントサービス
Concurrency_Service orbsvcs/Concurrency_Service
Dump_Schedule orbsvcs/Dump_Schedule
Event_Service orbsvcs/Event_Service
FTRT_Event_Service orbsvcs/FTRT_Event_Service
FT_ReplicationManager orbsvcs/FT_ReplicationManager
Fault_Detector orbsvcs/Fault_Detector
Fault_Notifier orbsvcs/Fault_Notifier
IFR_Service orbsvcs/IFR_Service
ImplRepo_Service orbsvcs/ImplRepo_Service
LifeCycle_Service orbsvcs/LifeCycle_Service
LoadBalancer orbsvcs/LoadBalancer
Logging_Service orbsvcs/Logging_Service
Naming_Service orbsvcs/Naming_Service
Notify_Service orbsvcs/Notify_Service
PSS orbsvcs/PSS
Scheduling_Service orbsvcs/Scheduling_Service
TAO_Service orbsvcs/TAO_Service
Time_Service orbsvcs/Time_Service
Trading_Service orbsvcs/Trading_Service
orbsvcs orbsvcs/orbsvcs
NamingViewer tao/utils/NamingViewer
catior tao/utils/catior
nslist tao/utils/nslist
wxNamingViewer tao/utils/wxNamingViewer

CIAOの構成

CIAO Ver. 0.4.8におけるACEのコンポーネント構成は以下の通りです。

コンポーネント名 ディレクトリ 内容
CCF CCF
RACE RACE
CIDLC CIDLC
DAnCE DAnCE
ciao ciao
Config_Handlers tools/Config_Handlers
IDL3_to_IDL2 tools/IDL3_to_IDL2

DDS(Data Distribution Service)

ACE+TAO+CIAOとは別パッケージで公開されている、OMG標準規格"Data Distribution Service"のTAO上の実装があります。

入手とビルド

TAOはACEと一緒に利用することが前提となります。ACEだけ利用する場合はTAOは必ずしも必要ではありませんが、ここではTAOを含めたビルドを行います。

ソースコードの入手

TAOはオープンソースなので、TAOを使うにはソースコードを入手して自分でビルドするのが基本となります。ソースコードは、上述のTAOホームページから、"Obtaining TAO"のリンクを辿ります。

"Latest Beta Kit"と"Latest Release"の2つがページにあります†1。ACEやTAOはバージョン表記を3桁の数値で示しています。例えば、5.4.8がそうです。Latest Releaseは、最初の2桁のリリース(3桁目がなし)に該当し、Latest Beta Releaseは、Latest Releaseに対して修正が加えられ、バージョン表記として3桁目がインクリメントされてリリースされるものです。例えば、2006年2月5日現在、Latest Releaseは、ACEが5.4、TAOが1.4であり、Latest Beta KitはACEが5.4.8、TAOが1.4.8となっています。

Latest Releaseは、出荷相当の品質確認(いわゆる試験等)が行われています。一方Latest Beta KitはLatest Releaseほど品質確認が行われていません。

†1
実はさらにLatest BFO Beta(BFOはBug Fix Onlyの略)なるリリースがあります。Latest Releaseが5.4の場合、そのLatest Releaseに対する最初のLatest Beta Kitである5.4.1がBFOとなっています。このBFOは、Latest Releaseに対してバグ修正のみが行われ、機能追加は行われていないBeta版となります。

オープンソースベースのTAOを使用するのであれば、随時バグ修正が盛り込まれるLatest Beta Kitを使うのがおそらく唯一の解です。開発チームは、バグの修正は常にLatest Beta Kitに対して反映しているからです。

商用利用するのであれば、商用サポートを提供している企業のものを利用するのが妥当でしょう。これらはバグについては新機能を追加せずに修正版(パッチ等)を随時提供しているので、安定して利用するならばこちらが向いています。

Latest Beta Kitのなかから適切なものを選択します。ACE+TAO+CIAOとあるのがフルセットで、ACEとTAOに加えて、CORBAコンポーネントモデルをサポートしたCIAOがまとめられたものです。ACE+TAOはCIAOを除いたもの、ACEはACEのみでTAOがないソース構成となっています。また、圧縮方式がTAR+GZIP圧縮形式、BZIP2圧縮形式、ZIP圧縮形式のものが用意されているのでビルドする環境で使えるものを選べばよいです。なお、圧縮効率の違いから、BZIP2 < GZIP < ZIP の順でファイルサイズが大きくなっています。

TAOのホームページから[Obtaining TAO]のリンクを辿り、Latest Beta KitのACE+TAO+CIAO.tar.bz2をダウンロードする

RPMソースパッケージの入手

以下URLで、ACE+TAOのRPMソースパッケージを配布しています。Fedora/RHELでビルドすることができます。

http://dist.bonsai.com/ken/ace_tao_rpm/

バイナリの入手について

Debianパッケージには、ACE+TAOのバイナリパッケージがあるようです(ブツは未確認)。

OCI社等商用サポートを提供している会社が、各種OS/コンパイラにてビルドしたバイナリを販売していることがあります。

ソースコードのビルド手順

TAOのビルドは少々複雑です。また、時間がかなりかかってしまいます(一晩〜数日)。

OSおよびコンパイラの種類によってビルド手順が大きく異なるので、それぞれについて詳細は別途Webページに記述します。

ここではビルド手順について共通的な事項について記述します。

TAOをインストールする手順は、どのプラットフォームにおいても大まかには以下のようになります。

  1. config.hの作成(ace/config.h)
  2. platform_macros.GNUの作成(include/makeinclude/platform_macros.GNU)
  3. コンパイル・リンク
  4. インストール

1. config.hの作成

aceディレクトリの中に、config.hという名前のファイルを作成します。ACEでは、プラットフォームに依存する定義をconfig.hからインクルードする約束事があります。そこで、プラットフォーム固有の定義をここに記述します。といっても主要なOS・コンパイラの定義は既にACEで提供されているので、その場合はconfig.hにはプラットフォーム・コンパイラの定義ファイルをインクルードする命令を一行記述するだけとなります。

例)Solaris 10の場合

#include "ace/config-sunos5.10.h"

例)Windows OS/Visaul C++の場合

#include "ace/config-win32.h"

2. platform_macros.GNUの作成

include/makeincludeディレクトリの中に、platform_macros.GNUという名前のファイルを作成します。ビルドする(使用する)コンポーネント、ビルドオプション、ライブラリ形式、その他条件を記述します。ACEがサポートしているOS・コンパイラの場合はデフォルト設定が記述されたファイルが提供されているので、それをインクルードする記述を行い、デフォルトとは違う設定がある場合にそれを記述することになります。

例)Solaris 10 デフォルトの場合

include $(ACE_ROOT)/include/makeinclude/platform_sunos5_sunc++.GNU

例)Windows OS上でCygwin環境の場合

include $(ACE_ROOT)/include/makeinclude/platform_cygwin32.GNU

3. コンパイル・リンク

UNIX系OSの場合は、makeツールを使用します。WindowsにおいてVisualC++を使うときは、VisualC+のビルド機能を使用します。

ACE,TAOでは初めからGNU makeツール用のメイクファイル、Microsoft VisualStudio用のプロジェクトファイル、Borland Compiler用のメイクファイルが提供されています。

ACE,TAOでは、幾種類かあるメイクファイルおよびプロジェクト設定ファイルを生成するツールであるMPC:Makefile, Project Generatorを使用しています。提供されているメイクファイルやプロジェクトファイルを変更するときは、手で変更してもよいですが、このMPCを使って修正することが望ましいと思われます。MPCについては、付属のドキュメントか、MPCツール開発元のOCI社が作成したTAO開発者ドキュメントの中の4章 MPC(この章はWebで公開)が参考になります。

4. インストール

ACE、TAOの場合、ビルドしたディレクトリをそのまま全て使用するというスタンスなので、必要なファイル群のみを抽出してインストールするという仕組みがありません。ビルドしたディレクトリのサイズはコンパイル途中で生成されるファイル等もそのまま残っているので2GB以上にもなります。

そこで、必要なファイルのみを抜粋してコピーします。その際、ディレクトリ構造を変更するとメイクファイル等の設定がNGになってしまうので、極力ディレクトリ構成は一緒にします。

ビルド記録

ACEおよびTAOをビルドした記録を、プラットフォーム・コンパイラ別に記述します。

TAO 1.8.x

TAO 1.6.x

TAO 1.5.x

TAO 1.5a(OCI版)

TAO 1.4.x

TAO 1.3.x

TAO 1.3a(OCI版)