12. CORBA通信基盤(Object Broker)
WebOTX Object Broker
JavaTM/C++に関する注意事項/制限事項について説明します。
- WebOTX Object Broker JavaTM
- WebOTX Object Broker C++
12.1. 注意事項(Java)
12.1.1. リモート呼び出しのタイムアウト時間の既定値変更
WebOTX Ver6.1 (Object Broker Java Ver8.1) において Java リモート呼び出し
(EJB、JNDI など) のタイムアウト時間の既定値を次のように変更しました。
- 変更前:無制限 (タイムアウトしない)
- 変更後:30 秒
サーバでの処理に 30 秒以上かかる場合、タイムアウト時間が設定されていなければ、30 秒を経過した時点で例外 (CORBA
の場合 NO_RESPONSE 例外)
が発生します。必要に応じて、タイムアウト時間の設定を変更してください。
12.1.2. AddWstringWidthOctet プロパティの既定値変更
WebOTX Ver6.1 (Object Broker Java Ver8.1) において、Object Broker
Java の AddWstringWidthOctet プロパティの既定値を true から false
に変更しました。そのため、システム内で WebOTX Ver5.3 (もしくはそれ以前のバージョン) と
バージョン6以降が混在する場合に通信に失敗する場合があります。その場合には、AddWstringWidthOctet
プロパティの値が同じになるように設定してください。
12.1.3. SoKeepAlive プロパティの既定値変更
WebOTX Ver6.21 (Object Broker Java Ver8.21) において、SoKeepAlive
プロパティの既定値を false から true に変更しました。デフォルトで SO_KEEPALIVE
ソケットオプションが有効になります。
12.1.4. その他のプロパティの既定値変更
WebOTX Ver6.1 (Object Broker Java Ver8.1)
において、以下のプロパティの既定値を変更しました。
- ConnectionRoundRobinTimeout
- LogLevel
- SSLProvider
- UseConnectionRoundRobin
変更内容については、
[ リファレンス > 設定 > CORBA通信基盤(Object Broker) > Object Broker JavaにおけるORBのプロパティ定義 ]
を参照してください。
12.1.5. ライブラリの互換バージョンについて
WebOTX Ver6.2 (Object Broker Java Ver8.2)
において、通信プロトコルの改良を行いました。そのため、システム内で WebOTX Ver6.1 と Ver6.2以降
が混在する場合に通信に失敗する場合があります。その場合には Ver6.2 以降の VersionCompatible プロパティに
810 を指定してください。
12.1.6. Valueのマーシャル・アンマーシャル時における内部クラスのキャッシュについて
WebOTX V8.3 (Object Broker Java V10.3) において、RMI-IIOPの通信で、Value(Javaクラスのインスタンス)
のマーシャル・アンマーシャル時に使用する内部クラスをキャッシュするようにデフォルトの動作を変更しました。
ただし、コードベースによるダウンロード機能を利用する場合や、アプリケーション間で配備対象のクラス(スタブや
送受信対象のクラス)に重複がある場合、java.lang.ClassCastException等の障害が発生する可能性があります。
障害が発生する場合は、キャッシュを行わないように次の設定を見直してください(デフォルト値はtrueです)。
- jp.co.nec.orb.PoolMarshalClasses
- jp.co.nec.orb.PoolMarshalFields
また、コードベースによるダウンロード機能を利用する場合やアプリケーション間で配備対象のクラスに重複
がある場合、同様にjava.lang.ClassCastException等の障害が発生する可能性があります。障害が発生する
場合には、キャッシュを行わないように次の設定を見直してください(デフォルト値はfalseです)。
- jp.co.nec.orb.PoolClasses
12.1.7. サーバプロセスを終了させるメソッド呼び出しでのエラーについて
Windows版ではサーバプロセスを終了させるメソッド呼び出しでエラーが
返ることがあります。このときサーバプロセスは正しく終了しています。
なお、サーバメソッド内でjava.lang.System.exitメソッド等により終了すると、
どのOSでも必ずエラーが返ります。exitで直接終了するとORBに制御が移らない
ことから、応答メッセージを送れないためです。
12.1.8. 名前サービスのkindの名前制限について
名前サービスにおいて、kindに"_RR"を含む名前を登録してはいけません。 ラウンドロビン機能が使用します。
12.1.9. インプリメンテーション名の制限について
インプリメンテーション名に"CacheNameService"を使用してはいけません。 WebOTX Object
Brokerが使用します。
12.1.10. JNIライブラリのロードについて
Object Broker JavaTM は JNI を使用しています。Object Broker
JavaTM は次の JNI ライブラリをロードします。
- Windows(x86)
- ${AS_INSTALL}\ObjectBroker\bin\ospijni.dll
- Windows(x64)
- ${AS_INSTALL}\ObjectBroker\bin\ospijni64.dll
- その他の UNIX
- ${AS_INSTALL}/ObjectBroker/lib/libospijni.so
Object Broker JavaTM の実装クラス群を -Xbootclasspath
オプションに指定して java コマンドを実行した場合、以下のいずれかの設定が必要です。
- sun.boot.library.path システムプロパティに、JNI
ライブラリが格納されているディレクトリを追加する
(sun.boot.library.path システムプロパティには、その JavaVM が必要とする JNI
ライブラリのディレクトリをすべて指定する必要があります)
- JavaVM が必要とする JNI ライブラリを以下のディレクトリにコピーする (UNIX の場合はシンボリックリンクでも可)
- Windows
- <JDK>\jre\bin (JRE の場合は
<JRE>\<VERSION>\bin)
- UNIX
- <JDK>/jre/lib/<HW> (JRE の場合は
<JRE>/lib/<HW>)
※<JDK>は使用するJDKのインストールディレクトリ、<JRE>は使用するJREのインストールディレクトリ、<VERSION>は使用するJREのバージョンを表します。<HW>はハードウェアによってディレクトリ名が異なります。
12.1.11. CSIv2機能利用時のSSL使用について
CSIv2 機能を使用する場合は原則として SSL を同時に使用することが必要です。SSL を使用せずに CSIv2
機能を使用するには、UseCSI プロパティに nossl
と指定してください。この場合、セキュリティ関連のデータが暗号化されずに通信されます。
12.1.12. OadJ起動時のアライブチェックでのエラー検出について
システムの負荷が高い場合などに、OadJの起動に30秒以上かかった場合、アライブチェックモニタで以下のようなエラーが検出されることがあります。
ERROR com.nec.webotx.enterprise.system.notification -
OTX01200012:is not alive
:(ドメイン名):category=monitor,type=alive-check-monitor,J2EEServer=server,name=WebOTXObjectBrokerOadJService-state
統合運用管理ツール画面の「(ドメイン名)」-「アプリケーションサーバ」-「CORBAサービス」-「oadj」の「状態」タブで「監視間隔」属性を
60000(ミリ秒)程度に長くすることで、回避可能です。
12.1.13. 複数バージョンインストールについて
UNIX版はWebOTX V9.3、Windows版はWebOTX V10.1より、複数バージョンインストールに対応しました。
詳細については[ 入門ガイド > 複数バージョンインストール > Object Broker ] を参照してください。
12.1.14. V10.1での変更点について
WebOTX V10.1はCORBAアプリケーションをサポートしません。それに伴い、運用に関して次のような変更点があります。
- 統合運用管理ツールや運用管理コンソールで表示されるMOのノード名を変更しました。
- サポートするプロセスを変更しました。また、ドメイン外でのサービスを提供しません。
- ORBコンフィグ MOの属性”InterfaceRepositoryHost”を削除しました。
- oadj MOの運用管理コマンド表示レベル(visibilityオプション)を3に変更しました。
- 運用管理コマンド(otxadmin)のサブコマンド名を変更しました。
- ORBコンフィグMOのメッセージ送受信に関する属性の既定値を変更しました。
- UNIX版のインストールディレクトリを変更しました。
- Windows版のイベントソース名を変更しました。
詳細については[ 新機能と変更点 > リリースノート > 3.2.2. V10.1での変更点 > CORBA通信基盤 ] を参照してください。
12.2. 制限事項(Java)
12.2.1. RMI-IIOP のダイナミック・プロキシによる通信モード使用時の制限事項
RMI-IIOPのダイナミック・プロキシによる通信モードを使用する場合は、javax.rmi.PortableRemoteObject.narrow()の戻り値で取得したオブジェクトを、さらにnarrowの引数に渡してオブジェクトの取得を行うことはできません。
12.2.2. GIOP1.2のフラグメントメッセージ受信について
SINGLE_THREAD_MODEL(POAポリシー)の実装オブジェクトを、
PerClientThread(サーバ処理スレッドポリシー)で動作させる場合、
GIOP1.2のフラグメントメッセージを正常に受信できない場合があります。
12.3. 注意事項(C++)
12.3.1. ソケットの共有について
- ソケットの共有に関して:
クライアントスレッドの数、サーバプロセス内のオブジェクトの数に関連なく、クライアントプロセスとサーバプロセスの間に1つのTCP/IPコネクションを作り共有することができます。この場合、並行して複数の呼び出しを行っているときに、そのうちのどれか1つの呼び出しがエラー(通信エラー、タイムアウト)を起こすと、他のすべての呼び出しも同様のエラーとなります。独立性を高めるためのソケットを一切共有しない設定も可能です。ただし、共有しない場合は毎回TCP/IPのコネクションを開設して利用後に閉じますので性能は若干低下します。
- ソケット共有時のエラーに関して:
クライアントは終了せずに同一サーバに対して複数回の呼び出しを行なうとします。サーバプロセスがクライアントからの1つの呼び出し完了後、次の呼び出しまでの間にいったん終了すると、サーバの終了直後にクライアントが行ったオブジェクト呼び出しが通信エラーとなります。このとき、再度オブジェクト呼び出しを行うと正常に通信が行われます。なおコネクションの共有をしない場合はこのエラーは起こりません。
12.3.2. ListenBackLogの設定について
ListenBackLogの数値が不足していると、サーバプロセス(たとえば、名前サービス)は立ち上がっているにも関わらず、アクセスできないという現象が発生することがあります。目安としては、OSのソケットの上限の許す範囲で、最大同時アクセスユーザ数×2を設定してください。
12.3.3. LocalStubの処理について
LocalStub経由では、POAManagerがholding状態であってもactive状態と同様、ただちにリクエストが処理されます。リクエストを貯えることはありません。
12.3.4. 使用できない引数について
アプリケーションは、"-ORBInitRef"および"-ORBDefaultInitRef"をアプリケーション独自の意味を持つ引数として使用してはいけません。例えば、下記に示すアプリケーション"my_app"は正しく動作しません。ORBのライブラリは"-ORBInitRef"キーワードがあると、その直後にURLがあることを期待します。
# my_app -my_option -ORBInitRef
12.3.5. 名前サービスへの登録名について
名前サービスにおいて、kindに"_RR"を含む名前を登録してはいけません。ラウンドロビン機能が使用します。
12.3.6. 使用できないインプリメンテーション名について
インプリメンテーション名に"CacheNameService"を使用してはいけません。Object
Brokerが使用します。
12.3.7. omg.org/を含むリポジトリIDに対応していない相手との通信について
omg.org/を含むリポジトリIDに対応していない他社製品等と通信する場合、次の設定を行ってください。
名前 |
値 |
omg.org/が取り除かれる箇所 |
SysExcWithOMGORG |
off |
例外 |
NameServiceIdWithOMGORG |
off |
名前サービスオブジェクト |
12.3.8. Linux版のFD_SETSIZEについて
LINUX版でのFD_SETSIZEはシステムのデフォルトの値を使用します。RedHat7.1では1024となっています。
12.3.9. MesBufSizeの設定について
MesBufSizeを増加させた場合にパフォーマンスが極端に落ちる場合には、設定SockBufSizeの値もあわせて増加させる必要があります。
12.3.10. コネクション無効時のリトライについて
コネクション無効時のリトライを有効にした場合、コネクション無効を検出するタイミングによっては、同一の要求メッセージがサーバに送信されてしまうことがあります。
12.3.11. 名前サーバのポート番号重複について
名前サーバが使用するポート番号の既定値は、CORBA標準仕様に合わせ2809となっています。OSによっては、このポート番号が他のプロセスの一時ポートとして使用される場合があり、
この場合、ポートが開けず、名前サーバの起動に失敗することがあります。特定のポート番号が、他のプロセスの一時ポートとして使用されることを回避するための方法は、[ リファレンス > ポート番号 > 自動的で割り当てられる一時ポート番号に関する注意事項 ] を参照してください。
12.3.12. コネクション制御ポリシーについて
多重化オブジェクトに含まれるIORに、コネクション制御ポリシーとして"ByReference"が指定されている場合は、コネクションラウンドロビン機能は利用できません。
12.3.13. マルチバイト文字のコード変換について
charの配列にマルチバイトの文字列を入れて通信を行なっても文字コード変換処理は行なわれません。文字コード変換の対象となる型はstring,
wstring, wcharです。
12.3.14. LogLimitの既定値変更について
WebOTX V8.4 (Object Broker C++ V10.4) より、LogLimitの既定値を0(上限無し)から10240(キロバイト)に変更しています。
12.3.15. oadプロセスの起動抑止について
WebOTX V9.2 (Object Broker C++ V11.2) より、WebOTXドメインのCORBAサービスにおいて、oadプロセスの起動をデフォルトで抑止しました。
これに伴い、ORBコンフィグに、oadを使用するか否かの設定「UseOad(oadを使用)」(既定値:false)を追加しました。
次のような場合には、oadを起動する設定に変更してください。
- V9.1までと同様の運用形態にしたい場合(たとえばプロセス監視対象を変えたくない等)
- V9.1までの環境からCORBAサービスを利用する場合
- oadjを起動する場合
12.3.16. 複数バージョンインストールについて
UNIX版はWebOTX V9.3、Windows版はWebOTX V10.1より、複数バージョンインストールに対応しました。
詳細については[ 入門ガイド > 複数バージョンインストール > Object Broker ] を参照してください。
12.3.17. V10.1での変更点について
WebOTX V10.1はCORBAアプリケーションをサポートしません。それに伴い、運用に関して次のような変更点があります。
- 統合運用管理ツールや運用管理コンソールで表示されるMOのノード名を変更しました。
- サポートするプロセスを変更しました。また、ドメイン外でのサービスを提供しません。
- ORBコンフィグ MOの属性”InterfaceRepositoryHost”を削除しました。
- oadj MOの運用管理コマンド表示レベル(visibilityオプション)を3に変更しました。
- 運用管理コマンド(otxadmin)のサブコマンド名を変更しました。
- ORBコンフィグMOのメッセージ送受信に関する属性の既定値を変更しました。
- UNIX版のインストールディレクトリを変更しました。
- Windows版のイベントソース名を変更しました。
詳細については[ 新機能と変更点 > リリースノート > 3.2.2. V10.1での変更点 > CORBA通信基盤 ] を参照してください。
12.4. 制限事項(C++)
12.4.1. CloseConnectionメッセージの扱いについて
CORBAのCloseConnectionメッセージを正しく処理することができません。CloseConnectionメッセージを受信後も、サーバ側から切断されるTCP/IPのコネクションを使用し続けるため、リクエスト送信時に例外が発生します。
この問題を回避するためには、クライアント無通信監視タイマを指定することで、サーバ側からCloseConnectionメッセージが送信される前にクライアント側でTCP/IPのコネクションを切断するようにしてください。
12.4.2. Unicodeのサロゲートペア文字の変換について
OSF_SJIS1(シフトJIS)とUTF8のコード変換機能では、Unicodeのサロゲートペアに該当する文字の変換を行うことはできません。wchar/wstringを使用してUnicodeで送受信してください。