[ C++で開発 ]
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の上で実装したものです。
ソースコードの入手、ビルド手順、ドキュメントは上記ページから辿ります。
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 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 |
TAOに必要な最小限のコンポーネントは、aceおよびgperfの2つです。なお、TAOにおいてSSL over IIOPを使用するならSSLが必要となります。また、TAOにおいてQOSを使用するならQoSが必要となります。
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 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 |
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ほど品質確認が行われていません。
オープンソースベースの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をダウンロードする |
以下URLで、ACE+TAOのRPMソースパッケージを配布しています。Fedora/RHELでビルドすることができます。
http://dist.bonsai.com/ken/ace_tao_rpm/
Debianパッケージには、ACE+TAOのバイナリパッケージがあるようです(ブツは未確認)。
OCI社等商用サポートを提供している会社が、各種OS/コンパイラにてビルドしたバイナリを販売していることがあります。
TAOのビルドは少々複雑です。また、時間がかなりかかってしまいます(一晩〜数日)。
OSおよびコンパイラの種類によってビルド手順が大きく異なるので、それぞれについて詳細は別途Webページに記述します。
ここではビルド手順について共通的な事項について記述します。
TAOをインストールする手順は、どのプラットフォームにおいても大まかには以下のようになります。
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"
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
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で公開)が参考になります。
ACE、TAOの場合、ビルドしたディレクトリをそのまま全て使用するというスタンスなので、必要なファイル群のみを抽出してインストールするという仕組みがありません。ビルドしたディレクトリのサイズはコンパイル途中で生成されるファイル等もそのまま残っているので2GB以上にもなります。
そこで、必要なファイルのみを抜粋してコピーします。その際、ディレクトリ構造を変更するとメイクファイル等の設定がNGになってしまうので、極力ディレクトリ構成は一緒にします。
ACEおよびTAOをビルドした記録を、プラットフォーム・コンパイラ別に記述します。