VisiBroker Version 5

Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド

解説・手引・文法・操作書

3020-3-M45


目  次

前書き
はじめに

第1編 基本概念

1. CORBAモデルの解説
1.1 CORBAとは
1.2 Borland Enterprise Server VisiBrokerとは
1.3 Borland Enterprise Server VisiBrokerの機能
1.3.1 Borland Enterprise Server VisiBrokerのスマートエージェントアーキテクチャ
1.3.2 ロケーションサービスを使用した高度なオブジェクト探索
1.3.3 インプリメンテーションとオブジェクト活性化のサポート
1.3.4 スレッドとコネクションの強力な管理
1.3.5 IDLコンパイラ
1.3.6 DIIとDSIを使用した動的起動
1.3.7 インタフェースリポジトリとインプリメンテーションリポジトリ
1.3.8 サーバ側のポータビリティ
1.3.9 インタセプタとオブジェクトラッパーを使用したVisiBroker ORBのカスタマイズ
1.3.10 イベントキュー
1.3.11 ネーミングサービスのバッキングストア(外部記憶装置)
1.3.12 Webネーミング(Java)
1.3.13 IDLを使用しないインタフェースの定義(Java)
1.3.14 ゲートキーパー
1.4 CORBAに対するBorland Enterprise Server VisiBrokerの準拠
1.5 Borland Enterprise Server VisiBrokerの開発環境
1.5.1 プログラミングツール
1.5.2 CORBAサービスツール
1.5.3 アドミニストレーションツール
1.6 Java開発環境
1.6.1 Java 2標準版
1.6.2 Javaランタイム環境
1.6.3 CORBAに対するBorland Enterprise Server VisiBrokerの準拠での必要事項
1.6.4 Java対応Webブラウザ
1.7 C++またはJavaのBorland Enterprise Server VisiBrokerでのインターオペラビリティ
1.8 ほかのORB製品とのインターオペラビリティ
1.9 IDLからC++へのマッピング(C++)
1.10 IDLからJavaへのマッピング(Java)

2. 環境設定
2.1 PATH環境変数の設定
2.1.1 WindowsのDOSコマンドによるPATH環境変数の設定
2.1.2 WindowsのシステムコントロールパネルによるPATH環境変数の設定
2.1.3 UNIXでのPATH環境変数の設定
2.2 CLASSPATH環境変数の設定(Java)
2.3 VBROKER_ADM環境変数の設定
2.3.1 WindowsでのVBROKER_ADM環境変数の設定
2.3.2 UNIXでのVBROKER_ADM環境変数の設定
2.4 OSAGENT_PORT環境変数の設定
2.4.1 WindowsでのOSAGENT_PORT環境変数の設定
2.4.2 UNIXでのOSAGENT_PORT環境変数の設定
2.5 ロギング出力

3. プロパティの設定
3.1 概要
3.2 Borland Enterprise Server VisiBrokerのプロパティの設定
3.2.1 シェル/コンソールの環境変数
3.2.2 Windowsレジストリ
3.2.3 コマンドライン引数
3.2.4 プロパティファイル(ORBpropStorageオプションを使用)
3.2.5 アプレットのパラメタ(ORB.initの第1パラメタ)(Javaの場合)
3.2.6 システムプロパティ(Javaの場合)
3.2.7 プロパティ(Javaの場合)
3.3 WindowsおよびUNIXプラットフォームでのプロパティの優先順位
3.4 アプレットのプロパティの優先順位
3.5 Borland Enterprise Server VisiBrokerプロパティ

4. Borland Enterprise Server VisiBrokerによるサンプルアプリケーションの開発
4.1 開発手順
4.1.1 サンプルアプリケーションのパッケージの位置
4.1.2 開発手順の概要
4.2 手順1:オブジェクトインタフェースの定義
4.2.1 IDLでのAccountインタフェースの記述
4.3 手順2:クライアントスタブとサーバサーバントの生成
4.3.1 IDLコンパイラが作成するファイル
4.4 手順3:クライアントのインプリメント
4.4.1 Client.C
4.4.2 Client.java
4.4.3 AccountManagerオブジェクトへのバインド
4.4.4 Accountオブジェクトの取得
4.4.5 残高の取得
4.4.6 AccountManagerHelper.java(Java)
4.4.7 そのほかのメソッド
4.5 手順4:サーバのインプリメント
4.5.1 サーバプログラム
4.5.2 Accountクラス階層について(C++)
4.6 手順5:サンプルプログラムのビルド
4.6.1 サンプルのコンパイル
4.7 手順6:サーバの起動とサンプルの実行
4.7.1 スマートエージェントの起動
4.7.2 サーバの起動
4.7.3 クライアントの実行
4.8 Borland Enterprise Server VisiBrokerを使用したアプリケーションの配置
4.8.1 Borland Enterprise Server VisiBrokerアプリケーション

5. 例外の処理
5.1 CORBAモデルでの例外
5.2 システム例外
5.2.1 完了状態の取得
5.2.2 マイナーコードの取得と設定(C++)
5.2.3 システム例外のタイプの判定(C++)
5.2.4 システム例外のキャッチ
5.2.5 システム例外への例外のダウンキャスト
5.3 ユーザ例外
5.3.1 ユーザ例外の定義

第2編 サーバの概念

6. サーバの基本事項
6.1 概要
6.2 VisiBroker ORBの初期化
6.3 POAの作成
6.3.1 rootPOAのリファレンスの取得
6.3.2 子POAの作成
6.3.3 サーバントメソッドのインプリメント
6.3.4 POAの活性化
6.4 オブジェクトの活性化
6.5 クライアントリクエストを待つ
6.6 コードサンプルのまとめ

7. POAの使用
7.1 ポータブルオブジェクトアダプタとは
7.1.1 POA用語
7.1.2 POAの作成および使用手順
7.2 POAポリシー
7.3 POAの作成
7.3.1 POAネーミング規則
7.3.2 rootPOAの取得
7.3.3 POAプロパティの設定
7.3.4 POAの作成と活性化
7.4 オブジェクトの活性化
7.4.1 オブジェクトの明示的な活性化
7.4.2 オブジェクトのオンデマンドによる活性化
7.4.3 オブジェクトの暗黙的な活性化
7.4.4 デフォルトサーバントによる活性化
7.4.5 オブジェクトの非活性化
7.5 サーバントとサーバントマネージャの使用
7.5.1 ServantActivator
7.5.2 ServantLocator
7.6 POAマネージャによるPOA管理
7.6.1 カレントの状態の取得
7.6.2 待機状態
7.6.3 アクティブな状態
7.6.4 破棄状態
7.6.5 非アクティブな状態
7.7 監視プロパティとディスパッチプロパティの設定
7.7.1 サーバエンジンプロパティの設定
7.7.2 サーバコネクションマネージャプロパティの設定
7.7.3 これらのプロパティはいつ使用するか
7.8 アダプタアクティベータ
7.9 リクエストの処理

8. スレッドとコネクションの管理
8.1 Borland Enterprise Server VisiBrokerでのスレッドの使用
8.2 Borland Enterprise Server VisiBrokerが提供するスレッドポリシー
8.3 スレッドプーリングポリシー
8.4 スレッドパーセッションポリシー
8.5 Borland Enterprise Server VisiBrokerが提供するコネクション管理
8.6 ディスパッチポリシーとプロパティの設定
8.6.1 スレッドプーリング
8.6.2 スレッドパーセッション
8.6.3 コーディングの考慮事項

9. tie機能の使用
9.1 tie機能の働き
9.2 サンプルプログラム
9.2.1 tie機能を使用したサンプルプログラムの格納場所
9.2.2 tieテンプレートの考察(C++)
9.2.3 _tie_Accountクラスを使用するためのサーバの変更(C++)
9.2.4 Serverクラスの変更(Java)
9.2.5 AccountManagerの変更(Java)
9.2.6 Accountクラスの変更(Java)
9.2.7 tieのサンプルプログラムの構築

第3編 クライアントの概念

10. クライアントの基本事項
10.1 VisiBroker ORBの初期化
10.2 オブジェクトへのバインド
10.2.1 バインドプロセス中に行われる動作
10.3 オブジェクトのオペレーションの呼び出し
10.4 オブジェクトリファレンスの操作
10.4.1 nilリファレンスのチェック(C++)
10.4.2 nilリファレンスの取得(C++)
10.4.3 オブジェクトリファレンスの複製(C++)
10.4.4 オブジェクトリファレンスの解放(C++)
10.4.5 リファレンスカウントの取得(C++)
10.4.6 リファレンスの文字列への変換
10.4.7 オブジェクト名とインタフェース名の取得
10.4.8 オブジェクトリファレンスのタイプの判定
10.4.9 バインドされたオブジェクトの位置と状態の判定
10.4.10 non_existentオブジェクトのチェック(C++)
10.4.11 オブジェクトリファレンスのナロウイング
10.4.12 オブジェクトリファレンスのワイドニング
10.5 Quality of Serviceの使用
10.5.1 QoSの概要
10.5.2 QoSインタフェース
10.5.3 QoS例外

第4編 ツールとサービス

11. IDLの使用
11.1 IDLとは
11.2 IDLコンパイラのコード生成方法
11.2.1 IDLの指定例
11.3 生成されたコードの考察
11.3.1 _<interface_name>Stub.java
11.3.2 <interface_name>.java
11.3.3 <interface_name>Helper.java
11.3.4 <interface_name>Holder.java
11.3.5 <interface_name>Operations.java
11.3.6 <interface_name>POA.java
11.3.7 <interface_name>POATie.java
11.3.8 クライアント用に生成されたコードの考察(C++)
11.3.9 IDLコンパイラが生成するメソッド(スタブ)
11.3.10 ポインタタイプ<interface_name>_ptr定義
11.3.11 自動メモリ管理<interface_name>_varクラス
11.4 サーバ用に生成されたコードの考察(C++)
11.4.1 IDLコンパイラが生成するメソッド(スケルトン)
11.4.2 IDLコンパイラが生成するクラステンプレート
11.5 IDLのインタフェース属性の定義
11.6 リターン値を持たないonewayメソッドの指定
11.7 別のインタフェースを継承するインタフェースのIDLでの指定

12. スマートエージェントの使用
12.1 スマートエージェントとは
12.1.1 スマートエージェントの探索
12.1.2 エージェント間の協力によるオブジェクトの探索
12.1.3 OADとの協力によるオブジェクトへの接続
12.1.4 スマートエージェント(osagent)の起動
12.1.5 エージェントの可用性の確保
12.2 VisiBroker ORBドメイン内の作業
12.3 異なるローカルネットワーク上のスマートエージェントの接続
12.3.1 スマートエージェントの互いの検知方法
12.4 マルチホームホストを使用した作業
12.4.1 スマートエージェント用インタフェースの指定
12.5 ポイントツーポイント通信の使用
12.5.1 実行時パラメタとしてのホストの指定
12.5.2 環境変数によるIPアドレスの指定
12.5.3 agentaddrファイルによるホストの指定
12.6 オブジェクト可用性の確保
12.6.1 状態を維持しないオブジェクトのメソッドの呼び出し
12.6.2 状態を維持するオブジェクトのフォルトトレランスの実現
12.6.3 OADに登録されたオブジェクトの複製
12.7 ホスト間のオブジェクトのマイグレート
12.7.1 状態を維持するオブジェクトのマイグレート
12.7.2 実体化されたオブジェクトのマイグレート
12.7.3 OADに登録されたオブジェクトのマイグレート
12.8 すべてのオブジェクトとサービスの報告
12.9 オブジェクトへのバインド

13. ロケーションサービスの使用
13.1 ロケーションサービスとは
13.2 ロケーションサービスコンポーネント
13.2.1 ロケーションサービスエージェントとは
13.2.2 トリガーとは何か
13.3 Agentの問い合わせ
13.3.1 あるインタフェースのすべてのインスタンスの検索
13.3.2 スマートエージェントが認識するものをすべて検索
13.4 トリガーハンドラの記述と登録
13.4.1 トリガーハンドラのインプリメントと登録

14. ネーミングサービスの使用
14.1 概要
14.2 ネームスペースの解説
14.2.1 ネーミングコンテキスト
14.2.2 ネーミングコンテキストファクトリ
14.2.3 NameとNameComponent
14.2.4 ネーム解決
14.3 ネーミングサービスの実行
14.3.1 ネーミングサービスのインストール
14.3.2 ネーミングサービスの設定
14.3.3 ネーミングサービスの起動
14.4 コマンドラインからのネーミングサービスの呼び出し
14.4.1 nsutilの構成
14.4.2 nsutilの実行
14.4.3 nsutilのクローズ
14.5 ネーミングサービスへの接続
14.5.1 resolve_initial_referencesの呼び出し
14.5.2 -DSVCnamerootの使用
14.5.3 -ORBInitRef(C++)および-DORBInitRef(Java)の使用
14.5.4 -ORBDefaultInitRef(C++)および-DORBDefaultInitRef(Java)
14.6 NamingContext
14.7 NamingContextExt
14.8 デフォルトネーミングコンテキスト
14.8.1 デフォルトコンテキストの取得(C++)
14.8.2 デフォルトネーミングコンテキストの取得(Java)
14.9 ネーミングサービスプロパティ
14.10 プラガブルバッキングストア
14.10.1 バッキングストアのタイプ
14.10.2 構成と使用
14.11 クラスタ
14.11.1 クラスタ化方法
14.11.2 クラスタインタフェースとClusterManagerインタフェース
14.11.3 クラスタの生成
14.11.4 負荷分散
14.12 フェールオーバー
14.12.1 フォルトトレランス用のネーミングサービスの設定
14.13 プログラムのコンパイルとリンク(C++)
14.14 Javaのインポート文
14.15 サンプルプログラム
14.15.1 名前のバインド

15. オブジェクト活性化デーモンの使用
15.1 オブジェクトとサーバの自動活性化
15.1.1 インプリメンテーションリポジトリデータの探索
15.1.2 サーバの起動
15.2 OADの起動
15.3 オブジェクト活性化デーモンユーティリティの使用
15.3.1 oadutil listによるオブジェクトのリスト出力
15.3.2 oadutilの使用によるオブジェクトの登録
15.3.3 オブジェクトの複数のインスタンスの区別
15.3.4 CreationImplDefクラスの使用による活性化プロパティの設定
15.3.5 VisiBroker ORBインプリメンテーションの動的変更
15.3.6 OAD::reg_implementationを使用したOADの登録
15.3.7 オブジェクトの生成と登録の例
15.3.8 OADが渡す引数
15.4 オブジェクトの登録解除
15.4.1 oadutilツールの使用によるオブジェクトの登録解除
15.4.2 OADオペレーションを使用した登録解除
15.4.3 インプリメンテーションリポジトリの内容表示
15.5 OADとのIDLインタフェース

16. インタフェースリポジトリの使用
16.1 インタフェースリポジトリとは
16.1.1 IRの内容
16.1.2 使用できるIRの数
16.2 irepを使用したIRの生成と表示
16.2.1 irepを使用したIRの生成
16.2.2 IRの内容表示
16.3 idl2irを使用したIRの更新
16.4 IRの構造の理解
16.4.1 IR内のオブジェクトの識別
16.4.2 IRに格納できるオブジェクトの型
16.4.3 継承されるインタフェース
16.5 IRへのアクセス
16.6 サンプルプログラム

第5編 高度概念

17. 動的起動インタフェースの使用
17.1 動的起動インタフェースとは
17.1.1 DIIの主要な概念
17.1.2 オブジェクトのオペレーションを動的に起動する手順
17.1.3 DIIを使用したサンプルプログラムの格納場所
17.1.4 idl2javaコンパイラの使用(Java)
17.2 汎用的なオブジェクトリファレンスを取得
17.3 Requestを生成し初期化
17.3.1 Requestクラス(C++)
17.3.2 Requestインタフェース(Java)
17.3.3 DIIリクエストを生成し初期化する方法
17.3.4 _create_requestメソッドを使用
17.3.5 _requestメソッドを使用
17.3.6 Requestオブジェクトの生成例
17.3.7 リクエストのコンテキストを設定(C++)
17.3.8 リクエストの引数を設定
17.3.9 Anyクラスを使用して型を保護した状態で引き渡す
17.3.10 TypeCodeクラスを使用して引数または属性の型を表す
17.4 DIIリクエストを送信し,結果を受信
17.4.1 リクエストを起動
17.4.2 send_deferredメソッドを使用して遅延DIIリクエストを送信
17.4.3 send_onewayメソッドを使用して非同期DIIリクエストを送信
17.4.4 複数のリクエストを送信
17.4.5 複数のリクエストを受信
17.5 DIIと一緒にIRを使用

18. 動的スケルトンインタフェースの使用
18.1 動的スケルトンインタフェースとは
18.1.1 idl2javaコンパイラの使用(Java)
18.2 オブジェクトインプリメンテーションの動的生成手順
18.2.1 DSIを使用したサンプルプログラムの格納場所
18.3 DynamicImplementationクラスの継承
18.3.1 動的リクエスト用オブジェクトの設計例
18.3.2 リポジトリIDの指定
18.4 ServerRequestクラスの考察
18.5 Accountオブジェクトのインプリメント
18.6 AccountManagerオブジェクトのインプリメント
18.7 サーバのインプリメンテーション

19. ポータブルインタセプタの使用
19.1 概要
19.2 ポータブルインタセプタおよび情報インタフェース
19.2.1 インタセプタ
19.2.2 リクエストインタセプタ
19.2.3 IORインタセプタ
19.2.4 Portable Interceptor Current
19.2.5 Codec
19.2.6 CodecFactory
19.2.7 ポータブルインタセプタの作成
19.2.8 ポータブルインタセプタの登録
19.2.9 ORBInitializerの登録
19.2.10 ポータブルインタセプタのBorland Enterprise Server VisiBroker拡張機能
19.3 サンプル
19.3.1 サンプルコード
19.3.2 サンプル:client_server

20. VisiBroker 4.xインタセプタの使用
20.1 概要
20.2 VisiBroker 4.xインタセプタインタフェースおよびマネージャ
20.2.1 クライアントインタセプタ
20.2.2 サーバインタセプタ
20.2.3 ServiceResolverインタセプタ
20.2.4 デフォルトのインタセプタクラス(Java)
20.2.5 Borland Enterprise Server VisiBroker ORBへのインタセプタの登録
20.2.6 インタセプタオブジェクトの生成
20.2.7 インタセプタのロード
20.3 インタセプタのサンプル
20.3.1 コードサンプル
20.3.2 コード一覧
20.4 VisiBroker 4.xインタセプタ間での情報の渡し方
20.5 ポータブルインタセプタおよびVisiBroker 4.xインタセプタを同時に使用
20.5.1 インタセプトポイントの呼び出し順
20.5.2 クライアント側インタセプタ
20.5.3 サーバ側インタセプタ
20.5.4 POA生成中のORBイベント順
20.5.5 オブジェクトリファレンス生成中のORBイベント順

21. オブジェクトラッパーの使用
21.1 概要
21.1.1 タイプドおよびアンタイプドオブジェクトラッパー
21.1.2 idl2cppの前提条件(C++)
21.1.3 idl2javaの前提条件(Java)
21.1.4 サンプルアプリケーション
21.2 アンタイプドオブジェクトラッパー
21.2.1 複数のアンタイプドオブジェクトラッパーの使用
21.2.2 pre_method起動の順序
21.2.3 post_method起動の順序
21.3 アンタイプドオブジェクトラッパーの使用
21.3.1 アンタイプドオブジェクトラッパーファクトリのインプリメント
21.3.2 アンタイプドオブジェクトラッパーのインプリメント
21.3.3 アンタイプドオブジェクトラッパーファクトリの生成と登録
21.3.4 アンタイプドオブジェクトラッパーの削除
21.4 タイプドオブジェクトラッパー
21.4.1 複数のタイプドオブジェクトラッパーの使用
21.4.2 起動の順序
21.4.3 タイプドオブジェクトラッパーおよび同一プロセスにあるクライアントとサーバ
21.5 タイプドオブジェクトラッパーの使用
21.5.1 タイプドオブジェクトラッパーのインプリメント
21.5.2 クライアント用タイプドオブジェクトラッパーの登録
21.5.3 サーバ用タイプドオブジェクトラッパーの登録
21.5.4 タイプドオブジェクトラッパーの削除
21.6 タイプドおよびアンタイプドオブジェクトラッパーの混在使用
21.6.1 タイプドオブジェクトラッパーのコマンドライン引数
21.6.2 タイプドオブジェクトラッパーのイニシャライザ
21.6.3 アンタイプドオブジェクトラッパー用コマンドライン引数
21.6.4 アンタイプドオブジェクトラッパーのイニシャライザ
21.6.5 サンプルアプリケーションの実行

22. イベントキュー
22.1 イベントタイプ
22.1.1 コネクションイベント
22.2 イベントリスナー
22.2.1 IDL定義
22.2.2 EventQueueManagerの返し方
22.2.3 コードサンプル

23. RMI-IIOPの使用
23.1 概要
23.1.1 RMI-IIOPによるJavaアプレットの設定
23.1.2 java2iiopおよびjava2idlツール
23.2 java2iiopの使用
23.2.1 サポートしているインタフェース
23.2.2 java2iiopの実行
23.2.3 開発プロセスの完了
23.3 RMI-IIOPバンクのサンプル
23.4 サポートされるデータ型
23.4.1 基本データ型のマッピング
23.4.2 複合データ型のマッピング

24. 動的管理型の使用
24.1 概要
24.2 DynAnyの型
24.2.1 使用上の制限事項
24.2.2 DynAnyの生成
24.2.3 DynAny中の値の初期化とアクセス
24.3 構造化データ型
24.3.1 DynEnum
24.3.2 DynStruct
24.3.3 DynUnion
24.3.4 DynSequenceとDynArray
24.4 IDLサンプル
24.5 クライアントアプリケーションのサンプル
24.6 サーバアプリケーションのサンプル

25. valuetypeの使用
25.1 valuetypeとは
25.1.1 concrete valuetype
25.1.2 abstract valuetype
25.2 valuetypeのインプリメント
25.2.1 valuetypeの定義
25.2.2 IDLファイルのコンパイル
25.2.3 valuetypeベースクラスの継承
25.2.4 Factoryクラスのインプリメント
25.2.5 VisiBroker ORBへのFactoryの登録
25.3 ファクトリのインプリメント
25.3.1 ファクトリとvaluetype
25.3.2 valuetypeの登録
25.4 ボックス型 valuetype
25.5 abstractインタフェース
25.6 custom valuetype
25.7 truncatable valuetype

26. URLネーミングの使用
26.1 URLネーミングサービス
26.2 オブジェクトの登録
26.3 URLによるオブジェクトの検索

27. 双方向通信
27.1 双方向IIOPの使用
27.2 双方向VisiBroker ORBのプロパティ
27.3 サンプルについて
27.4 既存のアプリケーションで双方向IIOPを有効にする
27.5 双方向IIOPを明示的に有効にする
27.6 セキュリティの考慮事項

第6編 下位互換性

28. VisiBrokerコードの移行
28.1 BOAのPOAへの手動による移行
28.1.1 サンプルについて
28.1.2 BOA型のPOAポリシーへのマッピング
28.2 新しいパッケージ名への移行(Java)
28.3 新しいAPI呼び出しへの移行(Java)
28.4 インタセプタの移行
28.5 イベントループの統合の移行(C++)
28.5.1 シングルスレッドVisiBroker ORBの移行
28.5.2 XDispatcherクラスまたはWDispatcherクラスによる移行

29. オブジェクトアクティベータの使用
29.1 オブジェクト活性化の遅延
29.2 アクティベータインタフェース
29.3 サービス活性化のアプローチ方法
29.3.1 サービスアクティベータを使用したオブジェクト活性化の遅延
29.3.2 サービスの遅延オブジェクト活性化のサンプル
29.3.3 サービス活性化オブジェクトインプリメンテーションの非活性化(C++)

索引