[ Java & CORBAページへ戻る ]

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]

対応Java

インストール

何が必要ですか?

CORBAのコア機能だけ使用する場合は、OpenORBとToolsの2つのパッケージがあればよいです。OpenORBのパッケージに含まれるコマンドは、Toolsパッケージを必要とします。
あとは、開発で使用するサービスがあればそれを追加インストールします。たとえばネーミングサービスを使用するならば、NamingServiceのパッケージを追加インストールする、という具合です。

ダウンロードしたファイルの展開

OpenORB1.4.0からディレクトリ構成が新しくなっています。環境変数TCOO_HOMEで指定したディレクトリを基点に以下の構造でファイルを配置します。OpenORBをインストールする根っことなるディレクトリを作成し、このディレクトリへのパスを環境変数TCOO_HOMEに設定します。

TCOO
The Community OpenORBの省略形
<TCOO_HOME>
     +--- tools
     +--- OpenORB
     +--- NamingService
     :         :

OpenORBコアパッケージ

OpenORB-1.4.0.tgzをダウンロードし、解凍します。例えばC:\java\OpenORB-1.4.0の下に解凍した場合は、C:\java\OpenORB-1.4.0\OpenORBディレクトリが出来ます。(パスはWindows風で指定した例を以下に示していますが、UNIXでも同様です)

OpenORB1.4.0コアパッケージディレクトリ構成
ディレクトリ 内容
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のインストールド・エクステンション、エンドースド・エクステンションを駆使した設定が必要)になりました。

環境設定例(Windows版)

環境変数設定を行うバッチファイルの例です。

setenv.bat
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

環境変数TCOO_HOME

各種パスを指定する際の起点となるディレクトリを指定します。OpenORBが提供するコマンド(シェルスクリプトまたはバッチファイル)では、この環境変数が設定されていることが前提となります。

コンパイル時に必要なクラスパス設定

コンパイル時には、以下のクラスライブラリファイルが必要になります。

実行時に必要なクラスパス設定

実行時には、以下のクラスライブラリファイルが必要になります。

エンドースド・エクステンションの指定

以下のパスをエンドースド・エクステンションとして指定します。

インストールド・エクステンションの指定

以下のパスをインストールド・エクステンションとして指定します。

クラスパスの指定

以下のパスをクラスパスとして指定します。

Java内蔵CORBAをOpenORBへ切り替え

OpenORBを使用するときのCORBAプロパティ設定を下記に記します。

OpenORBの場合のプロパティ設定
プロパティ名 設定
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は下記の内容です。

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実装系を切り替える場合には向きません。

設定

IDLコンパイラ

idl2javaコマンドを実行します。

Naming Service

OpenORBでは、2つのNaming Serviceが提供されています。1つは、transient name serviceでもう1つは、Extended Interoperable Naming Serviceです。

transient name 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!
注) corbaloc行のxxx.xxx.xxx.xxxは、実行したマシンのIPアドレスとなる。

参照の取得

orb.resolve_initial_references("NameService")を利用する場合

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に基づくネーミングサービスの参照を取得することができます。

orb.string_to_object("objectURL")を利用する場合

-ORBInitRefオプションを使用する必要はありません。

Extended Interoperable Naming Service

永続化可能なネーミングサービスです。このNamingServiceを動かすには、Persistent ServiceおよびTransaction Serviceが必要です。

Antでコンパイル・実行

OpenORB1.4.0用に移行中

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>

IDLコンパイル

  <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>

Interoperable Naming Serviceの実行

  <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>

[ Java & CORBAページへ戻る ]


This page is written by Toru TAKAHASHI.(torutk@02.246.ne.jp)