CORBA実装系特有の話題やノウハウを載せるページです。ここでは、The ExoLab Groupが開発しているフリーのCORBA実装系"OpenORB"を扱います。
OpenORBは、ORBコアのほかたくさんのCORBA標準サービスや拡張があります。
ファイル名 | 内容 | |
---|---|---|
OpenORB-1.4.0.[tgz|zip] | OpenORBのコアライブラリ |
ファイル名 | 内容 | |
---|---|---|
EventService-1.4.0.[tgz|zip] | Event Service | |
NamingService-1.4.0.[tgz|zip] | 永続ネーミングサービス拡張 | |
NotificationService-1.4.0.[tgz|zip] | Notification Service | |
PersistentStateService-1.4.0.[tgz|zip] | Persistent State Serviceの追加 | |
PropertyService-1.4.0.[tgz|zip] | Property Service | |
TimeService-1.4.0.[tgz|zip] | Time Service | |
TradingService-1.4.0.[tgz|zip] | Trading Service | |
TransactionService-1.4.0.[tgz|zip] | Transaction Service | |
ConcurrencyControlService-1.4.0.[tgz|zip] |
ファイル名 | 内容 | |
---|---|---|
EvaluatorUtility-1.4.0.[tgz|zip] | ||
ManagementBoard-1.4.0.[tgz|zip] | ||
InterfaceRepository-1.4.0.[tgz|zip] | Interface Repository | |
SSL-1.4.0.[tgz|zip] | ||
Tools-1.4.0.[tgz|zip] |
CORBAのコア機能だけ使用する場合は、OpenORBとToolsの2つのパッケージがあればよいです。OpenORBのパッケージに含まれるコマンドは、Toolsパッケージを必要とします。
あとは、開発で使用するサービスがあればそれを追加インストールします。たとえばネーミングサービスを使用するならば、NamingServiceのパッケージを追加インストールする、という具合です。
OpenORB1.4.0からディレクトリ構成が新しくなっています。環境変数TCOO_HOMEで指定したディレクトリを基点に以下の構造でファイルを配置します。OpenORBをインストールする根っことなるディレクトリを作成し、このディレクトリへのパスを環境変数TCOO_HOMEに設定します。
<TCOO_HOME> +--- tools +--- OpenORB +--- NamingService : :
OpenORB-1.4.0.tgzをダウンロードし、解凍します。例えばC:\java\OpenORB-1.4.0の下に解凍した場合は、C:\java\OpenORB-1.4.0\OpenORBディレクトリが出来ます。(パスはWindows風で指定した例を以下に示していますが、UNIXでも同様です)
ディレクトリ | 内容 | |||
---|---|---|---|---|
C:\java\OpenORB-1.4.0\OpenORB | bin\ |
idl2java idldoc iordump java2idl |
IDLコンパイラ等コマンド | |
config\ |
OpenORB.xml default.xml opr.properties |
設定用スクリプト | ||
doc\ | APIドキュメント、プログラマガイド | |||
example\ | サンプルプログラム | |||
idl\ | CORBAコア主要IDLファイル | |||
lib\ |
openorb_orb-1.4.0.jar openorb_orb_examples-1.4.0.jar openorb_orb_test-1.4.0.jar openorb_orb_tools-1.4.0.jar endorsed\openorb_orb_omg-1.4.0.jar |
CORBAのコアライブラリ サンプルプログラム OpenORBテストケースプログラム CORBA開発用ライブラリ |
||
test\ | ベンチマークプログラムとJUnitテストケース |
Tools-1.4.0.tgzをダウンロードし解凍します。環境変数TCOO_HOMEで指定したディレクトリの中に展開します。
OpenORBコア・パッケージのbinに含まれるコマンドの実行には、このツール・パッケージが必要になります。
OpenORB 1.4.0からは、クラスライブラリの指定方法がずいぶんと面倒(見方を変えればJ2SEのインストールド・エクステンション、エンドースド・エクステンションを駆使した設定が必要)になりました。
環境変数設定を行うバッチファイルの例です。
REM OpenORB 1.4.0環境設定ファイル REM 環境変数TCOO_HOMEの設定 set TCOO_HOME=C:\java\OpenORB-1.4.0 REM クラスパスの設定 set CLASSPATH=%CLASSPATH%;%TCOO_HOME%\OpenORB\lib\openorb_orb-1.4.0.jar set CLASSPATH=%CLASSPATH%;%TCOO_HOME%\OpenORB\lib\openorb_tools-1.4.0.jar set CLASSPATH=%CLASSPATH%;%TCOO_HOME%\tools\lib\tools-1.4.0.jar |
実行時の設定例です。
C:\home\torutk\work>setenv C:\home\torutk\work>java -Dorg.omg.CORBA.ORBClass=org.openorb.orb.core.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.openorb.orb.core.ORBSingleton -Djava.endorsed.dirs=%TCOO_HOME%\OpenORB\lib\endorsed -Djava.ext.dirs=%TCOO_HOEM%\tools\lib\ext foo.bar.Hoge |
各種パスを指定する際の起点となるディレクトリを指定します。OpenORBが提供するコマンド(シェルスクリプトまたはバッチファイル)では、この環境変数が設定されていることが前提となります。
コンパイル時には、以下のクラスライブラリファイルが必要になります。
実行時には、以下のクラスライブラリファイルが必要になります。
以下のパスをエンドースド・エクステンションとして指定します。
以下のパスをインストールド・エクステンションとして指定します。
以下のパスをクラスパスとして指定します。
OpenORBを使用するときのCORBAプロパティ設定を下記に記します。
プロパティ名 | 設定 |
---|---|
org.omg.CORBA.ORBClass |
org.openorb.orb.core.ORB |
org.omg.CORBA.ORBSingletonClass |
org.openorb.orb.core.ORBSingleton |
このプロパティを設定してJavaを(foo.bar.Hogeクラスを)実行するには、
>java -Dorg.omg.CORBA.ORBClass=org.openorb.orb.core.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.openorb.orb.core.ORBSingleton ... foo.bar.Hoge |
のようにコマンドラインで-Dオプションを使って指定します。
このように毎回切り替えプロパティを記述するのは大変なので、プロパティファイルをJava実行環境のディレクトリへ配置する方法が便利です。
OpenORB\confディレクトリにあるorb.propertiesファイルをJREのlibディレクトリにコピーします。
orb.propertiesは下記の内容です。
org.omg.CORBA.ORBClass=org.openorb.orb.core.ORB org.omg.CORBA.ORBSingletonClass=org.openorb.orb.core.ORBSingleton |
JDK1.5.0の場合は、<JDK1.5.0インストールディレクトリ>\jre\libになります。
例:C:\java\jdk1.5.0\jre\lib
JRE1.5.0の場合は、<JRE1.5.0インストールディレクトリ>\libになります。
例:C:\Program Files\Java\jre1.5.0_03\lib
プロパティファイルによる指定では、特定のORB実装系が使用されるので、複数種類のCORBA実装系を切り替える場合には向きません。
idl2javaコマンドを実行します。
OpenORBでは、2つのNaming Serviceが提供されています。1つは、transient name serviceでもう1つは、Extended Interoperable Naming Serviceです。
永続化をサポートしない、簡単なネーミングサービスです。
<TCOO_HOME>\NamingService\bin\tnsコマンドを実行します。-uオプションで起動したネーミングサービスのオブジェクトURL(corbaloc)が表示されます。
D:\develop\ex1>tns -u [main] [INFO ] (tns): NameService 1.4.0 Copyright (c) 2002-2005 The Community Op enORB [main] [INFO ] (tns): calling ORB.init [main] [INFO ] (tns.svc): NameService=corbaloc:iiop:1.2@xxx.xxx.xxx.xxx:2566/Nam eService [main] [INFO ] (tns): Service started. Press CTRL-C to stop the service! |
transient name serviceを初期ネーミング・コンテクストのオブジェクトリファレンスとして取得するプログラムは、実行するときのコマンドラインオプション-ORBInitRefでNameServiceを指定します。
D:\develop\ex1>java foo.Server -ORBInitRef NameService=corbaloc:iiop:1.2@xxx. xxx.xxx.xxx:2566/NameService : |
このとき、プログラム中でorb.resolve_initial_references("NameService")を呼びだすと、-ORBInitRefオプションで指定したオブジェクトURLに基づくネーミングサービスの参照を取得することができます。
-ORBInitRefオプションを使用する必要はありません。
永続化可能なネーミングサービスです。このNamingServiceを動かすには、Persistent ServiceおよびTransaction Serviceが必要です。
OpenORBは各サービスも利用すると、たくさんのJARファイルが散在して設定や実行が面倒です。そこで、Antを使ってビルドし、実行できるようにします。
IDLコンパイル/コンパイル/実行時と何箇所かで同じクラスパス設定を使用します。そこで、プロジェクト中で一箇所に設定を行い、他の個所では参照を使うようにすると便利です。また、
<property name="openorb_home" value="d:/java/OpenORB-1.4.0" /> <property name="orbclass" value="-Dorg.omg.CORBA.ORBClass=org.openorb.CORBA.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.openorb.CORBA.ORBSingleton" /> <path id="openorb.classpath"> <fileset dir="${openorb_home}/lib" includes="*.jar" /> </path> |
<target name="idlcompile" depends="prepare"> <java classname="org.openorb.compiler.IdlCompiler"> <classpath refid="openorb.classpath" /> <jvmarg line="${orbclass}" /> <arg value="Counter.idl"/> </java> </target> |
<target name="compile" depends="idlcompile"> <javac srcdir="${src}; generated" destdir="${build}"> <classpath refid="openorb.classpath" /> </javac> </target> |
<target name="runserver" depends="dist"> <java classname="count.Server" fork="true"> <classpath> <path refid="openorb.classpath" /> <pathelement location="${build}" /> </classpath> <jvmarg line="${orbclass}" /> </java> </target> |
<target name="run_ins"> <java classname="org.openorb.ins.Server" fork="true"> <classpath refid="openorb.classpath" /> <jvmarg line="${orbclass}" /> <arg value="-ORBPort=8001" /> </java> </target> |