14.10.8.5 説明

この操作は、指定された初期状態で特定の型のポリシー・オブジェクトの新しいインスタンスを作成するために呼び出します。ポリシーの要求された型と内容を解釈できなかったために、create_policyが新しいポリシー・オブジェクトのインスタンス化に失敗した場合、適切な理由によりポリシー・エラー例外が発生します。(次の例外を参照。)

リモート・クライアントではIIOPを使用しているため、コールバックを使用してBidirectionalPolicy引数をリモート・クライアントに指定します。この引数は、コールバックを使用するネイティブ・クライアント、またはOracle Tuxedoサーバーには使用しません。これは、Oracle Tuxedoドメイン内部のマシンが個別に通信するためです。

GIOP 1.2より前では、双方向ポリシーはTCP/IPを使用するIIOPでは利用できませんでした。GIOP 1.0および1.1の通信は一方向のため、リクエストがクライアントからサーバーに送信され、レスポンスがサーバーからクライアントに送信されるだけでした。サーバーがリクエストをクライアント・マシンに戻す、つまりコールバックする場合、サーバー・マシンでは別の一方向の接続を確立する必要がありました(ここでいう「接続」とは、オペレーティング・システムのリソースのことであり、物理的な個別のワイヤや通信パスのことではありません。接続ではリソースを使用するので、接続数を最小限にすることが求められます。)

このリリースのOracle Tuxedo C++ソフトウェアでは、GIOP 1.2をサポートしています。これにより、リクエストの送信と受信の両方でTCP/IP接続を再利用できるようになりました。接続を再利用することにより、リモート・クライアントがOracle Tuxedoドメインにコールバック・リファレンスを送信するときにリソースを節約できます。共同クライアント/サーバーでは、接続でOracle Tuxedoドメインにリクエストを送信します。その際、コールバックのリクエストに接続を再利用することができます。接続を再利用しない場合、コールバックリクエストでは別の接続を確立しなければなりません。

接続の再利用を許可するかどうかは、コールバック・オブジェクト参照を作成するORB/POAの選択です。このオブジェクト参照のサーバー(特にコールバックの場合は、リファレンスの作成元)では、セキュリティを考慮して再利用を無効にすることができます。つまり、このマシンのコールバック・サーバーではセキュリティを要求としますが、リモート・サーバーではセキュリティを必要としないため、このマシンからリモート・サーバーにクライアントのリクエストを送信接続する際はセキュリティは不要になります。このように、接続ベースで部分的にセキュリティが確立されるので、別の接続を使用する場合に限って受信時のセキュリティを確立することができます。リモート・サーバーでセキュリティが必要な場合、またはそのセキュリティに相互認証がある場合、通常はローカル・サーバーで接続の再利用を有効にしても安全と認識されます。

接続の再利用の選択はサーバー側で行われるため、プロセスがサーバー(この場合、共同クライアント/サーバー)として機能してオブジェクト参照を作成する場合は、接続を再利用することをORBに通知する必要があります。これは、オブジェクト参照を作成するPOAのポリシーを設定することによって行います。デフォルトのポリシーでは、再利用は無効になっています。したがって、再利用するためのポリシー・オブジェクトを指定しない限り、POAでは再利用ができません。

このデフォルトで、CORBAバージョン2.3より前に記述されたコードとの後方互換性が維持されます。このようなコードでは、再利用が可能であることは認識されないので、再利用に関するセキュリティの実装を考慮する必要はありません。したがって、ユーザーがセキュリティを考慮して明示的に反対の決定を下すまで、変更されていないコードでは引き続き再利用は無効のままになります。

再利用を有効にするには、create_policy操作を使用して再利用を可能にするポリシー・オブジェクトを作成し、そのポリシー・オブジェクトをPOA作成用のポリシー・リストの一部として使用します。