VisiBroker Version 5

Borland(R) Enterprise Server VisiBroker(R)　プログラマーズリファレンス

文法書

3020-3-Y31-30

目　　次

前書き

変更内容

はじめに

第1編　Java言語編

1.　プログラマツール（Java）

1.1　オプション

1.1.1　一般オプション

1.2　idl2ir

1.2.1　構文

1.2.2　説明

1.3　ir2idl

1.3.1　構文

1.3.2　説明

1.4　idl2java

1.4.1　構文

1.4.2　説明

1.5　java2idl

1.5.1　構文

1.5.2　説明

1.6　java2iiop

1.6.1　構文

1.6.2　説明

1.7　vbj

1.7.1　構文

1.7.2　説明

1.7.3　オプション

1.8　vbjc

1.8.1　構文

1.8.2　オプション

1.9　クラスパスの指定

1.10　Java VMの指定

1.11　その他のツール

2.　IDLからJavaへのマッピング

2.1　名前

2.2　予約名

2.3　予約語

2.4　モジュール

2.5　基本型

2.5.1　IDL型拡張

2.5.2　Holderクラス

2.5.3　boolean

2.5.4　char

2.5.5　octet

2.5.6　string

2.5.7　wstring

2.5.8　整数型

2.5.9　浮動小数点型

2.6　Helperクラス

2.7　定数

2.7.1　インタフェース内の定数

2.7.2　インタフェース内にない定数

2.8　構造型

2.8.1　enum

2.8.2　struct

2.8.3　union

2.8.4　sequence

2.8.5　array

2.9　interface

2.9.1　abstractインタフェース

2.9.2　ローカルインタフェース

2.9.3　パラメタの受け渡し

2.9.4　継承によるサーバインプリメンテーション

2.9.5　デリゲーションを使用したサーバインプリメンテーション

2.9.6　インタフェーススコープ

2.10　例外のマッピング

2.10.1　ユーザ定義例外

2.10.2　システム例外

2.11　Any型のマッピング

2.12　ネストされた型のマッピング

2.13　typedefのマッピング

2.13.1　シンプルIDL型

2.13.2　複合IDL型

3.　生成されるインタフェースとクラス（Java）

3.1　概要

3.1.1　SignatureクラスとOperationsクラス

3.1.2　補助クラス

3.1.3　ポータビリティスタブインタフェースとポータビリティスケルトンインタフェース

3.2　<interface_name>Operations

3.3　<type_name>Helper

3.3.1　Helperのメソッド

3.3.2　インタフェース用に生成されるメソッド

3.3.3　オブジェクトラッパー用に生成されるメソッド

3.4　<type_name>Holder

3.4.1　メンバデータ

3.4.2　Holderのメソッド

3.5　_<interface_name>Stub

3.6　<interface_name>POA

3.7　<interface_name>POATie

3.7.1　tieのメソッド

4.　コアインタフェースとクラス（Java）

4.1　CompletionStatus

4.1.1　IDLの定義

4.1.2　CompletionStatusのメンバ

4.1.3　CompletionStatusのメソッド

4.2　Context

4.2.1　IDLの定義

4.2.2　Contextのメソッド

4.3　InvalidName

4.4　Object

4.4.1　org.omg.CORBA.Objectの定義

4.4.2　org.omg.CORBA.Objectのメソッド

4.4.3　VisiBrokerでのObjectの継承

4.4.4　VisiBrokerでのObjectのメソッドの継承

4.5　ORB

4.5.1　JDKでのORBの定義

4.5.2　JDKでのORBメソッド

4.5.3　OMGによるORBの定義

4.5.4　VisiBrokerでのORBの継承

4.5.5　ORBに対するVisiBrokerの拡張機能

4.5.6　ORBの初期化と終了

4.6　Policy

4.6.1　IDLの定義

4.6.2　Policyのメソッド

4.7　PortableServer.AdapterActivator

4.7.1　import文

4.7.2　PortableServer.AdapterActivatorのメソッド

4.8　PortableServer.Current

4.8.1　import文

4.8.2　PortableServer.Currentのメソッド

4.9　PortableServer.POA

4.9.1　import文

4.9.2　PortableServer.POAのメソッド

4.10　PortableServer.POAManager

4.10.1　import文

4.10.2　PortableServer.POAManagerのメソッド

4.11　PortableServer.POAManagerPackage.State

4.11.1　import文

4.11.2　PortableServer.POAManagerPackage.Stateのメンバ

4.12　PortableServer.ServantActivator

4.12.1　import文

4.12.2　PortableServer.ServantActivatorのメソッド

4.13　PortableServer.ServantLocator

4.13.1　import文

4.13.2　PortableServer.ServantLocatorのメソッド

4.14　PortableServer.ServantManager

4.14.1　import文

4.15　PortableServer.ForwardRequest

4.15.1　import文

4.15.2　ForwardRequestの変数

4.15.3　ForwardRequestのメソッド

5.　動的インタフェースとクラス（Java）

5.1　Any

5.1.1　Anyのメソッド

5.1.2　Anyの抽出メソッド

5.1.3　Anyの挿入メソッド

5.2　ARG_IN

5.2.1　ARG_INの変数

5.3　ARG_INOUT

5.3.1　ARG_INOUTの変数

5.4　ARG_OUT

5.4.1　ARG_OUTの変数

5.5　ContextList

5.5.1　IDLの定義

5.5.2　ContextListのメソッド

5.6　DynAny

5.6.1　注意事項

5.6.2　DynAnyのメソッド

5.6.3　DynAnyの抽出メソッド

5.6.4　DynAnyの挿入メソッド

5.7　DynArray

5.7.1　注意事項

5.7.2　DynArrayのメソッド

5.8　DynAnyFactory

5.8.1　注意事項

5.8.2　DynAnyFactoryのメソッド

5.9　DynEnum

5.9.1　注意事項

5.9.2　DynEnumのメソッド

5.10　DynSequence

5.10.1　注意事項

5.10.2　DynSequenceのメソッド

5.11　DynStruct

5.11.1　注意事項

5.11.2　DynStructのメソッド

5.12　DynUnion

5.12.1　注意事項

5.12.2　DynUnionのメソッド

5.13　DynamicImplementation

5.13.1　DynamicImplementationのメソッド

5.14　Environment

5.14.1　Environmentのメソッド

5.15　ExceptionList

5.15.1　IDLの定義

5.15.2　ExceptionListのメソッド

5.16　InputStream

5.16.1　InputStreamのメソッド

5.17　NamedValue

5.17.1　IDLの定義

5.17.2　NamedValueのメソッド

5.18　NameValuePair

5.18.1　NameValuePairの変数

5.18.2　NameValuePairのコンストラクタ

5.19　NVList

5.19.1　IDLの定義

5.19.2　NVListのメソッド

5.20　OutputStream

5.20.1　OutputStreamのメソッド

5.21　Request

5.21.1　IDLの定義

5.21.2　Requestのメソッド

5.22　ServerRequest

5.22.1　IDLの定義

5.22.2　ServerRequestのメソッド

5.23　TCKind

5.23.1　IDLの定義

5.23.2　TCKindのメソッド

5.24　TypeCode

5.24.1　IDLの定義

5.24.2　TypeCodeのメソッド

5.25　UnknownUserException

6.　インタフェースリポジトリインタフェースとクラス（Java）

6.1　AbstractInterfaceDef

6.1.1　AbstractInterfaceDefのメソッド

6.2　AliasDef

6.2.1　AliasDefのメソッド

6.3　ArrayDef

6.3.1　ArrayDefのメソッド

6.4　AttributeDef

6.4.1　AttributeDefのメソッド

6.5　AttributeDescription

6.5.1　AttributeDescriptionの変数

6.5.2　AttributeDescriptionのメソッド

6.6　AttributeMode

6.6.1　AttributeModeの要素

6.7　ConstantDef

6.7.1　ConstantDefのメソッド

6.8　ConstantDescription

6.8.1　ConstantDescriptionの変数

6.8.2　ConstantDescriptionのメソッド

6.9　Contained

6.9.1　IDLの定義

6.9.2　Containedのメソッド

6.10　ContainedPackage.Description

6.10.1　ContainedPackage.Descriptionの変数

6.10.2　ContainedPackage.Descriptionのメソッド

6.11　Container

6.11.1　IDLの定義

6.11.2　Containerのメソッド

6.12　ContainerPackage.Description

6.12.1　ContainerPackage.Descriptionの変数

6.12.2　ContainerPackage.Descriptionのメソッド

6.13　DefinitionKind

6.13.1　DefinitionKindのメソッド

6.13.2　DefinitionKindの列挙値

6.14　EnumDef

6.14.1　EnumDefのメソッド

6.15　ExceptionDef

6.15.1　ExceptionDefのメソッド

6.16　ExceptionDescription

6.16.1　ExceptionDescriptionの変数

6.16.2　ExceptionDescriptionのメソッド

6.17　FixedDef

6.17.1　FixedDefのメソッド

6.18　FullValueDescription

6.18.1　FullValueDescriptionの変数

6.18.2　FullValueDescriptionのメソッド

6.19　IDLType

6.19.1　IDLの定義

6.19.2　IDLTypeのメソッド

6.20　InterfaceDef

6.20.1　IDLの定義

6.20.2　InterfaceDefのメソッド

6.21　InterfaceDefPackage.FullInterfaceDescription

6.21.1　InterfaceDefPackage.FullInterfaceDescriptionの変数

6.21.2　InterfaceDefPackage.FullInterfaceDescriptionのメソッド

6.22　InterfaceDescription

6.22.1　InterfaceDescriptionの変数

6.22.2　InterfaceDescriptionのメソッド

6.23　IRObject

6.23.1　IDLの定義

6.23.2　IRObjectのメソッド

6.24　LocalInterfaceDef

6.25　ModuleDef

6.26　ModuleDescription

6.26.1　ModuleDescriptionの変数

6.26.2　ModuleDescriptionのメソッド

6.27　NativeDef

6.28　OperationDef

6.28.1　OperationDefのメソッド

6.29　OperationDescription

6.29.1　OperationDescriptionの変数

6.29.2　OperationDescriptionのメソッド

6.30　OperationMode

6.31　ParameterDescription

6.31.1　ParameterDescriptionの変数

6.31.2　ParameterDescriptionのメソッド

6.32　ParameterMode

6.33　PrimitiveDef

6.33.1　PrimitiveDefのメソッド

6.34　PrimitiveKind

6.34.1　PrimitiveKindのメソッド

6.34.2　PrimitiveKindの定数

6.35　Repository

6.35.1　Repositoryのメソッド

6.36　SequenceDef

6.36.1　SequenceDefのメソッド

6.37　StringDef

6.37.1　StringDefのメソッド

6.38　StructDef

6.38.1　StructDefのメソッド

6.39　StructMember

6.39.1　StructMemberの変数

6.39.2　StructMemberのメソッド

6.40　TypedefDef

6.41　TypeDescription

6.41.1　TypeDescriptionの変数

6.41.2　TypeDescriptionのメソッド

6.42　UnionDef

6.42.1　UnionDefのメソッド

6.43　UnionMember

6.43.1　UnionMemberの変数

6.43.2　UnionMemberのメソッド

6.44　ValueBoxDef

6.44.1　ValueBoxDefのメソッド

6.45　ValueDef

6.45.1　ValueDefのメソッド

6.46　ValueDescription

6.46.1　ValueDescriptionの変数

6.46.2　ValueDescriptionのメソッド

6.47　ValueMemberDef

6.47.1　ValueMemberDefのメソッド

6.48　WstringDef

7.　活性化インタフェースとクラス（Java）

7.1　ActivationImplDef

7.1.1　ActivationImplDefのメソッド

7.2　Activator

7.2.1　Activatorのメソッド

7.3　CreationImplDef

7.3.1　IDLの定義

7.3.2　活性化ポリシー

7.3.3　例

7.3.4　環境変数

7.3.5　明示的に渡される環境変数と暗黙的に渡される環境変数

7.3.6　CreationImplDefのメソッド

7.4　ImplementationDef

7.5　OAD

7.5.1　ImplementationStatus

7.5.2　OADのメソッド

8.　ネーミングサービスインタフェースとクラス（Java）

8.1　NamingContext

8.1.1　IDLの定義

8.1.2　NamingContextのメソッド

8.2　NamingContextExt

8.2.1　IDLの定義

8.2.2　NamingContextExtのメソッド

8.3　BindingとBindingList

8.3.1　IDLの定義

8.4　BindingIterator

8.4.1　IDLの定義

8.4.2　BindingIteratorのメソッド

8.5　NamingContextFactory

8.5.1　IDLの定義

8.5.2　NamingContextFactoryのメソッド

8.6　ExtendedNamingContextFactory

8.6.1　IDLの定義

8.6.2　ExtendedNamingContextFactoryのメソッド

9.　例外クラス（Java）

9.1　概要

9.2　システム例外

9.2.1　SystemExceptionの属性

9.3　ユーザ例外

9.3.1　import文

9.3.2　UserExceptionのコンストラクタ

10.　ポータブルインタセプタインタフェースとクラス（Java）

10.1　概要

10.2　ClientRequestInfo

10.2.1　import文

10.2.2　ClientRequestInfoのメソッド

10.3　ClientRequestInterceptor

10.3.1　import文

10.3.2　ClientRequestInterceptorのメソッド

10.4　Codec

10.4.1　import文

10.4.2　Codecのメンバ

10.4.3　Codecのメソッド

10.5　CodecFactory

10.5.1　import文

10.5.2　CodecFactoryのメンバ

10.5.3　CodecFactoryのメソッド

10.6　Current

10.6.1　import文

10.6.2　Currentのメソッド

10.7　Encoding

10.7.1　import文

10.7.2　Encodingのメンバ

10.8　ForwardRequest

10.8.1　import文

10.8.2　ForwardRequestの変数

10.8.3　ForwardRequestのメソッド

10.9　Interceptor

10.9.1　import文

10.9.2　Interceptorのメソッド

10.10　IORInfo

10.10.1　import文

10.10.2　IORInfoのメソッド

10.11　IORInfoExt

10.11.1　import文

10.11.2　IORInfoExtのメソッド

10.12　IORInterceptor

10.12.1　import文

10.12.2　IORInterceptorのメソッド

10.13　ORBInitializer

10.13.1　import文

10.13.2　ORBInitializerのメソッド

10.14　ORBInitInfo

10.14.1　import文

10.14.2　ORBInitInfoのメンバ

10.14.3　ORBInitInfoのメソッド

10.15　Parameter

10.15.1　import文

10.15.2　Parameterのメンバ

10.16　PolicyFactory

10.16.1　import文

10.16.2　PolicyFactoryのメソッド

10.17　RequestInfo

10.17.1　import文

10.17.2　RequestInfoのメソッド

10.18　ServerRequestInfo

10.18.1　import文

10.18.2　ServerRequestInfoのメソッド

10.19　ServerRequestInterceptor

10.19.1　import文

10.19.2　ServerRequestInterceptorのメソッド

11.　VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（Java）

11.1　概要

11.2　インタセプタマネージャ

11.3　IORテンプレート

11.4　InterceptorManager

11.5　InterceptorManagerControl

11.5.1　import文

11.5.2　InterceptorManagerControlのメソッド

11.6　BindInterceptor

11.6.1　import文

11.6.2　BindInterceptorのメソッド

11.7　BindInterceptorManager

11.7.1　import文

11.7.2　BindInterceptorManagerのメソッド

11.8　ClientRequestInterceptor

11.8.1　import文

11.8.2　ClientRequestInterceptorのメソッド

11.9　ClientRequestInterceptorManager

11.9.1　import文

11.9.2　ClientRequestInterceptorManagerのメソッド

11.10　POALifeCycleInterceptor

11.10.1　import文

11.10.2　POALifeCycleInterceptorのメソッド

11.11　POALifeCycleInterceptorManager

11.11.1　import文

11.11.2　POALifeCycleInterceptorManagerのメソッド

11.12　ActiveObjectLifeCycleInterceptor

11.12.1　import文

11.12.2　ActiveObjectLifeCycleInterceptorのメソッド

11.13　ActiveObjectLifeCycleInterceptorManager

11.13.1　import文

11.13.2　ActiveObjectLifeCycleInterceptorManagerのメソッド

11.14　ForwardRequestException

11.14.1　ForwardRequestExceptionの変数

11.15　ServerRequestInterceptor

11.15.1　import文

11.15.2　ServerRequestInterceptorのメソッド

11.16　ServerRequestInterceptorManager

11.16.1　import文

11.16.2　ServerRequestInterceptorManagerのメソッド

11.17　IORCreationInterceptor

11.17.1　import文

11.17.2　IORCreationInterceptorのメソッド

11.18　IORCreationInterceptorManager

11.18.1　import文

11.18.2　IORCreationInterceptorManagerのメソッド

11.19　Location

11.19.1　import文

11.19.2　IDLの定義

11.19.3　Locationのメンバ

11.20　Closure

11.21　ExtendedClosure

11.22　ChainUntypedObjectWrapperFactory

11.22.1　import文

11.22.2　ChainUntypedObjectWrapperFactoryのメソッド

11.23　UntypedObjectWrapper

11.23.1　UntypedObjectWrapperのメソッド

11.24　UntypedObjectWrapperFactory

11.24.1　import文

11.24.2　UntypedObjectWrapperFactoryのメソッド

12.　QoSインタフェースとクラス（Java）

12.1　概要

12.2　PolicyManager

12.2.1　IDLの定義

12.2.2　PolicyManagerのメソッド

12.3　PolicyCurrent

12.3.1　IDLの定義

12.4　Object

12.4.1　org.omg.CORBA.Objectのメソッド

12.4.2　com.inprise.vbroker.CORBA.Objectのメソッド

12.5　RebindPolicy

12.5.1　IDLの定義

12.5.2　ポリシーの値

12.6　RebindForwardPolicy

12.6.1　IDLの定義

12.7　RelativeConnectionTimeoutPolicy

12.7.1　IDLの定義

12.8　Messaging.RelativeRequestTimeoutPolicy

12.8.1　IDLの定義

12.9　Messaging.RelativeRoundtripTimeoutPolicy

12.9.1　IDLの定義

12.10　DeferBindPolicy

12.10.1　IDLの定義

12.11　ExclusiveConnectionPolicy

12.11.1　IDLの定義

12.12　SyncScopePolicy

12.12.1　IDLの定義

12.12.2　SyncScopeポリシーの値

12.13　QoS例外

13.　IOPおよびIIOPのインタフェースとクラス（Java）

13.1　IIOP.ProfileBody

13.1.1　IDLの定義

13.1.2　IIOP.ProfileBodyの変数

13.1.3　IIOP.ProfileBodyのコンストラクタ

13.2　IOP.IORValue

13.2.1　IDLの定義

13.2.2　IOP.IORValueの変数

13.2.3　IOP.IORValueのメソッド

13.3　IOP.ServiceContext

13.3.1　IDLの定義

13.3.2　IOP.ServiceContextの変数

13.3.3　IOP.ServiceContextのコンストラクタ

13.4　IOP.TaggedProfile

13.4.1　IDLの定義

13.4.2　IOP.TaggedProfileの変数

13.4.3　IOP.TaggedProfileのコンストラクタ

14.　RMIインタフェースとクラス（Java）

14.1　PortableRemoteObject

14.1.1　PortableRemoteObjectのコンストラクタ

14.1.2　PortableRemoteObjectのメソッド

15.　URLネーミングインタフェースとクラス（Java）

15.1　Resolver

15.1.1　Resolverのメソッド

16.　ロケーションサービスインタフェースとクラス（Java）

16.1　Agent

16.1.1　IDLの定義

16.1.2　Agentのメソッド

16.2　Desc

16.2.1　IDLの定義

16.2.2　Descの変数

16.2.3　Descのコンストラクタ

16.2.4　Descのメソッド

16.3　Fail

16.3.1　Fail変数

16.4　TriggerDesc

16.4.1　IDLの定義

16.4.2　TriggerDescの変数

16.4.3　TriggerDescのコンストラクタ

16.4.4　TriggerDescのメソッド

16.5　TriggerHandler

16.5.1　IDLの定義

16.5.2　TriggerHandlerのメソッド

17.　コマンドラインオプション（Java）

17.1　ORBオプションの設定方法

17.1.1　vbjコマンドでコマンドラインパラメタを使用する

17.1.2　vbjコマンドを使用してJavaアプリケーションを起動する

17.1.3　アプレットにオプションを設定する

17.1.4　メソッドでプログラム的にオプションを設定する

17.2　ORB.init( )メソッド

17.2.1　ORBオプション

17.3　ロケーションサービスオプション

18.　Borland Enterprise Server VisiBrokerプロパティ（Java）

18.1　プロパティの設定方法

18.1.1　vbjコマンドでコマンドラインパラメタを使用する

18.1.2　vbjコマンドを使用してJavaアプリケーションを起動する

18.1.3　アプレットにプロパティを設定する

18.1.4　メソッドでプログラム的にプロパティを設定する

18.2　RMI-IIOPプロパティ

18.3　osagent（スマートエージェント）プロパティ

18.4　ORBプロパティ

18.5　POAプロパティ

18.6　ロケーションサービスプロパティ

18.7　ネーミングサービスプロパティ

18.8　OADプロパティ

18.9　インタフェースリポジトリプロパティ

18.10　URLネーミングプロパティ

18.11　クライアント側コネクションプロパティ

18.12　クライアント側プロセス内コネクションプロパティ

18.13　サーバ側エンジンプロパティ

18.14　サーバ側スレッドセッションIIOP_TSプロパティ，およびIIOP_TSコネクションプロパティ

18.15　サーバ側スレッドプールIIOP_TPプロパティ，およびIIOP_TPコネクションプロパティ

18.16　双方向通信をサポートするプロパティ

第2編　C++言語編

19.　プログラマツール（C++）

19.1　引数とオプション

19.1.1　一般オプション

19.1.2　プログラマツールの動作環境

19.2　idl2cpp

19.2.1　構文

19.2.2　説明

19.3　idl2ir

19.3.1　構文

19.3.2　説明

19.4　ir2idl

19.4.1　構文

19.4.2　説明

20.　IDLからC++言語へのマッピング

20.1　基本データ型

20.2　文字列

20.2.1　String_varクラス

20.2.2　WString_varクラス

20.3　定数

20.3.1　定数を含む特別なケース

20.4　列挙体

20.5　型定義

20.6　module句

20.7　複合データ型

20.8　構造体

20.8.1　固定長構造体

20.8.2　可変長構造体

20.8.3　union

20.8.4　Sequence

20.8.5　配列

20.8.6　Principal

20.9　Valuetype

20.9.1　Valuebox

20.10　抽象インタフェース

21.　生成されるインタフェースとクラス（C++）

21.1　概要

21.2　<interface_name>

21.3　<interface_name>ObjectWrapper

21.4　POA_<class_name>

21.5　_tie_<class_name>

21.6　<class_name>_var

22.　コアインタフェースとクラス（C++）

22.1　PortableServer::AdapterActivator

22.1.1　インクルードファイル

22.1.2　PortableServer::AdapterActivatorのメソッド

22.2　PortableServer

22.2.1　インクルードファイル

22.2.2　PortableServerのメソッド

22.3　CompletionStatus

22.3.1　CompletionStatusのメンバ

22.4　CORBA

22.4.1　インクルードファイル

22.4.2　CORBAのメソッド

22.5　Context

22.5.1　インクルードファイル

22.5.2　Contextのメソッド

22.6　PortableServer::Current

22.6.1　インクルードファイル

22.6.2　PortableServer::Currentのメソッド

22.7　Exception

22.7.1　インクルードファイル

22.8　Object

22.8.1　インクルードファイル

22.8.2　CORBA::Objectのメソッド

22.8.3　CORBA::Objectに対するVisiBrokerの拡張機能

22.9　ORB

22.9.1　インクルードファイル

22.9.2　CORBA::ORBのメソッド

22.9.3　CORBA::ORBに対するVisiBrokerの拡張機能

22.10　Policy

22.10.1　インクルードファイル

22.10.2　Policyのメソッド

22.11　PortableServer::POA

22.11.1　インクルードファイル

22.11.2　PortableServer::POAのメソッド

22.12　PortableServer::POAManager

22.12.1　インクルードファイル

22.12.2　PortableServer::POAManagerのメソッド

22.13　PortableServer::POAManager::State

22.13.1　インクルードファイル

22.13.2　PortableServer::POAManager::Stateのメソッド

22.14　PortableServer::RefCountServantBase

22.14.1　インクルードファイル

22.14.2　PortableServer::RefCountServantBaseのメソッド

22.15　PortableServer::ServantActivator

22.15.1　インクルードファイル

22.15.2　PortableServer::ServantActivatorのメソッド

22.16　PortableServer::ServantBase

22.16.1　インクルードファイル

22.16.2　PortableServer::ServantBaseのメソッド

22.17　PortableServer::ServantLocator

22.17.1　インクルードファイル

22.17.2　PortableServer::ServantLocatorのメソッド

22.18　PortableServer::ServantManager

22.18.1　インクルードファイル

22.19　PortableServer::ForwardRequest

22.19.1　インクルードファイル

22.19.2　PortableServer::ForwardRequestのメソッド

22.20　SystemException

22.20.1　インクルードファイル

22.20.2　SystemExceptionのメソッド

22.21　UserException

22.22　VISPropertyManager

22.22.1　インクルードファイル

22.22.2　VISPropertyManagerのメソッド

23.　動的インタフェースとクラス（C++）

23.1　Any

23.1.1　インクルードファイル

23.1.2　Anyのメソッド

23.1.3　初期化演算子

23.1.4　抽出演算子

23.2　ContextList

23.2.1　ContextListのメソッド

23.3　DynamicImplementation

23.3.1　DynamicImplementationのメソッド

23.4　DynAny

23.4.1　インクルードファイル

23.4.2　注意事項

23.4.3　DynAnyのメソッド

23.4.4　DynAnyの抽出メソッド

23.4.5　DynAnyの挿入メソッド

23.5　DynAnyFactory

23.5.1　DynAnyFactoryのメソッド

23.6　DynArray

23.6.1　注意事項

23.6.2　DynArrayのメソッド

23.7　DynEnum

23.7.1　注意事項

23.7.2　DynEnumのメソッド

23.8　DynSequence

23.8.1　注意事項

23.8.2　DynSequenceのメソッド

23.9　DynStruct

23.9.1　注意事項

23.9.2　DynStructのメソッド

23.10　DynUnion

23.10.1　注意事項

23.10.2　DynUnionのメソッド

23.11　Environment

23.11.1　インクルードファイル

23.11.2　Environmentのメソッド

23.12　ExceptionList

23.12.1　ExceptionListのメソッド

23.13　NamedValue

23.13.1　インクルードファイル

23.13.2　NamedValueのメソッド

23.14　NVList

23.14.1　インクルードファイル

23.14.2　NVListのメソッド

23.15　Request

23.15.1　インクルードファイル

23.15.2　Requestのメソッド

23.16　ServerRequest

23.16.1　インクルードファイル

23.16.2　ServerRequestのメソッド

23.17　TCKind

23.18　TypeCode

23.18.1　インクルードファイル

23.18.2　TypeCodeのコンストラクタ

23.18.3　TypeCodeのメソッド

24.　インタフェースリポジトリインタフェースとクラス（C++）

24.1　AliasDef

24.1.1　AliasDefのメソッド

24.2　ArrayDef

24.2.1　ArrayDefのメソッド

24.3　AttributeDef

24.3.1　AttributeDefのメソッド

24.4　AttributeDescription

24.4.1　AttributeDescriptionのメンバ

24.5　AttributeMode

24.5.1　AttributeModeの値

24.6　ConstantDef

24.6.1　ConstantDefのメソッド

24.7　ConstantDescription

24.7.1　ConstantDescriptionのメンバ

24.8　Contained

24.8.1　インクルードファイル

24.8.2　Containedのメソッド

24.9　Container

24.9.1　インクルードファイル

24.9.2　Containerのメソッド

24.10　DefinitionKind

24.10.1　DefinitionKindの列挙値

24.11　Description

24.11.1　Descriptionのメンバ

24.12　EnumDef

24.12.1　EnumDefのメソッド

24.13　ExceptionDef

24.13.1　ExceptionDefのメソッド

24.14　ExceptionDescription

24.14.1　ExceptionDescriptionのメンバ

24.15　FixedDef

24.15.1　FixedDefのメソッド

24.16　FullInterfaceDescription

24.16.1　FullInterfaceDescriptionのメンバ

24.17　FullValueDescription

24.17.1　FullValueDescriptionの変数

24.18　IDLType

24.18.1　インクルードファイル

24.18.2　IDLTypeのメソッド

24.19　InterfaceDef

24.19.1　インクルードファイル

24.19.2　InterfaceDefのメソッド

24.20　InterfaceDescription

24.20.1　InterfaceDescriptionのメンバ

24.21　IRObject

24.21.1　インクルードファイル

24.21.2　IRObjectのメソッド

24.22　ModuleDef

24.23　ModuleDescription

24.23.1　ModuleDescriptionのメンバ

24.24　NativeDef

24.25　OperationDef

24.25.1　インクルードファイル

24.25.2　OperationDefのメソッド

24.26　OperationDescription

24.26.1　OperationDescriptionのメンバ

24.27　OperationMode

24.27.1　OperationModeの値

24.28　ParameterDescription

24.28.1　ParameterDescriptionのメンバ

24.29　ParameterMode

24.29.1　ParameterModeの値

24.30　PrimitiveDef

24.30.1　PrimitiveDefのメソッド

24.31　PrimitiveKind

24.31.1　PrimitiveKindの定数

24.32　Repository

24.32.1　インクルードファイル

24.32.2　Repositoryのメソッド

24.33　SequenceDef

24.33.1　SequenceDefのメソッド

24.34　StringDef

24.34.1　StringDefのメソッド

24.35　StructDef

24.35.1　StructDefのメソッド

24.36　StructMember

24.36.1　StructMemberのメンバ

24.37　TypedefDef

24.38　TypeDescription

24.38.1　TypeDescriptionのメンバ

24.39　UnionDef

24.39.1　UnionDefのメソッド

24.40　UnionMember

24.40.1　UnionMemberのメンバ

24.41　ValueBoxDef

24.41.1　ValueBoxDefのメソッド

24.42　ValueDef

24.42.1　ValueDefのメソッド

24.43　ValueDescription

24.43.1　ValueDescriptionの変数

24.44　WstringDef

24.44.1　WstringDefのメソッド

25.　活性化インタフェースとクラス（C++）

25.1　CreationImplDef

25.1.1　インクルードファイル

25.1.2　C++のサンプル

25.1.3　環境変数

25.1.4　CreationImplDefのメンバ

25.2　ImplementationDef

25.2.1　インクルードファイル

25.3　ImplementationStatus

25.3.1　インクルードファイル

25.3.2　ImplementationStatusのメンバ

25.4　OAD

25.4.1　インクルードファイル

25.4.2　OADのメソッド

25.5　ObjectStatus

25.5.1　インクルードファイル

25.5.2　ObjectStatusのメンバ

25.6　ObjectStatusList

25.6.1　インクルードファイル

25.6.2　ObjectStatusListのメソッド

25.7　StringSequence

25.7.1　インクルードファイル

25.7.2　StringSequenceのメソッド

25.7.3　StringSequenceに関連するメソッド

26.　ネーミングサービスインタフェースとクラス（C++）

26.1　NamingContext

26.1.1　NamingContextのメソッド

26.2　NamingContextExt

26.2.1　NamingContextExtのメソッド

26.3　BindingとBindingList

26.4　BindingIterator

26.4.1　BindingIteratorのメソッド

26.5　NamingContextFactory

26.5.1　NamingContextFactoryのメソッド

26.6　ExtendedNamingContextFactory

26.6.1　ExtendedNamingContextFactoryのメソッド

27.　ポータブルインタセプタインタフェースとクラス（C++）

27.1　概要

27.2　ClientRequestInfo

27.2.1　インクルードファイル

27.2.2　ClientRequestInfoのメソッド

27.3　ClientRequestInterceptor

27.3.1　インクルードファイル

27.3.2　ClientRequestInterceptorのメソッド

27.4　Codec

27.4.1　インクルードファイル

27.4.2　Codecのメンバ

27.4.3　Codecのメソッド

27.5　CodecFactory

27.5.1　インクルードファイル

27.5.2　CodecFactoryのメンバ

27.5.3　CodecFactoryのメソッド

27.6　Current

27.6.1　インクルードファイル

27.6.2　Currentのメソッド

27.7　Encoding

27.7.1　インクルードファイル

27.7.2　Encodingのメンバ

27.8　ExceptionList

27.8.1　インクルードファイル

27.9　ForwardRequest

27.9.1　インクルードファイル

27.10　Interceptor

27.10.1　インクルードファイル

27.10.2　Interceptorのメソッド

27.11　IORInfo

27.11.1　インクルードファイル

27.11.2　IORInfoのメソッド

27.12　IORInfoExt

27.12.1　インクルードファイル

27.12.2　IORInfoExtのメソッド

27.13　IORInterceptor

27.13.1　インクルードファイル

27.13.2　IORInterceptorのメソッド

27.14　ORBInitializer

27.14.1　インクルードファイル

27.14.2　ORBInitializerのメソッド

27.15　ORBInitInfo

27.15.1　インクルードファイル

27.15.2　ORBInitInfoのメンバ

27.15.3　ORBInitInfoのメソッド

27.16　Parameter

27.16.1　インクルードファイル

27.16.2　Parameterのメンバ

27.17　ParameterList

27.17.1　インクルードファイル

27.18　PolicyFactory

27.18.1　インクルードファイル

27.18.2　PolicyFactoryのメソッド

27.19　RequestInfo

27.19.1　インクルードファイル

27.19.2　RequestInfoのメソッド

27.20　ServerRequestInfo

27.20.1　インクルードファイル

27.20.2　ServerRequestInfoのメソッド

27.21　ServerRequestInterceptor

27.21.1　インクルードファイル

27.21.2　ServerRequestInterceptorのメソッド

28.　VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（C++）

28.1　概要

28.2　インタセプタマネージャ

28.3　IORテンプレート

28.4　InterceptorManager

28.5　InterceptorManagerControl

28.5.1　インクルードファイル

28.5.2　InterceptorManagerControlのメソッド

28.6　BindInterceptor

28.6.1　インクルードファイル

28.6.2　BindInterceptorのメソッド

28.7　BindInterceptorManager

28.7.1　インクルードファイル

28.7.2　BindInterceptorManagerのメソッド

28.8　ClientRequestInterceptor

28.8.1　インクルードファイル

28.8.2　ClientRequestInterceptorのメソッド

28.9　ClientRequestInterceptorManager

28.9.1　インクルードファイル

28.9.2　ClientRequestInterceptorManagerのメソッド

28.10　POALifeCycleInterceptor

28.10.1　インクルードファイル

28.10.2　POALifeCycleInterceptorのメソッド

28.11　POALifeCycleInterceptorManager

28.11.1　インクルードファイル

28.11.2　POALifeCycleInterceptorManagerのメソッド

28.12　ActiveObjectLifeCycleInterceptor

28.12.1　インクルードファイル

28.12.2　ActiveObjectLifeCycleInterceptorのメソッド

28.13　ActiveObjectLifeCycleInterceptorManager

28.13.1　インクルードファイル

28.13.2　ActiveObjectLifeCycleInterceptorManagerのメソッド

28.14　ForwardRequestException

28.14.1　ForwardRequestExceptionの変数

28.15　ServerRequestInterceptor

28.15.1　インクルードファイル

28.15.2　ServerRequestInterceptorのメソッド

28.16　ServerRequestInterceptorManager

28.16.1　インクルードファイル

28.16.2　ServerRequestInterceptorManagerのメソッド

28.17　IORCreationInterceptor

28.17.1　インクルードファイル

28.17.2　IORCreationInterceptorのメソッド

28.18　IORCreationInterceptorManager

28.18.1　インクルードファイル

28.18.2　IORCreationInterceptorManagerのメソッド

28.19　ExtendedClosure

28.20　VISClosure

28.20.1　インクルードファイル

28.20.2　VISClosureのメンバ

28.21　VISClosureData

28.22　ChainUntypedObjectWrapperFactory

28.22.1　インクルードファイル

28.22.2　ChainUntypedObjectWrapperFactoryのメソッド

28.23　UntypedObjectWrapper

28.23.1　インクルードファイル

28.23.2　UntypedObjectWrapperのメソッド

28.24　UntypedObjectWrapperFactory

28.24.1　インクルードファイル

28.24.2　UntypedObjectWrapperFactoryのコンストラクタ

28.24.3　UntypedObjectWrapperFactoryのメソッド

28.25　EventQueueManager

28.25.1　インクルードファイル

28.25.2　EventQueueManagerのメソッド

28.26　ConnEventListeners

28.26.1　インクルードファイル

28.26.2　ConnEventListenersのメソッド

28.27　ConnInfo

28.27.1　インクルードファイル

28.27.2　ConnInfoのメンバ

29.　QoSインタフェースとクラス（C++）

29.1　概要

29.2　CORBA::PolicyManager

29.2.1　IDLの定義

29.2.2　CORBA::PolicyManagerのメソッド

29.3　CORBA::PolicyCurrent

29.3.1　IDLの定義

29.4　CORBA::Object

29.4.1　IDLの定義

29.4.2　CORBA::Objectのメソッド

29.5　Messaging::RebindPolicy

29.5.1　IDLの定義

29.5.2　ポリシーの値

29.6　QoSExt::DeferBindPolicy

29.6.1　IDLの定義

29.7　QoSExt::ExclusiveConnectionPolicy

29.7.1　IDLの定義

29.8　QoSExt::RelativeConnectionTimeoutPolicy

29.8.1　IDLの定義

29.9　Messaging::RelativeRequestTimeoutPolicy

29.9.1　IDLの定義

29.10　Messaging::RelativeRoundtripTimeoutPolicy

29.10.1　IDLの定義

29.11　Messaging::SyncScopePolicy

29.11.1　IDLの定義

29.11.2　SyncScopeポリシーの値

29.12　QoS例外

30.　IOPおよびIIOPのインタフェースとクラス（C++）

30.1　GIOP::MessageHeader

30.1.1　MessageHeaderのメンバ

30.2　GIOP::CancelRequestHeader

30.2.1　CancelRequestHeaderのメンバ

30.3　GIOP::LocateReplyHeader

30.3.1　LocateReplyHeaderのメンバ

30.4　GIOP::LocateRequestHeader

30.4.1　LocateRequestHeaderのメンバ

30.5　GIOP::ReplyHeader

30.5.1　インクルードファイル

30.5.2　ReplyHeaderのメンバ

30.6　GIOP::RequestHeader

30.6.1　インクルードファイル

30.6.2　RequestHeaderのメンバ

30.7　IIOP::ProfileBody

30.7.1　ProfileBodyのメンバ

30.8　IOP::IOR

30.8.1　インクルードファイル

30.8.2　IORのメンバ

30.9　IOP::TaggedProfile

30.9.1　TaggedProfileのメンバ

31.　マーシャルバッファインタフェースとクラス（C++）

31.1　CORBA::MarshalInBuffer

31.1.1　インクルードファイル

31.1.2　CORBA::MarshalInBufferのコンストラクタとデストラクタ

31.1.3　CORBA::MarshalInBufferのメソッド

31.1.4　CORBA::MarshalInBufferの演算子

31.2　CORBA::MarshalOutBuffer

31.2.1　インクルードファイル

31.2.2　CORBA::MarshalOutBufferのコンストラクタとデストラクタ

31.2.3　CORBA::MarshalOutBufferのメソッド

31.2.4　CORBA::MarshalOutBufferの演算子

32.　ロケーションサービスインタフェースとクラス（C++）

32.1　Agent

32.1.1　IDLの定義

32.1.2　インクルードファイル

32.1.3　Agentのメソッド

32.2　Desc

32.2.1　IDLの定義

32.2.2　Descのメンバ

32.3　Fail

32.3.1　Failのメンバ

32.4　TriggerDesc

32.4.1　IDLの定義

32.4.2　TriggerDescのメンバ

32.5　TriggerHandler

32.5.1　IDLの定義

32.5.2　インクルードファイル

32.5.3　TriggerHandlerのメソッド

32.6　<type>Seq

32.6.1　<type>Seqのメソッド

32.7　<type>SeqSeq

32.7.1　<type>SeqSeqのメソッド

33.　初期化インタフェースとクラス（C++）

33.1　VISInit

33.1.1　インクルードファイル

33.1.2　VISInitのメソッド

34.　コマンドラインオプション（C++）

34.1　ORB_init()メソッド

34.1.1　ORBオプション

34.2　ロケーションサービスオプション

35.　Borland Enterprise Server VisiBrokerプロパティ（C++）

35.1　プロパティの設定方法

35.2　osagent（スマートエージェント）プロパティ

35.3　ORBプロパティ

35.4　ロケーションサービスプロパティ

35.5　OADプロパティ

35.6　インタフェースリポジトリリゾルバのプロパティ

35.7　ネーミングサービスプロパティ

35.8　TypeCodeのプロパティ

35.9　クライアント側IIOPのコネクションプロパティ

35.10　サーバ側エンジンプロパティ

35.11　サーバ側スレッドセッションコネクションのプロパティ

35.12　サーバ側スレッドプールコネクションのプロパティ

35.13　双方向通信をサポートするプロパティ

付録

付録A　このマニュアルの参考情報

付録A.1　関連マニュアル

付録A.2　このマニュアルでの表記

付録A.3　英略語

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.

前書き

■ 対象製品

●適用OS：Windows Server 2008 x86，Windows Server 2008 x64，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows 7 x86，Windows 7 x64，Windows 8 x86，Windows 8 x64，Windows 8.1 x86，Windows 8.1 x64

P-2464-AF64　 Cosminexus TPBroker　 05-22

●適用OS：Windows Server 2008 x64，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows 7 x64，Windows 8 x64，Windows 8.1 x64

P-2964-AF64　 Cosminexus TPBroker　 05-22

●適用OS：AIX V6.1，AIX V7.1

P-1M64-CF61　 Cosminexus TPBroker　 05-23

●適用OS：Red Hat Enterprise Linux 5 Advanced Platform（AMD/Intel 64），Red Hat Enterprise Linux 5（AMD/Intel 64），Red Hat Enterprise Linux Server 6（64-bit x86_64）

P-9S64-AF61　 Cosminexus TPBroker　 05-23

これらのプログラムプロダクトのほかにも，このマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

■ 輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。
なお、不明な場合は、弊社担当営業にお問い合わせください。

■ 商標類

Borlandのブランド名および製品名はすべて，米国Borland Software Corporationの米国およびその他の国における商標または登録商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
HP-UXは，Hewlett-Packard Development Company, L.P.のオペレーティングシステムの名称です。
IBM，AIXは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
IIOPは，OMG仕様によるORB（Object Request Broker）間通信のネットワークプロトコルの名称です。
Itaniumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
OMG，CORBA，IIOP，UML，Unified Modeling Language，MDA，Model　Driven　Architectureは，Object Management Group, Inc.の米国及びその他の国における登録商標または商標です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標もしくは商標です。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Vistaは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
その他記載の会社名，製品名は，それぞれの会社の商標もしくは登録商標です。

■ 発行

2015年 4月 3020-3-Y31-30

■ 著作権

All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.

変更内容

変更内容(3020-3-Y31-30) 　Cosminexus TPBroker 05-23，Cosminexus TPBroker 05-22

追加・変更内容 | 変更個所
Windows Vista，XP，HP-UXを削除した。 | －

単なる誤字・脱字などはお断りなく訂正しました。

はじめに

このマニュアルは，Borland Enterprise Server VisiBrokerが提供しているクラスとインタフェースの情報，プログラマツール，およびコマンドラインオプションについて説明したものです。Borland Enterprise Server VisiBrokerは，分散オブジェクトベースのアプリケーションを，Common Object Request Broker Architecture（CORBA）仕様に従って開発し運用できるようにします。

対象読者

Borland Enterprise Server VisiBroker関連の製品をインストールして，システムを運用する方，管理ツールやアプリケーションを実行する方，およびCORBAの仕様に基づく分散アプリケーションを開発する方を対象としています。

文法の記号

このマニュアルで使用する文法記述記号を説明します。文法記述記号は文法の記述形式について説明する記号です。

文法記述記号
意味

ボールド体（boldface）
ボールド体は，記述どおりに構文をタイプすることを示します。また，コードサンプル部分を強調表示する場合にも使用されます。

イタリック体
（italics）
イタリック体は，構文解析図の変数のように，ユーザまたはアプリケーションが提供する情報を示します。

|
横に並べられた複数の項目に対し，項目間の区切りを示し，「または」の意味を示します。
（例）
A｜B｜Cは「A，B，またはC」を意味します。

［ ］
この記号で囲まれている項目は省略してもよいことを意味します。複数の項目が横に並べて記述されている場合には，すべてを省略するか，どれか一つを選択します。
（例）
［A｜B］では「何も指定しない」か，「AまたはBと指定する」ことを意味します。

｛ ｝
この記号で囲まれている項目は，一つの構文の要素として扱うことを意味します。

＜ ＞
この記号で囲まれている項目は，該当する要素を指定することを意味します。

...
記述が省略されていることを示します。

1.　プログラマツール（Java）

この章では，Borland Enterprise Server VisiBrokerが提供するJava言語用のプログラマツールについて説明します。

コマンドとキーワードで構成される構文を中心に説明します。キーワードとは，オプションとファイル名で構成されるものを指します。コマンドとオプションだけで構成される構文は，この章では説明しません。ただし，vbjとvbjcは，構文上はコマンドとオプションだけで構成されますが，この章で説明します。

＜この章の構成＞

1.1　オプション

1.2　idl2ir

1.3　ir2idl

1.4　idl2java

1.5　java2idl

1.6　java2iiop

1.7　vbj

1.8　vbjc

1.9　クラスパスの指定

1.10　Java VMの指定

1.11　その他のツール

1.1　オプション

Borland Enterprise Server VisiBrokerのプログラマツールには一般オプションと個別オプションの両方が設定できます。ツール固有の個別オプションについては，ツールごとに説明します。

記載されているオプションはすべてハイフンで始まり，デフォルトで有効になります。無効にするには，-[no_]を使用するか，ハイフンを削除します。例えば，次のオプションは，#pragmaが認識されない場合に警告を表示するときのデフォルトです。

warn_unrecognized_pragmas

デフォルトを無効にするには，次のオプションを指定します。

-no_warn_unrecognized_pragmas

＜この節の構成＞

1.1.1　一般オプション

1.1.1　一般オプション

次に示すオプションはすべてのプログラマツールに共通のオプションです。

オプション

-J<java_option>
java_optionを直接Java VMに渡します。

-VBJversion
Borland Enterprise Server VisiBrokerのバージョンを出力します。

-VBJdebug
Borland Enterprise Server VisiBrokerのデバッグ情報を出力します。

-VBJclasspath
CLASSPATH環境変数の前にクラスパスを指定します。

-VBJprop <name> [=<value>]
対になった名前と値をJava VMに渡します。

-VBJjavavm <jvmpath>
Java VMへのパスを指定します。

-VBJaddJar <jarfile>
Java VMを実行する前にCLASSPATHにjarfileを付けます。

1.2　idl2ir

このコマンドは，インタフェース定義言語（IDL）ソースファイルで定義されたオブジェクトをインタフェースリポジトリに格納します。

＜この節の構成＞

1.2.1　構文

1.2.2　説明

1.2.1　構文

idl2ir [options] {filename}

例

idl2ir -irep my_repository -replace java_examples/bank/Bank.idl

1.2.2　説明

idl2irコマンドは入力としてIDLファイルを使用します。idl2irコマンドは，インタフェースリポジトリサーバにバインドして，idl filenameに指定したIDLでリポジトリを生成します。リポジトリにIDLファイルの項目と同じ名前の項目がある場合，古い項目は変更されます。

キーワード

キーワードは，次のオプションと処理対象のIDL入力ファイルの両方を含みます。

オプション

-D, -define foo[=bar]
fooに指定したプリプロセサマクロを定義します。barで値を指定することもできます。

-I, -include <dir>
インクルードファイルを検索するディレクトリを指定します。

-P, -no_line_directives
行番号情報の生成を抑止します。デフォルトはoffです。

-H, -list_includes
インクルードファイルのパスを標準出力に出力します。デフォルトはoffです。

-C, -retain_comments
Javaコードが生成されるときに，IDLファイルのコメントを保持します。コメントを保持しない場合，コメントはJavaコードで表示されません。
コメントは次の形式で記述してください。ほかの形式で記述した場合，コメントが反映されません。

（例）

/**

（コメント）

*/

-U, -undefine foo
fooに指定したプリプロセサマクロの定義を解除します。

-[no_]back_compat_mapping
VisiBroker 3.x互換のマッピングを使用することを指定します。

-[no_]idl_strict
IDLソースに対して厳密にOMG標準規格を適用することを指定します。デフォルトはoffです。

-[no_]preprocess
解析前にIDLファイルの前処理をします。デフォルトはonです。

-[no_]preprocess_only
前処理の終了後に，IDLファイルの解析を中止します。このオプションを使用すると，コンパイラで前処理フェーズの結果をstdoutに生成できます。デフォルトはonです。

-[no_]warn_all
警告をすべて抑止します。デフォルトはoffです。

-[no_]warn_unrecognized_pragmas
#pragmaが認識されない場合に警告を表示します。デフォルトはonです。

-deep
ディープマージを適用します。デフォルトはoffです。ディープマージはシャロウマージに対する言葉です。

-h, -help, -usage, -?
ヘルプ情報を出力します。

-irep <irep name>
インタフェースリポジトリの名前を指定します。

-replace
マージしないでリポジトリ全体を置き換えます。デフォルトはoffです。

-version
Borland Enterprise Server VisiBrokerのバージョンを表示します。

file1 [file2] ...
処理対象のファイルを一つ以上指定します。処理対象のファイルにstdinを指定するときは，「-」を指定します。

このほか，idl2irのオプションとして，vbjのオプションを使用できます。vbjのオプションについては，「1.7　vbj」を参照してください。

1.3　ir2idl

このコマンドは，インタフェースリポジトリから取得したオブジェクトでIDLソースファイルを作成します。

＜この節の構成＞

1.3.1　構文

1.3.2　説明

1.3.1　構文

ir2idl [options] filename

例

ir2idl -irep my_repository -o my_file

1.3.2　説明

ir2idlコマンドはインタフェースリポジトリにバインドしてその内容をIDL形式で出力します。

キーワード

キーワードは，次のオプションを含みます。

オプション

-irep <irep name>
インタフェースリポジトリの名前を指定します。

-o <file>
出力ファイルの名前を指定します。または，標準出力に出力させる場合は「-」を指定します。

-strict
OMGの規格に厳密に従ってコード生成することを指定します。デフォルトはoffです。

-version
Borland Enterprise Server VisiBrokerのバージョン番号を表示します。

-h, -help, -usage, -?
ヘルプ情報を出力します。

1.4　idl2java

このコマンドは，IDLソースファイルからJavaソースコードを生成します。

生成したスタブ・スケルトンを，J2EEサーバプロセス上で使用する場合は，Cosminexus Component Containerの「J2EEアプリケーション実行時間の監視とJ2EEアプリケーションの強制停止機能」※¹の対象外として，明示的に指定する必要があります。次のファイル※²に，生成したスタブ・スケルトンをフルパッケージ指定で記述してください。

ファイル格納先：

<Cosminexusインストールディレクトリ>¥CC¥server¥usrconf¥criticalList.cfg

注※1

詳細については，「Cosminexus V9 アプリケーションサーバ 機能解説 運用／監視／連携編」を参照してください。

注※2

詳細については，「Cosminexus V9 アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。

＜この節の構成＞

1.4.1　構文

1.4.2　説明

1.4.1　構文

idl2java [options]{filename}

例

idl2java -no_tie Bank.idl

1.4.2　説明

idl2javaはJavaベースのプリプロセサで，IDLソースファイルをコンパイルして，IDL宣言に対するJavaマッピングを含むディレクトリ構造体を生成します。一般的に，一つのIDLファイルが複数のJavaファイルにマッピングされます。それは，Javaが一つのファイルに対して，一つのパブリックインタフェース，またはクラスだけを許可しているためです。IDLファイル名には，拡張子.idlを付けてください。

java2idlを実行する際にシステムプロパティfile.encodingを指定しないでください。システムプロパティfile.encodingを指定して文字エンコーディングを変更した場合の動作は保証しません。

生成したスタブ・スケルトンをコンパイルする際には，vbjcコマンド，またはjavacコマンドの引数に"-source 1.4"を指定してください。"-source 1.4"を指定しないでコンパイルすると，JDK5.0からのコンパイル時の型チェックの強化によって，次の警告が表示されます。

「注: 入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注: 詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。」

idl2javaコマンドの引数に日本語や2バイトコード文字を含むパスを指定しないでください。指定した場合はエラーになります。

キーワード

キーワードは，次のオプションと処理対象のIDL入力ファイルの両方を含みます。

オプション

-D, -define foo[=bar]
fooに指定したプリプロセサマクロを定義します。barで値を指定することもできます。

-I, -include <dir>
インクルードファイルのディレクトリを絶対パスまたは相対パスで指定します。インクルードファイルを検索するときに指定します。

-P, -no_line_directives
行番号情報の生成を抑止します。デフォルトはoffです。

-H, -list_includes
インクルードファイルのパスを標準出力に出力します。

-C, -retain_comments
Javaコードが生成されるときに，IDLファイルのコメントを保持します。コメントを保持しない場合，コメントはJavaコードで表示されません。デフォルトはoffです。

-compilerflags
設定できるフラグを指定します。

-compiler
コンパイラオプションを指定します。

-U, -undefine foo
fooに指定したプリプロセサマクロの定義を解除します。

-[no_]idl_strict
IDLソースに対して厳密にOMG標準規格を適用することを指定します。デフォルトはoffです。

-[no_]warn_unrecognized_pragmas
#pragmaが認識されない場合に警告を表示します。デフォルトはonです。

-[no_]back_compat_mapping
VisiBroker 3.x互換のマッピングを使用することを指定します。

-[no_]comments
コード中にコメントを生成するのを抑止します。デフォルトはonです。

-[no_]examples
_exampleクラスの生成を抑止します。デフォルトはoffです。

-gen_included_files
インクルードファイルのコードを生成します。デフォルトはoffです。

-list_files
コード生成時に書き込まれたファイルの一覧を表示します。デフォルトはoffです。

-[no_]obj_wrapper
オブジェクトラッパーのサポートを生成します。デフォルトはoffです。

-root_dir <path>
生成したファイルを格納するディレクトリを指定します。

-[no_]servant
サーバント（サーバ側）コードを生成します。デフォルトはonです。

-tie
_tieクラスを生成します。デフォルトはonです。

-[no_]warn_missing_define
あらかじめ宣言されたファイル名を定義しなかった場合に警告します。デフォルトはonです。

-[no_]bind
生成したHelperクラスにbind( )メソッドを生成するのを抑止します。デフォルトはoffです。

-[no_]compile
onに設定すると，Javaファイルを自動的にコンパイルします。デフォルトはoffです。

-dynamic_marshal
マーシャリングにDSIモデルまたはDIIモデルを使用することを指定します。デフォルトはoffです。

-idl2package <IDL name> <pkg>
指定したIDLコンテナ型のデフォルトパッケージをオーバーライドします。

-[no_]invoke_handler
EJBの呼び出しハンドラクラスを生成します。デフォルトはoffです。

-[no_]narrow_compliance
ナロウイングに従ったコードを生成します。デフォルトはonです。このオプションをoffに設定すると，下位互換のコードを生成します。

-[no_]Object_methods
java.lang固有のメソッドをオーバーライドします。デフォルトはonです。

-package <pkg>
生成したコードのルートパッケージを指定します。

-stream_marshal
マーシャリングにストリームモデルを使用することを指定します。デフォルトはonです。

-strict
OMGの規格に厳密に従ってコード生成することを指定します。デフォルトはoffです。

-version
Borland Enterprise Server VisiBrokerのバージョン番号を表示します。

-map_keyword <kwd> <replacement>
使用を避けるキーワードとそれに置き換わる文字列を指定します。

-[no_]copy_local_values
CORBAメソッドに同じプロセス内で呼び出しがあった場合に，値をコピーします。デフォルトはoffです。

-[no_]preprocess
入力ファイルをパーシングする前にプリプロセシングします。デフォルトはonです。

-[no_]preprocess_only
プリプロセシングしたあとで，入力ファイルをパーシングしないようにします。デフォルトはoffです。

-[no_]warn_all
すべての警告メッセージが出力されるようにします。デフォルトはoffです。

-h, -help, -usage, -?
ヘルプ情報を出力します。

このほか，idl2javaのオプションとして，vbjのオプションを使用できます。vbjのオプションについては，「1.7　vbj」を参照してください。

1.5　java2idl

このコマンドは，Javaクラスファイル（バイトコード）からIDLファイルを生成します。複数のJavaクラス名を入力できます。複数のクラス名を入力する場合，クラス名とクラス名の間に必ず空白を入れてください。

Javaのリモートインタフェース定義にorg.omg.CORBA.IDLEntityを継承するクラスを使用する場合は，次のファイルとクラスを使用してください。

使用するクラスの型に対応するIDL定義を格納したIDLファイル
org.omg.CORBA.IDLEntityインタフェースは，JavaにマッピングされたIDLデータ型をすべてマークするシグニチャインタフェースであるためです。

OMGの「CORBA 2.4 IDL2Java仕様」に従う，関連する（サポート対象の）すべてのクラス

Javaリモートインタフェース定義で，org.omg.CORBA.IDLEntityを継承するクラスを使用する場合は，Java2idlツールのコマンドラインに-import <IDL files>ディレクティブを使用してください。

詳細については，「CORBA 2.4 IDL2Java仕様」を参照してください。

注

このコマンドを使用するには，JDK 1.1以降のバージョンをサポートするJava VMが必要です。

＜この節の構成＞

1.5.1　構文

1.5.2　説明

1.5.1　構文

java2idl [options] {filename}

例

java2idl -o final.idl Account Client Server

1.5.2　説明

JavaバイトコードからIDLファイルを生成したい場合，java2idlを使用します。

Javaバイトコードがある場合にこのコマンドを使用すると，そのJavaバイトコードからIDLファイルを生成してC++などのプログラミング言語で使用できるようになります。

構文の例で示したように-oオプションを使用すると，三つのJavaバイトコードファイル（Account，Client，およびServer）がfinal.idlファイルに出力されます。デフォルトでは，出力結果は画面に表示されます。

キーワード

キーワードは，次のオプションと処理対象のJavaバイトコードファイルの両方を含みます。

オプション

-D, -define foo[=bar]
fooに指定したプリプロセサマクロを定義します。barで値を指定することもできます。

-I, -include <dir>
インクルードファイルのディレクトリを絶対パスまたは相対パスで指定します。インクルードファイルを検索するときに指定します。

-H, -list_includes
インクルードファイルのパスを標準出力に出力します。

-[no_]idl_strict
IDLソースに対して厳密にOMG標準規格を適用することを指定します。デフォルトはoffです。

-[no_]builtin <TypeCode|Principal>
TypeCodeまたはPrincipalという固有の型を生成します。
引数にTypeCodeまたは，Principalのどちらかを指定してください。
デフォルトはonです。

-[no_]warn_unrecognized_pragmas
#pragmaが認識されない場合に警告を表示します。デフォルトはonです。

-[no_]back_compat_mapping
VisiBroker 3.x互換のマッピングを使用することを指定します。

-import <IDL file name>
IDL定義を追加してロードします。

-o <file>
出力ファイルの名前を指定します。または，標準出力に出力させる場合は「-」を指定します。

-strict
OMGの規格に厳密に従ってコード生成することを指定します。デフォルトはoffです。

-version
Borland Enterprise Server VisiBrokerのバージョン番号を表示します。

-[no_]preprocess_only
プリプロセシングしたあとで，入力ファイルをパーシングしないようにします。デフォルトはoffです。

-[no_]idlentity_array_mapping
IDLEntityの配列をboxedRMI型でのboxedIDLにマッピングします。
デフォルトはoffです。

-h, -help, -usage, -?
ヘルプ情報を出力します。

このほか，java2idlのオプションとして，vbjのオプションを使用できます。vbjのオプションについては，「1.7　vbj」を参照してください。

1.6　java2iiop

このコマンドは，IDLではなくJava言語を使用してIDLインタフェースを定義します。複数のJavaファイル名（Javaバイトコード）を入力できます。複数のJavaファイル名を入力する場合は，間に空白を入れてください。完全にスコープを定めたクラス名を使用してください。

注

このコマンドを使用するには，JDK 1.1以降のバージョンをサポートするJava VMが必要です。

Javaのリモートインタフェース定義にorg.omg.CORBA.IDLEntityを継承するクラスを使用する場合は，次に示すファイルとクラスを使用してください。

使用するクラスの型に対応するIDL定義を格納したIDLファイル。org.omg.CORBA.IDLEntityインタフェースは，JavaにマッピングされたIDLデータ型をすべてマークするシグニチャインタフェースだからです。

OMGの「CORBA 2.4 IDL2Java仕様」に従う，関連する（サポート対象の）すべてのクラス。

Javaリモートインタフェース定義で，org.omg.CORBA.IDLEntityを継承するクラスを使用する場合は，Java2iiopツールのコマンドラインに-import <IDL files>ディレクティブを使用してください。

スーパーインタフェースで定義したfinal値をサブインタフェースで再定義し，そのサブインタフェースをjava2iiopでコンパイルするとエラーが発生します。final値をサブインタフェースで再定義しないでください。

詳細については，「CORBA 2.4 IDL2Java仕様」を参照してください。

生成したスタブ・スケルトンを，J2EEサーバプロセス上で使用する場合は，Cosminexus Component Containerの「J2EEアプリケーション実行時間の監視とJ2EEアプリケーションの強制停止機能」※1の対象外として，明示的に指定する必要があります。次のファイル※2に，生成したスタブ・スケルトンをフルパッケージ指定で記述してください。

ファイル格納先：

<Cosminexusインストールディレクトリ>¥CC¥server¥usrconf¥criticalList.cfg

注※1

詳細については，「Cosminexus V9 アプリケーションサーバ 機能解説 運用／監視／連携編」を参照してください。

注※2

詳細については，「Cosminexus V9 アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。

＜この節の構成＞

1.6.1　構文

1.6.2　説明

1.6.1　構文

java2iiop [options] {class name}

例

java2iiop -no_tie Account Client Server

1.6.2　説明

分散オブジェクトを使用するために利用したいJavaバイトコードがある場合やIDLを記述したくない場合に，java2iiopを使用してください。このコマンドを使用すると，必要なコンテナクラス，クライアントスタブ，およびサーバスケルトンをJavaバイトコードから生成できます。

java2idlを実行する際にシステムプロパティfile.encodingを指定しないでください。システムプロパティfile.encodingを指定して文字エンコーディングを変更した場合の動作は保証しません。

生成したスタブ・スケルトンをコンパイルする際には，vbjcコマンド，またはjavacコマンドの引数に"-source 1.4"を指定してください。"-source 1.4"を指定しないでコンパイルすると，JDK5.0からのコンパイル時の型チェックの強化によって，次の警告が表示されます。

「注: 入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
注: 詳細については、-Xlint:uncheckedオプションを指定して再コンパイルしてください。」

注

java2iiopコンパイラは，CORBAインタフェース上のオーバーロードメソッドをサポートしません。

パッケージ名と同一名称のインタフェースを定義しないでください。java2iiopでのコンパイル時にコンパイルエラーになります。

キーワード

キーワードは，次のオプションと処理対象のJavaバイトコードファイルの両方を含みます。

オプション

-D, define foo[=bar]
fooに指定したプリプロセサマクロを定義します。barで値を指定することもできます。

-I, -include <dir>
インクルードファイルのディレクトリを絶対パスまたは相対パスで指定します。インクルードファイルを検索するときに指定します。

-H, -list_includes
インクルードファイルのパスを標準出力に出力します。

-[no_]idl_strict
IDLソースに対して厳密にOMG標準規格を適用することを指定します。デフォルトはoffです。

-[no_]builtin <TypeCode|Principal>
TypeCodeまたはPrincipalという固有の型を生成します。
引数にTypeCodeまたは，Principalのどちらかを指定してください。
デフォルトはonです。

-[no_]warn_unrecognized_pragmas
#pragmaが認識されない場合に警告を表示します。デフォルトはonです。

-[no_]back_compat_mapping
VisiBroker 3.x互換のマッピングを使用することを指定します。

-import <IDL file name>
IDL定義を追加してロードします。

-[no_]comments
コード中のコメントの生成を抑止します。デフォルトはonです。

-[no_]examples
_exampleクラスの生成を抑止します。デフォルトはoffです。

-gen_included_files
インクルードファイルのコードを生成します。デフォルトはoffです。

-list_files
コード生成時に書き込まれたファイルの一覧を表示します。デフォルトはoffです。

-[no_]obj_wrapper
オブジェクトラッパーのサポートを生成します。デフォルトはoffです。

-root_dir <path>
生成したファイルを格納するディレクトリを指定します。

-[no_]servant
サーバント（サーバ側）コードを生成します。デフォルトはonです。

-[no_]tie
_tieクラスを生成します。デフォルトはonです。

-[no_]bind
生成したHelperクラスにbind( )メソッドを生成するのを抑止します。デフォルトはoffです。

-[no_]compile
Javaファイルを自動的に生成します。onに設定すると，Javaファイルを自動的に生成してコンパイルします。デフォルトはoffです。

-compiler
Javaコンパイラを使用することを指定します。このオプションは-compileオプションを設定しないと無視されます。

-compilerflags
JavaコンパイラフラグをJavaコンパイラに渡すことを指定します。このオプションは-compileオプションを設定しないと無視されます。

-dynamic_marshal
マーシャリングにDSIモデルまたはDIIモデルを使用することを指定します。デフォルトはoffです。

-idl2package <IDL name> <pkg>
指定したIDLコンテナ型のデフォルトパッケージをオーバーライドします。

-[no_]invoke_handler
EJBの呼び出しハンドラクラスを生成します。デフォルトはoffです。

-[no_]narrow_compliance
ナロウイングに従ったコードを生成します。デフォルトはonです。

-package <pkg>
生成したコードのルートパッケージを指定します。

-stream_marshal
マーシャリングにストリームモデルを使用することを指定します。デフォルトはonです。

-strict
OMGの規格に厳密に従ってコード生成することを指定します。デフォルトはoffです。

-version
Borland Enterprise Server VisiBrokerのバージョン番号を表示します。

-map_keyword <kwd> <replacement>
使用しないキーワードとそれに置き換わる文字列を指定します。

-sealed <pkg> <dest_pkg>
指定したパッケージ<pkg>に関連するコードを，<dest_pkg>配下に出力します。
<dest_pkg>ディレクトリがない場合は，カレントディレクトリに出力します。

-[no_]copy_local_values
CORBAメソッドに同じプロセス内で呼び出しがあった場合に，値をコピーします。デフォルトはoffです。

-[no_]preprocess_only
プリプロセシングしたあとで，入力ファイルをパーシングしないようにします。デフォルトはoffです。

-[no_]idlentity_array_mapping
IDLEntityの配列をboxedRMI型でのboxedIDLにマッピングします。
デフォルトはoffです。

-h, -help, -usage, -?
ヘルプ情報を出力します。

このほか，java2iiopのオプションとして，vbjのオプションを使用できます。vbjのオプションについては，「1.7　vbj」を参照してください。

1.7　vbj

このコマンドは，ローカルマシンにあるJavaインタプリタを起動します。

＜この節の構成＞

1.7.1　構文

1.7.2　説明

1.7.3　オプション

1.7.1　構文

vbj [options] [arguments normally sent to java VM] {class}
   [arg1 arg2...]

構文の説明

{class}：実行されるクラス名を指定します。

[arg1 arg2...]：クラスに渡されるパラメタです。

例

vbj Server

1.7.2　説明

Javaアプリケーションには，ほかの言語で書かれたアプリケーションにはない制限がありますが，vbjはこの制限の幾つかに対処するオプションを提供しています。また，vbjはBorland Enterprise Server VisiBrokerのアプリケーションを起動するのに望ましい方法でもあります。vbjの機能は次のとおりです。

環境変数とWindowsレジストリ設定をチェックします。

UDPブロードキャストサポートのないJava VMのために，オプションでosagentを探索できます。

CLASSPATHを自動的に設定し，Javaランタイムに対してBorland Enterprise Server VisiBrokerを正しく動作させます。

さらに，vbjは二つのVisiBroker ORBプロパティを設定して，VisiBroker ORBランタイムに渡します。

vbroker.agent.addr
OSAGENT_ADDR環境変数の値またはレジストリ設定を格納します。

vbroker.agent.port
OSAGENT_PORT環境変数の値またはレジストリ設定を格納します。

注

vbjを使用しない場合は，Borland Enterprise Server VisiBrokerが正しく動作するように，vbroker.agent.addrとvbroker.agent.portの値を明示的に設定してください。

1.7.3　オプション

-h, -help, -usage, -?
ヘルプ情報を出力します。

-VBJprop name=value
実行されたJavaに-D<name>[=<value>]パラメタとして追加することで，システムプロパティとしてのJava VMにプロパティ名と値を渡します。

-VBJjavavm vmpath
使用するJava VMを指定します。

-VBJaddJar <jarfile>
指定したjarファイルをCLASSPATHに追加します。jarファイルは，<インストールディレクトリ>/libに格納されている必要があります。

-VBJclasspath classpath
クラスパスの明示的設定を指定します。

-VBJdebug
デバッグ情報をオンにします。

このコマンドに渡される追加オプションは，システムにインストールされたJava VMで定義されます。このコマンドのすべてのオプションを表示させるには，オプションなしで次のようにjavaと入力してください。

prompt>java

Javaインタプリタで利用できるオプション一覧が表示されます。

1.8　vbjc

このコマンドは，VisiBrokerのクラスをインポートする可能性のあるJavaソースコードをコンパイルするときに使用します。このコマンドの処理を次に示します。

Borland Enterprise Server VisiBrokerのライブラリパスを検索します。

Borland Enterprise Server VisiBroker標準のjarファイルをCLASSPATHに追加します。

javacを起動します。

＜この節の構成＞

1.8.1　構文

1.8.2　オプション

1.8.1　構文

vbjc [arguments normally passed to javac]

例

vbjc Server.java

1.8.2　オプション

-h, -help, -usage, -?
ヘルプ情報を出力します。

-VBJdebug
デバッグ情報をオンにします。

-VBJclasspath classpath
クラスパスの明示的設定を指定します。

1.9　クラスパスの指定

クラスパスに関連があるソースを次に示します。ここでは，UNIXでのパスを示しています。Windowsの場合は，/を¥に置き換えてください。

vbrokerライブラリファイル（$VBROKERDIR※/lib/*.jar）

JDKライブラリファイル（$JAVAHOME※/lib/*.jar，$JAVAHOME※/jre/lib/*.jar，およびclasses.zip）

CLASSPATH環境変数（$CLASSPATH）

-VBJclasspath <path string> パラメタ

-classpath <path string> パラメタ

-Djava.class.path=<path string> パラメタ

-Denv.class.path=<path string> パラメタ

-VBJaddJar <jar file name> パラメタ（jarファイルはvbroker/libディレクトリに格納されている必要があります）

注※

$VBROKERDIRはBorland Enterprise Server VisiBrokerのインストールディレクトリを，$JAVAHOMEはJavaのホームディレクトリを表します。

通常，Java VMの起動前に，これらのサブセットが一つのクラスパスにマージされます。また，クラスパスは，プラットフォームによって生成方法が異なります。

マージされるソースと順序を次に示します。

-VBJclasspathに指定されたクラスパス

エクスポートされた$CLASSPATH

VisiBroker標準のjarファイル（検索されたvbjの位置に基づいて決定します）

VBJaddJarで追加され，<vbroker>/libディレクトリにあると想定されるjarファイル

カレントディレクトリ

（UNIX）

マージ後のクラスパスはJava VMにエクスポートされ，パラメタとしては渡されません。ほかのクラスパスソースは，クラスパス以外のパラメタとともにJava VMにそのまま渡されます。

（Windows）

マージ後のクラスパスは-Djava.class.pathで渡されます。ほかのクラスパスは，一般的なパラメタとしてそのまま渡されます。

注

サービスとしてWindowsに定義されているツールは，-classpathを認識しません。-classpathを無視するツールもありますが，nameserv，irepなどでは，-classpathで処理が中断しエラーが発生します。

1.10　Java VMの指定

Java VMの指定方法は，プラットフォームによって異なります。

（UNIX）

デフォルトJava VMはjavaですが，次のパラメタを指定するとJava VMを変更できます。

-VBJjavavm <jvm name>

どのJava VMを指定した場合でも，指定したJava VMがあるかどうかが確認されます。指定したJava VMが見つからない場合は，プログラムが異常終了します。デフォルトのJava VMの検索はされません。

（Windows）

Java VMを明示的に指定しなかった場合，Borland Enterprise Server VisiBrokerは，環境設定にパス情報があるかどうかを調べます。PATH変数が設定されている場合は，¥binを含むPATHの各ディレクトリにJava VMのdllがあるかどうかを調べます。PATHが設定されているのにJava VMが見つからない場合，Borland Enterprise Server VisiBrokerは異常終了します。

PATHが設定されていない場合，Borland Enterprise Server VisiBrokerは，現在インストールされているJava VMの位置をWindowsのレジストリで調べます。

Java VMの検索に使用するdllファイル名は，Java VM 1.2の場合はjvm.dllで，Java VM 1.1の場合はjavai.dllです。

次のパラメタを指定するとJava VMを変更できます。

-VBJjavavm <jvm name>

<jvm name>には，アプリケーションの絶対パスを次の形式で指定します。

*¥*¥*java*

*は，任意の文字列を意味します。空文字列も指定できます。例えば，「C:¥jdk¥bin¥java」などのパスを指定できます。<jvm name>に指定した文字列の形式が正しくない場合や，<jvm name>に指定したファイルが見つからない場合，プログラムはエラーメッセージを出力して異常終了します。

1.11　その他のツール

Borland Enterprise Server VisiBrokerと同時にインストールされるツールを次に示します。これらのツールを使用して，ユーザが開発したクライアントやサーバを実行できます。

osagent
osagent（スマートエージェント）は，ユーザのクライアントプログラムの通信相手であるオブジェクトインプリメンテーションを検索するサービスです。ユーザのローカルネットワークに接続された一つ以上のホストで起動してください。スマートエージェントのオプションの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「スマートエージェント（osagent）の起動」の記述を参照してください。

locserv
ロケーションサービスを使用すると，特定の属性を持つオブジェクトインスタンスを検索できます。ロケーションサービスは，Borland Enterprise Server VisiBrokerのスマートエージェントと連携して，ネットワーク上の，どのオブジェクトが現在アクセスできるのかをユーザに通知します。ロケーションサービスの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ロケーションサービスの使用」の記述を参照してください。

irep
インタフェースリポジトリ（irep）はユーザのCORBAオブジェクトのインタフェースを格納し，クライアントによるランタイムアクセスのために使用します。ユーザはブラウザでリポジトリ内の情報を参照できます。インタフェースリポジトリの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「インタフェースリポジトリの使用」の記述を参照してください。

oad
オブジェクト活性化デーモン（OAD）を使用すると，クライアントのアクセスによって自動的に開始するオブジェクトを登録できます。オブジェクト活性化デーモンの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクト活性化デーモンの使用」の記述を参照してください。

oadutil
OADユティリティは，使用しているシステムで利用できるオブジェクトインプリメンテーションの登録，登録解除，一覧表示をユーザが任意に実行するためのコマンドを提供します。このコマンドは，コマンドラインから入力することも，スクリプトに記述することもできます。このツールとオプションの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクト活性化デーモンユーティリティの使用」の記述を参照してください。

osfind
osfindはコマンドラインから実行するツールです。このツールを実行すると，現在実行中のプロセスおよびオブジェクトの概要を知ることができます。このツールとオプションの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「すべてのオブジェクトとサービスの報告」の記述を参照してください。

gatekeeper
ゲートキーパーは，アプレットをネットワーク経由でオブジェクトサーバと通信させるためのツールです。ゲートキーパーは，Webブラウザおよびファイアウォールによるセキュリティ制限に違反しないで通信を実現します。ゲートキーパーの詳細については，マニュアル「Borland Enterprise Server VisiBroker　ゲートキーパーガイド」を参照してください。

2.　IDLからJavaへのマッピング

この章では，Borland Enterprise Server VisiBrokerが現在使用しているIDL/Java言語マッピングの概要を説明します。このIDL/Java言語マッピングはidl2javaコンパイラがインプリメントします。Borland Enterprise Server VisiBrokerは「OMG IDL/Java言語マッピング仕様」に従っています。

完全な情報，特に次の情報については，最新版の「OMG IDL/Java言語マッピング仕様」を参照してください。

・擬似オブジェクトのJavaへのマッピング

・サーバ側マッピング

・Java ORBポータビリティインタフェース

＜この章の構成＞

2.1　名前

2.2　予約名

2.3　予約語

2.4　モジュール

2.5　基本型

2.6　Helperクラス

2.7　定数

2.8　構造型

2.9　interface

2.10　例外のマッピング

2.11　Any型のマッピング

2.12　ネストされた型のマッピング

2.13　typedefのマッピング

2.1　名前

一般的に，IDL名と識別子は変更されないでJava名と識別子にマッピングされます。

マッピングされたJavaコードで名前の衝突が発生する場合，マッピングされた名前の先頭にアンダースコア（_）を付けて解決します。

さらに，Java言語の特質によって，単一のIDL構造体は複数の（異なる名前の）Java構造体にマッピングされることがあります。「追加」名は，記述接尾語を付けることで構成されます。例えば，IDLインタフェースのAccountManagerは，JavaインタフェースのAccountManagerおよび追加のJavaクラスAccountManagerOperations，AccountManagerHelper，ならびにAccountManagerHolderにマッピングされます。

「追加」名がほかのマッピングされたIDL名と衝突する例外の場合は，上記の解決法がそのほかのマッピングされたIDL名に適用されます。つまり，先にネーミングと必要な「追加」名が使用されます。

例えば，名前がfooHelperまたはfooHolderのインタフェースは，fooと名づけられたインタフェースがあってもなくても，_fooHelperまたは_fooHolderにそれぞれマッピングされます。インタフェースfooHelperのHelperクラスおよびHolderクラスは，_fooHelperHelperおよび_fooHelperHolderと名づけられます。

通常，Javaの予約語と衝突するJava識別子に，変更されないでマッピングされるIDL名には，適用される衝突規則があります。

2.2　予約名

マッピングはマッピング本来の目的のために，複数の名前を予約しています。これらの名前をユーザ定義IDL型名，またはインタフェース名（正当なIDL名とも仮定される）で使用すると，マッピング名では先頭にアンダースコア（_）が付きます。予約名を次に示します。

Javaクラス<type>Helper
<type>は，IDLユーザ定義型名です。

Javaクラス<type>Holder
<type>は，（typedefエイリアスのような例外のある）IDLユーザ定義型名です。

Javaクラス<basicJavaType>Holder
<basicJavaType>は，IDL基本データ型のどれかで使用されるJava基本データ型の一つです。

ネストされたスコープのJavaパッケージ名<interface>Package
<interface>は，IDLインタフェース名です。

Javaクラス<interface>Operations，<interface>POA，および<interface>POATie
<interface>はIDLインタフェース型です。

2.3　予約語

マッピングでは，幾つかの名前が特定の目的のために予約されています。その予約語をユーザ定義のIDL，またはインタフェースの語句（IDLとしての文法は正しい）に使用すると，先頭にアンダースコア（_）が付けられてマッピングされます。Java言語の予約キーワードを次に示します。

abstract       abstractBase   boolean        break
byte           case           catch          char
class          const          continue       default
do             double         else           extends
false          final          finally        float
for            goto           if             implements
import         instanceof     int            interface
local          long           native         new
null           package        private        protected
public         return         short          static
super          switch         synchronized   this
throw          throws         transient      true
try            void           volatile       while

2.4　モジュール

IDLモジュールは，同じ名前でJavaパッケージにマッピングされます。モジュール内のすべてのIDL型宣言は，生成されたパッケージ内の該当するJavaクラスまたはインタフェース宣言にマッピングされます。

モジュール内にないIDL宣言は，（名前を付けられていない）Javaグローバルスコープにマッピングされます。

IDLモジュール内で宣言された型に対して生成されたJavaコードをコードサンプル2-1に示します。

コードサンプル2-1　IDLモジュールのJavaパッケージへのマッピング

/* From Example.idl: */
module Example { .... };

// Generated java
package Example;
...

2.5　基本型

定義されたIDL型が，どのように基本Java型にマッピングされるかを次の表に示します。

表2-1　基本型マッピング（Java）

IDL型 | Java型
boolean | boolean
char | char
wchar | char
octet | byte
string | java.lang.String
wstring | java.lang.String
short | short
unsigned short | short
long | int
unsigned long | int
longlong | long
unsigned longlong | long
float | float
double | double

IDL型と，マッピングされたJava型との間で潜在的な不一致がある場合，標準CORBA例外が発生します。ほとんどの場合，発生した例外は，次の二つのカテゴリに分類されます。

Java型の範囲がIDL型の範囲より大きい場合
例えば，Java charsがIDL charsのスーパーセットである場合が該当します。

Javaがアンサインドの型をサポートしていない場合
開発者は，アンサインドのIDL型の大きな値がJavaで負の整数として正しく処理されることを確実にする責任があります。

IDLのインタフェースに，配列，enum，struct，union型のどれかを引数に持つoperationを使用している，かつ，配列，enum，struct，union型のデータとしてnullオブジェクトを指定している場合，データの送信時にBAD_PARAM例外ではなく，NullPointerExceptionまたはUNKNOWN例外が発生します。

＜この節の構成＞

2.5.1　IDL型拡張

2.5.2　Holderクラス

2.5.3　boolean

2.5.4　char

2.5.5　octet

2.5.6　string

2.5.7　wstring

2.5.8　整数型

2.5.9　浮動小数点型

2.5.1　IDL型拡張

ここでは，IDL型拡張のためのBorland Enterprise Server VisiBrokerのサポートについて説明します。サポートされるIDL拡張の概要を次の表に示します。

表2-2　サポートされるIDL拡張の概要（Java）

型 | Borland Enterprise Server VisiBrokerでのサポート
longlong | 有
unsigned longlong | 有
long double | 無※1
wchar | 有※2
wstring | 有※2
fixed | 無※1

注※1

Borland Enterprise Server VisiBrokerでは，OMGがインプリメント方法を決定してからサポートする予定です。

注※2

Unicodeは「on the wire」で使用されます。

また，新しい型のサポートについて次の表に示します。

表2-3　新しい型のIDL拡張（Java）

新型のIDL | 説明
longlong | 64ビットサインドの2の補数
unsigned longlong | 64ビットアンサインドの2の補数
long double | IEEE標準754-1985ダブル拡張浮動小数点
wchar | ワイドキャラクタ
wstring | ワイド文字列
fixed | 固定小数点10進演算（31有効けた数）

2.5.2　Holderクラス

Holderクラスは，OUTおよびINOUTパラメタ受け渡しモードをサポートし，org.omg.CORBAパッケージのすべての基本IDLデータ型で利用できます。Holderクラスは，typedefsで定義されたものを除いて，すべての名前付きユーザ定義型で生成されます。Holderクラスの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

ユーザ定義IDL型では，Holderクラス名は，その型のマッピングされたJava名の後ろにHolderを付けて構成されます。

基本IDLデータ型では，マッピングされたデータ型に対するJava型名（最初の文字が大文字）の後ろにHolderを付けたHolderクラス名になります。例えば，IntHolderがそうです。

各Holderクラスには，インスタンスからのコンストラクタ，デフォルトコンストラクタがあり，型付きのvalueというパブリックインスタンスメンバがあります。デフォルトコンストラクタは，Java言語によって定義されたように，値フィールドを型のデフォルト値に設定します。

boolean：false

値型：null

数値とchar型：0

文字列：null

オブジェクトリファレンス：null

ポータブルスタブ，およびスケルトンをサポートするには，ユーザ定義型のHolderクラスもorg.omg.CORBA.portable.Streamableインタフェースをインプリメントします。

基本型のHolderクラスは，次のコードサンプルで定義されます。これらはorg.omg.CORBAパッケージにあります。

コードサンプル2-2　Holderクラス

//Java
package org.omg.CORBA;

final public class ShortHolder implements Streamable {
   public short value;
   public ShortHolder( ){}
   public ShortHolder(short initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class IntHolder implements Streamable {
   public int value;
   public IntHolder( ){}
   public IntHolder(int initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class LongHolder implements Streamable {
   public long value;
   public LongHolder( ){}
   public LongHolder(long initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class ByteHolder implements Streamable {
   public byte value;
   public ByteHolder( ){}
   public ByteHolder(byte initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class FloatHolder implements Streamable {
   public float value;
   public FloatHolder( ){}
   public FloatHolder(float initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class DoubleHolder implements Streamable {
   public double value;
   public DoubleHolder( ){}
   public DoubleHolder(double initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class CharHolder implements Streamable {
   public char value;
   public CharHolder( ){}
   public CharHolder(char initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class BooleanHolder implements Streamable {
   public boolean value;
   public BooleanHolder( ){}
   public BooleanHolder(boolean initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class StringHolder implements Streamable {
   public java.lang.String value;
   public StringHolder( ){}
   public StringHolder(java.lang.String initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class ObjectHolder implements Streamable {
   public org.omg.CORBA.Object value;
   public ObjectHolder( ){}
   public ObjectHolder(org.omg.CORBA.Object initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class ValueBaseHolder implements Streamable {
   public java.io.Serializable value;
   public ValueBaseHolder( ){}
   public ValueBaseHolder(java.io.Serializable initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class AnyHolder implements Streamable {
   public Any value;
   public AnyHolder( ){}
   public AnyHolder(Any initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class TypeCodeHolder implements Streamable {
   public TypeCode value;
   public typeCodeHolder( ){}
   public TypeCodeHolder(TypeCode initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

final public class PrincipalHolder implements Streamable {
   public Principal value;
   public PrincipalHolder( ){}
   public PrincipalHolder(Principal initial){
       value =initial;
   }
   ...//implementation of the streamable interface
}

ユーザ定義型<foo>のHolderクラスを次に示します。

コードサンプル2-3　ユーザ定義型のHolderクラス

// Java
final public class <foo>Holder
  implements org.omg.CORBA.portable.Streamable {
  public <foo> value;
  public <foo>Holder( ) {}
  public <foo>Holder(<foo> initial) {}
  public void _read(org.omg.CORBA.portable.InputStream i)
   {...}
  public void _write(org.omg.CORBA.portable.OutputStream o)
   {...}
  public org.omg.CORBA.TypeCode _type( ) {...}
}

Java null

Java nullは，nullCORBAオブジェクトリファレンスとvaluetype（再帰型のvaluetypeを含む）を表すためだけに使用されます。例えば，空の文字列を表すときは，nullを使わないで長さ0の文字列を使用してください。これは配列にも，valuetypeを除く構造型にも当てはまります。構造体用にnullを渡そうとすると，NullPointerExceptionが発生します。

2.5.3　boolean

IDL型booleanはJava型booleanにマッピングされます。IDL定数TRUEおよびFALSEは，Java定数trueおよびfalseにマッピングされます。

2.5.4　char

Java文字がUnicodeを表す16ビットのアンサインドの精度であるのに対して，IDL文字は文字セットの要素を表す8ビットの精度です。タイプ・セーフにするため，Java CORBAランタイムは，パラメタがメソッド呼び出し中にマーシャリングされるときに，IDL charからマッピングされたすべてのJava charsの範囲が妥当であることをチェックします。

charが文字セットで定義された範囲外である場合，CORBA::DATA_CONVERSION例外となります。

IDL wcharはJava char型にマッピングします。

2.5.5　octet

8ビットの精度であるIDL型octetは，Java型byteにマッピングされます。

2.5.6　string

バウンド，またはアンバウンデッドのIDL型stringは，Java型java.lang.Stringにマッピングされます。文字列のバウンドチェックと同じく，文字列内の文字の範囲がマーシャリング時にチェックされます。

2.5.7　wstring

Unicode文字列を表すために使用されるIDL型wstringは，Java型java.lang.Stringにマッピングされます。文字列のバウンドチェックはマーシャリング時に実施されます。

2.5.8　整数型

IDL shortおよびunsigned shortは，Java型shortにマッピングします。

IDL longおよびunsigned longはJava型intにマッピングします。

注

Javaはアンサインドの型をサポートしていません。そのため，開発者は，Javaの負の整数がアンサインドの大きな値として正しく処理されることを確実にする責任があります。

2.5.9　浮動小数点型

IDL浮動小数点型floatとdoubleは，該当するデータ型を含むJavaクラスにマッピングします。

2.6　Helperクラス

すべてのユーザ定義IDL型には，生成された型名の後ろにHelperが付いた，追加の「helper」Javaクラスがあります。型を処理するために必要な幾つかの次のような静的メソッドが提供されています。

型のAny挿入，および抽出オペレーション

リポジトリIDの取得

タイプコードの取得

ストリームからの型の読み出し，またはストリームへの型の書き込み

ユーザ定義IDL型<typename>では，型用に生成された次のJavaコードがあります。マッピングされたIDLインタフェースのHelperクラスには，専用のnarrowオペレーションがあります。

abstract interfaceを継承するinterfaceを使用している，かつ，そのinterfaceのHelperクラスのnarrowオペレーションの引数にnullを指定した場合に，BAD_PARAM例外が発生します。

コードサンプル2-4　Helperクラス：ユーザ定義型に生成されたJavaコード

// generated Java helper
public class <typename>Helper {
   public static void
      insert(org.omg.CORBA.Any a, <typename> t);
   public static <typename> extract(org.omg.CORBA.Any a);
   public static org.omg.CORBA.TypeCode type( );
   public static String id( );
   public static <typename> read(
        org.omg.CORBA.portable.InputStream istream);
      {...}

   public static void write(
              org.omg.CORBA.portable.OutputStream ostream,
              <typename> value)
       {...}

  // only for interface helpers
  public static
      <typename> narrow(org.omg.CORBA.Object obj);
}

コードサンプル2-5　名前付き型のJava Helperクラスへのマッピング

// IDL - named type
struct st {long f1, String f2};

// generated Java
public class stHelper {
   public static void insert(org.omg.CORBA.Any any,
     st s); {...}
   public static st extract(org.omg.CORBA.Any a) {...}
   public static org.omg.CORBA.TypeCode type( ) {...}
   public static String id( ) {...}
   public static st read(
                       org.omg.CORBA.InputStream is) {...}
   public static void write(org.omg.CORBA.OutputStream os,
      st s) {...}
}

コードサンプル2-6　typedef列のJava Helperクラスへのマッピング

// IDL - typedef sequence
typedef sequence <long> IntSeq;

// generated Java helper
public class IntSeqHelper {
   public static void insert(org.omg.CORBA.Any any,
                              int[ ] seq);
   public static int[ ] extract(org.omg.CORBA.Any a){...}
   public static org.omg.CORBA.TypeCode type( ){...}
   public static String id( ){...}
   public static int[ ] read(
              org.omg.CORBA.portable.InputStream is)
     {...}
   public static void write(
              org.omg.CORBA.portable.OutputStream os,
              int[ ] seq)
     {...}
}

2.7　定数

定数のマッピング方法は出現するスコープによって異なります。

＜この節の構成＞

2.7.1　インタフェース内の定数

2.7.2　インタフェース内にない定数

2.7.1　インタフェース内の定数

IDLインタフェース内で宣言される定数は，IDLインタフェースに対応するJavaインタフェースOperationsクラス内の，public static finalフィールドにマッピングされます。

コードサンプル2-7　モジュール内のIDL定数のJavaクラスへのマッピング

/*From Example.idl:*/
module Example {
   interface Foo {
       const long aLongerOne =-321;
   };
};

//Foo.java
package Example;
public interface Foo extends
   com.inprise.vbroker.CORBA.Object,
   Example.FooOperations,
   org.omg.CORBA.portable.IDLEntity {
}
//FooOperations.java
package Example;
public interface FooOperations {
   public final static int aLongerOne =(int)-321;
}

2.7.2　インタフェース内にない定数

IDLモジュール内で宣言される定数は，定数と同名で，valueと名づけられたpublic static finalフィールドを含む，パブリックインタフェースにマッピングされます。

このフィールドは定数の値を保持します。

注

通常，JavaコンパイラはクラスがほかのJavaコードで使用されると，値をインライン（組み入れ）します。

コードサンプル2-8　モジュール内のIDL定数のJavaクラスへのマッピング

/* From Example.idl: */
module Example {
  const long aLongOne = -123;
};

// Generated java
package Example;
public interface aLongOne {
   public static final int value = (int) (-123L);
}

2.8　構造型

IDL構造型には，enum，struct，union，sequence，およびarrayがあります。sequenceおよびarrayはJava array型にマッピングされます。IDL構造型のenum，struct，およびunionは，IDL型のセマンティックスをインプリメントするJavaクラスにマッピングされます。生成されたJavaクラスには，元のIDL型と同じ名前が付きます。

＜この節の構成＞

2.8.1　enum

2.8.2　struct

2.8.3　union

2.8.4　sequence

2.8.5　array

2.8.1　enum

IDL enumは，value( )メソッド，ラベルごとの二つの静的データメンバ，整数変換メソッド，およびプライベートコンストラクタを宣言する，enum型と同名のJavaファイナルクラスにマッピングされます。JavaファイナルクラスにマッピングされるIDL enumの例を次に示します。

コードサンプル2-9　JavaファイナルクラスにマッピングされるIDL enum

// Generated java

public final class <enum_name> {
   //one pair for each label in the enum
   public static final int _<label> = <value>;
   public static final <enum_name> <label> =
     new <enum_name>(_<label>);

   public int value( ) {...}

   //get enum with specified value
   public static <enum_name> from_int(int value);

   //constructor
   protected <enum_name>(int) {...}
}

メンバの一つは，IDL enumラベルと同名のpublic static finalです。そのほかのメンバは，先頭にアンダースコア（_）を付けられ，switch文で使用されます。

value( )メソッドは整数値を返します。値は，0から順に割り当てられます。enumにvalueと名づけられたラベルがある場合，Javaのvalue ( )メソッドとの衝突はありません。

enumのインスタンスは一つだけです。一つのインスタンスしかないので，ポインタ等価テストが正しく動作します。つまり，デフォルトjava.lang.Objectインプリメンテーションのequals( )，およびhash( )が，自動的にenumのシングルトンオブジェクトで正しく動作します。

enumのJavaクラスには追加メソッドfrom_int( )があり，これはenumを指定された値で返します。

enumのHolderクラスも生成されます。その名前は，次のようにenumのマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-10　enumのHolderクラス

public class <enum_name>Holder implements
    org.omg.CORBA.portable.Streamable {
   public <enum_name> value;
   public <enum_name>Holder( ) {}
   public <enum_name>Holder(<enum_name> initial) {...}
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode _type( ) {...}
}

コードサンプル2-11　enumのJavaにマッピングされたIDL

//IDL
module Example {
   enum EnumType {first,second,third };
};

//generated Java
public final class EnumType
       implements org.omg.CORBA.portable.IDLEntity {
   public static final int _first =0;
   public static final int _second =1;
   public static final int _third =2;

   public static final EnumType first =
                                    new EnumType(_first);
   public static final EnumType second =
                                   new EnumType(_second);
   public static final EnumType third =
                                    new EnumType(_third);
   protected EnumType(final int _vis_value){...}

   public int value( ){...}
   public static EnumType from_int (final int _vis_value)
                                                    {...}
   public java.lang.String toString( ){...}
}

public final class EnumTypeHolder
       implements org.omg.CORBA.portable.Streamable {
   public OtherExample.EnumType value;
   public EnumTypeHolder( ){...}
   public EnumTypeHolder(
              final OtherExample.EnumType _vis_value){...}
   public void _read(
           final org.omg.CORBA.portable.InputStream input)
       {...}
   public void _write(
         final org.omg.CORBA.portable.OutputStream output)
       {...}
   public org.omg.CORBA.TypeCode _type( ){...}
   public boolean equals(java.lang.Object o) {...}
}

2.8.2　struct

IDL structは，IDLのインスタンス変数，およびすべての値のメンバを順序どおりに，同名のファイナルJavaクラスにマッピングします。ヌルコンストラクタも提供され，これによって構造体フィールドをあとで初期化することもできます。structのHolderクラスも生成されます。その名前は，次のようにsturctがマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-12　structのHolderクラス

final public class <class>Holder implements
     org.omg.CORBA.portable.Streamable {
   public <class> value;
   public <class>Holder( ) {}
   public <class>Holder(<class> initial) {...}
   public void _read(
                    org.omg.CORBA.portable.InputStream i)
   {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
   {...}
   public org.omg.CORBA.TypeCode _type( ) {...}
}

コードサンプル2-13　IDL structのJavaへのマッピング

/*From Example.idl:*/
module Example {
   struct StructType {
       long field1;
       string field2;
   };
};

//generated Java
public final class StructType
       implements org.omg.CORBA.portable.IDLEntity {
   public int field1;
   public java.lang.String field2;
   public StructType( ){...}
   public StructType(final int field1,
   final java.lang.String field2){...}
   public java.lang.String toString( ) {...}
   public boolean equals(java.lang.Object o) {...}
}
public final class StructTypeHolder
       implements org.omg.CORBA.portable.Streamable {
   public Example.StructType value;
   public StructTypeHolder( ){...}
   public StructTypeHolder(
                     final Example.StructType _vis_value)
       {...}
   public void _read(
          final org.omg.CORBA.portable.InputStream input)
       {...}
   public void _write(
        final org.omg.CORBA.portable.OutputStream output)
       {...}
   public org.omg.CORBA.TypeCode _type ( ){...}
}

2.8.3　union

IDL unionはファイナルJavaクラスと同じ名前が与えられ，ファイナルJavaクラスにマッピングされます。IDL unionは，次に示すコンストラクタとメソッドを提供します。

デフォルトコンストラクタ

unionのディスクリミネータのアクセッサメソッドのdiscriminator( )

各ブランチのアクセッサメソッド

各ブランチの変更メソッド

複数のケースラベルのある各ブランチの変更メソッド

必要に応じたデフォルトの変更メソッド

マッピングされたunion型名，または任意のフィールド名と名前の衝突がある場合，通常の名前衝突解決規則（ディスクリミネータの前にアンダースコア（_）を付ける）が使用されます。

ブランチアクセッサ，および変更メソッドがオーバーロードとなり，ブランチの後ろに名前が付けられます。アクセッサメソッドは，予想されるブランチが設定されないと，CORBA::BAD_OPERATIONシステム例外を発生させます。

ブランチに該当する複数のケースラベルがある場合，そのブランチのシンプル変更メソッドが最初のケースラベルの値に対してディスクリミナントを設定します。さらに，明示的ディスクリミネータパラメタを取る追加の変更メソッドが生成されます。

ブランチがdefaultケースラベルに該当する場合，変更メソッドはほかのどのケースラベルにも一致しない値にディスクリミナントを設定します。

ケースラベルのセットがディスクリミナントの可能値を完全に満たす場合，デフォルトケースラベルのunionを指定することは不当です。この状況を検出し，不当なコードの生成を拒否するのは，Javaコードジェネレータ（例えば，IDLコンパイラ，またはほかのツール）の責任です。

デフォルトの変更メソッドである_default( )が生成されるのは，デフォルトケースラベルが明示的に指定されていない場合と，すべてのケースラベルがディスクリミナントの可能値を完全には満たしていない場合です。_default( )メソッドは，unionの値を範囲外に設定します。

unionのHolderクラスも生成されます。その名前は，次のようにunionがマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-14　unionのHolderクラス

final public class <union_class>Holder
      implements org.omg.CORBA.portable.Streamable {
   public <union_class> value;
   public <union_class>Holder( ) {}
   public <union_class>Holder(<union_class> initial) {...}
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode _type( ) {...}
}

コードサンプル2-15　IDL unionのJavaへのマッピング

/*From Example.idl:*/
module Example {
   enum EnumType {first,second,third,fourth,fifth,sixth};
   union UnionType switch (EnumType){
       case first:long win;
       case second:short place;
       case third:
       case fourth:octet show;
       default:boolean other;
   };
};

//Generated java
final public class UnionType {
   //constructor
   public UnionType( ) {...}
   //discriminator accessor
   public int discriminator( ) {...}

   //win
   public int win( ) {...}
   public void win(int value) {...}

   //place
   public short place( ) {...}
   public void place(short value) {...}

   //show
   public byte show( ) {...}
   public void show(byte value) {...}
   public void show(int discriminator,byte value) {...}

   //other
   public boolean other( ) {...}
   public void other(boolean value) {...}
   public java.lang.String to String( ) {. . .}
   public boolean equals(java.lang.Object o) {. . .}
}

final public class UnionTypeHolder {
       implements org.omg.CORBA.portable.Streamable {
   public UnionType value;
   public UnionTypeHolder( ) {}
   public UnionTypeHolder(UnionType initial) {...}
   public void _read(
                    org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode_type( ) {...}
}

2.8.4　sequence

IDL sequenceは同じ名前でJava配列にマッピングされます。マッピングでは，sequence型が必要な場所に，sequence要素のマッピングされた型の配列が使用されます。

sequenceのHolderクラスも生成されます。その名前は，次のようにsequenceがマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-16　sequenceのHolderクラス

final public class <sequence_class>Holder {
  public <sequence_element_type>[ ] value;
  public <sequence_class>Holder( ) {};
  public <sequence_class>Holder(
            <sequence_element_type>[ ] initial) {...};
  public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
  public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
  public org.omg.CORBA.TypeCode _type( ) {...}
}

コードサンプル2-17　IDL sequenceのJavaへのマッピング

// IDL
typedef sequence<long>UnboundedData;
typedef sequence<long, 42>BoundedData;

// generated Java
final public class UnboundedDataHolder
       implements org.omg.CORBA.portable.Streamable {
   public int[ ] value;
   public UnboundedDataHolder( ) {};
   public UnboundedDataHolder(int[ ] initial) {...};
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode type( ) {...}
}

final public class BoundedDataHolder
       implements org.omg.CORBA.portable.Streamable {
   public int[ ] value;
   public BoundedDataHolder( ) {};
   public BoundedDataHolder(int[ ] initial) {...};
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode_type( ) {...}
}

2.8.5　array

IDL arrayは，IDLのバウンデッドシーケンスと同じようにマッピングされます。マッピングでは，配列型が必要な場所に，配列要素がマッピングされた型の配列が使用されます。Javaでは，通常のJava添字指定演算子がマッピングされた配列に適用されます。配列の長さは，定数規則でマッピングされるIDL定数によって上限値を与えることで，Javaで利用できます。

配列のHolderクラスも生成されます。その名前は，次のように配列がマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-18　配列のHolderクラス

final public class <array_class>Holder
       implements org.omg.CORBA.portable.Streamable {
   public <array_element_type>[ ] value;
   public <array_class>Holder( ) {}
   public <array_class>Holder(
            <array_element_type>[ ] initial) {...}
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode _type( ) {...}
}

コードサンプル2-19　配列のマッピング

// IDL
const long ArrayBound = 42;
typedef long larray[ArrayBound];

// generated Java
final public class larrayHolder
       implements org.omg.CORBA.portable.Streamable {
   public int[ ] value;
   public larrayHolder( ) {}
   public larrayHolder(int[ ] initial) {...}
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode_type( ) {...}
}

2.9　interface

IDLのインタフェースは，次に示す二つのJavaパブリックインタフェースにマッピングされます。

IDLインタフェースに宣言されたオペレーションと定数だけを格納するOperationsインタフェース

該当するインタフェースオペレーション，そのすべてのベースインタフェースオペレーション，およびorg.omg.CORBA.Objectを継承する，CORBAオブジェクト宣言

拡張子Helperの付いた追加Helperクラス名がインタフェース名に付加されます。Javaインタフェースはマッピングしたベースインタフェースorg.omg.CORBA.Objectを継承します。

Javaインタフェースは，マッピング後のオペレーションシグニチャを格納します。メソッドは，Javaインタフェースのオブジェクトリファレンスについて呼び出せます。

Helperクラスは静的narrowメソッドを宣言します。このメソッドによって，org.omg.CORBA.Objectのインスタンスをさらに詳細な型のオブジェクトリファレンスにナロウイングできます。オブジェクトリファレンスが要求型をサポートしていないためナロウイングに失敗すると，IDL例外CORBA::BAD_PARAMが発生します。別の種類のエラーを報告するためには，異なるシステム例外が発生します。nullのナロウイングは常にnullを返して成功します。

特別な「nil」オブジェクトリファレンスはありません。Javaのnullは，オブジェクトリファレンスに，いつでも自由に渡されます。

属性はJavaアクセッサと変更メソッドのペアにマッピングされます。これらのメソッドにはIDL属性と同じ名前があり，オーバーロードされます。IDL readonly属性に対する変更メソッドはありません。

interfaceのHolderクラスも生成されます。その名前は，次のようにインタフェースがマッピングされたJavaクラス名の後ろにHolderを付けたものです。

コードサンプル2-20　interfaceのHolderクラス

final public class <interface_class>Holder
      implements org.omg.CORBA.portable.Streamable {
   public <interface_class> value;
   public <interface_class>Holder( ) {}
   public <interface_class>Holder(
                   <interface_class> initial) {
       value = initial;
   }
   public void _read(org.omg.CORBA.portable.InputStream i)
       {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode _type( ) {...}
}

コードサンプル2-21　IDL interfaceのJavaへのマッピング

/*From Example.idl:*/
module Example {
   interface Foo {
       long method(in long arg)raises(AnException);
       attribute long assignable;
       readonly attribute long nonassignable;
   };
};

//Generated java
package Example;

public interface Foo extends
   com.inprise.vbroker.CORBA.Object,
   Example.FooOperations,
   org.omg.CORBA.portable.IDLEntity {
}
public interface FooOperations {
   public int method(int arg) throws Example.AnException;
   public int assignable( );
   public void assignable(int assignable);
   public int nonassignable( );
}

public final class FooHelper {
   //...other standard helper methods
   public static Foo narrow(org.omg.CORBA.Object obj)
       {...}
   public static Example.Foo bind(org.omg.CORBA.ORB orb,
       java.lang.String name,
       java.lang.String host,
       com.inprise.vbroker.CORBA.BindOptions _options)
                                                   {...}
   public static Example.Foo bind(org.omg.CORBA.ORB orb,
       java.lang.String fullPoaName, byte[ ] oid)) {...}
   public static Example.Foo bind(org.omg.CORBA.ORB orb,
       java.lang.String fullPoaName,byte[ ] oid,
       java.lang.String host,
       com.inprise.vbroker.CORBA.BindOptions _options)
                                                   {...}
   public Foo read(org.omg.CORBA.portable.InputStream in)
                                                   {...}
   public void write(org.omg.CORBA.portable.OutputStream
                     out, Foo foo) {...}
   public Foo extract(org.omg.CORBA.Any any) {...}
   public void insert(org.omg.CORBA.Any any, Foo foo)
                                                 {...}
}

public final class FooHolder
       implements org.omg.CORBA.portable.Streamable {
   public Foo value;
   public FooHolder( ) {}
   public FooHolder(final Foo initial) {...}
   public void _read(org.omg.CORBA.portable.InputStream i)
                                                     {...}
   public void _write(
                   org.omg.CORBA.portable.OutputStream o)
       {...}
   public org.omg.CORBA.TypeCode_type( ) {...}
}

注

リポジトリIDの長さが，512を2の（サーバエンジン数 -1）乗で割ったサイズ（単位：バイト）以下になるように，interfaceをIDLに記述してください。IDLで#pragmaを使用して，リポジトリIDを指定している場合も同様です。

上記のサイズを超える値を指定した場合，osagentとの通信が失敗することがあります。

＜この節の構成＞

2.9.1　abstractインタフェース

2.9.2　ローカルインタフェース

2.9.3　パラメタの受け渡し

2.9.4　継承によるサーバインプリメンテーション

2.9.5　デリゲーションを使用したサーバインプリメンテーション

2.9.6　インタフェーススコープ

2.9.1　abstractインタフェース

IDLのabstractインタフェースは，Javaの同名のパブリックインタフェースに1対1でマッピングされます。マッピングの規則は，abstract以外のIDL インタフェースにJavaのオペレーションインタフェースを生成する場合の規則と同様です。ただし，このインタフェースもシグニチャインタフェースとして動作するため，org.omg.CORBA.portable.IDLEntityを継承します。マッピング後のJavaインタフェースは，IDLインタフェースと同じ名前になります。また，指定した型のインタフェースがほかのインタフェースで使用されている場合，メソッド宣言でシグニチャ型としても使用されます。マッピング後のJavaインタフェースには，マッピングされたオペレーションシグニチャであるメソッドが格納されています。

Holderクラスはabstract以外のインタフェースに対して生成されます。詳細については，「2.5.2　Holderクラス」を参照してください。

Helperクラスも通常の規則に従って生成されます。詳細については，「2.6　Helperクラス」を参照してください。

2.9.2　ローカルインタフェース

IDLのローカルインタフェースは，ローカル以外のインタフェースと同様にマッピングされます。ただし，org.omg.CORBA.LocalInterfaceでマーキングされる点がローカル以外のインタフェースと異なります。ローカルインタフェースはマーシャル処理されない可能性があるため，インプリメンテーションでは，特殊なベースorg.omg.CORBA.LocalObjectを継承し，生成されたシグニチャインタフェースをインプリメントする必要があります。Javaのマッピングでは，LocalObjectクラスは，ローカルインタフェースのインプリメンテーションのベースクラスとして使用されます。ローカルインタフェースインプリメンテーションのインスタンスは，通常のJavaオブジェクトと同様に，Java演算子Newを使用して生成します。

Helperクラスも通常の規則に従って生成されます。詳細については，「2.6　Helperクラス」を参照してください。

ローカルオブジェクトのマーシャル処理を実行しようとすると，VisiBroker ORBのインプリメンテーションによって検出され，CORBA::MARSHAL例外が発生します。

2.9.3　パラメタの受け渡し

IDLのinパラメタはJavaでは通常の実パラメタにマッピングされます。IDLオペレーションの結果は，該当するJavaメソッドの結果として返されます。

IDLのoutパラメタおよびinoutパラメタは，Javaパラメタ受け渡しメカニズムに直接マッピングされません。Javaでこれらのパラメタモードをインプリメントするために使用されるすべてのIDL基本型とユーザ定義型を，マッピングが定義します。IDLのoutパラメタまたはinoutパラメタが（コールバイバリューで）渡されるホルダJavaクラスのインスタンスを，クライアントが提供します。ホルダインスタンスの内容（インスタンス自身ではない）は呼び出しによって変更され，呼び出しが返されると，クライアントは変更（された可能性のある）内容を使用します。

コードサンプル2-22　Java実パラメタへのinパラメタのマッピング

/*From Example.idl:*/
module Example {
   interface Modes {
       long operation(in long inArg, out long outArg,
                      inout long inoutArg);
   };
};

//Generated Java:
package Example;
public interface Modes extends
   com.inprise.vbroker.CORBA.Object,
   Example.ModesOperations,
   org.omg.CORBA.portable.IDLEntity {
}
public interface ModesOperations {
   public int operation(int inArg,
       org.omg.CORBA.IntHolder outArg,
       org.omg.CORBA.IntHolder inoutArg);
}

コードサンプル2-22では，結果は通常の結果として返され，実際のinパラメタは通常の値だけで返されます。しかし，outパラメタおよびinoutパラメタでは，該当するホルダが構成されなければなりません。一般的な使用例をコードサンプル2-23に示します。

コードサンプル2-23　outパラメタおよびinoutパラメタのHolder

// user Java code
// select a target object
Example.Modes target = ...;
// get the in actual value
int inArg = 57;
// prepare to receive out
IntHolder outHolder = new IntHolder( );
// set up the in side of the inout
IntHolder inoutHolder = new IntHolder(131);
// make the invocation
int result = target.operation(
                          inArg, outHolder, inoutHolder);
// use the value of the outHolder
... outHolder.value ...
// use the value of the inoutHolder
... inoutHolder.value ...

メソッド呼び出し前に，実際のパラメタとなるホルダインスタンスの中で，inoutパラメタの入力値が設定されなければなりません。inoutホルダは，値からの新ホルダを構成するか，または該当する型の既存のホルダの値に割り当てると満たされます。呼び出し後，クライアントはoutHolder.valueを使用してoutパラメタの値にアクセスし，inoutHolder.valueを使用してinoutパラメタの出力値にアクセスします。IDLオペレーションのリターン結果は，呼び出しの結果として利用できます。

2.9.4　継承によるサーバインプリメンテーション

サーバをインプリメントするいちばん簡単な方法は，継承を使用することです。それは，サーバオブジェクトとオブジェクトリファレンスが同じように見えて，同じように動作し，まったく同じコンテキストで使用できるからです。サーバオブジェクトがクライアントと同じプロセス内にある場合，メソッド呼び出しは，トランスポート，インディレクション（間接），または各種デリゲーションのない通常のJava関数呼び出しになります。

各IDLインタフェースがマッピングされるのは，対応するJava版IDLインタフェースをインプリメントするPOAのabstractクラスです。

注

POAクラスが（実際に）IDLインタフェースを継承しないということは，POAはCORBAオブジェクトではないということです。POAは，CORBAサーバントであり，（実際の）CORBAオブジェクトを作成するときに使用できます。POAクラスの詳細については，「4.　コアインタフェースとクラス（Java）」を参照してください。

ユーザ定義サーバクラスはコードサンプル2-24に示すとおり，<インタフェース名>POAクラスを継承することでVisiBroker ORBにリンクされます。

注

POAクラス自体はabstract型であり，実体化できません。POAクラスを実体化するには，宣言したIDLインタフェースオペレーションをインプリメントしてください。

コードサンプル2-24　継承を使用するJavaでのサーバインプリメンテーション

/*From Bank.idl:*/
module Bank {
   interface Account {
   };
};

// Generated java
package Bank;
public abstract class AccountPOA extends
   org.omg.PortableServer.Servant implements
   org.omg.CORBA.portable.InvokeHandler,
   Bank.AccountOperations {...}
// Linking an implementation to the ORB :
public class AccountImpl extends Bank.AccountPOA {...}

2.9.5　デリゲーションを使用したサーバインプリメンテーション

サーバをインプリメントするための継承には一つ欠点があります。サーバクラスはPOAスケルトンクラスを継承するため，ほかの目的でインプリメンテーション継承を使用できません。それは，Javaが単一の継承だけをサポートしているからです。サーバクラスが，ほかの目的で利用できる単独の継承リンクを使用しなければならない場合，デリゲーションする必要があります。

サーバクラスがデリゲーションを使用してインプリメントされる場合，追加のコードが生成されます。

各インタフェースは，POAスケルトンを継承するTieクラスにマッピングされ，デリゲーションコードを提供します。

各インタフェースは，Tieクラスがデリゲーションしているオブジェクトの型を定義するために使用されるOperationsインタフェースにもマッピングされます。

デリゲートされたインプリメンテーションはOperationsインタフェースをインプリメントする必要があり，Tieクラスのインスタンスに格納しなければいけません。OperationインタフェースのインスタンスをTieオブジェクトに格納するのは，Tieクラスで提供されるコンストラクタです。デリゲーションの使用例をコードサンプル2-25に示します。

コードサンプル2-25　デリゲーションを使用したJavaでのサーバインプリメンテーション

/*From Bank.idl:*/
module Bank {
   interface AccountManager {
       Account open(in string name);
   };
};

//Generated java
package Bank;
public interface AccountManagerOperations {
   public Example.Account open(java.lang.String name);
}
//Generated java
package Bank;
public class AccountManagerPOATie extends
       AccountManagerPOA {
   public AccountManagerPOATie(
           final Bank.AccountManagerOperations _delegate)
         {...}
   public AccountManagerPOATie(
           final Bank.AccountManagerOperations _delegate,
           final org.omg.PortableServer.POA _poa){...}
   public Bank.AccountManagerOperations _delegate ( ){...}
   public void _delegate(
           final Bank.AccountManagerOperations delegate)
                                                    {...}
   public org.omg.PortableServer.POA _default_POA( ){...}
   public float open( ){...}
}
//Linking an implementation to the ORB :
//classAccountImpl implements AccountManager Operations
public class Server {
   public static main(String args){
       //...
       AccountManagerPOAtie managerServant =
           new AccountManagerPOATie(
               new AccountManagerImpl( ));
       //...
}

2.9.6　インタフェーススコープ

OMGのIDL/Java言語マッピング仕様は，インタフェースのスコープ内で宣言をネストしたり，パッケージとインタフェースに同じ名前を付けたりすることを認めていません。そこで，インタフェーススコープは，「Package」が後ろに付いた同じ名前のパッケージにマッピングされます。

2.10　例外のマッピング

IDL例外はstructsとまったく同じようにマッピングされます。例外のフィールドのインスタンス変数やコンストラクタを提供するJavaクラスに，IDL例外はマッピングされます。

CORBAシステム例外はチェックされない例外です。CORBAシステム例外は，java.lang.RuntimeExceptionから（間接的に）継承されます。

ユーザ定義例外はチェックされる例外です。ユーザ定義例外は，java.lang.Exceptionから（間接的に）継承されます。

＜この節の構成＞

2.10.1　ユーザ定義例外

2.10.2　システム例外

2.10.1　ユーザ定義例外

ユーザ定義例外は，org.omg.CORBA.UserExceptionを継承するファイナルJavaクラスにマッピングされます。そうでない場合，HelperクラスおよびHolderクラスの生成があるIDL struct型のようにマッピングされます。

例外が，ネストされたIDLスコープ内（特に，インタフェース内）で定義される場合，そのJavaクラス名は特殊スコープ内に定義されます。そうでない場合，そのJavaクラス名は，例外のあるIDLモジュールに対応するJavaパッケージのスコープ内に定義されます。

コードサンプル2-26　ユーザ定義例外のマッピング

//IDL
module Example {
   exception AnException {
       string reason;
   };
};

//Generated Java
package Example;
public final class AnException extends
   org.omg.CORBA.UserException {
   public java.lang.String extra;
   public AnException( ) {...}
   public AnException(java.lang.String extra) {...}
   public AnException(java.lang.String _reason,
                      java.lang.String extra) {...}
   public java.lang.String to String( ) {...}
   public boolean equals(java.lang.Object o) {...}
}

public final class AnExceptionHolder implements
       org.omg.CORBA.portable.Streamable {
   public Example.AnException value;
   public AnExceptionHolder( ){}
   public AnExceptionHolder(
              final Example.AnException _vis_value) {...}
   public void _read(final org.omg.CORBA.portable.
                                 InputStream input) {...}
   public void _write(final org.omg.CORBA.portable.
                               OutputStream output) {...}
   public org.omg.CORBA.TypeCode _type( ) {...}
}

2.10.2　システム例外

標準IDLシステム例外は，org.omg.CORBA.SystemExceptionを継承するファイナルJavaクラスにマッピングされます。例外の理由を記述する文字列と同様に，IDLのメジャーおよびマイナー例外コードへのアクセスを提供します。org.omg.CORBA.SystemExceptionのパブリックコンストラクタはありません。それを継承するクラスだけが実体化できます。

各標準IDL例外のJavaクラス名は，そのIDL名と同じで，org.omg.CORBAパッケージにあるよう宣言されます。デフォルトコンストラクタは，マイナーコードに0，完了コードにCOMPLETED_NO，理由文字列に空の文字列（""）を提供します。理由文字列を取りながら，ほかのフィールドにデフォルトを使用するコンストラクタもあれば，三つのパラメタに指定が必要なコンストラクタもあります。

2.11　Any型のマッピング

IDL型Anyは，Javaクラスorg.omg.CORBA.Anyにマッピングされます。このクラスには，事前に定義された型のインスタンスを挿入，または抽出するために必要な，すべてのメソッドがあります。抽出オペレーションに不一致型があると，CORBA::BAD_OPERATION例外が発生します。

さらに，ポータブルスタブとスケルトンで使用される高速インタフェースを提供するため，Holderクラスを取る挿入メソッドおよび抽出メソッドが定義されます。非基本IDL型の場合を処理するために，一般的なストリーム可能な型用のメソッドがあるほかに，各基本IDL型用に定義された挿入メソッド，および抽出メソッドがあります。挿入メソッドおよび抽出メソッドの詳細については，「5.1.2　Anyの抽出メソッド」および「5.1.3　Anyの挿入メソッド」を参照してください。

挿入オペレーションは指定された値を設定し，必要に応じてAnyの型をリセットします。

type( )アクセッサでのタイプコードの設定は，値を消去します。値が設定される前に抽出しようとすると，CORBA::BAD_OPERATION例外が発生します。このオペレーションは，主にIDL outパラメタに型が正しく設定されるようにするために提供されています。

2.12　ネストされた型のマッピング

IDLでは型宣言をインタフェース内でネストできます。Javaではクラスをインタフェース内でネストできません。そのため，インタフェースのスコープ内で宣言されるIDL型は，Javaクラスにマッピングされる際，特殊なスコープパッケージ内にマッピングされます。

これらの型宣言を含むIDLインタフェースは，スコープパッケージを生成し，マッピングされたJavaクラス宣言を含みます。スコープパッケージ名は，IDL型名に「Package」を付けて構成されます。

コードサンプル2-27　ネストされた型のマッピング

// IDL
module Example {
   interface Foo {
     exception e1 {};
   };
};

// generated Java
package Example.FooPackage;
final public class e1 extends
   org.omg.CORBA.UserException {...}

2.13　typedefのマッピング

Java 2 SDK 1.4の言語仕様の変更によって，パッケージのないクラスのimport文は，コンパイルエラーとなるようになりました。IDLファイル内でtypedef宣言を行う場合は，module文の中で宣言するようにしてください。

＜この節の構成＞

2.13.1　シンプルIDL型

2.13.2　複合IDL型

2.13.1　シンプルIDL型

シンプルJava型にマッピングされるIDL型は，Javaにサブクラス化されないことがあります。このため，シンプル型の型宣言であるtypedefは，typedef型が現れるオリジナル（マッピングされた型）にマッピングされます。シンプルIDL型では，すべてのtypedefでHelperクラスが生成されます。

2.13.2　複合IDL型

非配列および非シーケンスのtypedefは，各種非typedefのシンプルIDL型，またはユーザ定義IDL型が現れるまで，オリジナルの型に「展開」されません。

Holderクラスは，シーケンスtypedefおよび配列 typedefで生成されます。

コードサンプル2-28　複合idl typedefのマッピング

// IDL
struct EmpName {
  string firstName;
  string lastName;
};
typedef EmpName EmpRec;

// generated Java
   // regular struct mapping for EmpName
   // regular helper class mapping for EmpRec

final public class EmpName {
   ...
}

public class EmpRecHelper {
   ...
}

3.　生成されるインタフェースとクラス（Java）

この章では，idl2javaコンパイラで生成されるクラスについて説明します。

＜この章の構成＞

3.1　概要

3.2　<interface_name>Operations

3.3　<type_name>Helper

3.4　<type_name>Holder

3.5　_<interface_name>Stub

3.6　<interface_name>POA

3.7　<interface_name>POATie

3.1　概要

org.omg.CORBAパッケージのほとんどのクラスには，HelperクラスとHolderクラスが提供されています。

また，ユーザが定義した型に対しては，idl2javaコンパイラがHelperクラスとHolderクラスを生成します。HelperクラスとHolderクラスには，型に対して生成されたクラスの名前の末尾に「Holder」または「Helper」を付けた名前が付けられます。例えば，MyTypeと名づけられたユーザ定義型を指定すると，idl2javaコンパイラでは次のように生成されます。

public class MyType

public class MyTypeOperations

public class MyTypeHelper

public class MyTypeHolder

public class MyTypePOA

public class MyTypePOATie

public class _MyTypeStub

＜この節の構成＞

3.1.1　SignatureクラスとOperationsクラス

3.1.2　補助クラス

3.1.3　ポータビリティスタブインタフェースとポータビリティスケルトンインタフェース

3.1.1　SignatureクラスとOperationsクラス

これらのクラス（MyTypeとMyTypeOperations）は，Javaにマッピングされると，ユーザのIDLインタフェースの完全なシグニチャを提供します。

Signatureクラス

Signatureクラスは，IDLファイルに宣言するインタフェースごとにシグニチャインタフェースを定義します。

Operationsクラス

Operationsクラスは，オブジェクトインプリメンテーションでインプリメントされなければならないすべてのメソッドを定義します。このクラスは，tie機能を使用する場合，対応するtieクラスのデリゲーションオブジェクトとして動作します。

3.1.2　補助クラス

すべてのユーザ定義型にはHelperクラスとHolderクラスが生成されます。

Helperクラス

abstract Helperクラスは，idl2javaコンパイラが生成し，関連オブジェクトで動作させるためのユティリティメソッドを提供します。Helperクラスの目的は，必要のないときにクラスが提供するメソッドをロードしないようにするためです。

マッピングした構造体，列挙体，共用体，例外，valuetype，valueboxなどのオブジェクトに対して，Helperクラスはストリームからオブジェクトを読み込んだり，書き込んだり，オブジェクトのリポジトリIDを返したりするためのメソッドを提供しています。インタフェース用に生成されたHelperクラスには，bindやnarrowのようなメソッドもあります。

Holderクラス

Java言語では，パラメタは参照型ではなく，値でだけ渡されます。Holderクラスは，オペレーションリクエストに対応するoutパラメタ，およびinoutパラメタの受け渡しだけをサポートするために使用されます。Holderクラスのインタフェースは，すべての型で統一されています。

3.1.3　ポータビリティスタブインタフェースとポータビリティスケルトンインタフェース

IDLからJava言語へのマッピングには，オブジェクトのローカル呼び出しとリモート呼び出しの両方に使用できるスタブクラスが定義されています。スケルトンクラスはストリーム単位またはDSI単位で生成されます。

注

ローカルインタフェースには，スタブクラスもスケルトンクラスもありません。ローカルインタフェースの詳細については，「2.9.2　ローカルインタフェース」を参照してください。

スタブクラス

スタブクラスは，クライアントが呼び出す<interface_name>にスタブのインプリメンテーションを提供します。すべてのスタブはorg.omg.CORBA.portable.ObjectImplから継承します。

POAクラス

ストリームベースのスケルトンはorg.omg.PortableServer.Servantを継承し，DSIベースのスケルトンはorg.omg.PortableServer.DynamicImplementationを継承します。abstractクラスのPOAは，サーバ側のクラスのインプリメンテーションへのインタフェースを提供します。

POATieクラス

POATieクラスは<interface_name>POAクラスを継承します。POATieクラスによって，<interface_name>Operationsメソッドの呼び出しを，同じメソッドをインプリメントするほかのオブジェクトにデリゲートできます。POATieクラスを使用しなくてもかまいませんが，POATieクラスを使用しないときは，<interface_name>Implクラスに直接abstractクラスの<interface_name>POAを継承させなければならないことがあります。

3.2　<interface_name>Operations

public interface <interface_name>Operations

idl2javaコンパイラが生成するOperationsクラスは，IDLファイルに記述したインタフェース（<interface_name>）に対して宣言したメソッドと定数のインタフェース定義を格納します。

3.3　<type_name>Helper

abstract public class <type_name>Helper

Helperクラスは，org.omg.CORBAパッケージのほとんどのクラスに提供されます。また，Helperクラスは，すべてのユーザ定義型用にidl2javaコンパイラで生成されます。型用に生成されるクラス名の後ろにはHelperが追加されます。各種静的メソッドがクラスを処理するために提供されています。

＜この節の構成＞

3.3.1　Helperのメソッド

3.3.2　インタフェース用に生成されるメソッド

3.3.3　オブジェクトラッパー用に生成されるメソッド

3.3.1　Helperのメソッド

public static <interface_name> extract(
org.omg.CORBA.Any any)
このメソッドは，指定されたAnyオブジェクトから型を抽出します。

any
オブジェクトを含んでいるAnyオブジェクト

public static String id ( )
このメソッドは，オブジェクトのリポジトリIDを取得します。

public static void insert(
org.omg.CORBA.Any any,
<type_name> value)
このメソッドは，指定されたAnyオブジェクトに型を挿入します。

any
型を含むためのAnyオブジェクト

value
挿入する型

public static <type_name> read(
org.omg.CORBA.portable.InputStream input)
このメソッドは，指定された入力ストリームから型を読み出します。

input
オブジェクトが読み出される入力ストリーム

public static org.omg.CORBA.TypeCode type( )
このメソッドは，該当するオブジェクトに対応するTypeCodeを返します。リターン値の一覧については，「5.23　TCKind」を参照してください。

public static void write(
org.omg.CORBA.portable.OutputStream output,
<type_name> value)
このメソッドは，指定された出力ストリームに型を書き込みます。

output
オブジェクトが書き込まれる出力ストリーム

value
出力ストリームに書き込まれる型

3.3.2　インタフェース用に生成されるメソッド

public static <interface_name> bind(
org.omg.CORBA.ORB orb)
このメソッドは，<interface_name>型のオブジェクトの任意のインスタンスにバインドします。

public static <interface_name> bind(
org.omg.CORBA.ORB orb,
java lang String name)
このメソッドは，指定したインスタンス名のある<interface_name>型のオブジェクトにバインドします。

name
指定したオブジェクトのインスタンス名

bind(
org.omg.CORBA.ORB orb,
java.lang.String fullPoaName, byte[ ] oid)

orb
サーバが使用するVisiBroker ORB。ORB.initメソッドの呼び出しによって取得されます。

fullPoaName
絶対パスで記述されたPOA名

oid
リファレンスを生成するオブジェクトの識別子

public static <interface_name> narrow(
org.omg.CORBA.Object object)
このメソッドは，org.omg.CORBA.Objectリファレンスを，<interface_name>型のオブジェクトにナロウイングします。オブジェクトリファレンスをナロウイングできない場合，CORBA.BAD_PARAM例外またはnullが返されます。

object
<interface_name>型にナロウイングされるオブジェクト

3.3.3　オブジェクトラッパー用に生成されるメソッド

次に示すメソッドは，idl2javaを-obj_wrapperオプションで発行する場合に，Helperクラスに生成されます。-obj_wrapperオプションの詳細については，「1.4　idl2java」を参照してください。オブジェクトラッパー機能の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクトラッパーの使用」の記述を参照してください。

public static void addClientObjectWrapperClass(
org.omg.CORBA.ORB orb, java.lang.Class c)
クライアントアプリケーションからタイプドオブジェクトラッパーを追加します。タイプドオブジェクトラッパーが複数インストールされている場合は，登録された順に追加されます。

注

このメソッドは，クライアントアプリケーションだけで呼び出してください。

orb
クライアントが使用するVisiBroker ORB。ORB.initメソッドの呼び出しで取得されます。ただし，このバージョンでは，orbパラメタは使用できません。

c
追加するオブジェクトラッパー

public static void addServerObjectWrapperClass(
org.omg.CORBA.ORB orb, java.lang.Class c)
サーバアプリケーションからタイプドオブジェクトラッパーを追加します。タイプドオブジェクトラッパーが複数インストールされている場合は，登録された順に追加されます。

注

このメソッドは，サーバアプリケーションだけで呼び出してください。

orb
サーバが使用するVisiBroker ORB。ORB.initメソッドの呼び出しで取得されます。ただし，このバージョンでは，orbパラメタは使用できません。

c
追加するオブジェクトラッパー

public static void removeClientObjectWrapperClass(
org.omg.CORBA.ORB orb, java.lang.Class c)
クライアントアプリケーションからタイプドオブジェクトラッパーを削除します。

注

このメソッドは，クライアントアプリケーションだけで呼び出してください。

orb
クライアントが使用するVisiBroker ORB。ORB.initメソッドの呼び出しで取得されます。

c
削除するオブジェクトラッパー

public static void removeServerObjectWrapperClass(
org.omg.CORBA.ORB orb, java.lang.Class c)
サーバアプリケーションからタイプドオブジェクトラッパーを削除します。

注

このメソッドは，サーバアプリケーションだけで呼び出してください。

orb
サーバが使用するVisiBroker ORB。ORB.initメソッドの呼び出しで取得されます。

c
削除するオブジェクトラッパークラス

3.4　<type_name>Holder

public final class <type_name>Holder

Holderクラスは，org.omg.CORBAパッケージ内のすべての基本IDL型に提供されます。また，idl2javaコンパイラによって，すべてのユーザ定義型に対してもHolderクラスが生成されます。ユーザ定義型のために生成されたクラス名の後ろにHolderが追加されます。各Holderには，コンストラクタと型付きの値であるメンバのセットがあります。

基本型のHolderクラスは，次のように定義されます。基本型のHolderクラスは，org.omg.CORBAパッケージ内にあります。

public class ShortHolder

public class IntHolder

public class LongHolder

public class ByteHolder

public class FloatHolder

public class DoubleHolder

public class CharHolder

public class BooleanHolder

public class StringHolder

public class ObjectHolder

public class AnyHolder

public class TypeCodeHolder

public class PrincipalHolder

ユーザ定義型<type_name>のHolderクラスをコードサンプル3-1に示します。

コードサンプル3-1　Holderクラス

// Java
final public class <type_name>Holder
  implements org.omg.CORBA.portable.Streamable {
  public <type_name> value;
  public <type_name>Holder( ) {}
  public <type_name>Holder(<type_name> initial)
                                                       {}
  public void _read(org.omg.CORBA.portable.InputStream i)
      {...};
  public void _write(
                   org.omg.CORBA.portable.OutputStream o)
      {...};
  public org.omg.CORBA.TypeCode _type( ) {...}
}

＜この節の構成＞

3.4.1　メンバデータ

3.4.2　Holderのメソッド

3.4.1　メンバデータ

public <type_name> value

この値は，このオブジェクトが含む型を表します。

3.4.2　Holderのメソッド

public <type_name> Holder( )
デフォルトコンストラクタは，outパラメタで使用すると便利です。デフォルトコンストラクタは，Java言語の定義に従って，値フィールドに型のデフォルト値を設定します。値は，boolean型ではfalseに設定されます。整数型およびchar型では0に，文字列およびオブジェクトリファレンスではnullが設定されます。

public <type_name> Holder(
<interface_name> initial)
値コンストラクタは，inoutパラメタで使用すると便利です。valueフィールドは指定されたAnyオブジェクトのvalueフィールドからコピーされます。

initial
Holderが含んでいる，そのほかのオブジェクト

3.5　_<interface_name>Stub

abstract public class _<interface_name>Stub

idl2javaコンパイラが生成するスタブクラスは，クライアントが呼び出す<interface_name>にスタブのインプリメンテーションを提供します。このクラスが提供するインプリメンテーションは，オブジェクトのインプリメンテーションを透過的に動作させます。

3.6　<interface_name>POA

abstract public class <interface_name>POA

このクラスは，指定したインタフェースにPOAスケルトン（サーバント）クラスを提供します。このクラスは<interface_name>Operationsインタフェースにインプリメンテーションを提供しません。<interface_name>Implクラスをインプリメントする際に，このクラスを継承してください。

3.7　<interface_name>POATie

abstract public class <interface_name>POATie

idl2javaコンパイラが生成するtieクラスは，<interface_name>POAにデリゲータクラスを作成します。

＜この節の構成＞

3.7.1　tieのメソッド

3.7.1　tieのメソッド

public <interface_name>POATie(
final <interface_name>Operations _delegate)
このメソッドはコンストラクタです。<interface_name>Operationsインタフェースをインプリメントしてデリゲートオブジェクトとして使用するオブジェクトをこのメソッドに渡します。

public <interface_name>POATie(
final <interface_name>Operations _delegate,
final org.omg.PortableServer.POA _poa)
このメソッドは，デリゲートオブジェクトとデフォルトPOAサーバントを初期化するコンストラクタです。

4.　コアインタフェースとクラス（Java）

この章では，Java言語のコアインタフェースとクラスについて説明します。

＜この章の構成＞

4.1　CompletionStatus

4.2　Context

4.3　InvalidName

4.4　Object

4.5　ORB

4.6　Policy

4.7　PortableServer.AdapterActivator

4.8　PortableServer.Current

4.9　PortableServer.POA

4.10　PortableServer.POAManager

4.11　PortableServer.POAManagerPackage.State

4.12　PortableServer.ServantActivator

4.13　PortableServer.ServantLocator

4.14　PortableServer.ServantManager

4.15　PortableServer.ForwardRequest

4.1　CompletionStatus

public final class org.omg.CORBA.CompletionStatus extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，SystemExceptionで動作し，例外が発生する前にオペレーションが完了したかどうかを示します。

＜この節の構成＞

4.1.1　IDLの定義

4.1.2　CompletionStatusのメンバ

4.1.3　CompletionStatusのメソッド

4.1.1　IDLの定義

enum CompletionStatus {
   COMPLETED_YES,
   COMPLETED_NO,
   COMPLETED_MAYBE
};

4.1.2　CompletionStatusのメンバ

COMPLETED_YES
オペレーションが無事完了したことを表します。

COMPLETED_NO
例外，またはエラーの発生のため，オペレーションが開始されなかったことを表します。

COMPLETED_MAYBE
例外，またはエラーの発生のため，オペレーションが完了しなかった可能性があることを表します。

4.1.3　CompletionStatusのメソッド

このメソッドの詳細については，「2.8.1　enum」を参照してください。

public final static int _COMPLETED_YES
public final static int _COMPLETED_NO
public final static int _COMPLETED_MAYBE
public final static CompletionStatus COMPLETED_YES
public final static CompletionStatus COMPLETED_NO
public final static CompletionStatus COMPLETED_MAYBE
public int value( )
public static CompletionStatus from_int(int value)

4.2　Context

public abstract class org.omg.CORBA.Context extends
   java.lang.Object

このクラスには，クライアントのプロパティリストを含みます。このプロパティリストは，クライアントがリクエストをするときにサーバにプロパゲーションされます。CORBA仕様ではContextの内容を定義しないため，これらのプロパティを定義するのは，ユーザと実装者に任されます。Contextオブジェクトは，親コンテキストに対するポインタをそれぞれ含むツリーとして編成されます。ルートコンテキストはglobal default contextで，親はnullになります。デフォルトコンテキストは，ORB.get_default_contextメソッドを使用することで取得されます。ORB.get_default_contextメソッドの詳細については，「4.5　ORB」を参照してください。

org.omg.CORBA.Contextに設定するプロパティの値にstring以外のIDL型を指定すると，invoke時にorg.omg.CORBA.BAD_PARAMが発生します。

org.omg.CORBA.Contextに設定するプロパティのflagsに0以外の値を指定しても，invoke時にorg.omg.CORBA.INV_FLAGSが発生しません。

＜この節の構成＞

4.2.1　IDLの定義

4.2.2　Contextのメソッド

4.2.1　IDLの定義

interface Context {
   CORBA::Identifier context_name( );
   CORBA::Context parent( );
   void set_one_value(
       in CORBA::Identifier prop_name,
       in any value
   );
   void set_values(
       in CORBA::NVList values
   );
   CORBA::NVList get_values(
       in CORBA::Identifier start_scope,
       in boolean restrict_scope,
       in CORBA::Identifier prop_name
   );
   void delete_values(
       in CORBA::Identifier prop_name
   );
   CORBA::Context create_child(
       in CORBA::Identifier context_name
   );
};

4.2.2　Contextのメソッド

public java.lang.String context_name( )
このメソッドは，このContext名を返します。

public Context create_child(
java.lang.String context_name)
このメソッドは，指定された親Contextで子Contextを生成します。また，新しく生成された子コンテキストを返します。

context_name
生成される子コンテキスト名

public void delete_values(
java.lang.String prop_name)
このメソッドは，カレントのContextから指定された名前ですべてのプロパティを削除します。prop_nameのいちばん後ろには，ワイルドカードとしてアスタリスク（*）を使用できます。

prop_name
削除されるプロパティ名

public org.omg.CORBA.NVList get_values(
java.lang.String start_scope,
int restrict_scope,
java.lang.String prop_name)
このメソッドは，カレントのContextに対応するプロパティを名前と値のペアであるNVListとして返します。Context検索の範囲は，start_scopeパラメタおよびrestrict_scopeパラメタを使用して制限できます。prop_nameのいちばん後ろには，ワイルドカードとしてアスタリスク（*）を使用できます。
このメソッドは，指定された検索の結果の名前と値のリストを返します。start_scopeがnullでなく，該当するContextが見つからない場合，このメソッドはBAD_PARAM例外となります。
また，このメソッドは，prop_nameに空の文字列を指定するとBAD_PARAM例外となります。
prop_nameに指定したプロパティ名が見つからない場合は，要素数が0のorg.omg.CORBA.NVListが返ります。
メモリの確保に失敗した場合は，NO_MEMORY例外になります。

start_scope
検索を始めるコンテキスト名

restrict_scope
オペレーションフラグ。設定可能なフラグの一つはCTX_RESTRICT_SCOPEです。このフラグが設定されると，メソッドによる探索は設定されたstart_scope内またはContextオブジェクト内に制限されます。

prop_name
返されるプロパティ名

public org.omg.CORBA.Context parent( )
このメソッドは，このオブジェクトの親Contextを返します。オブジェクトがデフォルトグローバルコンテキストである場合，NULLを返します。

public void set_one_value(
java.lang.String prop_name,
org.omg.CORBA.Any value)
このメソッドは，新規プロパティをカレントのContextに追加します。プロパティの値は，Anyクラスで表示されます。Anyの詳細については，「5.1　Any」を参照してください。

prop_name
新規プロパティ名

value
新規プロパティの値を含むAnyオブジェクト

public void set_values(
org.omg.CORBA.NVList values)
このメソッドは，複数の名前と値のペアを含む，提供されたNVListを使用して，カレントのContextのプロパティを設定します。NVListについては，「5.19　NVList」を参照してください。

values
Contextのプロパティリスト

4.3　InvalidName

public final class org.omg.CORBA.ORBPackage.InvalidName extends
   org.omg.CORBA.UserException

ORB.resolve_initial_referencesメソッドでこの例外が発生します。詳細については，「4.5.2　JDKでのORBメソッド」のresolve_initial_referencesメソッドを参照してください。

このクラスのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

4.4　Object

public interface org.omg.CORBA.Object

このインタフェースは，CORBA継承階層のルートです。IDLで定義されたすべてのインタフェースは，このインタフェースから継承されます。このインタフェースは，プラットフォームに依存しないランタイムの型情報とオブジェクトリファレンスの等価テストを提供します。

VisiBrokerではorg.omg.CORBA.Objectにメソッドを幾つか追加して拡張しています。この拡張の階層関係を次の図に示します。

図4-1　org.omg.CORBA.Objectの階層とObjectインタフェースの位置づけ

この二つのインタフェースの詳細を次に説明します。

＜この節の構成＞

4.4.1　org.omg.CORBA.Objectの定義

4.4.2　org.omg.CORBA.Objectのメソッド

4.4.3　VisiBrokerでのObjectの継承

4.4.4　VisiBrokerでのObjectのメソッドの継承

4.4.1　org.omg.CORBA.Objectの定義

package org.omg.CORBA;
public interface Object {
   Request _create_request(
       Context ctx,
       String operation,
       NVList arg_list,
       NamedValue result
   );

   Request _create_request(
       Context ctx,String operation,
       NVList arg_list,
       NamedValue result,
       ExceptionList exclist,
       ContextList ctxlist
   );
   org.omg.CORBA.Object _duplicate( );
   DomainManager [ ] _get_domain_managers( );
   org.omg.CORBA.Object _get_interface_def( );
   Policy _get_policy(int policy_type);
   int _hash(int maximum);
   boolean _is_a(String repositoryIdentifier);
   boolean _is_equivalent(org.omg.CORBA.Object other);
   boolean _non_existent( );
   void _release( );
   Request _request(String operation);
   org.omg.CORBA.Object _set_policy_override(
       Policy [ ] policies,
       SetOverrideType set_add
   );
}

4.4.2　org.omg.CORBA.Objectのメソッド

public org.omg.CORBA.Request _create_request(
org.omg.CORBA.Context ctx,
java.lang.String operation,
org.omg.CORBA.NVList arg_list,
org.omg.CORBA.NamedValue result)
このメソッドは，指定されたパラメタで初期化される動的起動リクエストを生成します。デフォルトコンテキストの取得については，「4.5.2　JDKでのORBメソッド」のget_default_contextメソッドを参照してください。

ctx
動的起動リクエストに使用されるContext

operation
呼び出されるオペレーション名

arg_list
NamedValue項目のリスト。オペレーションに渡される各パラメタには，NamedValueが一つあります。

result
オペレーションの結果

public org.omg.CORBA.Request _create_request(
org.omg.CORBA.Context ctx,
java.lang.String operation,
org.omg.CORBA.NVList arg_list,
org.omg.CORBA.NamedValue result,
org.omg.CORBA.ExceptionList exceptions,
ContextList contexts)
このメソッドは，指定パラメタで初期化される動的起動リクエストを生成します。動的起動リクエストの生成には，リクエストで発生する例外のリストが含まれます。デフォルトコンテキストの取得については，「4.5.2　JDKでのORBメソッド」のget_default_contextメソッドを参照してください。

ctx
動的起動リクエストに使用されるContext

operation
呼び出されるオペレーション名

arg_list
NamedValue項目のリスト。オペレーションに渡される各パラメタには，NamedValueが一つあります。

result
オペレーションの結果

exceptions
該当するリクエストで発生する例外を表す，Typecodeオブジェクトのリスト

contexts
Contextオブジェクトのリスト。Contextオブジェクトのリストは，コンテキスト名をチェックする型をサポートします。

public int _hash(
int maximum)
このメソッドは，0からmaximumの範囲の，このオブジェクトのハッシュ値を算出します。常に正の値を返します。

maximum
返される最大ハッシュ値

public boolean _is_a(
java.lang.String repid)
このメソッドは，指定されたインタフェースをインプリメントしているかどうかを知るためにオブジェクトに問い合わせます。このメソッドは，インプリメンテーションオブジェクトがインタフェースをサポートしている場合，trueを返します。そうでない場合，falseを返します。

repid
要求するインタフェースのリポジトリIDを含む文字列

注

次の例に示すように，指定されたサーバは多重継承で複数のインタフェースを同時にインプリメントできます。そのため，このメソッドの呼び出しは，インプリメンテーションオブジェクトに対する呼び出しとなる場合があります。

module M {
   interface A {
       void opA( );
   };
   interface B {
       void opB( );
   };
   interface C : A ,B {
   };
};

モジュールMにインタフェースAが指定されている場合（M::A），該当するリポジトリIDは，一般的にIDL:M/A:1.0です。リポジトリIDは，IDLファイルの中で#pragmasを使用して，任意文字列にも設定されます。

public boolean _is_equivalent(
org.omg.CORBA.Object other_object)
このメソッドは，このオブジェクトのインターオペラブルオブジェクトリファレンス（IOR）を指定されたオブジェクトのIORと比較し，IORが同じ値である場合trueを返します。そうでない場合，falseを返します。同じインプリメンテーションオブジェクトが複数のIORで参照される場合，falseを取得することがあります。

other_object
このオブジェクトと比較されるオブジェクトのリファレンス

public boolean _non_existent( )
このメソッドは，インプリメンテーションオブジェクトが活性化されているかどうかを調べるためにインプリメンテーションオブジェクトをpingします。このメソッドは，インプリメンテーションオブジェクトが現在，活性化されている場合（または，サーバを活性化したあとで），falseを返します。そうでない場合，trueを返します。このメソッドは，クライアントのプロキシオブジェクトがほかのサーバに再バインドする原因にはなりません。つまり，強制的にバインドをしますが，強制的に再バインドはしません。サーバにアクセスできない場合は，TRANSIENT例外を返します。vbroker.orb.compliantExceptionsプロパティをfalseに設定すると，例外ではなくtrueを返します。これによって，下位互換性が保たれます。
リバインドポリシーがVB_TRANSPARENTとVB_NOTIFY_REBINDの場合に，クライアントがサーバに対して通信障害を検知した状態で，同一リファレンスを使用してorg.omg.CORBA.Object._non_existent( )を発行すると，暗黙的な接続を試みずにTRANSIENT例外が発生します。この状態で再接続による確認を行うためには，org.omg.CORBA.Object._non_existent( )以外のユーザメソッドを使用してください。

public org.omg.CORBA.Request _request(
java.lang.String operation)
このメソッドは，空の動的起動リクエストを生成します。オペレーションのINパラメタおよびINOUTパラメタの型と値，OUTパラメタの型，およびリターン値の型は，リクエスト送信前に初期化する必要があります。オペレーションによるユーザ例外が発生する場合は，ユーザ例外のタイプコードのリストをリクエスト送信前に初期化する必要があります。コンテキストを使用する場合は，コンテキストリストをリクエスト送信前に初期化する必要があります。動的起動リクエストの初期化と送信の詳細については，「5.21　Request」を参照してください。

operation
呼び出されるオペレーション名

4.4.3　VisiBrokerでのObjectの継承

Package com.inprise.vbroker.CORBA;

public interface Object extends org.omg.CORBA.Object {
   public void _bind( );
   public org.omg.CORBA.Policy _get_client_policy(
                                        int policy_type);
   public org.omg.CORBA.Policy[ ] _get_policy_overrides(
                                        int[ ] types);
   public com.inprise.vbroker.IOP.IOR _ior( );
   public com.inprise.vbroker.IOP.IORValue _ior_value( );
   public boolean _is_bound( );
   public boolean _is_local( );
   public boolean _is_persistent( );
   public boolean _is_remote( );
   public java.lang.String _object_name( );
   public org.omg.CORBA.ORB _orb( );
   public java.lang.String _repository_id( );
   public org.omg.CORBA.Object _resolve_reference(
                                    java.lang.String id);
   public boolean _validate_connection(
       org.omg.CORBA.PolicyListHolder
                                    inconsistent_policies
   );
}

4.4.4　VisiBrokerでのObjectのメソッドの継承

public boolean _is_bound( )
このメソッドは，TCPコネクションがインプリメンテーションオブジェクトで設定されている場合，trueを返します。そうでない場合，falseを返します。

public boolean _is_local( )
このメソッドは，このオブジェクトがローカルアドレス空間内でインプリメントされたオブジェクトを参照する場合，trueを返します。そうでない場合，falseを返します。

public boolean _is_persistent( )
このメソッドは，このオブジェクトリファレンスがオブジェクトをインプリメントするプロセスの存続期間を超えて有効である場合にtrueを返します。そうでない場合，falseを返します。

public boolean _is_remote( )
このメソッドは，このオブジェクトがリモートアドレス空間でインプリメントされたオブジェクトを参照している場合にtrueを返します。そうでない場合，falseを返します。

public java.lang.String _repository_id( )
このメソッドは，オブジェクトインプリメンテーションのインタフェースのリポジトリIDを返します。

public org.omg.CORBA.Object _resolve_reference(
java.lang.String id)
このメソッドは，指定されたサービス識別子でサーバ側のインタフェースを解決するため，クライアントアプリケーションからオブジェクトリファレンスに対して呼び出されます。このメソッドは，サーバ側でORB.resolve_initial_referencesメソッドを呼び出させます。ORB.resolve_initial_referencesメソッドの詳細については，「4.5.2　JDKでのORBメソッド」のresolve_initial_referencesメソッドを参照してください。クライアントが特定のサーバ型にナロウイングできる，オブジェクトリファレンスを返します。

id
サーバ側で解決されるインタフェース名

4.5　ORB

public abstract class org.omg.CORBA.ORB extends java.lang.Object

このクラスは，コードサンプル4-1に示すように，CORBAの基盤を初期化するメソッドを提供します。ORBは，クライアントとサーバの両方で使用される各種メソッドを提供します。

JDKにはCORBA 2.4で規定されているよりもわずかに古いorg.omg.CORBA.ORBクラスがバンドルされています。VisiBrokerはCORBA 2.4準拠のORBを拡張し，org.omg.CORBA.ORBクラスにメソッドを幾つか追加しています。この拡張の階層関係を次の図に示します。

図4-2　org.omg.CORBA.ORBの階層とORBインタフェースの位置づけ

コードサンプル4-1　ORBクラスのクライアント使用例

public class SimpleClientProgram {
   public static void main(String args[ ]) {
       try {
         org.omg.CORBA.ORB orb =
                       org.omg.CORBA.ORB.init(args,null);
         org.omg.CORBA.Object object =
                           orb.string_to_object(args[0]);
         System.out.println(
                          "Contacted object: " + object);
       }
       catch(org.omg.CORBA.SystemException se) {
         System.out.println("Failure: " + se);
       }
   }
}

＜この節の構成＞

4.5.1　JDKでのORBの定義

4.5.2　JDKでのORBメソッド

4.5.3　OMGによるORBの定義

4.5.4　VisiBrokerでのORBの継承

4.5.5　ORBに対するVisiBrokerの拡張機能

4.5.6　ORBの初期化と終了

4.5.1　JDKでのORBの定義

abstract public class ORB {
   public void connect(org.omg.CORBA.Object obj);
   public org.omg.CORBA.TypeCode
           create_abstract_interface_tc(
       String id,
       String name
   );
   abstract public TypeCode create_alias_tc(
       String id,
       String name,
       TypeCode original_type
   );
   abstract public Any create_any( );
   abstract public TypeCode create_array_tc(int length,
       TypeCode element_type);
   abstract public ContextList create_context_list( );
   abstract public TypeCode create_enum_tc(String id,
        String name, String[ ] members);
   abstract public Environment create_environment( );
   abstract public ExceptionList
                                create_exception_list( );
   abstract public TypeCode create_exception_tc(
       String id,
       String name,
       StructMember[ ] members
   );
   public org.omg.CORBA.TypeCode create_fixed_tc(
       short digits,
       short scale);
   abstract public TypeCode create_interface_tc(
       String id, String name);
   abstract public NVList create_list(int count);
   abstract public NamedValue create_named_value(
       String s, Any any,
       int flags);
   public org.omg.CORBA.TypeCode create_native_tc(
       String id,
       String name);
   public NVList create_operation_list(
                       org.omg.CORBA.Object oper);
   abstract public org.omg.CORBA.portable.OutputStream
       create_output_stream( );
   public org.omg.CORBA.Policy create_policy(int type,
       org.omg.CORBA.Any val)
       throws org.omg.CORBA.PolicyError;
   abstract public TypeCode create_recursive_sequence_tc(
       int bound,
       int offset);
   public org.omg.CORBA.TypeCode create_recursive_tc(
       String id);
   abstract public TypeCode create_sequence_tc(int bound,
       TypeCode element_type);
   abstract public TypeCode create_string_tc(int bound);
   abstract public TypeCode create_struct_tc(
       String id,
       String name,
       StructMember[ ] members
   );
   abstract public TypeCode create_union_tc(
       String id,
       String name,
       TypeCode discriminator_type,
       UnionMember[ ] members
   );
   public org.omg.CORBA.TypeCode create_value_box_tc(
       String id,
       String name,
       TypeCode boxed_type
   );
   public org.omg.CORBA.TypeCode create_value_tc(
       String id,
       String name,
       short type_modifier,
       TypeCode concrete_base,
       ValueMember[ ] members
   );
   abstract public TypeCode create_wstring_tc(int bound);
   public void disconnect(org.omg.CORBA.Object obj);
   public org.omg.CORBA.Current get_current( );
   abstract public Context get_default_context( );
   abstract public Request get_next_response( )
                                 throws WrongTransaction;
   abstract public TypeCode
                         get_primitive_tc(TCKind tcKind);
   public boolean get_service_information(
       short service_type,
       ServiceInformationHolder service_info
   );
   public static ORB init(
                       String[ ] args, Properties props);
   public static ORB init(Applet app, Properties props);
   abstract public String[ ] list_initial_services( );
   abstract public String object_to_string(
                               org.omg.CORBA.Object obj);
   public void perform_work( );
   abstract public boolean poll_next_response( );
   abstract public org.omg.CORBA.Object
       resolve_initial_references(String object_name)
       throws InvalidName;
   public void run( );
   abstract public void send_multiple_requests_oneway(
                                         Request[ ] req);
   abstract public void send_multiple_requests_deferred(
                                         Request[ ] req);
   abstract protected void set_parameters(Applet app,
                                       Properties props);
   abstract protected void set_parameters(String[ ] args,
       Properties props);
   public void shutdown(boolean wait_for_completion);
   abstract public org.omg.CORBA.Object string_to_object(
                                             String str);
   public boolean work_pending( );
}

4.5.2　JDKでのORBメソッド

public TypeCode create_abstract_interface_tc(
String id, String name)
IDLの抽象インタフェースのTypeCodeオブジェクトを生成して返します。

id
抽象インタフェース型の論理ID

name
抽象インタフェース型の名前

abstract public org.omg.CORBA.TypeCode create_alias_tc(
java.lang.String repository_id,
java.lang.String type_name,
org.omg.CORBA.TypeCode original_type)
このメソッドは，IDLのaliasに対応するTypeCodeを生成して返します。

repository_id
IDLで型を指定するリポジトリID

type_name
アンスコープ型名

original_type
エイリアスを付けられた型

abstract public org.omg.CORBA.Any create_any( )
このメソッドは，NULLタイプコードを持つ空のAnyオブジェクトを生成します。

public static org.omg.CORBA.TypeCode create_array_tc(
int bound, TypeCode element_type)
この静的メソッドは，配列に対してTypeCodeを動的に生成します。

bound
配列要素の最大数

element_type
配列が格納している要素の型

abstract public org.omg.CORBA.TypeCode create_array_tc(
int length, org.omg.CORBA.TypeCode element_type)
このメソッドは，IDLの配列に対応するTypeCodeを生成して返します。

length
配列の長さ

element_type
配列に含まれる要素の型

public abstract ContextList create_context_list( )
このメソッドは，空のContextListを生成して返します。

public org.omg.CORBA.DynAny create_dyn_any(
org.omg.CORBA.Any value)
指定した値で初期化したDynAnyオブジェクトを作成します。

注

DynAnyオブジェクトは，オペレーションリクエストおよびDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。詳細については，「5.6　DynAny」を参照してください。

value
該当するオブジェクトの初期化に使用するAnyオブジェクト

abstract public org.omg.CORBA.TypeCode create_enum_tc(
java.lang.String repository_id,
java.lang.String type_name,
java.lang.String members[ ])
このメソッドは，IDLの列挙体に対応するTypeCodeを生成して返します。

repository_id
IDLで型を指定するリポジトリID

type_name
アンスコープ型名

members
型のメンバを定義する文字列の配列

abstract public org.omg.CORBA.Environment create_environment( )
このメソッドは，空のEnvironmentを生成して返します。

abstract public org.omg.CORBA.TypeCode create_exception_tc(
java.lang.String repository_id,
java.lang.String type_name,
org.omg.CORBA.StructMember members[ ])
このメソッドは，IDLのexceptionに対応するTypeCodeを生成して返します。

repository_id
IDLで型を指定するリポジトリID

type_name
アンスコープ型名

members
型のメンバを定義する文字列の配列

abstract public org.omg.CORBA.TypeCode create_interface_tc(
java.lang.String repository_id, java.lang.String type_name)
このメソッドは，IDLのinterfaceに対応するTypeCodeを生成して返します。

repository_id
IDLで型を指定するリポジトリID

type_name
アンスコープ型名

abstract public org.omg.CORBA.NVList create_list(
int length)
このメソッドは，指定された長さのNVListを生成して返します。NVListの詳細については，「5.19　NVList」を参照してください。

length
生成されるリストの長さ

abstract public org.omg.CORBA.NamedValue create_named_value(
java.lang.String name, org.omg.CORBA.Any value, int flags)
このメソッドは，動的起動インタフェースの新規NamedValueを生成して返します。

name
NamedValue名

value
NamedValueの値

flags
NamedValueのフラグ：IN，OUT，またはINOUT

abstract public org.omg.CORBA.NVList create_operation_list(
org.omg.CORBA.OperationDef operationDef)
このメソッドは，動的起動インタフェースリクエストで使用される新規NVListを生成して返します。

operationDef
指定されなければならないオペレーションの記述

public org.omg.CORBA.Policy create_policy(
int type,
org.omg.CORBA.Any val)
throws
org.omg.CORBA.PolicyError
このメソッドは，指定した初期状態を持つ指定した型のポリシーオブジェクトを作成します。ポリシーオブジェクトの作成に失敗した場合，PolicyError例外が発生します。

type
作成するポリシーオブジェクトの型

val
作成するポリシーオブジェクトの初期状態を設定するための値

abstract public org.omg.CORBA.TypeCode
create_recursive_sequence_tc(int length, int offset)
このメソッドは，IDLのsequenceに対応するTypeCodeを生成して返します。

length
生成される列の長さ。0の場合，アンバウンデッドシーケンスであることを示します。

offset
タイプコード（リカーシブ）定義へのオフセット

abstract public org.omg.CORBA.TypeCode create_sequence_tc(
int length, org.omg.CORBA.TypeCode element_type)
このメソッドは，IDLのsequenceに対応するTypeCodeを生成して返します。

length
生成される列の長さ。0の場合，アンバウンデッドシーケンスであることを示します。

element_type
シーケンスに含まれる要素の型

abstract public org.omg.CORBA.TypeCode create_string_tc(
int length)
このメソッドは，IDLのStringに対応するTypeCodeを生成して返します。

length
生成される文字列の長さ。0の場合，アンバウンデッドstringであることを示します。

abstract public org.omg.CORBA.TypeCode create_struct_tc(
java.lang.String repository_id,
String type_name,
org.omg.CORBA.StructMember members[ ])
このメソッドは，IDLのstructに対応するTypeCodeを生成して返します。

repository_id
IDLで型を指定するリポジトリID

type_name
アンスコープ型名

members
型のメンバを定義する構造体の配列

abstract public org.omg.CORBA.TypeCode create_union_tc(
java.lang.String repository_id,
java.lang.String type_name,
org.omg.CORBA.TypeCode discriminator_type,
org.omg.CORBA.UnionMembers members[ ])
このメソッドは，IDLのunionに対応するTypeCodeを生成して返します。

repository_id
IDLで型を指定するリポジトリID

type_name
アンスコープ型名

discriminator_type
ディスクリミネータの型。ディスクリミネータは，switch文で使用される型です。

members
型のメンバを定義する構造体の配列

public TypeCode create_value_box_tc(
String id,
String name,
TypeCode boxed_type)
IDL値ボックスのTypeCodeオブジェクトを生成して返します。

id
値型の論理ID

name
値型の名前

boxed_type
型のTypeCode

abstract public org.omg.CORBA.TypeCode create_wstring_tc(
int length)
このメソッドは，IDL wString，またはUnicode文字列に対応するTypeCodeを生成して返します。
ルートコンテキストに対して一度もリクエストが実行されていない状態で，nameservに対してlist_all_rootsメソッドを呼び出した場合，戻り値であるNamingContext[ ]の要素にルートコンテキストではなく，nullが入ります。

length
生成される文字列の長さ。0の場合，アンバウンデッドstringであることを示します。
負数を指定しても，BAD_PARAM例外は発生しません。引数が負数でないことを確認する処理を入れてください。

abstract public org.omg.CORBA.Context get_default_context( )
このメソッドは，グローバルデフォルトContextを返します。デフォルトコンテキストは共有リソースであるため，デフォルトコンテキストの同期を取ってください。

abstract public org.omg.CORBA.Request get_next_response( )
このブロッキングメソッドは，遅延されたオペレーションリクエストへの応答ができるまで待ちます。完了したRequestを返します。send_multiple_requests_deferredメソッドを参照してください。

abstract public org.omg.CORBA.TypeCode get_primitive_tc(
TCKind kind)
このメソッドは，型に対応する基本タイプコードを返します。kindが範囲外，または基本データ型用でないと，org.omg.CORBA.BAD_PARAM例外が発生します。

kind
TCKindに定義されたタイプコードの種類

public static ORB init(
Strings[ ] args, Properties props)
このメソッドは，使用するORBをアプリケーションで初期化し，ORBの新しいインスタンスを返します。

args
プログラムに渡すコマンドラインパラメタ

props
ORBの動作をカスタマイズするために設定できるプロパティ

public static ORB init(
Applet app, Properties props)
このメソッドは，使用するORBをアプレットで初期化し，ORBの新しいインスタンスを返します。

app
ORBの該当するインスタンスと対応づけるアプレット

props
ORBの動作をカスタマイズするために設定できるプロパティ

abstract public java.lang.String[ ] list_initial_services( )
このメソッドは，最初にプロセスで使用できる任意のオブジェクトサービス名のリストを返します。サービスには，ロケーションサービス，インタフェースリポジトリ，またはネームサービスがあります。

abstract public java.lang.String object_to_string(
org.omg.CORBA.Object obj)
このメソッドは，オブジェクトリファレンスをStringに変換して返します。Stringはサーバが存続している間有効です。または，インプリメンテーションが活性化デーモンで登録されている場合，登録および活性化デーモンが存続している間有効です。このメソッドは，文字列化したIORを返します。

obj
変換されるオブジェクトリファレンス

void perform_work( )
メインスレッドから呼び出された場合，このメソッドは作業単位を一つ実行します。そうでない場合は，何も実行しません。
メインスレッドが設定されていない場合，このオペレーションは，呼び出し元スレッドをメインスレッドとみなします。呼び出し元スレッドがメインスレッドとみなされるのは，perform_workの存続時間の間だけです。work_pendingオペレーションとperform_workオペレーションは，ORBなどのアクティビティの中でメインスレッドを多重化するためのポーリングループを記述するのに使用できます。

abstract public boolean poll_next_response( )
このメソッドは，遅延されたオペレーションリクエストへの応答ができる場合にtrueを返します。そうでない場合，falseを返します。send_multiple_requests_deferredメソッドも参照してください。

abstract public org.omg.CORBA.Object resolve_initial_references(
java.lang.String identifier)
throws
org.omg.CORBA._ORB.InvalidName
このメソッドは，list_initial_servicesメソッドによって，該当するインプリメンテーションオブジェクトに返される名前の一つを分析し，得られたオブジェクトを返します。このオブジェクトは特定のサーバの型にナロウイングできます。指定された名前が見つからない場合，org.omg.CORBA.InvalidName例外が発生します。

identifier
識別子はサービス名で，最初のオブジェクトリファレンスを分析するために使用されます。識別子は，（Helper.bindメソッドで指定される）オブジェクト名ではありません。
次のどれかを指定した場合に，StringIndexoutOfBoundsException例外が発生します。
(1)空文字列("")
(2)"V"
(3)"VB"

ORBで提供されるイニシャルサービスのリストがあります。これらのサービスで，プログラムはORBの内部機能にアクセスできるようになります。これらの機能はresolve_initial_referencesメソッドで使用できます。「4.4.4　VisiBrokerでのObjectのメソッドの継承」の_resolve_referenceメソッドも参照してください。
アドオンとしてORBから提供されるイニシャルサービスには，インタフェースリポジトリ，ハンドラレジストリ，3種類のインタセプタサービス，2種類のアンタイプドオブジェクトラッパーサービス，およびURLネーミング（Webネーミング）があります。次にアドオンサービスの詳細を示します。

アドオンサービスの詳細

ChainUntypedObjectWrapperFactory

DistributedService

DynAnyFactory

InterfaceRepository

LocationService

NameService

ORBPolicyManager

PolicyCurrent

POACurrent

RootPOA

URLNamingResolver

VBRootPOA

VisiBrokerInterceptorControl

abstract public void run( )
このオペレーションは，VisiBroker ORBに内部関数を実行するための実行リソースを提供します。メインスレッドモデルを使用している場合は，メインスレッドが処理リクエストを発行します。メインスレッドが設定されていない場合は，このオペレーションは，呼び出し元スレッドをメインスレッドとみなします。このオペレーションは，ORBが終了するまで実行を抑止します。

abstract public void send_multiple_requests_deferred(
org.omg.CORBA.Request reqs[ ])
このノンブロッキングメソッドは，複数のオペレーションリクエストを送信します。リターン値は，poll_next_response，およびget_next_responseメソッドを使用して取得できます。

reqs
オペレーションリクエスト

abstract public void send_multiple_requests_oneway(
org.omg.CORBA.Request reqs[ ])
このメソッドは，複数の一方向オペレーションリクエストを送信します。リターン値は，一方向リクエストでは提供されません。

reqs
活性化されるサーバのインプリメンテーションオブジェクト

abstract public org.omg.CORBA.Object string_to_object(
java.lang.String ior)
このメソッドは，Stringをオブジェクトリファレンスに変換します。返されるObjectは特定のインタフェースにナロウイングされます。iorパラメタがローカルアドレススペースのインプリメンテーションオブジェクトを参照する場合，結果オブジェクトは，インプリメンテーションオブジェクトの直接ポインタリファレンスとなります。iorパラメタが不当であると，org.omg.CORBA.INV_OBJREF例外，もしくはorg.omg.CORBA.BAD_PARAM例外が発生します。

ior
object_to_stringメソッドで事前に生成されたインターネットオブジェクトリファレンス

public boolean work_pending( )
このメソッドは，ORBがメインスレッドによる処理を必要とする場合はtrueを返し，必要としない場合はfalseを返します。

4.5.3　OMGによるORBの定義

package org.omg.CORBA_2_3;

abstract public class ORB extends org.omg.CORBA.ORB {
   public org.omg.CORBA.portable.ValueFactory
       lookup_value_factory(String id);
   public org.omg.CORBA.portable.ValueFactory
       register_value_factory(
           String id,
           org.omg.CORBA.portable.ValueFactory factory
   );
   public void set_delegate(java.lang.Object object);
   public void unregister_value_factory(String id);
}

4.5.4　VisiBrokerでのORBの継承

package com.inprise.vbroker.CORBA;
public abstract class ORB extends org.omg.CORBA_2_3.ORB {
   public org.omg.CORBA.Object bind(
       String fullPoaName,
       byte[ ] oid,
       String host_name,
       BindOptions bind_options
   );
   public org.omg.CORBA.Object bind(
       String repository_id,
       String object_name,
       String host_name,
       BindOptions bind_options
   );
   public com.inprise.vbroker.CORBA.portable.InputStream
    create_input_stream(
       byte[ ] bytes
   );
   public com.inprise.vbroker.CORBA.portable.OutputStream
    create_output_stream(
       byte[ ] bytes
   );
}

4.5.5　ORBに対するVisiBrokerの拡張機能

public org.omg.CORBA.Object bind(
java.lang.String fullPoaName,
byte[ ] oid,
java.lang.String host_name,
com.inprise.vbroker.CORBA.BindOptions bind_options)
このメソッドは，VisiBroker ORBオブジェクトにバインドし，オブジェクトリファレンスを取得します。

fullPoaName
POA名を識別する文字列

oid
オブジェクトIDを識別する文字列

host_name
VisiBroker ORBオブジェクトを探すホスト名を識別する文字列

bind_options
このオブジェクトのバインドオプション

public org.omg.CORBA.Object bind(
java.lang.String repository_id,
java.lang.String object_name,
java.lang.String host_name,
com.inprise.vbroker.CORBA.BindOptions bind_options)
このメソッドは，VisiBroker ORBオブジェクトにバインドし，オブジェクトリファレンスを取得します。

repository_id
リポジトリIDを識別する文字列

object_name
VisiBroker ORBオブジェクト名を識別する文字列

host_name
VisiBroker ORBオブジェクトを探すホスト名を識別する文字列

bind_options
このオブジェクトのバインドオプション

abstract public org.omg.CORBA.portable.InputStream
create_input_stream (byte[ ] bytes)
このメソッドは，bytesで指定したbyte配列を含むIIOP入力ストリームを生成します。

bytes
生成する入力ストリームに含まれるbyte配列

abstract public org.omg.CORBA.portable.OutputStream
create_output_stream( )
このメソッドは，IIOP出力ストリームを生成します。IIOPバッファを構成するバイトの配列は，ストリームから抽出されます。

public static org.omg.CORBA.ORB init( )
このメソッドは，ORBシングルトンを返します。

4.5.6　ORBの初期化と終了

＜この項の構成＞

(1)　ORBのインスタンス

(2)　ORB.shutdown

(1)　ORBのインスタンス

ORB.init（String[ ],Properties）はORBのインスタンスを新たに生成します。ORBのインスタンスごとにTPBroker内部で使用するスレッドなどを生成し，コネクションを管理しています。これらが複数存在することで，性能の問題やメモリを圧迫するという問題が発生しますので，同時に保持するORBインスタンス数は必要最小限にしてください。また，ORBインスタンスはアプリケーションで参照をクリアしてもガベージコレクタによってメモリ上から破棄されません。そのため，必要がなくなったORBインスタンスに対しては，リソースとメモリの解放を行うorg.omg.CORBA.ORBクラスのdestroy( )メソッドを発行してください。ただし，destroy( )メソッドは使用中のコネクションも即時に解放するため，例外が発生することがあります。発行前には通信していないことを確認してください。ORBを必要とするクラスやメソッドが多く存在する場合や，Servletのように一つのプロセス内のスレッドとしてユーザアプリケーションが動作するような場合には，引数ありのORB.init( )の発行回数を抑止するための工夫が必要です。その方法として，一度取得したORBのインスタンスをstatic変数に保持しておき，それを使いまわすという方法が考えられます。

コーディング例：
static org.omg.CORBA.ORB _orb=null;
public static synchronized org.omg.CORBA.ORB getORB(String[ ] args,Properties props){
 if(_orb==null){
 _orb=org.omg.CORBA.ORB.init(args,props);
 }
 return _orb;
}

ORBのインスタンスが必要な場合は上記のgetORBメソッドを呼び出すようにすることで，引数ありのORB.initの発行回数を抑止できます。しかし，クラスがリロードされるとstatic変数（上記例の_orb）が再度初期化されることに注意してください。

Java 2 SDK，Standard Editionでは，クラスをロードしたクラスローダが終了した場合にクラスがアンロードされ，リロードされたときにstatic変数が初期化されます。Servletなどクラスのリロード機能を持つアプリケーションでは，ユーザが意識していないところでServletなどが独自のクラスローダを終了させる場合があります。上記を考慮して，ORB.initの発行回数を抑止する方法として次の2とおりの方法が考えられます。

方法1（推奨）：

ORBのインスタンスをstatic変数で保持するクラスを，「リロード不可能なパス」に配置します。リロード機能を持つアプリケーションが「リロード可能なパス」として示す個所にクラスを配置するのではなく，CLASSPATHなどJava VMがロードできるパスにクラスを配置することで，「リロード不可能なパス」に配置することになります。

方法2：

ORBのインスタンスをstatic変数で保持するコーディングではなく，ORBのインスタンスをシステムプロパティで保持するようなコーディングにすることで，クラスのリロードが起こってもORBインスタンスを保持することができます。

コーディング例：
public static synchronized org.omg.CORBA.ORB getORB(String[] args,Properties props){
 Properties sys_props=System.getProperties( );
 org.omg.CORBA.ORB _orb=(org.omg.CORBA.ORB)sys_props.get("MyORB");
 if(_orb==null)
 {
  _orb=org.omg.CORBA.ORB.init(args,props);
 }
 sys_props.put("MyORB",_orb);
 return _orb;
}

この方法を使用する場合は，次の点に注意してください。

ORB.init( )を複数回発行する必要がある場合は，必ずORBインスタンスをシステムプロパティに登録する前にORB.init( )の発行を行ってください。

ORBインスタンスをシステムプロパティに登録した場合，ORBインスタンスを登録したキーを引数にしてjava.lang.System.getProperty( )，またはjava.util.Properties.getProperty( )を行うと，nullオブジェクトが返されます。

(2)　ORB.shutdown

org.omg.CORBA.ORB.shutdown( )を発行する場合は，次の点に注意してください。

org.omg.CORBA.ORB.shutdown( )はすべてのメソッドコールが終了したあと，発行してください。

org.omg.CORBA.ORB.shutdown( )実施後は，org.omg.CORBA.ORB.shutdown( )したORBインスタンスから生成したオブジェクトリファレンスを使用することができなくなるため，リファレンスを解放してください。

org.omg.CORBA.ORB.shutdown( )したORBインスタンスは使用しないでください。

サーバメソッド内でorg.omg.CORBA.ORB.shutdown(true)を発行すると，BAD_INV_ORDER例外が発生する場合があります。

4.6　Policy

public interface org.omg.CORBA.Policy extends
   org.omg.CORBA.PolicyOperations, org.omg.CORBA.Object,
   org.omg.CORBA.portable.IDLEntity

Policyインタフェースは，オペレーションに影響を与える，特定の情報の利用を許可するための機構を，ORBおよびオブジェクトサービスに提供します。この情報は，org.omg.CORBA.Policyインタフェースから派生するインタフェースを使用することによって，構造化された方法でアクセスできます。

＜この節の構成＞

4.6.1　IDLの定義

4.6.2　Policyのメソッド

4.6.1　IDLの定義

module CORBA {
   typedef unsigned long PolicyType;
   // Basic IDL definition
   interface Policy {
        readonly attribute PolicyType policy_type;
        Policy copy();
        void destroy();
   };
   typedef sequence <Policy> PolicyList;
   typedef sequence <PolicyType> PolicyTypeSeq;
};

4.6.2　Policyのメソッド

public Policy copy()
このメソッドはPolicyオブジェクトのコピーを返します。

public void destroy()
このメソッドはPolicyオブジェクトを削除します。

public int policy_type()
このメソッドはPolicyオブジェクトの型を返します。

4.7　PortableServer.AdapterActivator

public interface org.omg.PortableServer.AdapterActivator extends
   org.omg.PortableServer.AdapterActivatorOperations,
   org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity

アダプタアクティベータはポータブルオブジェクトアダプタ（POA）と対応し，オンデマンドで子POAを作成する機能をPOAに提供します。この機能は，子POAを指定したリクエストを受信するとき，または活性化パラメタをTrueに設定してfind_POAメソッドを呼び出すときに使用される機能です。

＜この節の構成＞

4.7.1　import文

4.7.2　PortableServer.AdapterActivatorのメソッド

4.7.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.7.2　PortableServer.AdapterActivatorのメソッド

boolean unknown_adapter(
org.omg.PortableServer.POA parent,
java.lang.String name)
存在しないPOAのオブジェクトリファレンスリクエストを受信すると，ORBがこのメソッドを呼び出します。作成する必要のあるPOAごとに，ORBはこのメソッドを一度呼び出して作成します。その際，ルートPOAに最も近い祖先のPOA下から作成します。

parent
このメソッドを生成したアダプタアクティベータに対応する親POA

name
作成するPOAの名前（親POAに対応するPOA名）

4.8　PortableServer.Current

public interface org.omg.PortableServer.Current extends
   org.omg.PortableServer.CurrentOperations, org.omg.CORBA.Current,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，メソッド呼び出し先オブジェクトへアクセスするためのメソッドを提供します。このインタフェースは，複数のオブジェクトをインプリメントするサーバントをサポートするために提供されていますが，任意のサーバントに対して，POAがディスパッチしたメソッドを呼び出すコンテキストの中で使用できません。

＜この節の構成＞

4.8.1　import文

4.8.2　PortableServer.Currentのメソッド

4.8.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.8.2　PortableServer.Currentのメソッド

PortableServer.ObjectId get_object_id( )
このメソッドは，呼ばれたコンテキストのオブジェクトのObjectIdを返します。POAによってディスパッチされたメソッドのコンテキストの外部でこのメソッドが呼び出された場合は，NoContext例外が発生します。

PortableServer.POA get_POA( )
このメソッドは，コンテキストの中でこのメソッドを呼び出しているオブジェクトをインプリメントしているPOAのリファレンスを返します。POAによってディスパッチされたメソッドのコンテキストの外部でこのメソッドが呼び出された場合は，NoContext例外が発生します。

4.9　PortableServer.POA

public interface org.omg.PortableServer.POA extends
   org.omg.PortableServer.POAOperations, org.omg.CORBA.Object,
   org.omg.CORBA.portable.IDLEntity

POAクラスのオブジェクトがオブジェクトインプリメンテーション群を管理します。POAはこれらのオブジェクトをObjectIdで識別するネームスペースをサポートします。一つのPOAでも他POAのネームスペースを提供します。そのネームスペースの中では，POAは既存POAの子POAとして作成され，ルートPOAから始まる階層を形成します。

POAオブジェクトを他プロセスにエクスポートしたり，文字列化したりしてはいけません。POAオブジェクトのエクスポートや文字列化を試みるとMARSHAL例外が発生します。

＜この節の構成＞

4.9.1　import文

4.9.2　PortableServer.POAのメソッド

4.9.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.9.2　PortableServer.POAのメソッド

byte[ ] activate_object(
org.omg.PortableServer.Servant p_servant)
このメソッドは，バイト配列で構成されるオブジェクトIDを生成して返します。
生成したオブジェクトIDとp_servantに指定したサーバントはアクティブオブジェクトマップに登録されます。POAにUNIQUE_IDポリシーがあり，p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は，ServantAlreadyActive例外が発生します。
このメソッドを使用するには，POAにSYSTEM_IDポリシーとRETAINポリシーが必要です。SYSTEM_IDポリシーとRETAINポリシーがない場合は，WrongPolicy例外が発生します。

p_servant
アクティブオブジェクトマップに登録するサーバント

void activate_object_with_id(
byte[ ] id, org.omg.PortableServer.Servant p_servant)
このメソッドは，idで指定したオブジェクトを活性化して，そのオブジェクトをp_servantで指定したサーバントにアクティブオブジェクトマップの中で対応づけます。アクティブオブジェクトマップの中ですでにそのオブジェクトにサーバントがバインドされている場合は，ObjectAlreadyActive例外が発生します。POAにUNIQUE_IDポリシーがあり，p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は，ServantAlreadyActive例外が発生します。
このメソッドを使用するには，POAにRETAINポリシーが必要です。RETAINポリシーがない場合はWrongPolicy例外が発生します。

id
活性化するオブジェクトのオブジェクトID
nullを指定しても，BAD_PARAM例外は発生しません。
注
オブジェクトIDの長さは，512を2の（サーバエンジン数 -1）乗で割ったサイズ（単位：バイト）以下にしてください。
上記のサイズを超える値を指定した場合，osagentとの通信が失敗することがあります。

p_servant
アクティブオブジェクトマップに登録するサーバント

org.omg.PortableServer.ImplicitActivationPolicy
create_implicit_activation_policy(
org.omg.PortableServer.ImplicitActivationPolicyValue value)
このメソッドは，指定した値のImplicitActivationPolicyオブジェクトを返します。
POA生成時にImplicitActivationPolicyを指定しなかった場合のデフォルトはNO_IMPLICIT_ACTIVATIONです。

value
IMPLICIT_ACTIVATIONを設定すると，POAはサーバントの暗黙的活性化をサポートします。この場合，SYSTEM_IDポリシーとRETAINポリシーも必要です。NO_IMPLICIT_ACTIVATIONを設定すると，POAはサーバントの暗黙的活性化をサポートしません。

org.omg.CORBA.Object create_reference(
String intf)
このメソッドは，POAが生成したObjectIdの値とintfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。intfは生成されるオブジェクトリファレンスのtype_idになります。intfにNULL文字列を指定することもできます。このメソッドを呼び出しても活性化は起こりません。intfに指定した値が，オブジェクトの最も派生したインタフェースを識別するものでもなく，派生元インタフェースのどれかを識別するものでもない場合は，このメソッドの動作は不定です。
このメソッドを使用するには，POAにSYSTEM_IDポリシーが必要です。SYSTEM_IDポリシーがない場合はWrongPolicy例外が発生します。

intf
生成するオブジェクトのクラスのリポジトリインタフェースID

org.omg.CORBA.Object create_reference_with_id(
byte[ ] oid, String intf)
このメソッドは，oidに指定した値とintfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。intfは生成されるオブジェクトリファレンスのtype_idになります。intfにNULLを指定することもできます。intfに指定した値が，オブジェクトの最も派生したインタフェースを識別するものでもなく，派生元インタフェースのどれかを識別するものでもない場合は，このメソッドの動作は不定です。このメソッドを呼び出しても活性化は起こりません。必要であれば，このメソッドが返すオブジェクトリファレンスを複数のクライアントに渡して，そのリファレンスをクライアントからリクエストすることによってオブジェクトを活性化したり，デフォルトサーバントを使用したりできます。それは適用するポリシーに依存します。

oid
リファレンスを生成するオブジェクトのオブジェクトID

intf
生成するオブジェクトのクラスのリポジトリインタフェースID

org.omg.PortableServer.IdAssignmentPolicy
create_id_assignment_policy(
org.omg.PortableServer.IdAssignmentPolicyValue value)
このメソッドは，指定した値のIdAssignmentPolicyオブジェクトを返します。
POA生成時にIdAssignmentPolicyを指定しなかった場合のデフォルトはSYSTEM_IDです。

value
USER_IDを設定すると，POAで生成したオブジェクトに，アプリケーションだけがオブジェクトIDを割り当てます。SYSTEM_IDを設定すると，POAで生成したオブジェクトに，POAだけがオブジェクトIDを割り当てます。

org.omg.PortableServer.IdUniquenessPolicy
create_id_uniqueness_policy(
org.omg.Po　rtableServer.IdUniquenessPolicyValue value)
このメソッドは，指定した値のIdUniquenessPolicyオブジェクトを返します。
POA生成時にIdUniquenessPolicyを指定しなかった場合のデフォルトはUNIQUE_IDです。

value
UNIQUE_IDを設定すると，POAが活性化するサーバントはすべてオブジェクトIDを一つだけサポートします。MULTIPLE_IDを設定すると，POAが活性化するサーバントはそれぞれ一つ以上のオブジェクトIDをサポートできます。

org.omg.PortableServer.LifespanPolicy create_lifespan_policy(
org.omg.PortableServer.LifespanPolicyValue value)
このメソッドは，指定した値のLifespanPolicyオブジェクトを返します。
POA生成時にLifespanPolicyを指定しなかった場合のデフォルトはTRANSIENTです。

value
TRANSIENTを設定した場合，POAにインプリメントされたオブジェクトは，そのオブジェクトを最初に作成したPOAインスタンスより長くは存続できません。一度トランジェントPOAを非活性化したあとでそのPOAから生成したオブジェクトリファレンスを使用しようとすると，OBJECT_NOT_EXIST例外が発生します。PERSISTENTを設定した場合，POAにインプリメントされたオブジェクトは，そのオブジェクトを最初に作成したPOAインスタンスより長く存続できます。

org.omg.PortableServer.POA create_POA(
String adapter_name,
org.omg.PortableServer.POAManager a_POAManager,
org.omg.CORBA.PolicyList[ ] policies)
このメソッドは，a_POAManagerに指定したオブジェクトの子オブジェクトとしてPOAをadapter_nameに指定した名前で新規作成します。新規作成したPOAは，create_POAが呼び出されたPOAオブジェクトの子オブジェクトです。指定した親オブジェクトにすでに同名の子POAがある場合は，PortableServer.AdapterAlreadyExists例外が発生します。
指定したポリシーは，新規作成したPOAに対応づけられ，新規作成したPOAの動作を制御します。

adapter_name
新規作成するPOAを指定する名前

注

POA名（完全階層パス名）の長さは，512を2の（サーバエンジン数 -1）乗で割ったサイズ（単位：バイト）以下にしてください。

上記のサイズを超える値を指定した場合，osagentとの通信が失敗することがあります。

a_POAManager
新規作成するPOAのマネージャ

policies
新規作成するPOAに適用するポリシーの一覧

末尾の2個のパラメタには，NULLを指定できます。PortableServer.POAManagerを指定しなかった場合は，自動的に作成されて新規作成したPOAと対応づけられます。ポリシーを指定しなかった場合は，デフォルトのポリシーが使用されます。
ただし，次のどちらかの矛盾した設定の場合は，InvalidPolicy例外が発生しません。

BindSupportポリシーにBY_POAを指定していて，ライフスパンポリシーにPERSISTENTを指定していない場合。

BindSupportポリシーにBY_INSTANCEを指定していて，ライフスパンポリシーにPERSISTENTが指定していない場合。

org.omg.PortableServer.RequestProcessingPolicy
create_request_processing_policy(
org.omg.PortableServer.RequestProcessingPolicyValue value)
このメソッドは，指定した値のRequestProcessingPolicyオブジェクトを返します。
POA生成時にRequestProcessingPolicyを指定しなかった場合のデフォルトはUSE_ACTIVE_OBJECT_MAP_ONLYです。

value
USE_ACTIVE_OBJECT_MAP_ONLYを設定し，オブジェクトIDがアクティブオブジェクトマップにない場合は，OBJECT_NOT_EXIST例外をクライアントに返します。RETAINポリシーも必要です。
USE_DEFAULT_SERVANTを設定し，オブジェクトIDがアクティブオブジェクトマップになく，またはNON_RETAINポリシーがあり，デフォルトサーバントがset_servantメソッドでPOAに登録されている場合は，リクエストをデフォルトサーバントにディスパッチします。デフォルトサーバントが登録されていない場合は，OBJ_ADAPTER例外をクライアントに返します。MULTIPLE_IDポリシーも必要です。
USE_SERVANT_MANAGERを設定し，オブジェクトIDがアクティブオブジェクトマップになく，またはNON_RETAINポリシーがあり，サーバントマネージャがset_servant_managerメソッドでPOAに登録されている場合は，そのサーバントマネージャはサーバントを探し出すか，例外を発生します。サーバントマネージャが登録されていない場合は，OBJ_ADAPTER例外をクライアントに返します。また，サーバントマネージャを使用する場合は，サーバントでHelper.narrow( )とPOA.deactivate_object( )を実行しないでください。二つ以上のクライアントからそのサーバントを呼び出した場合に，サーバがデッドロック状態になることがあります。

org.omg.PortableServer.ServantRetentionPolicy
create_servant_retention_policy(
org.omg.PortableServer.ServantRetentionPolicyValue value)
このメソッドは，指定した値のServantRetentionPolicyオブジェクトを返します。
POA生成時にServantRetentionPolicyを指定しなかった場合のデフォルトはRETAINです。

value
RETAINを設定した場合，POAは活性化したサーバントをアクティブオブジェクトマップの中に保持します。NON_RETAINを設定した場合，POAはサーバントを保持しません。

org.omg.PortableServer.ThreadPolicy create_thread_policy(
org.omg.PortableServer.ThreadPolicyValue value)
このメソッドは，指定した値のThreadPolicyオブジェクトを返します。
POA生成時にThreadPolicyを指定しなかった場合のデフォルトはORB_CTRL_MODELです。

value
ORB_CTRL_MODELを設定すると，ORBが制御するPOAのリクエストをORBがスレッドに割り当てます。マルチスレッド環境では，同時に複数のリクエストが複数のスレッドに割り当てられることもあります。SINGLE_THREAD_MODELを設定すると，POAへのリクエストは一つずつ順次処理されます。マルチスレッド環境では，POAからサーバントとサーバントマネージャに出されたすべてのリクエストは，マルチスレッドに透過的なコードを保証する方法で実行されます。

void deactivate_object(
byte[ ] oid)
このメソッドは，oidで指定したオブジェクトを非活性化します。非活性化したあとも，そのオブジェクトに対するアクティブなリクエストがすべてなくなるまでは，そのオブジェクトはリクエストの処理を続けます。そのオブジェクトに対して実行中のリクエストがすべて終了したときに，そのオブジェクトのObjectIdがアクティブオブジェクトマップから削除されます。
サーバントマネージャがPOAに対応づけられている場合は，ObjectIdがアクティブオブジェクトマップから削除されたあとで，ServantActivator.etherealizeメソッドがそのオブジェクトと，対応づけられたサーバントに対して呼び出されます。エーテライズが完了するまで，必要に応じてそのオブジェクトの再活性化は抑止されます。しかし，このメソッドは，リクエストやエーテライズの完了を待たないで常に，指定したオブジェクトを非活性化した直後にリターンします。
このメソッドを使用するには，POAにRETAINポリシーが必要です。もしRETAINポリシーがなければ，WrongPolicy例外が発生します。

oid
非活性化するオブジェクトのオブジェクトID

void destroy(
boolean etherealize_objects, boolean wait_for_completion)
このメソッドは，該当するPOAオブジェクトとそのすべての子POAを破棄します。最初に子POAを破棄し，最後にカレントコンテナPOAを破棄します。必要であれば，破棄したあとで同じプロセスに同じ名前でPOAを作成することもできます。

etherealize_objects
このパラメタにTrueを設定し，POAにRETAINポリシーがあり，サーバントマネージャがPOAに登録されている場合，アクティブオブジェクトマップ中の各アクティブオブジェクトでetherealizeメソッドが呼び出されます。etherealizeメソッドが呼び出される前に，見かけ上，POAの破棄が発生します。このため，POAにメソッドを呼び出すetherealizeメソッドは，OBJECT_NOT_EXIST例外を発生します。

wait_for_completion
このパラメタにTrueを設定し，該当するPOAと同じORBに属する他POAからディスパッチされた呼び出しコンテキストにカレントスレッドがない場合，destroyメソッドは，アクティブなリクエストとetherealizeメソッドの呼び出しがすべて完了したあとでリターンします。
このパラメタにTrueを設定し，該当するPOAと同じORBに属する他POAからディスパッチされた呼び出しコンテキストにカレントスレッドがある場合，BAD_INV_ORDER例外が発生し，POAの破棄は発生しません。

org.omg.PortableServer.POA find_POA(
String adapter_name,
boolean activate_it)
このメソッドの呼び出し先のPOAオブジェクトが，指定したadapter_nameのPOAの親である場合は，子POAを返します。

adapter_name
該当するPOAに対応するAdapterActivatorの名前

activate_it
このパラメタにTrueを設定し，adapter_nameで指定したPOAの子POAがない場合は，POAのAdapterActivator（NULL以外の場合）が呼び出され，子POAの活性化に成功した場合は，そのPOAを返します。それ以外の場合は，AdapterNonExistent例外が発生します。

org.omg.PortableServer.Servant get_servant( )
このメソッドは，POAに対応づけられたデフォルトサーバントを返します。対応づけられたサーバントがない場合は，NoServant例外が発生します。
RETAINポリシーまたはUSE_DEFAULT_SERVANT_MANAGERポリシーがなければ，WrongPolicy例外が発生します。

org.omg.PortableServer.ServantManager get_servant_manager( )
このメソッドは，POAに対応づけられたServantManagerオブジェクトを返します。対応づけられたサーバントマネージャがない場合は，NULLを返します。
このメソッドを使用するには，POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがない場合はWrongPolicy例外が発生します。

org.omg.CORBA.Object id_to_reference(
byte[ ] oid)
このメソッドは，oidに指定したオブジェクトが現在アクティブであればオブジェクトリファレンスを返します。アクティブでなければ，ObjectNotActive例外が発生します。
このメソッドを使用するには，POAにRETAINポリシーが必要です。RETAINポリシーがない場合はWrongPolicy例外が発生します。

oid
リファレンスの取得対象オブジェクトのオブジェクトID

org.omg.PortableServer.Servant id_to_servant(
byte[ ] oid)
このメソッドの動作には次の3種類があります。

POAにRETAINポリシーがあり，アクティブオブジェクトマップに指定したオブジェクトがある場合は，そのオブジェクトに対応づけられたサーバントを返します。

POAにUSE_DEFAULT_SERVANTがあり，POAにデフォルトサーバントが登録されている場合は，登録されているデフォルトサーバントを返します。

上記以外の場合は，ObjectNotActive例外を出力します。

このメソッドを使用するには，POAにRETAINポリシーまたはUSE_DEFAULT_SERVANTポリシーが必要です。RETAINポリシーまたはUSE_DEFAULT_SERVANTポリシーがなければWrongPolicy例外が発生します。
パラメタの意味を次に示します。

oid
サーバントの取得対象オブジェクトのオブジェクトID

org.omg.PortableServer.Servant reference_to_servant(
org.omg.CORBA.Object reference)
このメソッドの動作には次の3種類があります。

POAにRETAINポリシーがあり，アクティブオブジェクトマップに指定したオブジェクトがある場合は，そのオブジェクトに対応づけられたサーバントを返します。

POAにUSE_DEFAULT_SERVANTポリシーがあり，POAにデフォルトサーバントが登録されている場合は，登録されているデフォルトサーバントを返します。

上記以外の場合は，ObjectNotActive例外を出力します。

このメソッドを使用するには，POAにRETAINポリシーまたはUSE_DEFAULT_SERVANTポリシーが必要です。どちらのポリシーもない場合はWrongPolicy例外が発生します。
reference_to_servantで引数となるreferenceが，そのPOAで作られていないとWrongAdapter例外が発生します。
パラメタの意味を次に示します。

reference
サーバントの取得対象オブジェクト

byte[ ] reference_to_id(
org.omg.CORBA.Object reference)
このメソッドは，referenceに指定したオブジェクトにカプセル化されているObjectIdの値を返します。このメソッドは，referenceに指定したオブジェクトを作成したPOAに対して呼び出した場合だけ有効です。このメソッドの呼び出し先POAが，指定したオブジェクトを作成したPOAと異なる場合は，WrongAdapter例外が発生します。このメソッドを呼び出すときに，referenceパラメタで指定するオブジェクトがアクティブになっている必要はありません。
このメソッドがWrongPolicy例外も出力できるようにIDLでは規定されていますが，それは将来的な拡張性を考慮してのことです。

reference
ObjectIdの取得対象オブジェクト

byte[ ] servant_to_id(
org.omg.PortableServer.Servant p_servant)
このメソッドの動作には次の4種類があります。

POAにUNIQUE_IDポリシーがあり，p_servantに指定したサーバントがアクティブである場合，そのサーバントに対応づけられたObjectIdを返します。

POAにIMPLICIT_ACTIVATIONポリシーがあり，MULTIPLE_IDポリシーがあるかp_servantに指定したサーバントがアクティブでない場合，POAが生成したObjectId，およびサーバントに対応づけられたリポジトリインタフェースIDを使用してサーバントを活性化して，そのObjectIdを返します。

POAにUSE_DEFAULT_SERVANTポリシーがあり，p_servantに指定したサーバントがデフォルトサーバントである場合，現在の呼び出しに対応づけられたObjectIdを返します。

上記以外の場合は，ServantNotActive例外を出力します。

このメソッドを使用するには，USE_DEFAULT_SERVANTポリシーが必要です。このポリシーがない場合でも，RETAINポリシーと，UNIQUE_IDポリシーまたはIMPLICIT_ACTIVATIONポリシーの組み合わせがあればこのメソッドを使用できます。この条件を満たしていない場合は，WrongPolicy例外が発生します。
パラメタの意味を次に示します。

p_servant
ObjectIdの取得対象サーバント

org.omg.CORBA.Object servant_to_reference(
org.omg.PortableServer.Servant p_servant)
このメソッドの動作には次の4種類があります。

POAにRETAINポリシーとUNIQUE_IDポリシーがあり，p_servantに指定したサーバントがアクティブでない場合，そのサーバントを活性化するための情報をカプセル化しているオブジェクトリファレンスを返します。

POAにRETAINポリシーとIMPLICIT_ACTIVATIONポリシーがあり，さらにMULTIPLE_IDポリシーがあるかp_servantに指定したサーバントがアクティブでない場合，POAが生成したObjectId，およびサーバントに対応づけられたリポジトリインタフェースIDを使用してサーバントを活性化して，オブジェクトリファレンスを返します。

このメソッドが，p_servantに指定したサーバントへのリクエストを実行するコンテキストの中で呼び出された場合は，現在の呼び出しに対応づけられたリファレンスを返します。

上記以外の場合は，ServantNotActive例外を出力します。

POAがディスパッチしたメソッドのコンテキストの外でこのメソッドを呼び出す場合は，RETAINポリシーと，UNIQUE_IDポリシーまたはIMPLICIT_ACTIVATIONポリシーが必要です。このメソッドをp_servantに指定したサーバントに対するリクエストを実行するコンテキストの中で呼び出さないで，上記のポリシーもない場合は，WrongPolicy例外が発生します。
パラメタの意味を次に示します。

p_servant
リファレンスの取得対象サーバント

void set_servant(
org.omg.PortableServer.Servant p_servant)
このメソッドは，POAに対応するデフォルトサーバントを設定します。指定したサーバントは，アクティブオブジェクトマップの中にサーバントが登録されていないリクエストすべてに対して適用されます。
このメソッドを使用するには，POAにUSE_DEFAULT_SERVANTポリシーが必要です。このポリシーがない場合は，WrongPolicy例外が発生します。

p_servant
デフォルトとして使用する，POAに対応するサーバント

void set_servant_manager(
org.omg.PortableServer.ServantManager imagr)
このメソッドは，POAに対応するデフォルトサーバントマネージャを設定します。このメソッドは，POAが作成されているときだけ呼び出せます。POAに対応するデフォルトサーバントマネージャがすでに設定されているときにこのメソッドを呼び出すと，BAD_INV_ORDER例外が発生します。
このメソッドを使用するには，POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがなければWrongPolicy例外が発生します。

imagr
POAのデフォルトとして使用するサーバントマネージャ

org.omg.PortableServer.AdapterActivator the_activator( )
このメソッドは，POAに対応づけられたアダプタアクティベータを返します。POAの作成直後は，POAにはアダプタアクティベータがありません。つまり，属性がNULLになります。システムによっては，ルートPOAの持つアクティベータの一つをアプリケーションに割り当てさせることができます。

void the_activatorv(
org.omg.PortableServer.AdapterActivator the_activator)
このメソッドは，the_activatorに指定したアダプタアクティベータを，POAに対応づけるAdapterActivatorオブジェクトとして設定します。アプリケーションは，アクティベータをルートPOAに割り当てることができます。

the_activator
POAに対応づけるアダプタアクティベータ

String the_name( )
このメソッドは，POAを識別する属性を返します。この属性は，親POAを基準にPOAを識別する，読み取り専用の属性です。この属性は，POAを作成したときに割り当てられたものです。ルートPOAの名前はシステムに依存し，アプリケーションに依存するものではありません。

org.omg.PortableServer.POA the_parent( )
このメソッドは，該当するPOAの親POAを返します。ルートPOAの親はNULLです。

org.omg.Portableserver.POAManager the_POAManager( )
このメソッドは，POAに対応づけられたPOAマネージャを返します。

org.omg.CORBA.Policy[ ] the_policies( )
このメソッドは，該当するPOAに有効なポリシーをすべて返します。
Borlandはこのメソッドを，POAのインプリメンテーションに追加しました。このメソッドは，将来的にはOMGによってCORBAでPOAに格納される可能性があります。

4.10　PortableServer.POAManager

public interface org.omg.PortableServer.POAManager extends
   org.omg.PortableServer.POAManagerOperations, org.omg.CORBA.Object,
   org.omg.CORBA.portable.IDLEntity

どのPOAにも，POAマネージャが一つ対応づけられています。POAマネージャは一つ以上のPOAオブジェクトに順番に対応づけることができます。POAマネージャは，対応づけられているすべてのPOAの処理状態をカプセル化しています。

POAマネージャの状態には次の4種類があります。

アクティブ（ACTIVE）

非アクティブ（INACTIVE）

待機（HOLDING）

破棄（DISCARDING）

作成直後のPOAマネージャは「待機」状態です。メソッド呼び出しによってPOAマネージャの状態がどのように遷移するかを，次の図に示します。

図4-3　JavaでのPOAマネージャの状態遷移

＜この節の構成＞

4.10.1　import文

4.10.2　PortableServer.POAManagerのメソッド

4.10.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.10.2　PortableServer.POAManagerのメソッド

void activate( )
このメソッドは，POAマネージャの状態を「アクティブ」に変更します。POAマネージャが「アクティブ」状態のときは，対応づけられているすべてのPOAは，リクエストの処理が可能な状態となります。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。

void deactivate(
boolean etherealize_objects,
boolean wait_for_completion)
このメソッドは，POAマネージャの状態を「非アクティブ」に変更します。POAマネージャが「非アクティブ」状態のときは，対応づけられているすべてのPOAは，新規リクエストを含む実行開始前のリクエストを拒絶します。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。

void discard_requests(
boolean wait_for_completion)
このメソッドは，POAマネージャの状態を「破棄」に変更します。POAマネージャが「破棄」状態のときは，対応づけられているすべてのPOAは，到着したリクエストを破棄します。また，キューの中で実行待ち状態にあるリクエストも破棄されます。リクエストが破棄されると，個々のリクエストを発行したクライアントにそれぞれ，TRANSIENTシステム例外が返されます。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。

void hold_requests(
boolean wait_for_completion)
このメソッドは，POAマネージャの状態を「待機」に変更します。POAマネージャが「待機」状態のときは，対応づけられているすべてのPOAは，到着したリクエストをキューに保存します。このメソッドでPOAマネージャを「待機」状態にする前からキューの中で実行待ち状態にあったリクエストは，継続してキューの中で実行を待ちます。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。

PortableServer.POAManager.State get_state();
このメソッドはPOAmanagerの状態を返します。

4.11　PortableServer.POAManagerPackage.State

public class org.omg.PortableServer.POAManagerPackage.State extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスはPOAManagerの状態を表します。

＜この節の構成＞

4.11.1　import文

4.11.2　PortableServer.POAManagerPackage.Stateのメンバ

4.11.1　import文

コード内に「import org.omg.PortableServer.POAManagerPackage.State;」と記述してください。

4.11.2　PortableServer.POAManagerPackage.Stateのメンバ

ACTIVE
POAManagerがアクティブであることを表します。

INACTIVE
POAManagerが非アクティブであることを表します。

HOLDING
POAManagerが待機中であることを表します。

DISCARDING
POAManagerが破棄中であることを表します。

それぞれの状態遷移については，「4.10　PortableServer.POAManager」を参照してください。

4.12　PortableServer.ServantActivator

public interface org.omg.PortableServer.ServantActivator extends
   org.omg.PortableServer.ServantActivatorOperations,
   org.omg.PortableServer.ServantManager,
   org.omg.CORBA.portable.IDLEntity

POAにRETAINポリシーがある場合は，PortableServer.ServantActivatorオブジェクトであるサーバマネージャを使用します。

＜この節の構成＞

4.12.1　import文

4.12.2　PortableServer.ServantActivatorのメソッド

4.12.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.12.2　PortableServer.ServantActivatorのメソッド

void etherealize(
byte[ ] oid,
org.omg.PortableServer.POA adapter,
org.omg.PortableServer.Servant serv,
boolean cleanup_in_progress,
boolean remaining_activations)
このメソッドは，oidで指定したオブジェクトのサーバントを非活性化するときに，adapterに指定したPOAによって呼び出されます。このメソッドは，RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。

oid
非活性化するサーバントを持つオブジェクトのオブジェクトID

adapter
該当するオブジェクトが活性化していたスコープを持つPOA

serv
非活性化するサーバント

cleanup_in_progress
このパラメタにTrueを設定した場合は，etherealize_objectsパラメタにTrueを設定したdeactivateメソッドまたはdestroyメソッドを呼び出したときに，このメソッドが呼び出されます。このパラメタにTrueを設定しない場合は，それ以外の理由でこのメソッドが呼び出されます。

remaining_activations
指定したサーバントが，adapterで指定したPOAの他オブジェクトに対応づけられている場合はTrueを設定し，それ以外の場合はFALSEを設定します。

org.omg.PortableServer.Servant incarnate(
byte[ ] oid, org.omg.PortableServer.POA adapter)
throws
ForwardRequest
このメソッドは，oidに指定した非アクティブ状態のオブジェクトへのリクエストを受け取ったときにPOAによって呼び出されます。このメソッドは，RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。
このメソッドを使用するためには，指定したオブジェクトに対応する適当なサーバントを探索および作成するサーバントマネージャのインプリメンテーションを，ユーザが提供します。このメソッドが返すサーバントは，アクティブオブジェクトマップにも登録されます。以後，アクティブなオブジェクトに対するリクエストは，サーバントマネージャを呼び出すことなく直接そのオブジェクトに対応づけられたサーバントに渡されます。
このメソッドが，すでにほかのオブジェクトに対して活性化しているサーバントを返す場合と，POAにUNIQUE_IDポリシーがある場合，OBJ_ADAPTER例外が発生します。また，このメソッドではForwardRequest例外を発生させることができます。ForwardRequest例外については，「4.15　PortableServer.ForwardRequest」を参照してください。

oid
活性化するサーバントを持つオブジェクトのオブジェクトID

adapter
オブジェクトを活性化するスコープを持つPOA

4.13　PortableServer.ServantLocator

public interface org.omg.PortableServer.ServantLocator extends
   org.omg.PortableServer.ServantLocatorOperations,
   org.omg.PortableServer.ServantManager,
   org.omg.CORBA.portable.IDLEntity

POAにNON_RETAINポリシーがある場合，POAはPortableServer.ServantLocatorオブジェクトであるサーバントマネージャを使用します。POAは，このサーバントマネージャが返すサーバントは1件のリクエストに対してだけ使用されるということを知っているので，サーバントマネージャのメソッドに追加情報を提供できます。これによってサーバントマネージャの1組のメソッドは，PortableServer.ServantLocatorサーバントマネージャとは異なる処理を実行できます。

＜この節の構成＞

4.13.1　import文

4.13.2　PortableServer.ServantLocatorのメソッド

4.13.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.13.2　PortableServer.ServantLocatorのメソッド

org.omg.PortableServer.Servant preinvoke(
byte[ ] oid,
org.omg.PortableServer.POA adapter,
String operation,
org.omg.PortableServer.ServantLocatorPackage.CookieHolder
the_cookie)
throws
ForwardRequest
このメソッドは，POAが現在アクティブの状態にないオブジェクトへのリクエストを受け取ったときに呼び出されます。このメソッドは，NON_RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。
可能な場合，ユーザが提供するサーバントマネージャは，oidに指定したオブジェクトに対応する適切なサーバントを探索・作成する必要があります。
また，このメソッドではForwardRequest例外を発生させることができます。ForwardRequest例外については，「4.15　PortableServer.ForwardRequest」を参照してください。

oid
到着したリクエストに対応するオブジェクトID

adapter
オブジェクトを活性化するPOA

operation
サーバントが返されるときにPOAが呼び出すオペレーションの名前

the_cookie
サーバントマネージャがあとでpostinvokeメソッドに設定して使用できる不特定の値

void postinvoke(
byte[ ] oid,
org.omg.PortableServer.POA adapter,
String operation,
Object the_cookie,
org.omg.PortableServer.Servant the_servant)
このメソッドは，サーバントがリクエストの実行を完了するときに呼び出されます。このメソッドは，POAにNON_RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。このメソッドは，オブジェクトに対するリクエストの一部とみなされます。つまり，このメソッドが正常終了したのにpostinvokeメソッドがシステム例外を出力した場合は，このメソッドの正常リターンは無効となり，リクエストは例外を発生して終了します。
POAが認識しているサーバントをデストラクトした場合，結果は不定です。

oid
到着したリクエストに対応するオブジェクトID

adapter
オブジェクトを活性化するPOA

operation
サーバントが返されるときにPOAが呼び出すオペレーションの名前

the_cookie
サーバントマネージャがpreinvokeメソッドに設定して使用できる不特定の値

the_servant
オブジェクトに対応するサーバント

4.14　PortableServer.ServantManager

public interface org.omg.PortableServer.ServantManager extends
   org.omg.PortableServer.ServantManagerOperations,
   org.omg.CORBA.Object,
   org.omg.CORBA.portable.IDLEntity

サーバントマネージャは，POAに対応づけられています。サーバントマネージャによってPOAは，POAが非アクティブ状態のオブジェクトに対するリクエストを受信したときに，オンデマンドでオブジェクトを活性化できます。

PortableServer.ServantManagerインタフェースはメソッドを持たないで，ほかの二つのインタフェース（PortableServer.ServantActivatorとPortableserver.ServantLocator）のベースクラスとして使用します。詳細については，「4.12　PortableServer.ServantActivator」および「4.13　PortableServer.ServantLocator」を参照してください。PortableServer.ServantActivatorを使用するには，POAにRETAINポリシーが必要です。Portableserver.ServantLocatorを使用するには，POAにNON_RETAINポリシーが必要です。

＜この節の構成＞

4.14.1　import文

4.14.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.15　PortableServer.ForwardRequest

public final class ForwardRequest extends
   org.omg.CORBA.UserException

この例外を使用して，別のオブジェクトにリクエストを転送するようにクライアントに指示できます。PortableServer.ServantLocatorのpreinvoke()メソッド，およびPortableServer.ServantActivatorのincarnate()メソッドで使用できます。

＜この節の構成＞

4.15.1　import文

4.15.2　ForwardRequestの変数

4.15.3　ForwardRequestのメソッド

4.15.1　import文

コード内に「import org.omg.PortableServer.*;」と記述してください。

4.15.2　ForwardRequestの変数

public org.omg.CORBA.Object forward_reference;
この変数は，転送するオブジェクトリファレンスを表します。

4.15.3　ForwardRequestのメソッド

public ForwardRequest()
このメソッドは，空のプロパティを持つForwardRequestオブジェクトを生成します。

public ForwardRequest(
org.omg.CORBA.Object ref)
このメソッドは，指定されたプロパティを持つForwardRequestオブジェクトを生成します。

ref
転送するオブジェクトリファレンス

public ForwardRequest(
java.lang.String reason, org.omg.CORBA.Object ref)
このメソッドは，指定されたプロパティを持つForwardRequestオブジェクトを生成します。

reason
生成するForwardRequestオブジェクトの詳細メッセージ

ref
転送するオブジェクトリファレンス

5.　動的インタフェースとクラス（Java）

この章では，Java言語の動的インタフェースとクラスについて説明します。動的インタフェースとクラスのほとんどはorg.omg.CORBAパッケージに格納されています。InputStreamおよびOutputStreamは，org.omg.CORBA.portableパッケージにあります。

動的インタフェースとクラスはすべて，ランタイムのときのクライアントリクエストとオブジェクトインプリメンテーションの生成時に使用されます。

＜この章の構成＞

5.1　Any

5.2　ARG_IN

5.3　ARG_INOUT

5.4　ARG_OUT

5.5　ContextList

5.6　DynAny

5.7　DynArray

5.8　DynAnyFactory

5.9　DynEnum

5.10　DynSequence

5.11　DynStruct

5.12　DynUnion

5.13　DynamicImplementation

5.14　Environment

5.15　ExceptionList

5.16　InputStream

5.17　NamedValue

5.18　NameValuePair

5.19　NVList

5.20　OutputStream

5.21　Request

5.22　ServerRequest

5.23　TCKind

5.24　TypeCode

5.25　UnknownUserException

5.1　Any

public interface Any extends org.omg.CORBA.Any

このインタフェースはタイプ・セーフにAny型の値を格納するために使用され，動的起動インタフェースで使用されます。Anyに格納された型は，TypeCodeで定義されます。AnyはString，インタフェースオブジェクト，またはほかのAnyも格納できます。含まれている値を設定，検索するためのメソッドが提供されます。VisiBroker 4.xはFixed型とValue型をサポートしていませんので，これらの型を使用するとNO_IMPLEMENT例外が発生します。

Anyの生成には，org.omg.CORBA.ORB.create_any( )を使用します。詳細については，「4.5　ORB」を参照してください。

このインタフェースのHolderクラスについては，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.1.1　Anyのメソッド

5.1.2　Anyの抽出メソッド

5.1.3　Anyの挿入メソッド

5.1.1　Anyのメソッド

public org.omg.CORBA.portable.InputStream create_input_stream( )
このメソッドは，Anyの値を含む入力ストリームを生成します。

public org.omg.CORBA.portable.OutputStream
create_output_stream( )
このメソッドは，空の出力ストリームを生成します。

public boolean equal(
Any anAny)
このメソッドは，Anyに含まれる値がパラメタanAnyに含まれる値と同じ場合にtrueを返します。そうでない場合，falseを返します。

anAny
このAnyの値と比較される値を持つAny

public void read_value(
org.omg.CORBA.portable.InputStream input,
org.omg.CORBA.Typecode type)
このメソッドは，タイプコードで指定した入力ストリームからのAnyの値を読み出します。Anyの値だけが読み出されます。タイプコードも含めた完全なAnyの定義を呼び出すには，org.omg.CORBA.portable.InputStream.read_anyを使用してください。

input
指定された型の値が読み出されるGIOP入力ストリーム

type
入力ストリームから読み出される型。このパラメタの値については，「5.24　TypeCode」を参照してください。

public org.omg.CORBA.TypeCode type( )
このメソッドは，このAnyに含まれる型を表すTypeCodeを返します。

public void type(
org.omg.CORBA.TypeCode type)
このメソッドは，このAnyに含まれる型を表すTypeCodeを設定します。

type
このAnyオブジェクトに設定される型。このパラメタに指定できる値については，「5.24　TypeCode」を参照してください。

public void write_value(
org.omg.CORBA.portable.OutputStream output)
このメソッドは，Anyの値を出力ストリームに書き込みます。Anyの値だけが書き込まれます。タイプコードも含めた完全なAnyの定義を書き込むには，org.omg.CORBA.portable.OutputStream.write_anyを使用してください。

output
指定されたAnyの値が書き込まれるGIOP出力ストリーム

5.1.2　Anyの抽出メソッド

このAnyに含まれる型を返すメソッドが提供されます。コードサンプル5-1に抽出メソッドの名前を示します。このAnyに含まれる値が，使用される抽出メソッドの期待するリターンタイプと一致しない場合，StringIndexoutOfBoundsException例外が発生します。

コードサンプル5-1　Anyクラスで提供される抽出メソッド

public short              extract_short( )
public int                extract_long( )
public long               extract_longlong( )
public short              extract_ushort( )
public int                extract_ulong( )
public long               extract_ulonglong( )
public float              extract_float( )
public double             extract_double( )
public boolean            extract_boolean( )
public char               extract_char( )
public char               extract_wchar( )
public byte               extract_octet( )
public Any                extract_any( )
public org.omg.CORBA.Object extract_Object( )
public java.lang.String   extract_string( )
public java.lang.String   extract_wstring( )
public org.omg.CORBA.TypeCode extract_TypeCode( )

5.1.3　Anyの挿入メソッド

Anyに特定の値の型をコピーするメソッドが提供されます。各種の型を挿入するためのメソッド一覧を，コードサンプル5-2に示します。一つを除いて，すべてのメソッドは，挿入する型を表すパラメタを一つ受け付けます。

最初のinsert_ObjectメソッドはObjectを挿入します。2番目のinsert_Objectメソッドは，オブジェクトをさらに特定された型にナロウイングして，特定のTypeCodeのObjectを挿入します。2番目のメソッドは，TypeCodeの種類がTCKind.tk_objrefでない場合，BAD_PARAM例外を発生させます。

コードサンプル5-2　Anyクラスで提供される挿入メソッド

public void insert_short(short s)
public void insert_long(int i)
public void insert_longlong(long l)
public void insert_ushort(short s)
public void insert_ulong(int i)
public void insert_ulonglong(long l)
public void insert_float(float f)
public void insert_fixed(java.math.BigDecimal value)
public void insert_fixed(java.math.BigDecimal value,
                         org.omg.CORBA.Typecode type)
public void insert_double(double d)
public void insert_boolean(boolean b)
public void insert_char(char c)
public void insert_wchar(char c)
public void insert_octet(byte b)
public void insert_any(Any a)
public void insert_Object(org.omg.CORBA.Object o)
public void insert_Object(org.omg.CORBA.Object o,
                          org.omg.CORBA.TypeCode t)
public void insert_string(java.lang.String s)
public void insert_wstring(java.lang.String s)
void        insert_Value(java.io.Serializable v)
void        insert_Value(java.io.Serializable v,
                        org.omg.CORBA.Typecode t)
public void insert_TypeCode(org.omg.CORBA.TypeCode t)
public void insert_Streamable(
                     org.omg.CORBA.portable.Streamable s)

5.2　ARG_IN

public interface org.omg.CORBA.ARG_IN

このインタフェースは入力用だけに使用され，サーバで変更しない動的起動インタフェースリクエストのパラメタを指定するために使用されます。

詳細については，「5.21　Request」および「5.19　NVList」を参照してください。

＜この節の構成＞

5.2.1　ARG_INの変数

5.2.1　ARG_INの変数

public static int value = (int) 1;

5.3　ARG_INOUT

public interface org.omg.CORBA.ARG_INOUT

このインタフェースは，入出力を目的に使用されます。また，クライアントへのリターン時にサーバによって変更される動的起動インタフェースリクエストのパラメタを指定するためにも使用されます。

詳細については，「5.21　Request」および「5.19　NVList」を参照してください。

＜この節の構成＞

5.3.1　ARG_INOUTの変数

5.3.1　ARG_INOUTの変数

final public static int value = (int) 3;

5.4　ARG_OUT

public interface org.omg.CORBA.ARG_OUT

このインタフェースは，出力を目的に使用されます。また，クライアントへのリターン時にサーバだけが設定する動的起動インタフェースリクエストのパラメタを指定するためにも使用されます。

詳細については，「5.21　Request」および「5.19　NVList」を参照してください。

＜この節の構成＞

5.4.1　ARG_OUTの変数

5.4.1　ARG_OUTの変数

final public static int value = (int) 2;

5.5　ContextList

public interface ContextList extends org.omg.CORBA.Object

このインタフェースは使用されるコンテキスト文字列の変更可能なリストを保持します。

ContextListのインスタンスを生成するには，org.omg.CORBA.ORBが提供するcreate_context_list( )を使用してください。詳細については，「4.5　ORB」を参照してください。

＜この節の構成＞

5.5.1　IDLの定義

5.5.2　ContextListのメソッド

5.5.1　IDLの定義

interface ContextList {
  readonly attribute unsigned long count;
  void add(in string ctx);
  string item(in unsigned long index)
    raises(CORBA::Bounds);
  void remove(in unsigned long index)
    raises(CORBA::Bounds);
};

5.5.2　ContextListのメソッド

public void add(
String ctx)
このメソッドは，文字列をコンテキストリストに追加します。

ctx
コンテキストリストに追加する文字列の名前

public int count( )
このメソッドは，コンテキストリストの要素数を返します。

public String item(
int index)
throws
org.omg.CORBA.Bounds
このメソッドは，コンテキストリスト内の項目を返します。インデックス番号が不当である場合，バウンド例外が発生します。

index
項目のインデックス番号

public void remove(
int index)
throws
org.omg.CORBA.Bounds
このメソッドは，コンテキストリストから項目を削除します。インデックス番号が不当である場合，バウンド例外が発生します。

index
項目のインデックス番号

5.6　DynAny

public interface DynAny extends org.omg.CORBA

コンパイル時にデータ型が定義されなかった場合，実行時にクライアントアプリケーションまたはサーバがDynAnyオブジェクトを使用してデータ型を生成，解釈します。

DynAnyは，基本型（boolean，int，floatなど）または複合型（struct，unionなど）を格納できます。DynAnyに含まれる型は生成時に定義され，オブジェクトが存続している間は変更できません。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

DynAnyオブジェクトは，データ型を，それぞれの値を持つ複数コンポーネントとして表すことがあります。next，rewind，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

次のインタフェースはDynAnyから派生したもので，動的に管理される構造体をサポートします。

Array
「5.7　DynArray」を参照してください。

Enumeration
「5.9　DynEnum」を参照してください。

Sequence
「5.10　DynSequence」を参照してください。

Structure
「5.11　DynStruct」を参照してください。

Union
「5.12　DynUnion」を参照してください。

＜この節の構成＞

5.6.1　注意事項

5.6.2　DynAnyのメソッド

5.6.3　DynAnyの抽出メソッド

5.6.4　DynAnyの挿入メソッド

5.6.1　注意事項

DynAnyオブジェクトは，オペレーションリクエストのパラメタまたはDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。ただし，DynAny.to_anyメソッドを使用してDynAnyオブジェクトをAnyオブジェクトに変換すると，パラメタとして使用できるようになります。exctract_val型とfixed型の挿入はサポートしていません。これらのオペレーションではBAD_OPERATION例外が発生します。

5.6.2　DynAnyのメソッド

public void assign(
org.omg.DynamicAny.DynAny dyn_any)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch
このメソッドは，指定したDynAnyからこのオブジェクト内のカレントコンポーネントを初期化します。Anyに含まれる型がこのオブジェクトに含まれる型と一致しなかった場合，org.omg.DynamicAny.DynAnyPackage.TypeMismatch例外が発生します。

public org.omg.DynamicAny.DynAny copy( )
このメソッドは，このオブジェクトのコピーを返します。

public org.omg.DynamicAny.DynAny current_component( )
このメソッドは，このオブジェクト内のカレントコンポーネントを返します。

public void destroy( )
このメソッドは，このオブジェクトをデストラクトします。

public void from_any(
any value)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
org.omg.DymanicAny.DynAnyPackage.InvalidValue
このメソッドは，指定したAnyオブジェクトから，このオブジェクトのカレントコンポーネントを初期化します。
Anyに含まれる値のTypeCodeが，このオブジェクトの生成時に定義したTypeCodeと一致しない場合，org.omg.DynamicAny.DynAnyPackage.TypeMismatch例外が発生します。

value
このオブジェクトに設定する値を格納するAnyオブジェクト

public boolean next( )
このメソッドは，コンポーネントが次にある場合は制御をそこへ移し，trueを返します。コンポーネントが次にない場合はfalseを返します。

public void rewind( )
このメソッドは，このオブジェクトのシーケンスに含まれる先頭のコンポーネントに制御を返します。このメソッドに続いてcurrent_componentメソッドを起動すると，シーケンスの先頭のコンポーネントを返します。
このオブジェクトにコンポーネントが一つしかなかった場合，このメソッドは何もしません。

public boolean seek(
int index)
このオブジェクトにコンポーネントが複数ある場合，このメソッドは指定したインデックスのコンポーネントへ制御を移し，trueを返します。このメソッドに続いてcurrent_componentメソッドを起動すると，指定したインデックスのコンポーネントを返します。このオブジェクトにコンポーネントがない場合は，falseを返します。

index
ターゲットコンポーネントのインデックス（0から始まります）

public org.omg.CORBA.Any to_any( )
このメソッドは，カレントコンポーネントの値を格納するAnyオブジェクトを返します。

public org.omg.CORBA.TypeCode type( )
このメソッドは，このオブジェクトのカレントコンポーネントが格納する値のTypeCodeを返します。

5.6.3　DynAnyの抽出メソッド

次に示すのは，DynAnyオブジェクトのカレントコンポーネントが保持する型を返すメソッドです。コードサンプル5-3に抽出メソッドの名前を示します。

このDynAnyに含まれる値が，使用される抽出メソッドが返す型と一致しない場合，org.omg.DynamicAny.DynAnyPackage.TypeMismatch例外が発生します。

コードサンプル5-3　DynAnyクラスで提供される抽出メソッド

public org.omg.CORBA.Any get_any( )
public org.omg.DynamicAny.DynAny get_dyn_any( )
public boolean get_boolean( )
public char get_char( )
public double get_double( )
public float get_float( )
public int get_long( )
public long get_longlong( )
public byte get_octet( )
public org.omg.CORBA.Object get_reference( )
public short get_short( )
public java.lang.String get_string( )
public org.omg.CORBA.TypeCode get_typecode( )
public int get_ulong( )
public long get_ulonglong( )
public short get_ushort( )
public java.io.Serializable get_val( )
public char get_wchar( )
public java.lang.String get_wstring( )

5.6.4　DynAnyの挿入メソッド

次に示すのは，特定の型の値をこのDynAnyオブジェクトのカレントコンポーネントにコピーするメソッドです。コードサンプル5-4に，さまざまな型の挿入例を示します。

挿入したオブジェクトの型がDynAnyオブジェクトの型と一致しなかった場合，各挿入メソッドはorg.omg.DynamicAny.DynAnyPackage.TypeMismatch例外を発生させます。

コードサンプル5-4　DynAnyクラスで提供される挿入メソッド

public void insert_any(org.omg.CORBA.Any value)
public void insert_dyn_any(org.omg.DynamicAny.DynAny value)
public void insert_boolean(boolean value)
public void insert_char(char value)
public void insert_double(double value)
public void insert_float(float value)
public void insert_long(int value)
public void insert_longlong(long value)
public void insert_octet(byte value)
public void insert_reference(org.omg.CORBA.Object value)
public void insert_short(short value)
public void insert_string(java.lang.String value)
public void insert_typecode(org.omg.CORBA.TypeCode value)
public void insert_ulong(int value)
public void insert_ulonglong(long value)
public void insert_ushort(short value)
public void insert_val(java.io.Serializable value)
public void insert_wchar(char value)
public void insert_wstring(java.lang.String value)

5.7　DynArray

public interface DynArray extends org.omg.DynamicAny.DynAny

コンパイル時にデータ型が定義されなかった場合，実行時にクライアントアプリケーションまたはサーバがこのインタフェースを使用して，配列データ型を生成，解釈します。DynArrayは，一連の基本型（boolean，int，floatなど）または複合型（struct，unionなど）を格納できます。DynAnyに含まれる型は生成時に定義され，オブジェクトが存続している間は変更できません。

DynamicAnyから継承したnext，rewind，seek，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.7.1　注意事項

5.7.2　DynArrayのメソッド

5.7.1　注意事項

DynAnyオブジェクトはオペレーションリクエストおよびDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。ただし，DynAny.to_anyメソッドを使用してDynArrayオブジェクトを一連のAnyオブジェクトに変換すると，パラメタとして使用できるようになります。

5.7.2　DynArrayのメソッド

public org.omg.CORBA.Any[ ] get_elements( )
このメソッドは，このオブジェクトが格納する値を含むAnyオブジェクトのシーケンスを返します。

public void set_elements(
org.omg.CORBA.Any[ ] value)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch
org.omg.DynamicAny.DynAnyPackage.InvalidValue
このメソッドは，指定したAnyオブジェクトのシーケンスで，このオブジェクトに含める値を設定します。
このDynArrayの要素数とvalueに指定した要素数が一致しない場合，org.omg.DynamicAny.DynAnyPackage.InvalidValue例外が発生します。

value
このDynArrayに値を設定するAnyオブジェクトの配列

5.8　DynAnyFactory

public interface DynAnyFactory extends org.omg.CORBA.Object

このインタフェースを使用してこのオブジェクトに対するオペレーションを呼び出すことによって，DynAnyオブジェクトを任意の値から新規作成します。

＜この節の構成＞

5.8.1　注意事項

5.8.2　DynAnyFactoryのメソッド

5.8.1　注意事項

DynAnyFactoryオブジェクトは，作成されたプロセスの中だけで有効です。したがって，DynAnyFactoryオブジェクトのリファレンスをほかのプロセスにエクスポートしたり，外部化したりできません。

5.8.2　DynAnyFactoryのメソッド

public org.omg.DynamicAny.DynAny create_dyn_any(
org.omg.CORBA.Any value)
throws
org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode
このメソッドは，指定した値のDynAnyオブジェクトを作成します。

value
作成するDynAnyオブジェクトの値

public org.omg.DynamicAny.DynAny create_dyn_any_from_type_code(
org.omg.CORBA.Typecode type)
throws
org.omg.DynamicAny.DynAnyFactoryPackage.InconsistentTypeCode
このメソッドは，指定した型のDynAnyオブジェクトを作成します。

type
作成するDynAnyオブジェクトの型

5.9　DynEnum

public interface DynEnum extends org.omg.DynamicAny.DynAny

コンパイル時に列挙体の値が定義されなかった場合，実行時にクライアントアプリケーションまたはサーバがこのインタフェースを使用して値を生成，解釈します。

このデータ型が含むコンポーネントは一つだけなので，DynEnumオブジェクトに対してDynAny.rewindメソッドまたはDynAny.nextメソッドを起動すると，常にfalseを返します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.9.1　注意事項

5.9.2　DynEnumのメソッド

5.9.1　注意事項

DynEnumオブジェクトはオペレーションリクエストおよびDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。ただし，DynAny.to_anyメソッドを使用してDynEnumオブジェクトをAnyオブジェクトに変換すると，パラメタとして使用できるようになります。

5.9.2　DynEnumのメソッド

public java.lang.String get_as_string( )
このメソッドは，DynEnumオブジェクトの値を文字列として返します。

public void set_as_string(
java.lang.String value)
このメソッドは，指定した文字列で，このDynEnumに含まれる値を設定します。

value
このDynEnumに値を設定するために使用する文字列

public int get_as_ulong( )
このメソッドは，DynEnumオブジェクトの値を含むintを返します。

public void set_as_ulong(
int value)
このメソッドは，指定したintで，このDynEnumに含まれる値を設定します。

value
このDynEnumに値を設定するために使用する整数

5.10　DynSequence

public interface DynSequence extends org.omg.DynamicAny.DynAny

コンパイル時に配列データ型が定義されなかった場合，実行時にクライアントアプリケーションまたはサーバがこのインタフェースを使用して配列データ型を生成，解釈します。DynSequenceは，基本型（boolean，int，floatなど）または複合型（struct，unionなど）のシーケンスを格納できます。DynSequenceに含まれる型は生成時に定義され，オブジェクトが存続している間は変更できません。

DynAnyから継承したnext，rewind，seek，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.10.1　注意事項

5.10.2　DynSequenceのメソッド

5.10.1　注意事項

DynSequenceオブジェクトはオペレーションリクエストおよびDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。ただし，DynAny.to_anyメソッドを使用してDynSequenceオブジェクトをAnyオブジェクトのシーケンスに変換すると，パラメタとして使用できるようになります。

5.10.2　DynSequenceのメソッド

public org.omg.CORBA.Any[ ] get_elements( )
このメソッドは，このオブジェクトに格納された値を含むAnyオブジェクトのシーケンスを返します。

public int get_length( )
このメソッドは，このDynSequenceが格納しているコンポーネントの数を返します。

public void set_length(
int len)
このメソッドは，このDynSequenceが含んでいるコンポーネントの数を設定します。カレントコンポーネント数より小さい値（length）を指定すると，指定した数までのコンポーネントが格納されます。

len
このDynSequenceに含まれるコンポーネントの数

public void set_elements(
org.omg.CORBA.Any[ ] value)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
org.omg.org.omg.DynamicAny.DynAnyDynAnyPackage.InvalidValue
このメソッドは，指定したAnyオブジェクトのシーケンスで，このオブジェクトが含める値を設定します。valueに指定した要素数がこのDynSequenceオブジェクトの要素数と一致しない場合，org.omg.DynamicAny.DynAnyPackage.InvalidValue例外が発生します。

value
このDynArrayに値が設定されるAnyオブジェクトの配列

5.11　DynStruct

public interface DynStruct extends org.omg.DynamicAny.DynAny

コンパイル時に構造体が定義されなかった場合，実行時にクライアントアプリケーションまたはサーバがこのインタフェースを使用して生成，解釈します。

DynAnyから継承したnext，rewind，seek，およびcurrent_componentメソッドを使用して，各構造体メンバ間を自由に行き来できます。

DynStructオブジェクトは，ORB.create_dyn_structメソッドを起動することで生成されます。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.11.1　注意事項

5.11.2　DynStructのメソッド

5.11.1　注意事項

DynStructオブジェクトはオペレーションリクエストおよびDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。ただし，DynAny.to_anyメソッドを使用してDynStructオブジェクトをAnyオブジェクトに変換すると，パラメタとして使用できるようになります。

5.11.2　DynStructのメソッド

public java.lang.String current_member_name( )
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
org.omg.org.omg.DynamicAny.DynAnyDynAnyPackage.InvalidValue
このメソッドは，カレントコンポーネントのメンバ名を格納する文字列を返します。

public org.omg.CORBA.TCKind current_member_kind( )
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
org.omg.org.omg.DynamicAny.DynAnyDynAnyPackage.InvalidValue
このメソッドは，カレントコンポーネントに対応するTypeCodeを返します。

public org.omg.DynamicAny.NameValuePair[ ] get_members( )
このメソッドは，この構造体のすべてのメンバを，NameValuePairオブジェクトの配列として返します。

public void set_members(
org.omg.DynamicAny.NameValuePair[ ] value)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
org.omg.org.omg.DynamicAny.DynAnyDynAnyPackage.InvalidValue
このメソッドは，NameValuePairオブジェクトの配列で，構造体メンバを設定します。

public org.omg.DynamicAny.NameDynAnyPair[ ]
get_members_as_dyn_any( )
このメソッドは，該当するオブジェクトが保持している値を格納しているDynAnyオブジェクトをすべて返します。

public void set_members_as_dyn_any(
org.omg.DynamicAny.NameDynAnyPair[ ] value)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch,
org.omg.DynamicAny.DynAnyPackage.InvalidValue
このメソッドは，DynAnyオブジェクトを使用して，該当するDynStructオブジェクトにメンバを設定します。
valueに指定した要素の順番と，該当するDynStructオブジェクトのメンバの順番が一致しない場合，org.omg.DynamicAny.DynAnyPackage.InvalidValue例外が発生します。

5.12　DynUnion

public interface DynUnion extends org.omg.DynamicAny.DynAny

コンパイル時にunionが定義されなかった場合，実行時にクライアントアプリケーションまたはサーバがこのインタフェースを使用して，unionの生成と解釈をします。DynUnionには，unionの識別子と実メンバの二つの要素の列があります。

DynAnyから継承したnext，rewind，seek，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

DynUnionオブジェクトは，ORB.create_dyn_unionメソッドを起動して生成します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.12.1　注意事項

5.12.2　DynUnionのメソッド

5.12.1　注意事項

DynUnionオブジェクトはオペレーションリクエストおよびDIIリクエストのパラメタとしては使用できません。また，ORB.object_to_stringメソッドで外部化することもできません。ただし，DynAny.to_anyメソッドを使用してDynUnionオブジェクトをAnyオブジェクトに変換すると，パラメタとして使用できるようになります。

5.12.2　DynUnionのメソッド

public org.omg.DynamicAny.DynAny get_discriminator( )
このメソッドは，unionのディスクリミネータを含むDynAnyオブジェクトを返します。

public void set_discriminator(
org.omg.DynamicAny.DynAny d)
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch
該当するDynUnionオブジェクトの識別子を指定した値に設定します。

public org.omg.CORBA.TCKind discriminator_kind( )
このメソッドは，unionのディスクリミネータのタイプコードを返します。

public org.omg.DynamicAny.DynAny member( )
throws
org.omg.DynamicAny.DynAnyPackage.InvalidValue
このメソッドは，unionのメンバであるカレントコンポーネントのDynAnyオブジェクトを返します。

public org.omg.CORBA.TCKind member_kind( )
throws
org.omg.DynamicAny.DynAnyPackage.InvalidValue
このメソッドは，unionのメンバであるカレントコンポーネントのタイプコードを返します。

public java.lang.String member_name( )
throws
org.omg.DynamicAny.DynAnyPackage.InvalidValue
このメソッドは，カレントコンポーネントのメンバ名を返します。

public void set_to_default_member( )
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch
このメソッドは，ディスクリミネータを，unionのデフォルト値と一致する値に設定します。

public boolean has_no_active_member( )
共用体にアクティブなメンバがない場合，つまり共用体の識別子がcase文のラベルに示されない値と対応してるために，共用体が識別子だけから構成されている場合，trueを返します。

public void set_to_no_active_member( )
throws
org.omg.DynamicAny.DynAnyPackage.TypeMismatch
このメソッドは，ディスクリミネータを，どのunionのケースラベルにも対応しない値に設定します。

5.13　DynamicImplementation

public interface DynamicImplementation extends
   org.omg.CORBA.portable.ObjectImpl

このインタフェースは，VisiBroker ORBから任意のオブジェクトインプリメンテーションにリクエストを提供するインタフェースを提供します。オブジェクトインプリメンテーションは，コンパイル時にインプリメントするオブジェクトの型を意識しません。これは，静的なスケルトン，つまりIDLベースのスケルトンとは異なります。このスケルトンは両方とも同じ機能を提供します。DynamicImplementationは，VisiBroker ORBがinvokeメソッドでインプリメンテーションを呼び出すことで，特定のオブジェクトのすべてのリクエストをインプリメントします。

VisiBroker ORBは，ServerRequestオブジェクトを渡して，DynamicImplementationをアップコールします。ServerRequestの擬似オブジェクトは，DynamicImplementationへのリクエストの明示的状態を取得します。詳細については，「5.22　ServerRequest」を参照してください。

動的スケルトンの使用については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「動的スケルトンインタフェースの使用」の記述を参照してください。

＜この節の構成＞

5.13.1　DynamicImplementationのメソッド

5.13.1　DynamicImplementationのメソッド

public void invoke(
org.omg.CORBA.ServerRequest request)
このメソッドは，サーバの機能を提供します。

request
サーバが実行するリクエスト

5.14　Environment

public interface org.omg.CORBA.Environment

このインタフェースは，例外をカプセル化します。これは動的起動インタフェース（DII）と一緒に使用され，非同期DIIリクエストで発生した例外を処理するインタフェースを提供します。

Environmentのインスタンスを生成するには，org.omg.CORBA.ORBで提供されるcreate_environmentメソッドを使用してください。詳細については，「4.5　ORB」を参照してください。

＜この節の構成＞

5.14.1　Environmentのメソッド

5.14.1　Environmentのメソッド

public void clear( )
このメソッドは，カレントのEnvironmentで発生したExceptionをクリアします。これは，例外をnullに設定することと同じです。

public void exception(
java.lang.Exception exception)
このメソッドは，カレントの例外を設定します。設定する場合，事前に格納されていた例外は失われます。

exception
カレントのEnvironmentに設定された例外

public java.lang.Exception exception( )
このメソッドは，このEnvironmentに設定されたカレントのExceptionを返します。Exceptionが設定されていない場合，NULLを返します。

5.15　ExceptionList

public interface ExceptionList

このインタフェースは，動的起動インタフェース（DII）で使用され，IDLオペレーションから発生する例外について記述します。これには，タイプコードの変更可能リストを含みます。

ExceptionListのインスタンスを生成するには，org.omg.CORBA.ORBが提供するcreate_exception_list( )を使用してください。詳細については，「4.5　ORB」を参照してください。

＜この節の構成＞

5.15.1　IDLの定義

5.15.2　ExceptionListのメソッド

5.15.1　IDLの定義

interface ExceptionList {
  readonly attribute unsigned long count;
  void add(in CORBA::TypeCode exc);
  CORBA::TypeCode item(in unsigned long index)
      raises(CORBA::Bounds);
  void remove(in unsigned long index)
      raises(CORBA::Bounds);
};

5.15.2　ExceptionListのメソッド

public void add(
TypeCode exc)
このメソッドは，例外リストにタイプコードを追加します。

exc
リストに追加する例外

public int count( )
このメソッドは，例外リストの項目数を返します。

public TypeCode item(
int index)
throws
org.omg.CORBA.Bounds
このメソッドは，リストから項目を返します。インデックス番号が有効でない場合，バウンド例外が発生します。

index
返される項目のインデックス番号

public void remove(
int index)
throws
org.omg.CORBA.Bounds
このメソッドは，例外リストから項目を削除します。指定されたインデックス番号が有効でない場合，バウンド例外が発生します。

index
リストから削除される項目のインデックス番号

5.16　InputStream

public interface InputStream

このインタフェースは，GIOP入力ストリームを表します。この型のオブジェクトは，ORB.create_input_streamメソッドによって生成されます。出力ストリームに書き込まれるすべてのバイトは，入力ストリームメソッドを使用して読み出されます。各種データ型を読み出すために，幾つかのメソッドが提供されています。

create_input_streamメソッドおよびcreate_output_streamメソッドについては，「4.5　ORB」を参照してください。

＜この節の構成＞

5.16.1　InputStreamのメソッド

5.16.1　InputStreamのメソッド

InputStreamからデータを読み出すために，次に示すメソッドが提供されています。各メソッドは，特定のデータ型を返します。

コードサンプル5-5　InputStreamからデータを読み出すためのメソッド

public boolean read_boolean( )
public char read_char( )
public char read_wchar( )
public byte read_octet( )
public short read_short( )
public short read_ushort( )
public int read_long( )
public int read_ulong( )
public long read_longlong( )
public long read_ulonglong( )
public float read_float( )
public double read_double( )
public String read_string( )
public String read_wstring( )
public void read_boolean_array(boolean [ ] value,
                               int offset,int length)
public void read_char_array(char [ ] value,
                               int offset,int length)
public void read_wchar_array(char [ ] value,
                               int offset,int length)
public void read_octet_array(byte [ ] value,
                               int offset,int length)
public void read_short_array(short [ ] value,
                               int offset,int length)
public void read_ushort_array(short [ ] value,
                               int offset,int length)
public void read_long_array(int [ ] value,
                               int offset,int length)
public void read_ulong_array(int [ ] value,
                               int offset,int length)
public void read_longlong_array(long [ ] value,
                               int offset,int length)
public void read_ulonglong_array(long [ ] value,
                               int offset,int length)
public void read_float_array(float [ ] value,
                               int offset,int length)
public void read_double_array(double [ ] value,
                               int offset,int length)
public Object read_estruct(String expected_type)
public org.omg.CORBA.Object read_Object( )
public org.omg.CORBA.TypeCode read_TypeCode( )
public org.omg.CORBA.Any read_any( )
public org.omg.CORBA.Principal read_Principal( )

5.17　NamedValue

public interface NamedValue

このインタフェースは，動的起動インタフェースリクエストのパラメタと戻り値を指定するためにクライアントで使用されます。名前，値（Any），およびフラグのセットを表す整数を含みます。

NamedValueのインスタンスを生成するには，org.omg.CORBA.ORBで提供されるcreate_named_value(String name, Any value, int flags)メソッドを使用してください。詳細については，「4.5　ORB」および「5.19　NVList」を参照してください。

＜この節の構成＞

5.17.1　IDLの定義

5.17.2　NamedValueのメソッド

5.17.1　IDLの定義

interface NamedValue {
   readonly attribute CORBA::Identifier name;
   readonly attribute any value;
   readonly attribute CORBA::Flags flags;
};

5.17.2　NamedValueのメソッド

public int flags( )
このメソッドは，このNamedValueのフラグを返します。詳細については，「5.2　ARG_IN」，「5.3　ARG_INOUT」および「5.4　ARG_OUT」を参照してください。

public String name( )
このメソッドは，このNamedValueの名前を返します。nameが設定されていない場合はNULLを返します。

public org.omg.CORBA.Any value( )
このメソッドは，このNamedValueに設定されたカレントのvalueを表すAnyを返します。値は，場合によって変更されます。

5.18　NameValuePair

public interface NameValuePair

このインタフェースは，DynStructオブジェクトに含まれている構造体のメンバを表すために使用されます。

＜この節の構成＞

5.18.1　NameValuePairの変数

5.18.2　NameValuePairのコンストラクタ

5.18.1　NameValuePairの変数

public java.lang.String id
構造体メンバ名を表します。

public org.omg.CORBA.Any value
構造体メンバの値と型を表します。

5.18.2　NameValuePairのコンストラクタ

public NameValuePair( )
空のNameValuePairを生成します。

public NameValuePairv(
java.lang.String id, org.omg.CORBA.Any value)
指定のメンバ名および値で，初期化されたNameValuePairを生成します。

id
メンバ名

value
メンバの値

5.19　NVList

public interface NVList

このインタフェースには，NamedValueオブジェクトのセットを含みます。これは，動的起動インタフェースリクエストに対応するパラメタ，およびコンテキスト値を記述するためのコンテキストルーチン内のパラメタを渡すために，クライアントアプリケーションによって使用されます。これには，NamedValuesの変更可能リストを含みます。

NVListのインスタンスを生成するには，org.omg.CORBA.ORBが提供するcreate_listメソッドを使用してください。詳細については，「4.5　ORB」を参照してください。

＜この節の構成＞

5.19.1　IDLの定義

5.19.2　NVListのメソッド

5.19.1　IDLの定義

interface NVList {
   unsigned long count( );
   void add(in CORBA::Flags flags);
   void add_item(in CORBA::Identifier name,
                 in CORBA::Flags flags);
   void add_value(in CORBA::Identifier name,
                  in any value,
                  in CORBA::Flags flags);
   CORBA::NamedValue item(in unsigned long index);
   void remove(in unsigned long index);
};

5.19.2　NVListのメソッド

public org.omg.CORBA.NamedValue add(
int flags)
このメソッドは，NamedValue項目を，項目に対応する名前または値を初期化しないで，このリストに追加します。

flags
追加されるパラメタのモード。許可されている値は，org.omg.CORBA.ARG_IN.value，org.omg.CORBA.ARG_OUT.value，およびorg.omg.CORBA.ARG_INOUT.valueです。

public org.omg.CORBA.NamedValue add_item(
String item_name, int flags)
このメソッドは，項目に対応する値を初期化しないで，このリストにNamedValue項目を追加します。

item_name
追加される項目名

flags
追加されるパラメタのモード。許可される値は，org.omg.CORBA.ARG_IN.value，org.omg.CORBA.ARG_OUT.value，およびorg.omg.CORBA.ARG_INOUT.valueです。

public org.omg.CORBA.NamedValue add_value(
String item_name, org.omg.CORBA.Any value, int flags)
このメソッドは，指定された名前，値，およびフラグのあるこのNVListにNamedValueを追加します。

item_name
追加されるNamedValue名

value
Anyで表される，NamedValueの値。Anyインタフェースについては，「5.1　Any」を参照してください。

flags
追加されるパラメタのモード

public int count( )
このメソッドは，このNVListのNamedValue項目数を返します。

public org.omg.CORBA.NamedValue item(
int index)
throws
org.omg.CORBA.Bounds
このメソッドは，指定されたインデックスのあるリストからNamedValue項目を返します。インデックスが範囲外である場合，バウンド例外が発生します。

index
このリストから返されるNamedValueのインデックス

public void remove(
int index)
throws
org.omg.CORBA.Bounds
このメソッドは，このリストから，指定されたインデックスのNamedValueを削除します。インデックスが範囲外である場合，バウンド例外が発生します。

index
このリストから削除されるNamedValue項目のインデックス

5.20　OutputStream

public interface OutputStream

このインタフェースは，GIOP出力ストリームを表します。この型のオブジェクトは，ORB.create_output_streamメソッドを使用して生成されます。出力ストリームに書き込まれるすべてのバイトは，入力ストリームを使用して読み出せます。各種データ型を書き込むために幾つかのメソッドが提供されています。

create_input_streamメソッドおよびcreate_output_streamメソッドについては，「4.5　ORB」を参照してください。

＜この節の構成＞

5.20.1　OutputStreamのメソッド

5.20.1　OutputStreamのメソッド

次に示すメソッドが，OutputStreamに特定の型を書き込むために提供されています。これらの各メソッドは，書き込まれる型を表す単一パラメタを受け付けます。

コードサンプル5-6　OutputStreamに特定の型を書き込むためのメソッド

public inputStream create_input_stream( )
public void write_boolean(boolean value)
public void write_char(char value)
public void write_wchar(char value)
public void write_octet(byte value)
public void write_short(short value)
public void write_ushort(short value)
public void write_long(int value)
public void write_ulong(int value)
public void write_longlong(long value)
public void write_ulonglong(long value)
public void write_float(float value)
public void write_double(double value)
public void write_string(String value)
public void write_wstring(String value)
public void write_boolean_array(boolean [ ] value,
                           int offset,int length)
public void write_char_array(char [ ] value,
                           int offset,int length)
public void write_wchar_array(char [ ] value,
                           int offset,int length)
public void write_octet_array(byte [ ] value,
                           int offset,int length)
public void write_short_array(short [ ] value,
                           int offset,int length)
public void write_ushort_array(short [ ] value,
                           int offset,int length)
public void write_long_array(int [ ] value,
                           int offset,int length)
public void write_ulong_array(int [ ] value,
                           int offset,int length)
public void write_longlong_array(long [ ] value,
                           int offset,int length)
public void write_ulonglong_array(long [ ] value,
                           int offset,int length)
public void write_float_array(float [ ] value,
                           int offset,int length)
public void write_double_array(double [ ] value,
                           int offset,int length)
public org.omg.CORBA.Object write_estruct(
                             org.omg.CORBA.Object value ,
                             String expected_type)
public void write_Object(org.omg.CORBA.Object value)
public void write_TypeCode(org.omg.CORBA.TypeCode value)
public void write_any(org.omg.CORBA.Any value)
public void write_Principal(org.omg.CORBA.Principal value)

5.21　Request

public interface Request

このインタフェースは動的起動リクエストを表し，リクエストの初期化，送信，または応答を受信するためのメソッドを提供します。オペレーションリクエストは，同期，非同期，または応答がないonewayリクエストとして送信されます。呼び出しに対する応答は同期的にポーリングされ，取得されます。ORBインタフェースは，さらに高度な並行プロセスを可能にし，待ち時間を減少させるためにも使用されます。

このオブジェクトには次の状態情報が含まれています。

ターゲットオブジェクト

オペレーション名

パラメタ型および値

リターンタイプおよびリターン値

Environment。詳細については，「5.14　Environment」を参照してください。

Context。詳細については，「4.2　Context」を参照してください。

Requestの生成に関連して_create_requestメソッド，および_requestメソッドについては，「4.4　Object」を参照してください。

＜この節の構成＞

5.21.1　IDLの定義

5.21.2　Requestのメソッド

5.21.1　IDLの定義

interface Request {
  readonly attribute CORBA::Object target;
  readonly attribute CORBA::Identifier operation;
  readonly attribute CORBA::NVList arguments;
  readonly attribute CORBA::NamedValue result;
  readonly attribute CORBA::Environment env;
  readonly attribute CORBA::ExceptionList exceptions;
  readonly attribute CORBA::ContextList contexts;

  attribute CORBA::Context ctx;

  any add_in_arg( );
  any add_named_in_arg(in string name);
  any add_inout_arg( );
  any add_named_inout_arg(in string name);

  any add_out_arg( );
  any add_named_out_arg(in string name);
  void set_return_type(in ::CORBA::TypeCode tc);
  any return_value( );

  void invoke( );
  void send_oneway( );
  void send_deferred( );
  void get_response( );
  boolean poll_response( );
};

5.21.2　Requestのメソッド

public Any add_in_arg( )
INパラメタをリクエストに追加します。

public Any add_inout_arg( )
INOUTパラメタをリクエストに追加します。

public Any add_named_in_arg(
String name)
名前付きINパラメタをリクエストに追加します。

name
このリクエストに対応するパラメタ名

public Any add_named_inout_arg(
String name)
名前付きINOUTパラメタをリクエストに追加します。

name
このリクエストに対応するパラメタ名

public Any add_named_out_arg(
String name)
名前付きOUTパラメタをリクエストへ追加します。

name
このリクエストに対応するパラメタ名

public Any add_out_arg( )
OUTパラメタをリクエストに追加します。

public org.omg.CORBA.NVList arguments( )
このメソッドは，このリクエストのパラメタのリストを返します。これらのパラメタは，リクエスト送信前に初期化する必要があります。

public ContextList contexts( )
このメソッドは，コンテキストリストを返します。オペレーションがコンテキストを指定しないと，リストは空となります。

public org.omg.CORBA.Context ctx( )
このメソッドは，このリクエストに対応するコンテキストリストを返します。詳細については，「5.5　ContextList」を参照してください。

public void ctx(
org.omg.CORBA.Context ctx)
このメソッドは，このリクエストのコンテキストを設定します。
「4.5　ORB」のget_default_contextメソッドも参照してください。

ctx
コンテキスト

public org.omg.CORBA.Environment env( )
このメソッドは，リクエストが呼び出されるEnvironmentを返します。サーバによって発生する例外は，リクエストのEnvironmentに入れられます。詳細については，「5.14　Environment」を参照してください。

public org.omg.CORBA.ExceptionList exceptions( )
このメソッドは，ユーザ例外のタイプコードのリストを返します。オペレーションによるユーザ例外が発生しない場合，リストは空となります。

public void get_response( )
このブロッキングメソッドは，send_deferredメソッドによって送信された動的起動リクエストの結果を待ちます。すべてのinout，out，およびリターン値はこのメソッドによって更新されます。
ノンブロッキングpoll_responseメソッドは，このメソッドを呼び出す前に応答があるかどうかを判定するために使用されます。

public void invoke( )
このメソッドは，リクエストを送信したあと，処理を抑止して応答を待ちます。クライアントが応答待ちをしたくない場合は，このメソッドの代わりにsend_deferredメソッドが使用できます。

public String operation( )
このメソッドは，このリクエストに対応するオペレーション名，またはメソッド名を返します。

public boolean poll_response( )
このメソッドは，リクエストに対する応答が現在ある場合にtrueを返します。そうでない場合，falseを返します。このメソッドは，send_deferredメソッドが呼び出されたあとで，結果値を実際に読み出すget_responseメソッドを呼び出す前に使用されます。
「4.5　ORB」のpoll_next_responseメソッドも参照してください。

public org.omg.CORBA.NamedValue result( )
このメソッドは，リクエストの結果またはリターン値を返します。結果の型が指定されないと，型のデフォルトはvoidとなります。リターンタイプがvoidでない場合，型はリクエストの送信前に初期化される必要があります。

public Any return_value( )
このメソッドは，オペレーションのリターン値をAnyとして取得します。

public void send_deferred( )
このメソッドは，このリクエストを送信しますが，応答を待ちません。応答を確認する場合，結果を受信するためにpoll_responseメソッドおよびget_responseメソッドが使用されます。「4.5　ORB」のsend_multiple_requests_deferredメソッドも参照してください。

public void send_oneway( )
このノンブロッキングメソッドは，このリクエストを一方向requestとして送信します。一方向リクエストでは，送信されるサーバからの応答はありません。
「4.5　ORB」のsend_multiple_requests_onewayメソッドも参照してください。

public void set_return_type(
TypeCode tc)
このメソッドは，オペレーションを呼び出す前に返されると思われる型を設定します。

tc
設定するタイプコード

public org.omg.CORBA.Object target( )
このメソッドは，このリクエストが送信されるターゲットObjectを返します。ターゲットObjectは，Requestが生成されるときにObjectの_create_requestメソッドを使用して指定されます。

5.22　ServerRequest

public interface ServerRequest

動的スケルトンを使用する場合に重要であるServerRequestインタフェースは，クライアントからサーバによって受信されるリクエストを表します。これは，リクエストプロセス中に発生するExceptionを反映するメソッドと同様，Context，オペレーション名，およびオペレーションパラメタを取得するメソッドを提供します。このインタフェースは，DynamicImplementationとともに動作し，動的スケルトンを提供します。DynamicImplementationの詳細については，「5.5　ContextList」を参照してください。

動的スケルトンの使用については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「動的スケルトンインタフェースの使用」の記述を参照してください。

＜この節の構成＞

5.22.1　IDLの定義

5.22.2　ServerRequestのメソッド

5.22.1　IDLの定義

interface ServerRequest {
  readonly attribute CORBA::Identifier operation;
  void arguments(inout CORBA::NVList nv);
  CORBA::Context ctx();
  void set_result(in Any value);
  void set_exception(in Any value);
};

5.22.2　ServerRequestのメソッド

public java.lang.String operation( )
このメソッドは，このリクエストに対応するオペレーション名を返します。

public void arguments(
org.omg.CORBA.NVList args)
このメソッドは，このオペレーションリクエストのパラメタを設定します。このメソッドの使用方法については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「動的スケルトンインタフェースの使用」の記述を参照してください。

args
パラメタが格納されるNVList

public void set_result(
org.omg.CORBA.Any result)
このメソッドは，このオペレーションリクエストの結果を設定します。

result
オペレーションリクエストに設定される結果

public void set_exception(
org.omg.CORBA.Any except)
このメソッドは，requestプロセス中に発生するExceptionを設定するためにサーバによって使用され，クライアントに反映されます。

except
発生した例外

public org.omg.CORBA.Context ctx( )
このメソッドは，このServerRequestに対応するカレントのContextを返します。

public String op_name( )
このメソッドは，このリクエストに対応するオペレーション名を返します。
このメソッドは，非推奨メソッドです。operation()メソッドを使用してください。

public void params(
org.omg.CORBA.NVList params)
このメソッドは，このオペレーションリクエストのパラメタを設定します。このメソッドの使用方法については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「動的スケルトンインタフェースの使用」の記述を参照してください。
このメソッドは，非推奨メソッドです。arguments()メソッドを使用してください。

params
パラメタが格納されるNVList

public void result(
org.omg.CORBA.Any result)
このメソッドは，このオペレーションリクエストの結果を設定します。
このメソッドは，非推奨メソッドです。set_result()メソッドを使用してください。

result
オペレーションリクエストに設定される結果

public void except(
org.omg.CORBA.Any except)
このメソッドは，requestプロセス中に発生するExceptionを設定するためにサーバによって使用され，クライアントに反映されます。
このメソッドは，非推奨メソッドです。set_exception()メソッドを使用してください。

except
発生した例外

5.23　TCKind

public interface TCKind extends org.omg.CORBA.Object

このインタフェースには，TypeCodeを定義するTypeCodeオブジェクトとともに使用される定数を含みます。tk_を先頭に付けた，すべてのコードに対応できる整数定数のセットがあります。例えば，floatのタイプコードは，TCKind.tk_floatです。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.23.1　IDLの定義

5.23.2　TCKindのメソッド

5.23.1　IDLの定義

enum TCKind {
  tk_null, tk_void,
  tk_short, tk_long, tk_ushort, tk_ulong,
  tk_float, tk_double, tk_boolean, tk_char,
  tk_octet, tk_any, tk_TypeCode, tk_Principal, tk_objref,
  tk_struct, tk_union, tk_enum, tk_string,
  tk_sequence, tk_array, tk_alias, tk_except,
  tk_longlong, tk_ulonglong, tk_longdouble,
  tk_wchar, tk_wstring, tk_fixed,
  tk_value, tk_value_box,
  tk_native,
  tk, _interface
};

5.23.2　TCKindのメソッド

public int value( )
このメソッドは，定数を表す整数値を返します。

public static TCKind from_int(
int value)
このメソッドは，指定する値のenumインスタンスを返します。enumマッピングの詳細については，「2.8.1　enum」を参照してください。

value
enum値

5.24　TypeCode

public interface TypeCode

このインタフェースは，IDLで定義される各種型について記述し，それらがランタイム時に生成，検査できるようにします。タイプコードは，ほとんどの場合，Anyオブジェクトに格納される値の型を記述するために使用されます。格納される値の型については，「5.1　Any」を参照してください。また，タイプコードは，パラメタとしてメソッド呼び出しに渡されます。

タイプコードは各種ORB.create_<type>_tcメソッドを使用して生成されます。すべて組み込まれているタイプコードは，TCKindクラスで提供されます。詳細については，「4.　コアインタフェースとクラス（Java）」を参照してください。

このインタフェースのHolderクラス，およびHolderクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

5.24.1　IDLの定義

5.24.2　TypeCodeのメソッド

5.24.1　IDLの定義

interface TypeCode {
   exception Bounds {
   };
   exception BadKind {
   };
   boolean equal(in CORBA::TypeCode tc);
   CORBA::TCKind kind( );
   CORBA::RepositoryId id( )
       raises(CORBA::TypeCode::BadKind);
   CORBA::Identifier name( )
       raises(CORBA::TypeCode::BadKind);
   unsigned long member_count( )
       raises(CORBA::TypeCode::BadKind);
   CORBA::Identifier member_name(in unsigned long index)
       raises(CORBA::TypeCode::BadKind,
              CORBA::TypeCode::Bounds);
   CORBA::TypeCode member_type(in unsigned long index)
       raises(CORBA::TypeCode::BadKind,
              CORBA::TypeCode::Bounds);
   any member_label(in unsigned long index)
       raises(CORBA::TypeCode::BadKind,
              CORBA::TypeCode::Bounds);
   CORBA::TypeCode discriminator_type( )
       raises(CORBA::TypeCode::BadKind);
   long default_index( )
       raises(CORBA::TypeCode::BadKind);
   unsigned long length( )
       raises(CORBA::TypeCode::BadKind);
   CORBA::TypeCode content_type( )
       raises(CORBA::TypeCode::BadKind);
   long param_count( );
   any parameter(in long index)
       raises(CORBA::TypeCode::Bounds);
};

5.24.2　TypeCodeのメソッド

public org.omg.CORBA.TypeCode content_type( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，シーケンスや配列型またはエイリアス型に含まれる要素のタイプコードを返します。このメソッドは，次のタイプコードの場合有効です。

tk_sequence

tk_array

tk_alias

BAD_PARAM例外は，タイプコードが上記のどれでもない場合に発生します。

public int default_index( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，unionのデフォルトインデックスを返します。このメソッドは，タイプコードtk_unionのオブジェクトの場合だけ有効です。そうでない場合，BAD_PARAM例外が発生します。

public TypeCode discriminator_type( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，unionのディスクリミネータのタイプコードを返します。このメソッドは，tk_unionのタイプコードでオブジェクトを呼び出す場合だけ有効です。そうでない場合は，BAD_PARAM例外が発生します。

public boolean equal(
org.omg.CORBA.TypeCode tc)
このメソッドは，このオブジェクトがtcと同等である場合にtrueを返します。そうでない場合，falseを返します。型が同じであるかどうかは，名前ではなく型の構造体によって判定されます。同じ順序で宣言された同じフィールドの二つの構造体は，型が同じであるとみなされます。

tc
このオブジェクト型と比較されるTypeCode

public String id( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，タイプコードのリポジトリIDを返します。この文字列はIDLに使用され，型を定義します。

public TCKind kind( )
このメソッドは，このタイプコードに対応する型の種類を返します。タイプコード種類定数は，TCKindで定義されます。詳細については，「5.23　TCKind」を参照してください。

public int length( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，型が含む要素数を返します。要素数がstringやsequenceのようにアンバウンデッドであれば，0を返します。このメソッドは，次のタイプコードの場合有効です。

tk_string

tk_sequence

tk_array

タイプコードが上記のどれでもない場合，BAD_PARAM例外が発生します。

public int member_count( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，型が保持しているメンバ数を返します。このメソッドは，次のタイプコードの場合有効です。

tk_struct

tk_union

tk_enum

tk_except

タイプコードが上記のどれでもない場合，BAD_PARAM例外が発生します。

public Any member_label(
int index)
throws
org.omg.CORBA._TypeCodePackage.BadKind,
org.omg.CORBA._TypeCodePackage.Bounds
このメソッドは，指定されたインデックスのあるメンバに対応するケースステートメントのラベルを返します。このメソッドは，タイプコードtk_unionの場合だけ有効で，そうでない場合は，BAD_PARAM例外が発生します。インデックスがバウンド外である場合，Bounds例外が発生します。

index
ラベルが返されるメンバのインデックス

public String member_name(
int index)
throws
org.omg.CORBA._TypeCodePackage.BadKind,
org.omg.CORBA._TypeCodePackage.Bounds
このメソッドは，指定されたインデックスのあるメンバ名を返します。
このメソッドは，次のタイプコードの場合有効です。

tk_struct

tk_union

tk_enum

tk_except

タイプコードが上記のどれでもない場合，BAD_PARAM例外が発生します。インデックスがバウンド外である場合，Bounds例外が発生します。

index
名前が返されるメンバのインデックス

public org.omg.CORBA.TypeCode member_type(
int index)
throws
org.omg.CORBA._TypeCodePackage.BadKind,
org.omg.CORBA._TypeCodePackage.Bounds
このメソッドは，指定されたインデックスのあるメンバのタイプコードを返します。このメソッドは，次のタイプコードの場合有効です。

tk_struct

tk_union

tk_except

タイプコードが上記のどれでもない場合，BAD_PARAM例外が発生します。インデックスがバウンド外である場合，Bounds例外が発生します。

index
タイプコードが返されるメンバのインデックス

public String name( )
throws
org.omg.CORBA._TypeCodePackage.BadKind
このメソッドは，アンスコープ型名を返します。このメソッドは，次のタイプコードの場合有効です。

tk_objref

tk_struct

tk_union

tk_enum

tk_alias

tk_except

タイプコードが上記のどれでもない場合，BAD_PARAM例外が発生します。

5.25　UnknownUserException

public interface UnknownUserException extends
   org.omg.CORBA.UserException

クライアントがDIIリクエストを発行してユーザ例外が発生すると，特定の例外がクライアントに反映されなくなり，この例外が代わりに使用されます。

6.　インタフェースリポジトリインタフェースとクラス（Java）

この章では，Java言語でインタフェースリポジトリと一緒に使用するorg.omg.CORBAパッケージでのインタフェースとクラスについて説明します。

＜この章の構成＞

6.1　AbstractInterfaceDef

6.2　AliasDef

6.3　ArrayDef

6.4　AttributeDef

6.5　AttributeDescription

6.6　AttributeMode

6.7　ConstantDef

6.8　ConstantDescription

6.9　Contained

6.10　ContainedPackage.Description

6.11　Container

6.12　ContainerPackage.Description

6.13　DefinitionKind

6.14　EnumDef

6.15　ExceptionDef

6.16　ExceptionDescription

6.17　FixedDef

6.18　FullValueDescription

6.19　IDLType

6.20　InterfaceDef

6.21　InterfaceDefPackage.FullInterfaceDescription

6.22　InterfaceDescription

6.23　IRObject

6.24　LocalInterfaceDef

6.25　ModuleDef

6.26　ModuleDescription

6.27　NativeDef

6.28　OperationDef

6.29　OperationDescription

6.30　OperationMode

6.31　ParameterDescription

6.32　ParameterMode

6.33　PrimitiveDef

6.34　PrimitiveKind

6.35　Repository

6.36　SequenceDef

6.37　StringDef

6.38　StructDef

6.39　StructMember

6.40　TypedefDef

6.41　TypeDescription

6.42　UnionDef

6.43　UnionMember

6.44　ValueBoxDef

6.45　ValueDef

6.46　ValueDescription

6.47　ValueMemberDef

6.48　WstringDef

6.1　AbstractInterfaceDef

public interface org.omg.CORBA.AbstractInterfaceDef extends
   org.omg.CORBA.AbstractInterfaceDefOperations,
   org.omg.CORBA.InterfaceDef,
   org.omg.CORBA.portable.IDLEntity

AbstractInterfaceDefは，InterfaceDefインタフェースに類似したインタフェースです。InterfaceDefとの違いは，abstract型インタフェースが継承できるのはabstract型インタフェースからだけで，concrete型インタフェースをベースとして使用できないという点です。AbstractInterfaceDefインタフェースは，インタフェースリポジトリに格納されているIDLのabstract型インタフェースを表すために使用します。このインタフェースは属性，オペレーション，インタフェース定義を作成するメソッド，およびベースインタフェースの設定と取得を実行するメソッドを提供します。

InterfaceDefインタフェースの詳細については，「6.20　InterfaceDef」を参照してください。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.1.1　AbstractInterfaceDefのメソッド

6.1.1　AbstractInterfaceDefのメソッド

public org.omg.CORBA.AbstractInterfaceDef[ ]base_interfaces( )
このメソッドは，このオブジェクトのベースインタフェースの空のリストを返します。

public void base_interfaces(
org.omg.CORBA.InterfaceDef[ ]base_interfaces)
このメソッドは，このオブジェクトのベースインタフェースリストを設定します。

base_interfaces
設定するベースインタフェースリスト

public org.omg.CORBA.InterfaceDef create_abstract_interface(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.AbstractInterfaceDef[ ] base_interfaces)
このメソッドは，指定した属性でAbstractInterfaceDefオブジェクトをこのContainerの中に生成し，新しく生成したオブジェクトのリファレンスを返します。concrete型のInterfaceDefとは異なり，AbstractInterfaceDefインタフェースはabstract型とconcrete型の両方のインタフェースの定義を格納できません。継承できるのは，abstract型インタフェースだけです。

id
インタフェースのリポジトリID

name
インタフェースの名前

version
インタフェースのバージョン

base_interfaces
このインタフェースの継承元となるすべてのインタフェースの一覧

public org.omg.CORBA.AttributeDef create_attribute(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType type,
org.omg.CORBA.AttributeMode mode)
このメソッドは，属性をインタフェース定義に追加します。

id
属性の識別子

name
属性の名前

version
属性のバージョン

type
属性のIDL型

mode
属性のモード。AttributeModeに指定できる値の詳細については，「6.6　AttributeMode」を参照してください。

public org.omg.CORBA.OperationDef create_operation(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType result,
org.omg.CORBA.OperationMode mode,
org.omg.CORBA.ParameterDescription[ ] params,
org.omg.CORBA.ExceptionDef[ ] exceptions,
java.lang.String[ ] contexts)
このメソッドは，オペレーションをインタフェース定義に追加します。

id
オペレーションの識別子

name
オペレーションの名前

version
オペレーションのバージョン

result
オペレーションのIDL結果型

mode
オペレーションのモード。詳細については，「6.30　OperationMode」を参照してください。

params
このオペレーションのパラメタの一覧

exceptions
このオペレーションで発生する可能性のある例外の一覧

contexts
コンテキストの一覧

public org.omg.CORBA.InterfaceDefPackage.
FullInterfaceDescription describe_interface( )
このメソッドは，このオブジェクトのインタフェース定義を返します。

public boolean is_a(
java.lang.String interface_id)
このオブジェクトが，interface_idに指定したインタフェース識別子と互換性のあるインタフェース定義を表す場合，このメソッドはtrueを返します。

interface_id
このオブジェクトとの比較に使用するインタフェース識別子

public boolean is_abstract( )
trueが設定された場合，このメソッドは，指定したインタフェースがabstractであることを示します。

is_abstract
abstractインタフェースの作成を指定します。

public void is_abstract(
boolean is_abstract)
このメソッドは，このインタフェースをabstractに設定します。

is_abstract
オブジェクトをabstractに設定します。

6.2　AliasDef

public interface org.omg.CORBA.AliasDef extends
   org.omg.CORBA.AliasDefOperations,
   org.omg.CORBA.TypedefDef,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているtypedefを表すために使用します。このインタフェースは，オリジナルのtypedefのIDLTypeを設定および取得するためのメソッドを提供します。

TypedefDefの詳細については，「6.19　IDLType」を参照してください。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.2.1　AliasDefのメソッド

6.2.1　AliasDefのメソッド

public void original_type_def(
org.omg.CORBA.IDLType original_type_def)
このメソッドは，このオブジェクトのIDLTypeを設定します。

original_type_def
このオブジェクトのIDLType

public org.omg.CORBA.IDLType element_type_def( )
このメソッドは，このオブジェクトがエイリアスとなっているオブジェクトのオリジナルtypedefのIDLTypeを返します。

6.3　ArrayDef

public interface org.omg.CORBA.ArrayDef extends
   org.omg.CORBA.ArrayDefOperations,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている配列を表すために使用します。このインタフェースは，配列内の要素型と配列の長さを設定および取得するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.3.1　ArrayDefのメソッド

6.3.1　ArrayDefのメソッド

public int length( )
このメソッドは，配列内の要素数を返します。

public void length(
int length)
このメソッドは，配列内の要素数を設定します。

length
array内の要素数

public org.omg.CORBA.TypeCode element_type( )
このメソッドは，配列の要素のTypeCodeを返します。

public void element_type_def(
org.omg.CORBA.IDLType element_type_def)
このメソッドは，配列内に格納されている要素のIDLTypeを設定します。

element_type_def
配列内の要素のIDLType

public org.omg.CORBA.IDLType element_type_def( )
このメソッドは，配列内に格納されている要素のIDLTypeを返します。

6.4　AttributeDef

public interface org.omg.CORBA.AttributeDef extends
   org.omg.CORBA.AttributeDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているインタフェース属性を表すために使用します。このインタフェースは，属性のモードと型を設定および取得するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.4.1　AttributeDefのメソッド

6.4.1　AttributeDefのメソッド

public org.omg.CORBA TypeCode type( )
このメソッドは，属性の型を表すTypeCodeを返します。

public void type_def(
org.omg.CORBA.IDLType type_def)
このメソッドは，属性のIDLTypeを設定します。

type_def
このオブジェクトのIDLType

public org.omg.CORBA.IDLType type_def( )
このメソッドは，属性のIDLTypeを返します。

public org.omg.CORBA.AttributeMode mode( )
このメソッドは，属性のモードを返します。読み取り専用属性を示すAttributeMode ATTR_READONLYと，読み書き可能属性を示すAttributeMode ATTR_NORMALのどちらかを返します。詳細については，「6.6　AttributeMode」を参照してください。

org.omg.CORBA.AttributeDef mode( )
このメソッドは，該当するモード属性の値を返します。

public void mode(
org.omg.CORBA.AttributeMode mode)
このメソッドは，モード属性の値を設定します。

6.5　AttributeDescription

public final class org.omg.CORBA.AttributeDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されている属性を記述します。また，AttributeDescriptionのstructは，インタフェースと値を完全に表現するために使用します。これらの型だけが，属性を保持できるIDL型です。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.5.1　AttributeDescriptionの変数

6.5.2　AttributeDescriptionのメソッド

6.5.1　AttributeDescriptionの変数

public java.lang.String name
この変数は，属性の名前を表します。

public java.name.String id
この変数は，属性のリポジトリIDを表します。

public java.lang.String defined_in
この変数は，属性が定義されているインタフェースのリポジトリIDまたはvaluetypeを表します。

public java.lang.String version
この変数は，属性のバージョンを表します。

public org.omg.CORBA.TypeCode type
この変数は，属性のTypeCodeを表します。

public org.omg.CORBA.AttributeMode mode
この変数は，属性のモードを表します。

6.5.2　AttributeDescriptionのメソッド

public AttributeDescription( )
このメソッドは，AttributeDescriptionのデフォルトコンストラクタです。

public AttributeDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
java.lang.String version,
org.omg.CORBA.TypeCode type,
org.omg.CORBA.AttributeMode mode)
このメソッドは，指定されたパラメタを使用して，AttributeDescriptionを構成します。

name
この属性の名前

id
この属性のリポジトリID

defined_in
この属性が定義されたインタフェースまたはvaluetype

version
オブジェクトのバージョン

type
属性のIDLタイプコード

mode
この属性のモード（「読み取り専用」または「読み書き可能」）。詳細については，「6.6　AttributeMode」を参照してください。

6.6　AttributeMode

public final class org.omg.CORBA.AttributeMode extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラス（IDLの列挙体）は，属性のモードが読み取り専用か標準（読み書き可能）かを表すために使用します。モードとして次のどちらかのパラメタを指定できます。

NORMAL
このモードでは，この属性は読み書き可能となります。

READONLY
このモードでは，この属性は読み取り専用となります。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.6.1　AttributeModeの要素

6.6.1　AttributeModeの要素

org.omg.CORBA.AttributeMode.ATTR_NORMAL
この変数は，標準モードの属性を定義します。

org.omg.CORBA.AttributeMode.ATTR_READONLY
この変数は，読み取り専用モードの属性を定義します。

6.7　ConstantDef

public interface org.omg.CORBA.ConstantDef extends
   org.omg.CORBA.ConstantDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている定数定義を表すために使用します。このインタフェースは，定数の型と値を設定，取得するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.7.1　ConstantDefのメソッド

6.7.1　ConstantDefのメソッド

public org.omg.CORBA.TypeCode type( )
このメソッドは，オブジェクトの型を表すTypeCodeを返します。

public org.omg.CORBA.IDLType type_def( )
このメソッドは，定数のIDLTypeを返します。

public void type_def(
org.omg.CORBA.IDLType type_def)
このメソッドは，定数のIDLTypeを設定します。

type_def
この定数のIDLType

public org.omg.CORBA.Any value( )
このメソッドは，定数の値を表すAnyオブジェクトを返します。

public void value(
org.omg.CORBA.Any value)
このメソッドは，この定数の値を設定します。

value
このオブジェクトの値を表すAnyオブジェクト

6.8　ConstantDescription

public final class org.omg.CORBA.ConstantDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されている定数を記述します。

＜この節の構成＞

6.8.1　ConstantDescriptionの変数

6.8.2　ConstantDescriptionのメソッド

6.8.1　ConstantDescriptionの変数

public java.lang.String name
この変数は，定数名を表します。

public java.lang.String id
この変数は，定数のリポジトリIDを表します。

public java.lang.String defined_in
この変数は，この定数が定義されたモジュールまたはインタフェースのリポジトリIDを表します。

public org.omg.CORBA.VersionSpec version
この変数は，定数のバージョンを表します。

public org.omg.CORBA.TypeCode type
この変数は，定数のTypeCodeを表します。

public org.omg.CORBA.Any value
この変数は，この定数の値を表します。

6.8.2　ConstantDescriptionのメソッド

public ConstantDescription( )
このメソッドは，ConstantDescriptionのデフォルトコンストラクタです。

public ConstantDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
org.omg.CORBA.VersionSpec version,
org.omg.CORBA.TypeCode type,
org.omg.CORBA.Any value)
このメソッドは，指定されたパラメタを使用して，ConstantDescriptionを構成します。

name
この定数の名前

id
この定数のリポジトリID

defined_in
この定数が定義されたモジュールまたはインタフェース

version
オブジェクトのバージョン

type
定数のIDLタイプコード

value
この定数の値

6.9　Contained

public interface org.omg.CORBA.Contained extends
   org.omg.CORBA.ContainedOperations,
   org.omg.CORBA.IRObject,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，ほかのインタフェースリポジトリオブジェクトに含まれたインタフェースリポジトリオブジェクトを表すために使用します。このインタフェースは，次に示す動作をするためのメソッドを提供します。

オブジェクト名とバージョンの設定と取得

このオブジェクトを含むContainerの決定

オブジェクトの絶対名，オブジェクトのリポジトリ，記述の取得

一つのコンテナからほかのコンテナへのオブジェクトの移動

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.9.1　IDLの定義

6.9.2　Containedのメソッド

6.9.1　IDLの定義

interface Contained:IRObject {
   attribute RepositoryId id;
   attribute Identifier name;
   attribute VersionSpec version;

   readonly attribute Container defined_in;
   readonly attribute ScopedName absolute_name;
   readonly attribute Repository containing_repository;

   struct Description {
       DefinitionKind kind;
       any value;
   };

   Description describe( );

   void move(in Container new_container,
       in Identifier new_name,
       in VersionSpec new_version);
};

6.9.2　Containedのメソッド

public java.lang.String absolute_name( )
このメソッドは，オブジェクトの絶対名を返します。

public org.omg.CORBA.Repository containing_repository( )
このメソッドは，このオブジェクトを含んでいるリポジトリを返します。

public org.omg.CORBA.Container defined_in( )
このメソッドは，このオブジェクトが定義されたContainerを返します。

public org.omg.CORBA.ContainedPackage.Description describe( )
このメソッドは，このオブジェクトの記述を返します。
Descriptionの詳細については，「6.12　ContainerPackage.Description」を参照してください。

public java.lang.String id( )
このメソッドは，このオブジェクトのリポジトリIDを返します。

public void id(
String id)
このメソッドは，このオブジェクトを一意に識別するリポジトリIDを設定します。

id
このオブジェクトのリポジトリID

public java.lang.String name( )
このメソッドは，このオブジェクトの名前を返します。

public void name(
java.lang.String name)
このメソッドは，このオブジェクトの名前を設定します。

name
オブジェクト名

public java.lang.String version( )
このメソッドは，このオブジェクトのバージョンを返します。

public void version(
java.lang.String version)
このメソッドは，このオブジェクトのバージョンを設定します。

version
オブジェクトのバージョン

public void move(
org.omg.CORBA.Container new_container,
String new_name,
java.lang.String new_version)
このメソッドは，このオブジェクトをほかのコンテナに移動させます。

new_container
オブジェクトの移動先のContainer

new_name
オブジェクトの新しい名前

new_version
オブジェクトの新しいバージョン設定

6.10　ContainedPackage.Description

public final class org.omg.CORBA.ContainedPackage.Description extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，Containedインタフェースから派生したインタフェースリポジトリ内の各項目の一般的な記述を提供します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.10.1　ContainedPackage.Descriptionの変数

6.10.2　ContainedPackage.Descriptionのメソッド

6.10.1　ContainedPackage.Descriptionの変数

public org.omg.CORBA.DefinitionKind kind
この変数は，項目の種類を表します。

public org.omg.CORBA.Any value
この変数は，項目の値を表します。

6.10.2　ContainedPackage.Descriptionのメソッド

public Description( )
このメソッドは，Descriptionのデフォルトコンストラクタです。

public Description(
org.omg.CORBA.DefinitionKind kind,
org.omg.CORBA.Any value)
このメソッドは，指定されたパラメタを使用して，Descriptionを構成します。

kind
この項目の種類。詳細については，「6.12　ContainerPackage.Description」を参照してください。

value
この項目の値を表すAnyオブジェクト

6.11　Container

public interface org.omg.CORBA.Container extends
   org.omg.CORBA.ContainerOperations,
   org.omg.CORBA.IRObject,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリ内に包含階層を生成するために使用します。Containerオブジェクトは，Containedクラスから派生したオブジェクト定義を保持します。Containerインタフェースから派生したすべてのオブジェクト定義も，Repositoryクラスの例外とともに，Containedクラスから継承します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.11.1　IDLの定義

6.11.2　Containerのメソッド

6.11.1　IDLの定義

interface Container:IRObject {
   Contained lookup(in ScopedName search_name);
   ContainedSeq contents(
       in DefinitionKind limit_type,
       in boolean exclude_inherited);
   ContainedSeq lookup_name(
       in Identifier search_name,
       in long levels_to_search,
       in DefinitionKind limit_type,
       in boolean exclude_inherited
   );
   struct Description {
       Contained contained_object;
       DefinitionKind kind;
       any value;
   };
   typedef sequence<Description>DescriptionSeq;

   DescriptionSeq describe_contents(
       in DefinitionKind limit_type,
       in boolean exclude_inherited,
       in long max_returned_objs);
   ModuleDef create_module,
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version);

   ConstantDef create_constant(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in IDLType type,
       in any value);
   StructDef create_struct(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in StructMemberSeq members);

   NativeDef create_native(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version);

   UnionDef create_union(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in IDLType discriminator_type,
       in UnionMemberSeq members);

   EnumDef create_enum(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in EnumMemberSeq members);

   AliasDef create_alias(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in IDLType original_type);

   ExceptionDef create_exception(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in StructMemberSeq members);

   InterfaceDef create_interface(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in InterfaceDefSeq base_interfaces,
       in boolean is_abstract);

   ValueDef create_value(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in boolean is_custom,
       in boolean is_abstract,
       in ValueDef base_value,
       in boolean is_truncatable,
       in ValueDefSeq abstract_base_values,
       in InterfaceDefSeq supported_interfaces,
       in InitializerSeq initializers);
};

6.11.2　Containerのメソッド

public org.omg.CORBA.Contained[ ] contents(
org.omg.CORBA.DefinitionKind limit_type,
boolean exclude_inherited)
このメソッドは，直接Containerに含まれる包含オブジェクト定義，またはContainerへ継承される包含オブジェクト定義のリストを返します。このメソッドを使用して，Repositoryでのオブジェクト定義の階層を操作できます。Repositoryのモジュール群に含まれるすべてのオブジェクト定義が返されたあとに，各モジュールに含まれるすべてのオブジェクト定義が返されます。

limit_type
返されるインタフェースオブジェクト型。dk_allを指定すると，すべての型のオブジェクトが返されます。

exclude_inherited
trueを設定した場合，継承されたオブジェクトは返されません。

public org.omg.CORBA.InterfaceDef create_abstract_interface(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.AbstractInterfaceDef[ ] base_interfaces)
このメソッドは，指定した属性でAbstractInterfaceDefオブジェクトをこのContainerの中に生成し，新しく生成したオブジェクトのリファレンスを返します。作成したインタフェースが格納できるのは，abstract型のインタフェースの定義だけです。

id
インタフェースのリポジトリID

name
インタフェースの名前

version
インタフェースのバージョン

base_interfaces
このインタフェースの継承元となるすべてのインタフェースの一覧

public org.omg.CORBA. AliasDef create_alias(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType original_type)
このメソッドは，このContainer内にAliasDefオブジェクトを指定された属性で生成し，新しく生成したオブジェクトのリファレンスを返します。

id
エイリアスのリポジトリID

name
エイリアス名

version
エイリアスのバージョン

original_type
このエイリアスのオリジナルのオブジェクトのIDL型

public org.omg.CORBA.ConstantDef create_constant(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType type,
org.omg.CORBA.Any value)
このメソッドは，指定された属性でこのContainer内にConstantDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
定数のリポジトリID

name
定数名

version
定数のバージョン

type
定数のIDL型

value
定数の値。Anyオブジェクトで表されます。

public org.omg.CORBA.EnumDef create_enum(
java.lang.String id,
java.lang.String name,
java.lang.String version,
java.lang.String members[ ])
このメソッドは，指定された属性でこのContainer内にEnumDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
列挙体のリポジトリID

name
列挙体名

version
列挙体のバージョン

members
列挙体の値の一覧

public org.omg.CORBA.ExceptionDef create_exception(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.StructMember[ ] members)
このメソッドは，指定された属性でこのContainer内にExceptionDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
例外のリポジトリID

name
例外名

version
例外のバージョン

members
例外のメンバのすべての型の一覧

public org.omg.CORBA.InterfaceDef create_interface(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.InterfaceDef[ ] base_interfaces)
このメソッドは，指定された属性でこのContainerの中にconcrete型のInterfaceDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。AbstractInterfaceDefと異なり，このインタフェースはabstract型とconcrete型の両方のインタフェースの定義を格納できます。

id
インタフェースのリポジトリID

name
インタフェース名

version
インタフェースのバージョン

base_interfaces
このインタフェースの継承元である全インタフェースの一覧

public org.omg.CORBA.ModuleDef create_module(
java.lang.String id,
java.lang.String name,
java.lang.String version)
このメソッドは，指定された属性でこのContainer内にModuleDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
モジュールのリポジトリID

name
モジュール名

version
モジュールのバージョン

public org.omg.CORBA.NativeDef create_native(
java.lang.String id,
java.lang.String name,
java.lang.String version)
このメソッドは，指定した属性で該当するContainerオブジェクトの中にNativeDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
構造体のリポジトリID

name
構造体の名前

version
構造体のバージョン

public org.omg.CORBA.StructDef create_struct(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.StructMember members[ ])
このメソッドは，指定された属性で，このContainer内にStructDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
構造体のリポジトリID

name
構造体の名前

version
構造体のバージョン

members
構造体のフィールドの値

public org.omg.CORBA.UnionDef create_union(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType discriminator_type,
org.omg.CORBA.UnionMember[ ] members)
このメソッドは，指定された属性でこのContainer内にUnionDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
unionのリポジトリID

name
union名

version
unionのバージョン

discriminator_type
unionの識別値のIDL型

members
各unionのフィールドの型の一覧

public org.omg.CORBA.ContainerPackage.Description[ ]
describe_contents(
org.omg.CORBA.DefinitionKind limit_type,
boolean exclude_inherited,
int max_returned_objs)
このメソッドは，このコンテナに直接含まれているか，またはこのコンテナに継承されたすべての定義に関する記述を返します。

limit_type
返されるインタフェースオブジェクトの型

exclude_inherited
trueを設定した場合，継承されたオブジェクトは返されません。

max_returned_objs
返されるオブジェクトの最大数。このパラメタに-1を設定すると，全オブジェクトが返されます。

public org.omg.CORBA.Contained lookup(
java.lang.String search_name)
このメソッドは，指定されたスコープ名で，このコンテナと相対的な定義を探します。先頭が「::」で始まる絶対スコープ名を指定すると，囲みリポジトリ内の定義を探せます。オブジェクトが見つからない場合，NULLが返されます。

search_name
探す対象のオブジェクト名

public org.omg.CORBA.Contained[ ] lookup_name(
java.lang.String search_name,
int levels_to_search,
org.omg.CORBA.DefinitionKind limit_type,
boolean exclude_inherited)
このメソッドは，ある特定のオブジェクト内のオブジェクトを名前で探します。検索対象の階層内のレベル数，オブジェクトの型，継承されたオブジェクトを返すかどうか，などで検索を制限できます。

search_name
探す対象のオブジェクトまたはオブジェクト群の名前

levels_to_search
検索対象の階級内のレベル数。このパラメタに-1を設定すると，すべてのレベルが検索対象となります。1を設定すると，このオブジェクトだけを検索します。

limit_type
返されるインタフェースオブジェクトの型

exclude_inherited
trueを設定した場合，継承されたオブジェクトは返されません。

public org.omg.CORBA.ValueDef create_value(
java.lang.String id,
java.lang.String name,
java.lang.String version,
boolean is_custom,
boolean is_abstract,
org.omg.CORBA.ValueDef base_value,
boolean is_truncatable,
org.omg.CORBA.ValueDef[ ] abstract_base_values,
org.omg.CORBA.InterfaceDef supported_interfaces,
org.omg.CORBA.Initializer[ ] initializers)
このメソッドは，指定した属性で該当するContainerオブジェクトの中にValueDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
構造体のリポジトリID

name
構造体の名前

version
構造体のバージョン

is_custom
trueを設定すると，custom型valuetypeを生成します。

is_abstract
trueを設定すると，abstract型valuetypeを生成します。

base_value
ベース値の定義

is_truncatable
trueを設定すると，truncatableインタフェースを生成します。

abstract_base_values
abstract型ベース定義の配列

supported_interfaces
サポートするインタフェース定義の配列

initializers
この値の型がサポートするイニシャライザの一覧

public org.omg.CORBA.ValueBoxDef create_value_box(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType original_type)
このメソッドは，指定した属性で該当するContainerオブジェクトの中にValueBoxDefオブジェクトを生成し，新しく生成したオブジェクトのリファレンスを返します。

id
構造体のリポジトリID

name
構造体の名前

version
構造体のバージョン

original_type
該当するオブジェクトがエイリアスの場合のオリジナルオブジェクトのIDL型

6.12　ContainerPackage.Description

public final class org.omg.CORBA.ContainerPackage.Description extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，Containedインタフェースから派生したインタフェースリポジトリ内の各項目の一般的な記述を提供します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.12.1　ContainerPackage.Descriptionの変数

6.12.2　ContainerPackage.Descriptionのメソッド

6.12.1　ContainerPackage.Descriptionの変数

public org.omg.CORBA.Contained contained_object
含まれた項目です。

public org.omg.CORBA.DefinitionKind kind
項目の種類です。

public org.omg.CORBA.Any value
項目の値です。

6.12.2　ContainerPackage.Descriptionのメソッド

public Description( )
このメソッドは，Descriptionのデフォルトコンストラクタです。

public Description(
org.omg.CORBA.Contained contained_object,
org.omg.CORBA.DefinitionKind kind,
org.omg.CORBA.Any value)
このメソッドは，指定されたパラメタを使用して，Descriptionを構成します。

contained_object
含まれる項目

kind
この項目の種類

value
この項目の値を表すAnyオブジェクト

6.13　DefinitionKind

public class org.omg.CORBA.DefinitionKind extends
   java.lang.Object implementsorg.omg.CORBA.portable.IDLEntity

このクラスは，リポジトリが格納できるオブジェクトの型を列挙します。列挙体中の各値はIDL中のデータ型を反映します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.13.1　DefinitionKindのメソッド

6.13.2　DefinitionKindの列挙値

6.13.1　DefinitionKindのメソッド

public int value( )
このメソッドは，DefinitionKindの整数値を返します。

6.13.2　DefinitionKindの列挙値

DefinitionKindの定数値を次の表に示します。

表6-1　DefinitionKindの定数値（Java）

Javaオブジェクト | 整数定数 | 値
dk_AbstractInterface | _dk_AbstractInterface | abstract型インタフェース
dk_all | _dk_all | すべての可能な型（リポジトリlookupメソッドで使用）
dk_Alias | _dk_Alias | エイリアス
dk_Array | _dk_Array | 配列
dk_Attribute | _dk_Attribute | 属性
dk_Constant | _dk_Constant | 定数
dk_Enum | _dk_Enum | 列挙体
dk_Exception | _dk_Exception | 例外
dk_Fixed | _dk_Fixed | fixed
dk_Interface | _dk_Interface | concrete型インタフェース
dk_Module | _dk_Module | モジュール
dk_Native | _dk_Native | ネイティブ
dk_none | _dk_none | すべての型を除く（リポジトリlookupメソッドで使用）
dk_Operation | _dk_Operation | インタフェースオペレーション
dk_Primitive | _dk_Primitive | 基本型（intやlongなど）
dk_Repository | _dk_Repository | リポジトリ
dk_Sequence | _dk_Sequence | シーケンス
dk_String | _dk_String | 文字列
dk_Struct | _dk_Struct | struct
dk_Typedef | _dk_Typedef | typedef
dk_Union | _dk_Union | union
dk_Value | _dk_Value | value
dk_ValueBox | _dk_ValueBox | ValueBox
dk_ValueMember | _dk_ValueMember | ValueMember
dk_Wstring | _dk_Wstring | Unicode文字列

6.14　EnumDef

public interface org.omg.CORBA.EnumDef extends
   org.omg.CORBA.EnumDefOperations,
   org.omg.CORBA.TypedefDef,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている列挙体を表すために使用します。このインタフェースは，列挙体のメンバ一覧を設定，検索するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.14.1　EnumDefのメソッド

6.14.1　EnumDefのメソッド

public java.lang.String[ ] members( )
このメソッドは，この列挙体のメンバ一覧を返します。

public void members(
java.lang.String members[ ])
このメソッドは，この列挙体のメンバ一覧を設定します。

members
メンバ一覧

6.15　ExceptionDef

public interface org.omg.CORBA.ExceptionDef extends
   org.omg.CORBA.ExceptionDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.Container,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている例外を表すために使用します。このインタフェースは，例外のメンバ一覧を設定，検索するためのメソッドと，例外のTypeCodeを検索するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.15.1　ExceptionDefのメソッド

6.15.1　ExceptionDefのメソッド

public org.omg.CORBA.StructMember[ ] members( )
このメソッドは，この例外のメンバ一覧を返します。

public void members(
org.omg.CORBA. StructMember members[ ])
このメソッドは，例外のメンバ一覧を設定します。

members
メンバ一覧

public org.omg.CORBA.TypeCode type( )
このメソッドは，この例外の型を表すTypeCodeを返します。

6.16　ExceptionDescription

public final class org.omg.CORBA.ExceptionDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納された例外を記述します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.16.1　ExceptionDescriptionの変数

6.16.2　ExceptionDescriptionのメソッド

6.16.1　ExceptionDescriptionの変数

public java.lang.String name
例外名です。

public java.lang.String id
例外のリポジトリIDです。

public java.lang.String defined_in
この例外が定義されているモジュールまたはインタフェースのリポジトリIDです。

public org.omg.CORBA.VersionSpec version
例外のバージョンです。

public org.omg.CORBA.Typecode type
例外のIDL型です。

6.16.2　ExceptionDescriptionのメソッド

public ExceptionDescription( )
このメソッドは，ExceptionDescriptionのデフォルトコンストラクタです。

public ExceptionDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
org.omg.CORBA.VersionSpec version,
org.omg.CORBA.TypeCode type,
org.omg.CORBA.Any value)
このメソッドは，指定されたパラメタを使用して，ExceptionDescriptionを構成します。

name
この例外の名前

id
この例外のリポジトリID

defined_in
この例外が定義されたモジュールまたはインタフェース

version
オブジェクトのバージョン

type
例外のIDLタイプコード

value
この例外の値

6.17　FixedDef

public interface org.omg.CORBA.FixedDef extends
   org.omg.CORBA.FixedDefOperations,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているfixed型を表すために使用します。

＜この節の構成＞

6.17.1　FixedDefのメソッド

6.17.1　FixedDefのメソッド

public short digits( )
このメソッドは，fixed型のけた数を返します。

public void digits(
short digits)
このメソッドは，このfixed型にけた数を設定します。

public short scale( )
スケールは，fixed型の小数点以下のけた数です。このメソッドは，fixed型のスケールを返します。

public void scale (
short scale)
このメソッドは，fixed型のスケールを設定します。

6.18　FullValueDescription

public final class org.omg.CORBA.ValueDefPackage.FullValueDescription
   extends java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されている完全な値定義を表すために使用します。詳細については，「6.45　ValueDef」を参照してください。

＜この節の構成＞

6.18.1　FullValueDescriptionの変数

6.18.2　FullValueDescriptionのメソッド

6.18.1　FullValueDescriptionの変数

public java.lang.String name
valuetypeの名前です。

public java.lang.String id
valuetypeのリポジトリIDです。

public boolean is_abstract
trueの場合，valuetypeはabstract型です。falseの場合，valuetypeはconcrete型です。

public boolean is_custom
trueの場合，valuetypeに対してcustom型のマーシャリングを実行します。

public java.lang.String defined_in
valuetypeが定義されているモジュールのリポジトリIDです。

public java.lang.String version
valuetypeのバージョンです。

public org.omg.CORBA.OperationDescription[ ] operations
valuetypeが提供するオペレーションの一覧です。

public org.omg.CORBA.AttributeDescription[ ] attributes
valuetypeの属性の一覧です。

public org.omg.CORBA.ValueMember[ ] members
valuetypeのメンバの配列です。

public org.omg.CORBA.Initializer[ ] initializers
イニシャライザの配列です。

public java.lang.String[ ] supported_interfaces
このvaluetypeがサポートするインタフェースの一覧です。

public java.lang.String[ ] abstract_base_values
このvaluetypeの継承元となっているすべてのabstract型ベース値の，通知IDの一覧です。

public boolean is_truncatable
trueの場合，値はベースのvaluetypeに安全にマッピングできます。

public java.lang.String base_values
この型に対してconcrete型ベース値がある場合，その通知IDです。

public org.omg.CORBA.TypeCode type
valuetypeのIDL TypeCodeです。

6.18.2　FullValueDescriptionのメソッド

public org.omg.CORBA.FullValueDescription(
java.lang.String name,
java.lang.String id,
boolean is_abstract,
boolean is_custom,
java.lang.String defined_in,
java.lang.String version,
org.omg.CORBA.OperationDescription[ ] operations,
org.omg.CORBA.AttributeDescription[ ] attributes,
org.omg.CORBA.ValueMember[ ] members,
org.omg.CORBA.Initializer[ ] initializers,
java.lang.String[ ] supported_interfaces,
java.lang.String[ ] abstract_base_values,
boolean is_truncatable,
java.lang.String base_values,
org.omg.CORBA.Typecode type)
このメソッドは，FullValueDescriptionを構成します。

name
valuetypeの名前

id
valuetypeの識別子

is_abstract
valuetypeがabstractであることを表すパラメタ

is_custom
valuetypeがcustomであることを表すパラメタ

defined_in
valuetypeが定義されたモジュールまたはインタフェース

version
valuetypeのバージョン

operations
オペレーションの一覧

attributes
属性の一覧

members
値メンバ記述子の一覧

initializers
イニシャライザの一覧

supported_interfaces
サポートするインタフェースの一覧

abstract_base_values
abstract valuetypeの一覧

is_truncatable
valuetypeがtruncatableであることを表すパラメタ

base_values
真の（abstractでない）ベース値（ある場合）

type
valuetypeのTypeCode

6.19　IDLType

public interface org.omg.CORBA.IDLType extends
   org.omg.CORBA.IDLTypeOperations,
   org.omg.CORBA.IRObject,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，IDL型を形成するリポジトリオブジェクトにマークを付けるためのインタフェースとして定義されています。例えば，EnumDefはIDLのconstruct型に対応するのでIDLTypeから継承されますが，OperationDefは正規のリポジトリオブジェクトでありIDL型ではないため，IDLTypeから継承されません。各IDLTypeオブジェクトは対応するTypeCodeを持ちます。IDLTypeはオブジェクトの型を一意に識別します。詳細については，「5.24　TypeCode」を参照してください。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.19.1　IDLの定義

6.19.2　IDLTypeのメソッド

6.19.1　IDLの定義

interface IDLType : CORBA::IRObject {
   readonly attribute TypeCode type;
};

6.19.2　IDLTypeのメソッド

public org.omg.CORBA.TypeCode type( )
このメソッドは，インタフェースリポジトリの中のIDL型定義を表すIRObjectに対応するTypeCodeオブジェクトを返します。

6.20　InterfaceDef

public interface org.omg.CORBA.InterfaceDef extends
   org.omg.CORBA.InterfaceDefOperations,
   org.omg.CORBA.Container,
   org.omg.CORBA.Contained,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているconcrete型インタフェースを表すために使用します。このインタフェースは，ベースインタフェースを設定および取得して，属性，オペレーション，およびインタフェース記述を生成するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.20.1　IDLの定義

6.20.2　InterfaceDefのメソッド

6.20.1　IDLの定義

interface InterfaceDef:Container,Contained,IDLType {
   attribute InterfaceDefSeq base_interfaces;
   boolean is_a(in RepositoryId interface_id);

   struct FullInterfaceDescription {
       Identifier name;
       RepositoryId id;
       RepositoryId defined_in;
       VersionSpec version;
       OpDescriptionSeq operations;
       AttrDescriptionSeq attributes;
       RepositoryIdSeq base_interfaces;
       TypeCode type;
   };
   FullInterfaceDescription describe_interface( );
   AttributeDef create_attribute(
       in RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in IDLType type,
       in AttributeMode mode);
   OperationDef create_operation(
       in CORBA::RepositoryId id,
       in Identifier name,
       in VersionSpec version,
       in IDLType result,
       in OperationMode mode,
       in ParDescriptionSeq params,
       in ExceptionDefSeq exceptions,
       in ContextIdSeq contexts);
};

6.20.2　InterfaceDefのメソッド

public org.omg.CORBA.InterfaceDef[ ] base_interfaces( )
このメソッドは，このオブジェクトのベースインタフェース一覧を返します。

public void base_interfaces(
org.omg.CORBA.InterfaceDef[ ] base_interfaces)
このメソッドは，このオブジェクトのベースインタフェース一覧を設定します。

base_interfaces
設定するベースインタフェースの一覧

public org.omg.CORBA.AttributeDef create_attribute(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType type,
org.omg.CORBA.AttributeMode mode)
このメソッドは，インタフェース定義に属性を追加します。

id
属性の識別子

name
属性名

version
属性のバージョン

type
属性のIDL型

mode
属性のモード。指定できる値については，「6.6　AttributeMode」を参照してください。

public org.omg.CORBA.OperationDef create_operation(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType result,
org.omg.CORBA.OperationMode mode,
org.omg.CORBA.ParameterDescription[ ] params,
org.omg.CORBA.ExceptionDef[ ] exceptions,
java.lang.String[ ] contexts)
このメソッドは，インタフェース定義にオペレーションを追加します。

id
オペレーションの識別子

name
オペレーション名

version
オペレーションのバージョン

result
オペレーションのIDL結果型

mode
オペレーションのモード。詳細については，「6.30　OperationMode」を参照してください。

params
このオペレーションに対するパラメタの一覧

exceptions
このオペレーションで発生する可能性がある例外の一覧

contexts
コンテキスト一覧

public org.omg.CORBA.InterfaceDefPackage.FullInterfaceDescription
describe_interface( )
このメソッドは，このオブジェクトに対するインタフェースの記述を返します。

public boolean is_a(
java.lang.String interface_id)
該当するオブジェクトが，指定したインタフェースと互換性のあるインタフェース定義である場合，このメソッドは，trueを返します。

interface_id
このオブジェクトと比較するインタフェース識別子

6.21　InterfaceDefPackage.FullInterfaceDescription

public final class
   org.omg.CORBA.InterfaceDefPackage.FullInterfaceDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているインタフェースを記述します。

＜この節の構成＞

6.21.1　InterfaceDefPackage.FullInterfaceDescriptionの変数

6.21.2　InterfaceDefPackage.FullInterfaceDescriptionのメソッド

6.21.1　InterfaceDefPackage.FullInterfaceDescriptionの変数

public java.lang.String name
インタフェース名です。

public java.lang.String id
インタフェースのリポジトリIDです。

public java.lang.String defined_in
このインタフェースが定義されたモジュールのリポジトリIDです。

public java.lang.String version
インタフェースのバージョンです。

public org.omg.CORBA.OperationDescription[ ] operations
インタフェースが提供するオペレーションの一覧です。

public org.omg.CORBA.AttributeDescription[ ] attributes
インタフェースの属性の一覧です。

public java.lang.String[ ] base_interfaces
このインタフェースが継承するベースインタフェースの一覧です。

public org.omg.CORBA.TypeCode type
この変数は，インタフェースのIDLタイプコードを表します。

6.21.2　InterfaceDefPackage.FullInterfaceDescriptionのメソッド

public FullInterfaceDescription( )
このメソッドは，FullInterfaceDescriptionのデフォルトコンストラクタを設定します。

public FullInterfaceDescription(
final java.lang.String name,
final java.lang.String id,
final java.lang.String defined_in,
final java.lang.String version,
final org.omg.CORBA.OperationDescription[ ] operations,
final org.omg.CORBA.AttributeDescription[ ] attributes,
final java.lang.String[ ] base_interfaces,
final org.omg.CORBA.TypeCode type)
このメソッドは，指定されたパラメタを使用して，FullInterfaceDescriptionを構成します。

name
このインタフェースの名前

id
このインタフェースのリポジトリID

defined_in
この属性が定義されたモジュールのリポジトリID

version
インタフェースのバージョン

operations
このインタフェースが提供するオペレーションの一覧

attributes
このインタフェースの属性の一覧

base_interfaces
該当するインタフェースのベースインタフェースの一覧

type
インタフェースのIDLタイプコード

6.22　InterfaceDescription

public final class org.omg.CORBA.InterfaceDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているインタフェースの定義を提供します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.22.1　InterfaceDescriptionの変数

6.22.2　InterfaceDescriptionのメソッド

6.22.1　InterfaceDescriptionの変数

public java.lang.String name
インタフェース名です。

public java.lang.String id
インタフェースのリポジトリIDです。

public java.lang.String defined_in
このインタフェースが定義されたモジュールのリポジトリIDです。

public java.lang.String version
インタフェースのバージョンです。

public String[ ] base_interfaces
このインタフェースのベースインタフェースの一覧です。

6.22.2　InterfaceDescriptionのメソッド

public InterfaceDescription( )
このメソッドは，InterfaceDescriptionのデフォルトコンストラクタです。

public InterfaceDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
java.lang.String version,
java.lang.String[ ] base_interfaces)
このメソッドは，指定されたパラメタを使用して，InterfaceDescriptionを構成します。

name
このインタフェースの名前

id
このインタフェースのリポジトリID

defined_in
このインタフェースが定義されたモジュール

version
インタフェースのバージョン

base_interfaces
インタフェースのベースインタフェース一覧

6.23　IRObject

public interface org.omg.CORBA.IRObject extends
   org.omg.CORBA.IRObjectOperations,
   org.omg.CORBA.Object,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている任意のオブジェクトに対する一般的なインタフェースを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.23.1　IDLの定義

6.23.2　IRObjectのメソッド

6.23.1　IDLの定義

interface IRObject {
  readonly attribute CORBA::DefinitionKind def_kind;
  void destroy( );
};

6.23.2　IRObjectのメソッド

public org.omg.CORBA.DefinitionKind def_kind( )
このメソッドは，このIRObjectが表しているIDL定義の種別を返します。
定義された型の一覧については，「6.13　DefinitionKind」を参照してください。

public void destroy( )
このメソッドは，このIRObjectをインタフェースリポジトリから削除します。

6.24　LocalInterfaceDef

public interface org.omg.CORBA.LocalInterfaceDef extends
   org.omg.CORBA.LocalInterfaceDefOperations,
   org.omg.CORBA.InterfaceDef,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，ローカルインタフェースのIDLモジュールを表すために使用します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

6.25　ModuleDef

public interface org.omg.CORBA.ModuleDef extends
   org.omg.CORBA.ModuleDefOperations,
   org.omg.CORBA.Container,
   org.omg.CORBA.Contained,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリ内のIDLモジュールを表すために使用します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

6.26　ModuleDescription

public final class org.omg.CORBA.ModuleDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているモジュールを定義します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.26.1　ModuleDescriptionの変数

6.26.2　ModuleDescriptionのメソッド

6.26.1　ModuleDescriptionの変数

public java.lang.String name
モジュール名です。

public java.lang.String id
モジュールのリポジトリIDです。

public java.lang.String defined_in
このモジュールが定義されたモジュールのリポジトリIDです。

public java.lang.String version
モジュールのバージョンです。

6.26.2　ModuleDescriptionのメソッド

public ModuleDescription( )
このメソッドは，ModuleDescriptionのデフォルトコンストラクタです。

public ModuleDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
java.lang.String version)
このメソッドは，指定されたパラメタを使用し，ModuleDescriptionを構成します。

name
このインタフェースの名前

id
このインタフェースのリポジトリID

defined_in
このモジュールが定義されたモジュールID

version
オブジェクトのバージョン

6.27　NativeDef

public interface org.omg.CORBA.NativeDef extends
   org.omg.CORBA.NativeDefOperations,
   org.omg.CORBA.TypedefDef,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリが格納するネイティブ定義を表すために使用します。Containerインタフェースは，包含されたオブジェクトとしてNativeDefを生成するためのオペレーションを提供します。

6.28　OperationDef

public interface org.omg.CORBA.OperationDef extends
   org.omg.CORBA.OperationDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているインタフェースオペレーションを表すために使用します。このインタフェースは，オペレーションのコンテキスト，モード，パラメタ，および結果値を，設定および取得するためのメソッドを提供します。また，このオペレーションで発生する例外の一覧の検索メソッドも提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.28.1　OperationDefのメソッド

6.28.1　OperationDefのメソッド

public java.lang.String[ ] contexts( )
このメソッドは，このオペレーションに対応づけられたコンテキストを返します。

public void contexts(
java.lang.String[ ] contexts)
このメソッドは，このオペレーションのコンテキスト一覧を設定します。

contexts
コンテキスト一覧

public org.omg.CORBA.ExceptionDef[ ] exceptions( )
このメソッドは，このオペレーションで発生する例外の一覧を返します。

public void exceptions(
org.omg.CORBA.ExceptionDef[ ] exceptions)
このメソッドは，このオペレーションで発生する例外の一覧を設定します。

exceptions
例外の一覧

public org.omg.CORBA.OperationMode mode( )
このメソッドは，このオペレーションのモードを返します。

public void mode(
org.omg.CORBA.OperationMode mode)
このメソッドは，このオペレーションのモードを設定します。

mode
設定するモード。パラメタの詳細については，「6.30　OperationMode」を参照してください。

public org.omg.CORBA.ParameterDescription[ ] params( )
このメソッドは，このオペレーションに対するパラメタの記述を返します。

public void params(
org.omg.CORBA.ParameterDescription params)
このメソッドは，このオペレーションに対するパラメタの記述を設定します。

params
パラメタの記述

public org.omg.CORBA.TypeCode result( )
このメソッドは，このオペレーションのリターン値のTypeCodeを返します。

public org.omg.CORBA.IDLType result_def( )
このメソッドは，このオペレーションのリターン値のIDL型を返します。

public void result_def(
org.omg.CORBA.IDLType result_def)
このメソッドは，このオペレーションのリターン値のIDL型を設定します。

result_def
リターン値に対して設定するIDL型

6.29　OperationDescription

public final class org.omg.CORBA.OperationDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているオペレーションの情報を表すために記述します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.29.1　OperationDescriptionの変数

6.29.2　OperationDescriptionのメソッド

6.29.1　OperationDescriptionの変数

public java.lang.String name
オペレーション名です。

public java.lang.String id
オペレーションのリポジトリIDです。

public java.lang.String defined_in
このオペレーションが定義されているインタフェースまたはvaluetypeのリポジトリIDです。

java.lang.String version
オペレーションのバージョンです。

public org.omg.CORBA.TypeCode result
オペレーションの結果TypeCodeです。

public org.omg.CORBA.OperationMode mode
オペレーションのモードです。

public java.lang.String[ ] contexts
このオペレーションに対応づけられたコンテキスト一覧です。

public org.omg.CORBA.ParameterDescription[ ] parameters
このオペレーションのパラメタです。

public org.omg.CORBA.ExceptionDescription[ ] exceptions
このオペレーションで発生する可能性のある例外です。

6.29.2　OperationDescriptionのメソッド

public OperationDescription( )
このメソッドは，OperationDescriptionのデフォルトコンストラクタです。

public OperationDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
java.lang.String version,
org.omg.CORBA.TypeCode result,
org.omg.CORBA.OperationMode mode,
java.lang.String[ ] contexts,
org.omg.CORBA.ParameterDescriptions parameters,
org.omg.CORBA.ExceptionDescription[ ] exceptions)
このメソッドは，指定されたパラメタを使用して，OperationDescriptionを構成します。

name
このオペレーションの名前

id
このオペレーションのリポジトリID

defined_in
このオペレーションが定義されているインタフェースまたはvaluetypeのID

version
オブジェクトのバージョン

result
オペレーション結果のIDL TypeCode

mode
オペレーションのモード

contexts
このオペレーションに対するコンテキスト文字列の一覧

parameters
このオペレーションに対するパラメタの一覧

exceptions
このオペレーションで発生する可能性がある例外の一覧

6.30　OperationMode

public final class org.omg.CORBA.OperationMode extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，オペレーションのモードを列挙します。モードには次の2種類があります。

org.omg.CORBA.OperationMode.OP_ONEWAY
一方向オペレーションモード。このモードでは，クライアントアプリケーションは応答を期待しません。

org.omg.CORBA.OperationMode.OP_NORMAL
標準リクエストモード。このモードでは，リクエストの結果を格納するオブジェクトインプリメンテーションが応答をクライアントに送信します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

6.31　ParameterDescription

public final class org.omg.CORBA.ParameterDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているオペレーションのパラメタを記述します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.31.1　ParameterDescriptionの変数

6.31.2　ParameterDescriptionのメソッド

6.31.1　ParameterDescriptionの変数

public java.lang.String name
パラメタ名です。

public org.omg.CORBA.TypeCode type
パラメタのTypeCodeです。

public org.omg.CORBA.IDLType type_def
パラメタのIDL型です。

public org.omg.CORBA.ParameterMode mode
パラメタのモードです。パラメタの詳細については，「6.32　ParameterMode」を参照してください。

6.31.2　ParameterDescriptionのメソッド

public ParameterDescription( )
このメソッドは，ParameterDescriptionのデフォルトコンストラクタです。

public ParameterDescription(
java.lang.String name,
org.omg.CORBA.TypeCode type,
org.omg.CORBA.IDLType type_def,
org.omg.CORBA.ParameterMode mode)
このメソッドは，指定されたパラメタを使用し，ParameterDescriptionを構成します。

name
パラメタ名

type
パラメタのTypeCode

type_def
パラメタのIDL型

mode
パラメタのモード

6.32　ParameterMode

public class org.omg.CORBA.ParameterMode extends
   java.lang.Object implementsorg.omg.CORBA.portable.IDLEntity

このクラスは，パラメタの次に示す3種類のモードを列挙します。

PARAM_IN
クライアントからサーバへの入力に使用します。

PARAM_OUT
サーバからクライアントへの結果の出力に使用します。

PARAM_INOUT
クライアントからの入力とサーバからの出力の両方に使用します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

6.33　PrimitiveDef

public interface org.omg.CORBA.PrimitiveDef extends
   org.omg.CORBA.PrimitiveDefOperations,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている基本型（int，longなど）を表すために使用します。このインタフェースは，表示中の基本型の種類を検索するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.33.1　PrimitiveDefのメソッド

6.33.1　PrimitiveDefのメソッド

public org.omg.CORBA.PrimitiveKind kind( )
このメソッドは，このオブジェクトが表す基本型の種類を表します。

6.34　PrimitiveKind

public final class org.omg.CORBA.PrimitiveKind extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，IDLにある基本型を列挙します。このクラスは，列挙体（_pk_で始まる名前のPrimitiveKind列挙体）とJavaオブジェクトの集合（pk_で始まる名前のPrimitiveKind Javaオブジェクト）の両方を提供します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.34.1　PrimitiveKindのメソッド

6.34.2　PrimitiveKindの定数

6.34.1　PrimitiveKindのメソッド

public int value( )
このメソッドは，定数を表す整数を返します。

6.34.2　PrimitiveKindの定数

PrimitiveKindの定数値を次の表に示します。

表6-2　PrimitiveKindの定数値（Java）

Javaオブジェクト | 整数定数 | 意味
pk_any | _pk_any | Anyオブジェクト
pk_boolean | _pk_boolean | boolean
pk_char | _pk_char | 文字
pk_double | _pk_double | double
pk_float | _pk_float | float
pk_long | _pk_long | long
pk_longdouble | _pk_longdouble | long double
pk_longlong | _pk_longlong | long long
pk_null | _pk_null | null
pk_octet | _pk_octet | オクテット文字列
pk_octet | _pk_octet | オクテット文字列
pk_objref | _pk_objref | オブジェクトリファレンス
pk_short | _pk_short | short
pk_string | _pk_string | 文字列
pk_TypeCode | _pk_TypeCode | TypeCodeオブジェクト
pk_ulong | _pk_ulong | unsigned long
pk_ulonglong | _pk_ulonglong | unsigned long
pk_ushort | _pk_ushort | unsigned short
pk_void | _pk_void | void
pk_wchar | _pk_wchar | Unicode文字
pk_wstring | _pk_wstring | Unicode文字列

6.35　Repository

public interface org.omg.CORBA.Repository extends
   org.omg.CORBA.RepositoryOperations,
   org.omg.CORBA.Container,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，クライアントが使用できるオブジェクトの定義を格納するために使用する，インタフェースリポジトリ自体へのインタフェースを提供します。Repositoryインタフェースは，定義を格納，および取得するためのメソッドを提供します。Repositoryオブジェクトは，インタフェースリポジトリ内の階層での唯一のルートオブジェクトです。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.35.1　Repositoryのメソッド

6.35.1　Repositoryのメソッド

public org.omg.CORBA.ArrayDef create_array(
int length, org.omg.CORBA.IDLType element_type)
このメソッドは，指定された長さおよび要素型で，リポジトリ内に配列定義を生成します。生成されたArrayDefのリファレンスが返されます。

length
配列内の要素数。この値は0より大きくしてください。

element_type
配列が含む要素のIDL型

public org.omg.CORBA.SequenceDef create_sequence(
int bound, org.omg.CORBA.IDLType element_type)
このメソッドは，指定された要素数（バウンド）および要素型で，リポジトリ内に配列定義を生成します。生成されたSequenceDefのリファレンスが返されます。

bound
シーケンスの最大長。この値は0以上にしてください。

element_type
シーケンスが含む要素のIDL型

public org.omg.CORBA.StringDef create_string(
int bound)
このメソッドは，指定された文字数（バウンド）で，リポジトリ内に文字列定義を生成します。生成されたStringDefのリファレンスが返されます。

bound
文字列の最大数。この値は0より大きくしてください。

public org.omg.CORBA.WstringDef create_wstring(
int bound)
このメソッドは，指定された文字数（バウンド）で，リポジトリ内にUnicode文字列定義を生成します。生成されたWstringDefのリファレンスが返されます。

bound
文字列の最大数。この値は0より大きくしてください。

public org.omg.CORBA.PrimitiveDef get_primitive(
org.omg.CORBA.PrimitiveKind kind)
このメソッドは，指定されたPrimitiveKindに対するPrimitiveDefオブジェクトを返します。

kind
基本型の種類

public org.omg.CORBA.Contained lookup_id(
java.lang.String search_id)
このメソッドは，指定した検索IDに一致するオブジェクトを，インタフェースリポジトリから検索します。一致するオブジェクトが見つからない場合，nullが返されます。

search_id
検索に使用する識別子

public org.omg.CORBA.FixedDef create_fixed(
short digits, short scale)
このメソッドは，fixed型のけた数とスケールを設定します。

digits
fixed型のけた数

scale
fixed型のスケール

6.36　SequenceDef

public interface org.omg.CORBA.SequenceDef extends
   org.omg.CORBA.SequenceDefOperations,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているシーケンスを表すために使用します。このインタフェースは，シーケンスのバウンドと要素型を設定および取得するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.36.1　SequenceDefのメソッド

6.36.1　SequenceDefのメソッド

public int bound( )
このメソッドは，シーケンスのバウンドを返します。

public void bound(
int bound)
このメソッドは，シーケンスのバウンドを設定します。

bound
シーケンスのバウンド

public org.omg.CORBA.TypeCode element_type( )
このメソッドは，このシーケンス内の要素型を表すTypeCodeを返します。

public org.omg.CORBA.IDLType element_type_def( )
このメソッドは，このシーケンスに格納されている要素のIDL型を返します。

public void element_type_def(
org.omg.CORBA.IDLType element_type_def)
このメソッドは，このシーケンスに格納されている要素のIDL型を設定します。

element_type_def
設定するIDL型

6.37　StringDef

public interface org.omg.CORBA.StringDef extends
   org.omg.CORBA.StringDefOperations,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているStringを表すために使用します。このインタフェースは，文字列のバウンドを設定および取得するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.37.1　StringDefのメソッド

6.37.1　StringDefのメソッド

public int bound( )
このメソッドは，Stringのバウンド（最大長）を返します。アンバウンデッドのStringオブジェクトの場合，0を返します。

public void bound(
int bound)
このメソッドは，Stringのバウンドを設定します。バウンドをアンバウンデッドに設定する場合は，0を渡してください。

bound
新しく設定するStringオブジェクトのバウンド

6.38　StructDef

public interface org.omg.CORBA.StructDef extends
   org.omg.CORBA.StructDefOperations,
   org.omg.CORBA.TypedefDef,
   org.omg.CORBA.Container,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている構造体を表すために使用します。このインタフェースは，構造体のメンバ一覧を設定および取得するためのメソッドを提供します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.38.1　StructDefのメソッド

6.38.1　StructDefのメソッド

public org.omg.CORBA.StructMember[ ] members( )
このメソッドは，構造体のメンバ一覧を返します。

public void members(
org.omg.CORBA.StructMember[ ] members)
このメソッドは，構造体のメンバ一覧を設定します。

members
メンバ一覧

6.39　StructMember

public final class org.omg.CORBA.StructMember extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスはstructの各フィールドを定義するのに使用します。

＜この節の構成＞

6.39.1　StructMemberの変数

6.39.2　StructMemberのメソッド

6.39.1　StructMemberの変数

public java.lang.String name
StructMemberの名前です。

public org.omg.CORBA.TypeCode type
StructMemberのIDL型です。

public org.omg.CORBA.IDLType type_def
StructMemberのIDL型定義です。

6.39.2　StructMemberのメソッド

public StructMember(
final java.lang.String name,
final org.omg.CORBA.TypeCode type,
final org.omg.CORBA.IDLType type_def)
このメソッドは，指定したパラメタを使用してStructMemberオブジェクトを生成します。

name
このStructMemberの名前

type
StructMemberのIDLタイプコード

type_def
StructMemberの型定義

6.40　TypedefDef

public interface org.omg.CORBA.TypedefDef extends
   org.omg.CORBA.TypedefDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されている，ユーザ定義の構造体を表します。次に示すインタフェースはすべてこのインタフェースから継承します。

AliasDef

EnumDef

NativeDef

StructDef

UnionDef

WstringDef

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

6.41　TypeDescription

public final class org.omg.CORBA.TypeDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているオペレーションの型を記述した情報を含んでいます。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.41.1　TypeDescriptionの変数

6.41.2　TypeDescriptionのメソッド

6.41.1　TypeDescriptionの変数

public java.lang.String name
型名です。

public java.lang.String id
型のリポジトリIDです。

public java.lang.String defined_in
この型が定義されたモジュール名またはインタフェース名です。

public java.lang.String version
型のバージョンです。

public org.omg.CORBA.Typecode type
型のIDL型です。

6.41.2　TypeDescriptionのメソッド

public TypeDescription( )
このメソッドは，TypeDescriptionのデフォルトコンストラクタです。

public TypeDescription(
java.lang.String name,
java.lang.String id,
java.lang.String defined_in,
java.lang.String version,
org.omg.CORBA.TypeCode type)
このメソッドは，指定されたパラメタを使用して，TypeDescriptionを構成します。

name
この型の名前

id
この型のリポジトリID

defined_in
この型が定義されたモジュールまたはインタフェース

version
オブジェクトのバージョン

type
型のIDLタイプコード

6.42　UnionDef

public interface org.omg.CORBA.UnionDef extends
   org.omg.CORBA.UnionDefOperations,
   org.omg.CORBA.TypedefDef,
   org.omg.CORBA.Container,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているunionを表すために使用します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.42.1　UnionDefのメソッド

6.42.1　UnionDefのメソッド

public org.omg.CORBA.TypeCode discriminator_type( )
このメソッドは，unionのディスクリミネータのTypeCodeを返します。

public org.omg.CORBA.IDLType discriminator_type_def( )
このメソッドは，unionのディスクリミネータのIDL型を返します。

public void discriminator_type_def(
org.omg.CORBA.IDLType discriminator_type_def)
このメソッドは，unionのディスクリミネータのIDL型を設定します。

discriminator_type_def
ディスクリミネータのIDL型

public org.omg.CORBA.UnionMember[ ] members( )
このメソッドは，unionのメンバ一覧を返します。

public void members(
org.omg.CORBA.UnionMember[ ] members)
このメソッドは，unionのメンバ一覧を設定します。

members
メンバ一覧

6.43　UnionMember

public final class org.omg.CORBA.UnionMember extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリに格納されているUnionを記述します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

6.43.1　UnionMemberの変数

6.43.2　UnionMemberのメソッド

6.43.1　UnionMemberの変数

public java.olang.String name
unionメンバの名前です。

public org.omg.CORBA.Any label
メンバに対応づけられているラベルです。

public org.omg.CORBA.Typecode type
unionのTypeCodeです。

public org.omg.CORBA.IDLType type_def
unionのIDL型です。

6.43.2　UnionMemberのメソッド

public UnionMember( )
このメソッドは，UnionMemberのデフォルトコンストラクタです。

public UnionMember(
java.lang.String name,
org.omg.CORBA.Any label,
org.omg.CORBA.TypeCode type,
org.omg.CORBA.IDLType type_def)
このメソッドは，指定されたパラメタを使用して，UnionMemberを構成します。

name
このunionの名前

label
このunionのラベル

type
UnionのTypeCode

type_def
UnionのIDL型

6.44　ValueBoxDef

public interface org.omg.CORBA.ValueBoxDef extends
   org.omg.CORBA.ValueBoxDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，任意のIDL型の公開メンバを一つ格納する簡易なvaluetypeとして使用します。ValueBoxDefインタフェースは，次のvaluetypeを簡略化したものです。

value type name
   public <IDLType> value;

この宣言はボックス型の<IDLType>とほとんど同じですが，ValueBoxDefインタフェースは簡易なValueTypeDefインタフェースとは異なります。

＜この節の構成＞

6.44.1　ValueBoxDefのメソッド

6.44.1　ValueBoxDefのメソッド

public org.omg.CORBA.IDLType original_type_def( )
このメソッドは，ボックス化されている型を識別します。

public void original_type_def(
org,omg.CORBA.IDLType original_type_def)
このメソッドは，ボックス化する型を設定します。

6.45　ValueDef

public interface org.omg.CORBA.ValueDef extends
   org.omg.CORBA.ValueDefOperations,
   org.omg.CORBA.Container,
   org.omg.CORBA.Contained,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，constructというIDL値を記述します。このインタフェースが格納できるのは，定数，型定義，例外，オペレーション，および属性です。このインタフェースは，クラス型とよく似ていて，インタフェースリポジトリに格納されている値定義を表します。追加情報については，「6.18　FullValueDescription」を参照してください。

＜この節の構成＞

6.45.1　ValueDefのメソッド

6.45.1　ValueDefのメソッド

public org.omg.CORBA.Interface[ ] supported_interfaces( )
このメソッドは，このvaluetypeがサポートするインタフェースの一覧を返します。

public void supported_interfaces(
org.omg.CORBA.interfaceDef[ ] supported_interfaces)
このメソッドは，サポートするインタフェースを設定します。

public org.omg.CORBA.Initializer[ ] initializers( )
このメソッドは，イニシャライザの一覧を返します。

public void initializers(
org.omg.CORBA.Initializer[ ] initializers)
このメソッドは，イニシャライザを設定します。

public org.omg.CORBA.ValueDef base_value( )
このメソッドは，この値の継承元valuetypeを定義します。

public void base_value(
org.omg.CORBA.ValueDef base_value)
このメソッドは，このvaluetypeの継承元のvaluetypeを設定します。

public org.omg.CORBA.ValueDef[ ] abstract_base_values( )
このメソッドは，この値の継承元abstract型valuetypeの一覧を返します。

public void abstract_base_values(
org.omg.CORBA.ValueDef[ ] abstract_base_values)
このメソッドは，ベースのabstract型valuetypeの一覧を定義します。

public boolean is_abstract( )
trueを設定した場合，abstract型のvaluetypeを返します。

public void is_abstract(
boolean is_abstract)
このメソッドは，valuetypeをabstract型のvaluetypeに設定します。

public boolean is_custom( )
trueを設定した場合，この値はcustom型マーシャル処理を使用します。

public void is_custom(
boolean is_custom)
このメソッドは，値に対してcustomのマーシャリングを実行することを指定します。

public boolean is_truncatable( )
trueを設定した場合，値を継承元から安全にマッピングできます。

public void is_truncatable(
boolean is_truncatable)
このメソッドは，この値に短縮属性を設定します。

public boolean is_a(
java.lang.String value_id)
このメソッドの呼び出しに使用した値が，IDパラメタで定義したインタフェースまたは値と同一であるか，（直接的または間接的に）継承されたものである場合，このメソッドはtrueを返し，そうでない場合はfalseを返します。

public org.omg.CORBA.ValueDefPackage.FullValueDescription
describe_value( )
このメソッドは，値に対応するFullValueDescriptionオブジェクトを（オペレーションと属性を含めて）返します。

public org.omg.CORBA.ValueMemberDef create_value_member(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLtype type_def,
short access)
このメソッドは，このメソッドの呼び出し対象のValueDefオブジェクトが格納する，新しいValueMemberDefオブジェクトを返します。

id
型のリポジトリID

name
型の名前

version
オブジェクトのバージョン

type_def
値のIDL型

short access
アクセス値

public org.omg.CORBA.AttributeDef create_attribute(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLType type,
org.omg.CORBA.AttributeMode mode)
このメソッドはこのvaluetypeに新規属性定義を生成し，その定義に対応するAttributeDefオブジェクトを返します。

id
この属性のリポジトリID

name
型の名前

version
オブジェクトのバージョン

type
型のIDL型

mode
オブジェクトのモード

public org.omg.CORBA.OperationDef create_operation(
java.lang.String id,
java.lang.String name,
java.lang.String version,
org.omg.CORBA.IDLtype result,
org.omg.CORBA.OpeartionMode mode,
org.omg.CORBA.ParameterDescription[ ] params,
org.omg.CORBA.ExceptionDef[ ] exceptions,
java.lang.String[ ] contexts)
このメソッドは，このvaluetypeの新規オペレーションを生成し，対応するOperationDefオブジェクトを返します。

id
オペレーションのリポジトリID

name
型の名前

version
オブジェクトのバージョン

result
オペレーションのIDL型

mode
オブジェクトのモード

params
オペレーションのパラメタの一覧

exceptions
オペレーションの例外の一覧

contexts
オペレーションのコンテキストの一覧

6.46　ValueDescription

public final class org.omg.CORBA.ValueDescription extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，インタフェースリポジトリが格納するvaluetypeの定義を表すために使用します。

＜この節の構成＞

6.46.1　ValueDescriptionの変数

6.46.2　ValueDescriptionのメソッド

6.46.1　ValueDescriptionの変数

public java.lang.String name
ValueDescriptionの名前です。

public java.lang.String id
ValueDescriptionのリポジトリIDです。

public boolean is_abstract
trueを設定した場合，ValueDescriptionはabstract型のvaluetypeです。

public boolean is_custom
trueを設定した場合，ValueDescriptionにcustom型マーシャル処理が実行されます。

public java.lang.String defined_in
ValueDescriptionが定義されているモジュールまたはインタフェースのリポジトリIDを表します。

public java.lang.String version
ValueDescriptionのバージョンです。

public java.lang.String[ ] supported_interfaces
このValueDescriptionがサポートするインタフェースの一覧です。

public java.lang.String[ ] abstract_base_values
このValueDescriptionの継承元abstract型のvaluetypeの一覧です。

public boolean is_truncatable
このValueDescriptionが継承元のvaluetypeに安全にマッピングできるかどうかを示すvaluetypeの設定です。

public java.lang.String base_value
このValueDescriptionの継承元valuetypeです。

6.46.2　ValueDescriptionのメソッド

public ValueDescription(
java.lang.String name,
java.lang.String id,
boolean is_abstract,
boolean is_custom,
java.lang.String defined_in,
java.lang.String version,
java.lang.String supported_interfaces,
java.lang.String abstract_base_values,
boolean is_truncatable,
java.lang.String base_values)
このメソッドは，指定したパラメタを使用してAttributeDescriptionオブジェクトを生成します。

name
このValueDescriptionの名前

id
このValueDescriptionのリポジトリID

is_abstract
trueを設定した場合，valuetypeはabstractです。

is_custom
trueを設定した場合，ValueDescriptionはcustom型マーシャル処理を使用します。

defined_in
このValueDescriptionが定義されているモジュール

version
ValueDescriptionのバージョン

supported_interfaces
サポートするインタフェース

abstract_base_values
サポートするabstractベース値

is_truncatable
trueを設定した場合，ValueDescriptionはベース値に安全にマッピングできます。

base_values
ベース値

6.47　ValueMemberDef

public interface org.omg.CORBA.ValueMemberDef extends
   org.omg.CORBA.ValueMemberDefOperations,
   org.omg.CORBA.Contained,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリが格納する値のメンバ定義を表すために使用します。

＜この節の構成＞

6.47.1　ValueMemberDefのメソッド

6.47.1　ValueMemberDefのメソッド

public org.omg.CORBA.TypeCode type( )
このメソッドは，値メンバのIDL型を返します。

public org.omg.CORBA.IDLType type_def( )
このメソッドは，IDL型の定義を表します。

public void type_def(
org.omg.CORBA.IDLType type_def)
このメソッドは，値メンバに対するIDL型を設定します。

public short access( )
このメソッドは，オブジェクトのアクセス値を定義します。

public void access(
short access)
このメソッドは，値メンバに対するアクセス値を設定します。

6.48　WstringDef

public interface org.omg.CORBA.WstringDef extends
   org.omg.CORBA.WstringDefOperations,
   org.omg.CORBA.IDLType,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタフェースリポジトリに格納されているUnicode文字列を表すために使用します。

このインタフェースのHelperクラスとHolderクラス，およびこれらのクラスのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

7.　活性化インタフェースとクラス（Java）

この章では，Java言語のActivationパッケージが格納しているインタフェースとクラスについて説明します。説明するのはActivationImplDef，Activator，CreationImplDef，ImplementationDef，およびOADです。これらは動的インタフェースと動的クラスでありオブジェクト活性化デーモン（OAD）とともに使用されます。

＜この章の構成＞

7.1　ActivationImplDef

7.2　Activator

7.3　CreationImplDef

7.4　ImplementationDef

7.5　OAD

7.1　ActivationImplDef

valuetype ActivationImplDef

ActivationImplDef型は，Activator用の属性の集合を提供します。

valuetype ActivationImplDef :ImplementationDef {
   attribute string service_name;
   attribute CORBA::ReferenceData id;
   attribute extension::Activator activator_obj;
};

＜この節の構成＞

7.1.1　ActivationImplDefのメソッド

7.1.1　ActivationImplDefのメソッド

public abstract Activator activator_obj( )
このメソッドは，Activatorの管理下でオブジェクトインプリメンテーションのオブジェクトリファレンスを取得します。

public abstract byte[ ] id( )
このメソッドは，インプリメンテーションのリファレンスデータ識別子を取得します。

public abstract String service_name( )
このメソッドは，インプリメンテーションのサービス名を取得します。

7.2　Activator

public interface Activator

オブジェクトインプリメンテーションを設計する場合，クライアントからリクエストがあるまで，VisiBroker ORBオブジェクトの活性化を延期することがあります。オブジェクトの活性化を延期すると性能が向上します。多くのオブジェクトがサーバにある場合，クライアントからオブジェクトのリクエストがあったときだけ，オブジェクトを活性化させることで，システム資源を節約できます。一つのActivatorを使用して，複数のオブジェクトインプリメンテーションの活性化を延期できます。

interface Activator {
   Object activate(in CORBA::ImplementationDef impl);
   void   deactivate(in Object obj,
                     in CORBA::ImplementationDef impl);
};

＜この節の構成＞

7.2.1　Activatorのメソッド

7.2.1　Activatorのメソッド

public org.omg.Object activate(
org.omg.CORBA.ImplementationDef impl)
このメソッドを使用して，Activatorが管理しているオブジェクトインプリメンテーションを活性化します。Activatorの管理下で，VisiBroker ORBが一つのオブジェクトに対するクライアント要求を受信すると，VisiBroker ORBはActivator上でactivate( )メソッドを呼び出します。このメソッドでは，ActivatorにImplementationDefパラメタを渡します。これで，VisiBroker ORBは活性化されたオブジェクトインプリメンテーションを一意に識別します。ここから，インプリメンテーションは一意の識別子であるref_dataを取得できます。

impl
ImplementationDefのインスタンスです。

public void deactivate(
org.omg. CORBA.Object obj,
org.omg.CORBA.ImplementationDef impl)
このメソッドは，Activatorの管理下でオブジェクトインプリメンテーションを非活性化させます。このメソッドでは，ActivatorにオブジェクトリファレンスとImplementationDefパラメタを渡します。これによって，VisiBroker ORBは非活性化対象のオブジェクトインプリメンテーションを一意に識別します。ここから，インプリメンテーションは一意の識別子であるref_dataを取得できます。たくさんのオブジェクトを使用したインプリメンテーションの場合，オブジェクトのキャッシュに負荷が掛かったとき，deactivate( )を使用して状態データを処理できます。

obj
非活性化対象のオブジェクトのオブジェクトリファレンスです。

impl
ImplementationDefのインスタンスです。

7.3　CreationImplDef

struct CreationImplDef

CreationImplDefは，ある特定のオブジェクトインプリメンテーション用の属性の集合を提供するIDL構造体です。これらの属性の値の問い合わせと，設定メソッドは，この構造体で提供します。該当する属性は，_args，_env，id（リファレンスデータ用），object_name，_path_name，_policy，およびrepository_idです。

オブジェクト活性化デーモンは，CreationImplDefを使用してオブジェクトインプリメンテーションを一覧表示，登録，および登録解除します。コマンドラインパラメタはoadutilを使用したときに指定され，CreationImplDefで定義した属性の設定に使用します。

＜この節の構成＞

7.3.1　IDLの定義

7.3.2　活性化ポリシー

7.3.3　例

7.3.4　環境変数

7.3.5　明示的に渡される環境変数と暗黙的に渡される環境変数

7.3.6　CreationImplDefのメソッド

7.3.1　IDLの定義

struct CreationImplDef
   CORBA::RepositoryId repository_id;
   string object_name;
   CORBA::ReferenceData id;
   string path_name;
   CORBA::Policy activation_policy;
   CORBA::StringSequence args;
   CORBA::StringSequence env;
};

7.3.2　活性化ポリシー

クライアントリクエストに対してサーバを活性化する場合，CreationImplDefの値をOADがどのように使用するかを次に示します。

CreationImplDefは，サーバの活性化ポリシーの設定メソッドを提供します。これらの活性化ポリシーは，パーシステントオブジェクトに適用できます。トランジェントオブジェクトには適用できません。活性化ポリシーを次に示します。

SHARED_SERVER
複数のクライアントが，同じインプリメンテーションを共用します。一度にOADによって活性化されるサーバは一つだけです。

UNSHARED_SERVER
クライアントの一つだけが，活性化されたサーバにバウンドできます。複数のクライアントが同じオブジェクトインプリメンテーションにバインドしたい場合，個別のサーバがそれぞれのクライアントのために活性化されます。クライアントアプリケーションの切断，終了時に，サーバは終了します。

SERVER_PER_METHOD
各メソッドの呼び出しで，新しいサーバが活性化されます。メソッド呼び出しが完了すると，サーバは終了します。

7.3.3　例

OAD上の，CreationImplDef属性から実行コマンドへの変換例を次に示します。

＜この項の構成＞

(1)　Javaの例

(1)　Javaの例

パラメタCreditUnionとシステムプロパティDEBUGを1に設定し，com.mycompany.Serverと呼ばれるJavaアプリケーション用にBorland Enterprise Server VisiBrokerを起動する場合，次の属性でCreationImplDefを記述します。

path_name = "vbj"
args = ["com.mycompany.Server", "CreditUnion"]
env = ["DEBUG=1"]

上記の属性から，次のコマンドをOADに生成させます。

"vbj -DOAoad_uid=<uid> -DOAactivateIOR=<OAD's ior>          ¥
    -DDEBUG=1                                              ¥
  com.mycompany.Server CreditUnion"

さらに，次の環境変数をOADの環境から，生成された「vbj」実行環境に引き継ぎます。

PATH

CLASSPATH

OSAGENT_PORT

OSAGENT_ADDR

VBROKER_ADM

OSAGENT_ADDR_FILE

OSAGENT_LOCAL_FILE

TPDIR

SHLIB_PATH（HP-UXの場合）

LD_LIBRARY_PATH（SolarisおよびLinuxの場合）

LIBPATH（AIXの場合）

7.3.4　環境変数

vbjコマンドを実行して登録済みJavaクラスを活性化した場合，OADの環境は生成されたプロセスに自動的に渡されません。一部の環境変数を設定すると，これらの環境変数はOADによって明示的に渡されます。該当する環境変数については，「7.3.5　明示的に渡される環境変数と暗黙的に渡される環境変数」を参照してください。

そのほかの環境変数は，CreationImplDefのenv属性を使用して登録する必要があります。

活性化されたJavaインプリメンテーションの場合，CreationImplDefのenv属性に記録されているような環境設定は，次の二つの方法でプロパゲーションされます。

生成されたvbjコマンドの環境内でのプロパゲーション

クラスへのシステムプロパティとして（Java VMへの-Dパラメタ）のプロパゲーション

したがって，生成されたJavaアプリケーションの場合，登録は次の実行済みコマンドにマッピングします。

vbj -DOAoad_uid=<uid> -DOAactivateIOR=<oad's ior>
  { -Denv1 ... -DenvN }
  className { args1 ... argsN }

その結果，生成された環境には，インプリメンテーション定義から指定したすべての環境変数が含まれます。また，システムを起動したときにOAD自身の環境から取った次の環境変数の定義も含まれます。

PATH

CLASSPATH

OSAGENT_PORT

OSAGENT_ADDR

VBROKER_ADM

OSAGENT_ADDR_FILE

OSAGENT_LOCAL_FILE

TPDIR

SHLIB_PATH（HP-UXの場合）

LD_LIBRARY_PATH（SolarisおよびLinuxの場合）

LIBPATH（AIXの場合）

7.3.5　明示的に渡される環境変数と暗黙的に渡される環境変数

次に示す環境変数は，OADの環境から生成されたサーバの環境にプロパゲーションされます。また，設定がある場合はOADで明示的に渡されます。

PATH

CLASSPATH

OSAGENT_PORT

OSAGENT_ADDR

VBROKER_ADM

OSAGENT_ADDR_FILE

OSAGENT_LOCAL_FILE

TPDIR

SHLIB_PATH（HP-UXの場合）

LD_LIBRARY_PATH（SolarisおよびLinuxの場合）

LIBPATH（AIXの場合）

OSAGENT_CLIENT_HANDLER_PORT（CreationImplDef内に設定）

例えば，Javaインプリメンテーションを生成する場合，生成された実行対象にOSAGENT_CLIENT_HANDLER_PORTが必要なときは，CreationImplDef環境にOSAGENT_CLIENT_HANDLER_PORTを明示的に登録する必要があります。

7.3.6　CreationImplDefのメソッド

public abstract org.omg.CORBA.Policy activation_policy()
このメソッドは，サーバの活性化ポリシーを取得します。

public abstract void activation_policy(
org.omg.CORBA.Policy activation_policy)
このメソッドは，サーバの活性化ポリシーを設定します。活性化ポリシーには，SHARED_SERVER，UNSHARED_SERVER，およびSERVER_PER_METHODがあります。

activation_policy
サーバの活性化ポリシー

public abstract String[ ] args()
このメソッドは，サーバに渡された引数のリストを取得します。

public abstract void args(
String args[ ])
このメソッドは，サーバに渡すコマンドライン引数を設定します。最初の引数には必ずクラス名を指定してください。詳細については，「7.3.3　例」を参照してください。

args
コマンドライン引数をすべて指定する文字列の並び

public abstract String[ ] env()
このメソッドは，サーバに渡した環境設定のリストを取得します。

public abstract void env(
String env[ ])
このメソッドは，サーバに渡す環境設定を設定します。env属性の設定の詳細については，「7.3.4　環境変数」を参照してください。

env
環境変数をすべて指定する文字列の並び

public abstract byte[ ] id()
このメソッドは，インプリメンテーションのリファレンスデータ識別子を取得します。

public abstract void id(
byte id[ ])
このメソッドは，インプリメンテーションのリファレンスデータ識別子を設定します。

id
インプリメンテーションのリファレンスデータ識別子（バイトの並び）

public abstract String object_name()
このメソッドは，インプリメンテーションのオブジェクト名を取得します。

public abstract void object_name(
String object_name)
このメソッドは，インプリメンテーションのオブジェクト名を設定します。

object_name
インプリメンテーションのオブジェクト名を指定する文字列

public abstract String path_name()
登録の場合，このメソッドは，文字列「vbj」を取得します。

public abstract void path_name(
String path_name)
このメソッドは，オブジェクトをインプリメントする実行可能プログラムの正確なパス名を設定します。プログラムの場合，パス名は必ず「vbj」にしてください。

注

OADのパス設定環境変数を設定する場合は，必ずプログラム「vbj」にパスが通るように設定してください。OADのパスはインストール時に設定します。

path_name
インプリメンテーションのパス名を指定する文字列

public abstract String repository_id()
このメソッドは，インプリメンテーションのリポジトリIDを取得します。

public abstract void repository_id(
String repository_id)
このメソッドは，インプリメンテーションのリポジトリIDを設定します。

repository_id
インプリメンテーションのリポジトリIDを指定する文字列

7.4　ImplementationDef

ImplementationDefは，ImplementationDefsの型であるActivationImplDefとCreationImplDef用の空のベースクラスです。ImplementationDefが使用できるのは，ActivationImplDefメソッド，またはCreationImplDefメソッド内のシグニチャの中だけです。

7.5　OAD

public interface OAD extends org.omg.CORBA.Object

OADインタフェースは，OADへのアクセスを提供します。このインタフェースは，管理ツールがオブジェクトの一覧表示，登録，および登録解除を実行するために使用します。また，OADをプログラムから管理するために，クライアントコードがこのインタフェースを使用することもできます。

interface OAD {
CreationImplDef create_CreationImplDef( );

Object reg_implementation(in extension::CreationImplDef impl)
   raises(DuplicateEntry,InvalidPath);

CreationImplDef get_implementation(
               in CORBA::RepositoryId repId,
               in string object_name)
   raises(NotRegistered);

void change_implementation(
               in extension::CreationImplDef old_info,
               in extension::CreationImplDef new_info)
   raises(NotRegistered,InvalidPath,IsActive);

attribute boolean destroy_on_unregister;

void unreg_implementation(in CORBA::RepositoryId repId,
               in string object_name)
   raises(NotRegistered);

void unreg_interface(in CORBA::RepositoryId repId)
   raises(NotRegistered);

void unregister_all( );

ImplementationStatus get_status(in CORBA::RepositoryId repId,
               in string object_name)
   raises(NotRegistered);

ImplStatusList get_status_interface(
               in CORBA::RepositoryId repId)
   raises(NotRegistered);

ImplStatusList get_status_all( );

Object lookup_interface(in CORBA::RepositoryId repId,
               in long timeout)
   raises(NotRegistered,FailedToExecute,NotResponding,Busy);

Object lookup_implementation(in CORBA::RepositoryId repId,
               in string object_name,in long timeout)
   raises(NotRegistered,FailedToExecute,NotResponding,Busy);

string generated_command(in extension::CreationImplDef impl);

string generated_environment(
                         inextension::CreationImplDef impl);
};

＜この節の構成＞

7.5.1　ImplementationStatus

7.5.2　OADのメソッド

7.5.1　ImplementationStatus

ImplementationStatusは，CreationImplDefからのimplと，ObjectStatusListからのステータスを含んだ構造体です。ObjectStatusListは，long型にunique_idを指定し，Stateにはactivation_stateを指定している構造体です。インプリメンテーションは，次の状態のどれかにできます。

活性

非活性

活性化待ち

module Activation
{
...
  struct ObjectStatus {
     long     unique_id;
     State    activation_state;
     Object   objRef;
  };
  typedef sequence<ObjectStatus>ObjectStatusList;
  struct ImplementationStatus {
     extension::CreationImplDef impl;
     ObjectStatusList           status;
  };

7.5.2　OADのメソッド

public void change_implementation(
org.omg.CORBA.CreationImplDef old_info,
org.omg.CORBA.CreationImplDef new_info)
このメソッドは，オブジェクトのインプリメンテーションを動的に変更します。このメソッドを使用して，登録の活性化ポリシー，パス名，パラメタ設定，および環境設定を変更できます。

old_info
変更したい情報

new_info
old_infoと差し替えたい情報

このメソッドでは，次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

InvalidPath

Javaクラス，またはccpが実行できるプログラムが見つかりません。

IsActive

オブジェクトインプリメンテーションは現在実行中です。オブジェクトを非活性化してから，その情報を変更してください。

注

現在活性状態にあるインプリメンテーションの情報は変更できません。このメソッドでオブジェクトのインプリメンテーション名やオブジェクト名を変更する場合，必ず注意を守ってください。クライアントアプリケーションはオブジェクトを古い名前で検索できません。

public abstract CreationImplDef create_CreationImplDef( )
このメソッドは，CreationImplDefのインスタンスを生成します。その後，属性を設定できます。詳細については，「7.3　CreationImplDef」を参照してください。
このメソッドでは，次の例外が発生します。

DuplicateEntry

指定したオブジェクトはすでに登録されています。未登録のオブジェクトを指定してください。

InvalidPath

Javaクラスが見つかりません。

public abstract void destroy_on_unregister(
boolean destroy_on_unregister)
このメソッドは，OADのdestroy_on_unregister属性を設定します。この属性にtrueを設定した場合，活性状態のインプリメンテーションは，登録解除時にすべてシャットダウンされます。

public abstract boolean destroy_on_unregister( )
このメソッドは，インプリメンテーションのdestroy_on_unregister属性の設定を取得します。

public abstract String generated_command(
org.omg.CORBA.CreationImplDef impl)
このメソッドは，指定したインプリメンテーションに対して実行するコマンドのコマンドラインオプションを表す文字列を返します。

public abstract String generated_environment(
com.Inprise.vbroker.extension.CreationImplDef impl)
このメソッドは，指定したインプリメンテーションについて生成したサーバを実行する，環境を表す文字列を返します。

public org.omg.CORBA.CreationImplDef get_implementation(
String repository_id, String object_name)
このメソッドは，指定されたリポジトリIDとオブジェクト名に対して登録されたインプリメンテーションに関する情報を検索します。

repository_id
リポジトリIDを指定する文字列

object_name
オブジェクト名を指定する文字列

このメソッドでは，次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

public com.inprise.vbroker.Activation.ImplementationStatus
get_status(String repository_id, String object_name)
このメソッドは，指定されたリポジトリIDとオブジェクト名に対して登録されたインプリメンテーションに関するステータス情報を検索します。

repository_id
リポジトリIDを指定する文字列

object_name
オブジェクト名を指定する文字列

public Activation.ImplementationStatus[ ] get_status_all()
このメソッドは，すべてのインプリメンテーションに関するステータス情報を取得します。

public Activation.ImplementationStatus[ ] get_status_interface(
String repository_id)
このメソッドは，指定したリポジトリに登録されているインプリメンテーションのステータス情報を取得します。

repository_id
リポジトリIDを指定する文字列

public Activation ImplStatusList get_status_interface(
String repository_id)
このメソッドは，指定したリポジトリIDのインプリメンテーションのオブジェクトリファレンスを返します。

repository_id
リポジトリIDを指定する文字列

このメソッドでは，次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

FailedToExecute

指定したオブジェクトは実行できません。実行中にエラーが発生しました。

NotResponding

メソッドへの応答がありません。

Busy

指定したオブジェクトは現在使用中です。

public Activation ImplStatusList get_status_all( )
このメソッドは，登録されているすべてのインプリメンテーションのステータス情報を返します。

public org.omg.CORBA.Object lookup_interface(
String repository_id,long timeout)
このメソッドは，指定したインプリメンテーションを検索します。

repository_id
リポジトリIDを指定する文字列

timeout

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

FailedToExecute

指定したオブジェクトは実行できません。実行中にエラーが発生しました。

NotResponding

メソッドへの応答がありません。

Busy

指定したオブジェクトは現在使用中です。

public org.omg.CORBA.Object lookup_implementation(
String repID, string object_name, long timeout)
このメソッドは，指定したインプリメンテーションを検索します。クライアントが直接呼び出す必要はありません。

repID
リポジトリIDを指定する文字列

object_name
オブジェクト名を指定する文字列

timeout

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

FailedToExecute

指定したオブジェクトは実行できません。実行中にエラーが発生しました。

NotResponding

メソッドへの応答がありません。

Busy

指定したオブジェクトは現在使用中です。

public org.omg.CORBA.Object reg_implementation(
org.omg.CORBA.CreationImplDef impl)
このメソッドは，インプリメンテーションをOADとBorland Enterprise Server VisiBrokerディレクトリサービスに登録します。

impl
CreationImplDefのインスタンス

このメソッドでは，次の例外が発生します。

DuplicateEntry

指定したオブジェクトは重複エントリです。未登録オブジェクトを指定してください。

InvalidPath

Javaクラスが見つかりません。

public void unreg_implementation(
String repository_id,
String object_name)
このメソッドは，リポジトリIDとオブジェクト名でインプリメンテーションを登録解除します。destroy_on_unregister属性にtrueを設定した場合，このメソッドは，指定されたリポジトリIDおよびオブジェクト名を現在インプリメントしている，すべてのプロセスを終了させます。

repository_id
リポジトリIDを指定する文字列

object_name
オブジェクト名を指定する文字列

このメソッドでは，次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

public void unreg_interface(
String repository_id)
このメソッドは，リポジトリIDに対応するすべてのインプリメンテーションを登録解除します。destroy_on_unregister属性にtrueを設定した場合，このメソッドは，指定されたリポジトリIDを現在インプリメントしている，すべてのプロセスを終了させます。

repository_id
リポジトリIDを指定する文字列です。

このメソッドでは，次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

public void unregister_all( )
このメソッドは，すべてのインプリメンテーションを登録解除します。destroy_on_unregister属性にtrueを設定しないかぎり，活性状態のすべてのインプリメンテーションが実行を続けます。

8.　ネーミングサービスインタフェースとクラス（Java）

この章では，Java言語でプログラミングする場合に，Borland Enterprise Server VisiBrokerのネーミングサービスで使用するインタフェースとクラスについて説明します。Borland Enterprise Server VisiBrokerネーミングサービスは，OMGの仕様書「Interoperable Naming Specification」(orbos/98-10-11)に完全に従ったインプリメンテーションです。

＜この章の構成＞

8.1　NamingContext

8.2　NamingContextExt

8.3　BindingとBindingList

8.4　BindingIterator

8.5　NamingContextFactory

8.6　ExtendedNamingContextFactory

8.1　NamingContext

public interface NamingContext extends
   com.inprise.vbroker.CORBA.Object

このインタフェースを使用して，VisiBroker ORBオブジェクトまたはほかのNamingContextオブジェクトにバインドされるネームを登録したり，操作したりします。クライアントアプリケーションは，このインタフェースを使用して，コンテキスト内のすべてのネームをresolveまたはlistによって処理します。オブジェクトインプリメンテーションは，このオブジェクトを使用して，オブジェクトインプリメンテーションまたはNamingContextオブジェクトをネームにバインドします。NamingContextのIDL仕様を次に示します。

＜この節の構成＞

8.1.1　IDLの定義

8.1.2　NamingContextのメソッド

8.1.1　IDLの定義

module CosNaming {

   interface NamingContext {
       void bind(in Name n, in Object obj)
           raises(NotFound, CannotProceed, InvalidName,
                  AlreadyBound);
       void rebind(in Name n, in Object obj)
           raises(NotFound, CannotProceed, InvalidName);
       void bind_context(in Name n, in NamingContext nc)
           raises(NotFound, CannotProceed, InvalidName,
                  AlreadyBound);
       void rebind_context(in Name n, in NamingContext nc)
           raises(NotFound, CannotProceed, InvalidName);
       Object resolve(in Name n)
           raises(NotFound, CannotProceed, InvalidName);
       void unbind(in Name n)
           raises(NotFound, CannotProceed, InvalidName);
       NamingContext new_context( );
       NamingContext bind_new_context(in Name n)
           raises(NotFound, CannotProceed, InvalidName,
                  AlreadyBound);
       void destroy( )
           raises(NotEmpty);
       void list(in unsigned long how_many,
           out BindingList bl,
           out BindingIterator bi);
   };
};

8.1.2　NamingContextのメソッド

public void bind(
CosNaming.NameComponent[ ] n,
org.omg.CORBA.Object obj)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName,
CosNaming.NamingContextPackage.AlreadyBound
このメソッドは，指定されたネームを指定されたObjectにバインドします。このとき，最初のNameComponentに関連づけられたコンテキストを解決し，そのあと，次に示すNameを使用して新しいコンテキストにオブジェクトをバインドします。

Name[NameComponent₍₂₎ ,...,NameComponent(n-1) ,NameComponent(n) ]

解決とバインドのこの再帰的なプロセスは，NameComponent (n-1)に関連づけられたコンテキストが解決され，ネームとオブジェクトとの実際のバインドが格納されるまで続きます。パラメタnがシンプルネームである場合には，objは，このNamingContext内のnにバインドされます。

n
オブジェクトに指定するネームで初期化されるName構造体

obj
ネーミングされるオブジェクト

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

AlreadyBound
ネームがNamingContext内の別のオブジェクトにすでにバインドされています。

public void rebind(
CosNaming.NameComponent[ ] n,
org.omg.CORBA.Object obj)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName
このメソッドは，AlreadyBound例外が発行されないという点を除いて，bindメソッドと同じです。指定されたNameがすでに別のオブジェクトにバインドされている場合には，このバインドは，新しいバインドで置き換えられます。

n
オブジェクトに指定するネームで初期化されるName構造体

obj
ネーミングされるオブジェクト

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

public void bind_context(
CosNaming NameComponent[ ] n,
CosNaming.NamingContext nc)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
InvalidName,
CosNaming.NamingContextPackage.AlreadyBound
このメソッドは，指定されたNameが，任意のORBオブジェクトではなく，NamingContextに対応づけられるという点を除いて，bindメソッドと同じです。

n
希望するネーミングコンテキスト名で初期化されるName構造体。シーケンス内の最初の(n-1)個のNameComponent構造体は，NamingContextに解決される必要があります。

nc
リバインドされるNamingContextオブジェクト

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

AlreadyBound
ネームがNamingContext内の別のオブジェクトにすでにバインドされています。

public void rebind_context(
CosNaming. NameComponent[ ] n,
CosNaming.NamingContext nc)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName
このメソッドは，AlreadyBound例外が発行されないという点を除いて，bind_contextメソッドと同じです。指定されたNameがすでに別のネーミングコンテキストにバインドされている場合には，このバインドは，新しいバインドで置き換えられます。

n
オブジェクトに指定するネームで初期化されるName構造体

nc
リバインドされるNamingContextオブジェクト

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

public org.omg.CORBA.Object resolve(
CosNaming.NameComponent[ ] n)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName
このメソッドは，指定されたNameを解決し，オブジェクトリファレンスを返します。パラメタnがシンプルネームである場合には，このNamingContextで解決されます。
nがコンプレックスネームである場合には，最初のNameComponentに関連づけられたコンテキストを使用して解決されます。その後，新しいコンテキストを使用して次に示すNameを解決します。

Name[NameComponent₍₂₎ ,...,NameComponent(n-1) ,NameComponent(n) ]

この再帰的なプロセスは，n番目のNameComponentに関連づけられたオブジェクトが返されるまで続きます。

n
対象となるオブジェクトのネームで初期化されるName構造体

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

public void unbind(
CosNaming.NameComponent[ ] n)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName
このメソッドは，bindメソッドの逆で，指定されたNameに対応しているバインドを削除します。

n
バインドの解除をしたいネームのName構造体

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

public CosNaming.NamingContext new_context( )
このメソッドは，新しいネーミングコンテキストを作成します。新しく作成されたコンテキストは，このオブジェクトと同じサーバ内でインプリメントされます。新しいコンテキストは，初期状態ではどのNameにもバインドされていません。

public CosNaming.NamingContext bind_new_context(
NamComponent[ ] n)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName,
CosNaming.NamingContextPackage.AlreadyBound
このメソッドは，新しいコンテキストを作成し，そのコンテキスト内で指定されたNameにバインドします。

n
新しく作成されたNamingContextオブジェクトに対応するネームで初期化されるName構造体

このメソッドでは，次の例外が発生します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

AlreadyBound
ネームがNamingContext内の別のオブジェクトにすでにバインドされています。

public void destroy( )
throws
CosNaming.NamingContextPackage.NotEmpty
このメソッドは，現在のネーミングコンテキストを非活性化します。以後，このオブジェクトでオペレーションを呼び出そうとすると，CORBA.OBJECT_NOT_EXISTランタイム例外が発生します。
このメソッドを使用する前に，unbindメソッドを使用して，現在のネーミングコンテキストに対応してバインドされているすべてのNameオブジェクトをバインド解除しておく必要があります。空でないNamingContextを破棄しようとすると，NotEmpty例外が発生します。
NamingContext.destroy( )を発行したあとに，同じNamingContextオブジェクトに対して，_non_existent( )を発行すると，org.omg.CORBA.OBJ_ADAPTER例外が発生します。

public void list(
int how_many,
CosNaming.BindingListHolder bl,
CosNaming.BindingIteratorHolder bi)
このメソッドは，現在のコンテキストに含まれているすべてのバインドを返します。how_manyまでのNameが，BindingListによって返されます。残りのバインドは，すべてBindingIteratorによって返されます。返されたBindingListとBindingIteratorを使用すると，ネームのリストを参照できます。BindingListの詳細については，「8.3　BindingとBindingList」を参照してください。

how_many
リストに返されるNameの最大数

bl
呼び出しプログラムに返されるNameのリスト。リストのネームの数はhow_manyの値を超えません。

bi
残りのNameを参照するためのBindingIteratorオブジェクト

8.2　NamingContextExt

public interface NamingContextExt extends
   CosNaming.NamingContext

このインタフェースは，NamingContextインタフェースを継承したもので，文字列化した名前とURLを使用するときに必要なオペレーションを提供します。

＜この節の構成＞

8.2.1　IDLの定義

8.2.2　NamingContextExtのメソッド

8.2.1　IDLの定義

module CosNaming {
   interface NamingContextExt:NamingContext{
       typedef string StringName;
       typedef string Address;
       typedef string URLString;

       StringName to_string(in Name n)
           raises(InvalidName);
       Name to_name(in StringName sn)
           raises(InvalidName);

       exception InvalidAddress {};

       URLString to_url(in Address addr,in StringName sn)
           raises(InvalidAddress,InvalidName);
       Object resolve_str(in StringName n)
           raises(NotFound,CannotProceed,
                  InvalidName);
   };
};

8.2.2　NamingContextExtのメソッド

public java.lang.String to_string(
CosNaming.NameComponent[ ] n)
throws
CosNaming.NamingContextPackage.InvalidName
このオペレーションは，指定したNameの文字列化表現を返します。

n
対象となるオブジェクトの名前で初期化されるName構造体

このメソッドで発生する可能性のある例外を次に示します。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。
引数に空文字列など不正な名前を指定したネームコンポーネントを指定した場合，to_stringメソッドではInvalidName例外は発生しません。
InvalidName例外は，to_stringメソッドの戻り値を使用して，resolveメソッドなどを呼び出した時点で発生します。

public CosNaming.NameComponent[ ] to_name(
java.lang.String sn)
throws
CosNaming.NamingContextPackage.InvalidName
このオペレーションは，指定した文字列化された名前のNameオブジェクトを返します。

sn
オブジェクトの文字列化された名前

このメソッドで発生する可能性のある例外を次に示します。

InvalidName
指定したNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。
引数に空文字列など不正な名前を指定したネームコンポーネントを指定した場合，to_nameメソッドではInvalidName例外は発生しません。
InvalidName例外は，to_nameメソッドの戻り値を使用して，resolveメソッドなどを呼び出した時点で発生します。

public java.lang.String to_url(
java.lang.String addr,
java.lang.String sn)
throws
CosNaming.NamingContextExtPackage.InvalidAddress,
CosNaming.NamingContextPackage.InvalidName
このオペレーションは，指定したURLコンポーネントと文字列化オブジェクト名から，完全なURL文字列を返します。

addr
「myhost.inprise.com:800」の形式のURLコンポーネント。このパラメタの指定を省略すると，InvalidAddress例外が発生します。

sn
文字列化したオブジェクト名

このメソッドで発生する可能性のある例外を次に示します。

InvalidAddress
addrパラメタに指定したアドレスが不正です。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

public org.omg.CORBA.Object resolve_str(
java.lang.String n)
throws
CosNaming.NamingContextPackage.NotFound,
CosNaming.NamingContextPackage.CannotProceed,
CosNaming.NamingContextPackage.InvalidName
このメソッドは，文字列名を解決してオブジェクトリファレンスを返します。

n
文字列化したオブジェクト名

このメソッドで発生する可能性のある例外を次に示します。

NotFound
Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed
シーケンスの中に解決できないNameComponentオブジェクトがあります。クライアントは，返されたNamingContextからオペレーションを継続できます。

InvalidName
指定されたNameにはネームコンポーネントがありません。または，IDフィールドに空文字列を指定したネームコンポーネントがあります。

8.3　BindingとBindingList

public interface Binding

Bindingインタフェース，BindingListインタフェース，およびBindingIteratorインタフェースは，NamingContextオブジェクトの中に「名前とオブジェクトのバインド」を定義するために使用します。Binding構造体は，名前とオブジェクトのペアを一組カプセル化します。binding_nameフィールドはNameを表し，binding_typeフィールドはORBオブジェクトとNamingContextオブジェクトのどちらにNameをバインドするかを表します。

BindingListは，NamingContextオブジェクトに含まれるBinding構造体のシーケンスです。

＜この節の構成＞

8.3.1　IDLの定義

8.3.1　IDLの定義

module CosNaming {

   enum BindingType {
       nobject,
       ncontext
   }
   struct Binding {
       Name binding_name;
       BindingType binding_type;
   };
   typedef sequence<Binding>BindingList;
};

8.4　BindingIterator

public interface BindingIterator extends
   org.omg.CORBA.Object

このインタフェースを使用すると，クライアントアプリケーションは，NamingContextのlistメソッドによって返されるこのオブジェクトを使用して，オブジェクトとネームのバインドを，数を指定しないで繰り返し参照できます。

「8.1.2　NamingContextのメソッド」のlistメソッドも参照してください。

＜この節の構成＞

8.4.1　IDLの定義

8.4.2　BindingIteratorのメソッド

8.4.1　IDLの定義

module CosNaming {

   interface BindingIterator {
       boolean next_one(out Binding b);
       boolean next_n(in unsigned long how_many,
                      out BindingList b);
       void destroy( );
   };
};

8.4.2　BindingIteratorのメソッド

public boolean next_one(
CosNaming.Binding b)
このメソッドは，リストから次のBindingを返します。リストに次のBindingがない場合にはfalseが返ります。それ以外の場合にはtrueが返ります。

b
リストの次のBindingオブジェクト

public boolean next_n(
int how_many, CosNaming.BindingList b)
このメソッドは，リストから要求されたBindingオブジェクトの数を含むBindingListを返します。リストに次のBindingがない場合には，返されるバインドの数が，要求された数よりも少ない場合があります。リストに次のBindingがない場合にはfalseが返ります。それ以外の場合にはtrueが返ります。

how_many
要求されるBindingオブジェクトの最大数

b
要求されたBindingオブジェクト数以下のオブジェクトが登録されたBindingList

public void destroy( )
このメソッドは，オブジェクトを破棄し，オブジェクトに対応するメモリを解放します。このメソッドの呼び出しに失敗すると，メモリの使用量が増大します。

8.5　NamingContextFactory

public interface NamingContextFactory extends
   com.inprise.vbroker.CORBA.Object

このインタフェースは，最初のNamingContextを実体化します。クライアントは，このオブジェクトにバインドし，create_contextメソッドを使用して最初のコンテキストを作成できます。最初のコンテキストが作成できたら，new_contextメソッドを使用して，ほかのコンテキストを作成できます。

ネーミングサービスが起動するときに，このネーミングコンテキストファクトリのインスタンスが作成されます。

一つのルートコンテキストを自動的に作成するNamingContextFactoryの作成方法については，「8.6　ExtendedNamingContextFactory」を参照してください。

＜この節の構成＞

8.5.1　IDLの定義

8.5.2　NamingContextFactoryのメソッド

8.5.1　IDLの定義

module CosNaming {

   interface NamingContextFactory {
       NamingContext create_context( );
       oneway void shutdown( );
   };
};

8.5.2　NamingContextFactoryのメソッド

public CosNaming.NamingContextExt create_context( )
このメソッドによって，クライアントはネーミングコンテキストを作成します。ネーミングコンテキストにはルートコンテキストが指定されていません。そのため，NamingContextFactoryを実体化しただけではネーミングコンテキストは作成されません。

public void shutdown( )
このメソッドによって，クライアントはネーミングサービスを正常に終了します。

public CosNamingExt.ClusterManager get_cluster_manager( )
このメソッドは，指定したクラスタ条件でクラスタを生成します。

public void remove_stale_contexts(
java.lang.String password)
このメソッドによって，クライアントはClusterオブジェクトから存続期間全体を通してメンバを削除します。

public CosNaming.NamingContext[ ] list_all_roots(
java.lang.String password)
このメソッドによって，ルートコンテキストをすべて一覧表示できます。
引数に誤ったパスワードを指定するとUNKNOWN例外が発生します。

8.6　ExtendedNamingContextFactory

public interface ExtendedNamingContextFactory extends
   CosNamingExt.NamingContextFactory

このインタフェースは，NamingContextFactoryインタフェースを拡張し，拡張ネーミングサービスの起動時にファクトリ内でデフォルトルートの作成を可能にします。詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「クラスタの生成」の記述を参照してください。

＜この節の構成＞

8.6.1　IDLの定義

8.6.2　ExtendedNamingContextFactoryのメソッド

8.6.1　IDLの定義

module CosNaming {
   interface ExtendedNamingContextFactory
                                   :NamingContextFactory{
       NamingContext root_context( );
   };
};

8.6.2　ExtendedNamingContextFactoryのメソッド

public CosNaming.NamingContextExt root_context( )
このメソッドは，該当するオブジェクトのインスタンス作成時に，自動的に生成されたルートネーミングコンテキストを返します。

9.　例外クラス（Java）

この章では，Borland Enterprise Server VisiBrokerで使用するJava言語の例外クラスについて説明します。

＜この章の構成＞

9.1　概要

9.2　システム例外

9.3　ユーザ例外

9.1　概要

CORBAシステム例外は，java.lang.RuntimeExceptionのサブクラスです。このため，このような例外が発生する可能性があるすべてのメソッドシグニチャでCORBAシステム例外を宣言する必要はありません。

UserExceptionはjava.lang.Exceptionのサブクラスです。

注

インタフェース階層の変更によって，org.omg.CORBA.Exceptionクラスは削除されました。

java.lang.Exceptionと例外の位置づけについては，「2.10　例外のマッピング」を参照してください。

9.2　システム例外

public class SystemException extends
   java.lang.RuntimeException

CORBAシステム例外は，ランタイムに問題が起こると発生します。この例外はjava.lang.RuntimeExceptionから継承します。発生するすべてのSystemExceptionクラス，およびそれに対する意味を，表9-1に示します。

標準IDLのシステム例外は，org.omg.CORBA.SystemExceptionを継承するファイナルJavaクラスにマッピングされ，IDLメジャー例外コード，マイナー例外コードへのアクセス，および例外の理由を記述する文字列を提供します。

注

org.omg.CORBA.SystemExceptionのパブリックなコンストラクタはありません。これを継承するクラスだけ実体化されています。

現在，Borland Enterprise Server VisiBrokerはマイナーコードの使用をサポートしていません。したがって，マイナーコードを設定するminorメソッドはありません。

＜この節の構成＞

9.2.1　SystemExceptionの属性

9.2.1　SystemExceptionの属性

public CompletionStatus completed
この属性は，オペレーションが完了したかどうかを示します。
システム例外一覧を次の表に示します。

表9-1　システム例外一覧（Java）

例外クラス名 | 説明
BAD_CONTEXT | コンテキストオブジェクトの処理エラーが発生しました。
BAD_INV_ORDER | オペレーション要求の前に，必要な前提条件オペレーションが呼び出されていません。
BAD_OPERATION | 無効なオペレーションが実行されました。
BAD_PARAM | 無効なパラメタが引き渡されました。
BAD_TYPECODE | ORBが不正なTypeCodeを検出しました。
CODESET_INCOMPATIBLE | クライアントとサーバのコードセットに互換がないため，通信に失敗しました。
COMM_FAILURE | 通信障害が発生しました。
DATA_CONVERSION | データ変換エラーが発生しました。
FREE_MEM | メモリを解放できません。
IMP_LIMIT | インプリメンテーションの上限に違反しました。
INITIALIZE | ORB初期化障害が発生しました。
INTERNAL | 内部エラーが発生しました。
INTF_REPOS | インタフェースリポジトリへのアクセスエラーが発生しました。
INV_FLAG | 無効フラグが指定されました。
INV_IDENT | 識別子の構文が無効です。
INV_OBJREF | 無効なオブジェクトリファレンスが検出されました。
INV_POLICY | 無効なポリシーの変更が検出されました。
INVALID_TRANSACTION | トランザクションコンテキストが不正です。
MARSHAL | マーシャルパラメタまたは結果が不当です。
NO_IMPLEMENT | オペレーションのインプリメンテーションが使用できません。
NO_MEMORY | 動的メモリ割り当て障害が発生しました。
NO_PERMISSION | 許可されていないオペレーションを実行しようとしました。
NO_RESOURCES | 必要な資源を取得できませんでした。
NO_RESPONSE | クライアントが送信したリクエストの応答がまだありません。
OBJ_ADAPTER | オブジェクトアダプタが障害を検出しました。
OBJECT_NOT_EXIST | リクエストされたオブジェクトが存在していません。
PERSIST_STORE | パーシステントストレージ障害が発生しました。
REBIND | クライアントが，QoSポリシーに矛盾するIORを受信しました。
TIMEOUT | オペレーションがタイムアウトしました。
TRANSACTION_REQUIRED | リクエスト時に無効なトランザクションコンテキストがトランザクションサービスに渡されましたが，アクティブなトランザクションが必要です。
TRANSACTION_ROLLEDBACK | リクエストに対応するトランザクションがすでにロールバックされているか，またはロールバック用にマーキングされています。
TRANSIENT | 通信エラーが検出されましたが，再接続できる場合があります。
UNKNOWN | 未知の例外です。

9.3　ユーザ例外

public abstract class org.omg.CORBA.UserException extends
   java.lang.Exception implements org.omg.CORBA.portable.IDLEntity

UserExceptionクラスはabstractベースクラスであり，オブジェクトインプリメンテーションで発生する可能性がある例外を定義する場合に使用します。この例外型に対応づけられた状態情報はありませんが，派生したクラスが自分自身の状態情報を付けることがあります。コードサンプル9-1に示すように，このクラスの主な目的は，クライアントコード内のcatchブロックを簡単に使用できるようにすることです。

コードサンプル9-1　システム例外とユーザ例外のキャッチ

try {
    proxy.operation();
}
catch(org.omg.CORBA.SystemException se) {
    System.out.println("The runtime failed: " + se);
}
catch(org.omg.CORBA.UserException ue) {
    System.out.println("The implementation failed: " + ue);
}

＜この節の構成＞

9.3.1　import文

9.3.2　UserExceptionのコンストラクタ

9.3.1　import文

コード内に「import org.omg.CORBA.*;」と記述してください。

9.3.2　UserExceptionのコンストラクタ

protected org.omg.CORBA.UserException()
空のUserExceptionオブジェクトを生成します。

protected org.omg.CORBA.UserException(
String reason)
指定された文字列を持つUserExceptionオブジェクトを生成します。

reason
例外内容を表す文字列

10.　ポータブルインタセプタインタフェースとクラス（Java）

この章では，OMG標準規格で定義されたポータブルインタセプタのインタフェースとクラスの，Borland Enterprise Server VisiBrokerでのインプリメンテーションについて，Java言語でのインタフェースを説明します。これらのインタフェースとクラスの詳細については，「OMG Final Adopted仕様」を参照してください。また，この章で説明するインタフェースを使用する前に，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ポータブルインタセプタの使用」の記述を参照してください。

＜この章の構成＞

10.1　概要

10.2　ClientRequestInfo

10.3　ClientRequestInterceptor

10.4　Codec

10.5　CodecFactory

10.6　Current

10.7　Encoding

10.8　ForwardRequest

10.9　Interceptor

10.10　IORInfo

10.11　IORInfoExt

10.12　IORInterceptor

10.13　ORBInitializer

10.14　ORBInitInfo

10.15　Parameter

10.16　PolicyFactory

10.17　RequestInfo

10.18　ServerRequestInfo

10.19　ServerRequestInterceptor

10.1　概要

VisiBroker ORBは，拡張機能をプラグインするためのインタセプタであるAPIを提供します。例えば，トランザクションとセキュリティのサポートなどが拡張機能の一例です。インタセプタは，VisiBroker ORBの内部にフックされています。これによって，VisiBroker ORBサービスは，VisiBroker ORBの通常の実行の流れを受け取れます。Borland Enterprise Server VisiBrokerがサポートしているインタセプタには，次の2種類があります。

ポータブルインタセプタ
OMGが標準化したインタセプタです。これによって，異なるベンダのORB間で使用できる，ポータブルなインタセプタのコードを記述できます。

VisiBroker 4.xのインタセプタ
VisiBroker 4.xで定義された，Borland Enterprise Server VisiBroker独自のインタセプタです。

VisiBroker 4.xインタセプタの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「VisiBroker 4.xインタセプタの使用」の記述を参照してください。また，「11.　VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（Java）」を参照してください。

ポータブルインタセプタには，次の2種類があります。

リクエストインタセプタ
リクエストインタセプタを使用すると，VisiBroker ORBサービスはクライアントとサーバの間でコンテキスト情報の受け渡しができるようになります。リクエストインタセプタには，クライアントリクエストインタセプタとサーバリクエストインタセプタの2種類があります。

IORインタセプタ
IORインタセプタを使用すると，VisiBroker ORBサービスはサーバまたはオブジェクトのORBサービス関連の機能を定義するIORに情報を登録できるようになります。例えば，SSLなどのセキュリティサービスは，自身のタグ付きコンポーネントをIORに登録できるようになります。これによって，そのコンポーネントを認識するクライアントは，そのコンポーネントの情報に基づいてサーバとの間にコネクションを確立できます。

ポータブルインタセプタの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ポータブルインタセプタの使用」の記述を参照してください。

10.2　ClientRequestInfo

public interface ClientRequestInfo extends RequestInfo,
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.ClientRequestInfoOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，RequestInfoから派生したインタフェースで，クライアント側のインタセプトポイントに渡されます。ClientRequestInfoのメソッドは，一部のインタセプトポイントでは有効ではありません。

次の表に，属性またはメソッドの有効性を示します。無効の属性またはメソッドにアクセスすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

表10-1　ClientRequestInfoの有効性（Java）

| send_request | send_poll | receive_reply | receive_exception | receive_other
request_id | ○ | ○ | ○ | ○ | ○
operation | ○ | ○ | ○ | ○ | ○
arguments | ○※1 | × | ○ | × | ×
exceptions | ○ | × | ○ | ○ | ○
contexts | ○ | × | ○ | ○ | ○
operation_context | ○ | × | ○ | ○ | ○
result | × | × | ○ | × | ×
response_expected | ○ | ○ | ○ | ○ | ○
sync_scope | ○ | × | ○ | ○ | ○
reply_status | × | × | ○ | ○ | ○
forward_reference | × | × | × | × | ○※2
get_slot | ○ | ○ | ○ | ○ | ○
get_request_service_context | ○ | × | ○ | ○ | ○
get_reply_service_context | × | × | ○ | ○ | ○
target | ○ | ○ | ○ | ○ | ○
effective_target | ○ | ○ | ○ | ○ | ○
effective_profile | ○ | ○ | ○ | ○ | ○
received_exception | × | × | × | ○ | ×
received_exception_id | × | × | × | ○ | ×
get_effective_component | ○ | × | ○ | ○ | ○
get_effective_components | ○ | × | ○ | ○ | ○
get_request_policy | ○ | × | ○ | ○ | ○
add_request_service_context | ○ | × | × | × | ×

（凡例）

○：有効，×：無効

注※1

ClientRequestInfoがsend_request()に渡される場合，in，inout，またはoutの各パラメタのリストにエントリがありますが，使用できるのはinoutパラメタとoutパラメタだけです。

注※2

reply_status()がLOCATION_FORWARDを返さない場合，この属性にアクセスすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

＜この節の構成＞

10.2.1　import文

10.2.2　ClientRequestInfoのメソッド

10.2.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.2.2　ClientRequestInfoのメソッド

public org.omg.CORBA.Object target( );
このメソッドは，クライアントがオペレーションを実行するために呼び出したオブジェクトを返します。effective_target()メソッドも参照してください。

public org.omg.CORBA.Object effective_target();
このメソッドは，実際のオペレーション呼び出し元オブジェクトを返します。reply_status()がLOCATION_FORWARDを返す場合，後続のリクエストに対してtargetが返す内容は変わりませんが，effective_targetは，フォワードされたIORを返します。

public org.omg.IOP.TaggedProfile effective_profile();
このメソッドは，org.omg.IOP.TaggedProfileの形式でプロファイルを返します。返されたプロファイルは，リクエストの送信に使用されます。このオペレーションのオブジェクトにロケーションフォワードが発生し，そのオブジェクトのプロファイルが変更された場合，このプロファイルが探索結果のプロファイルとなります。

public org.omg.CORBA.Any received_exception();
このメソッドは，クライアントに返される例外を格納するデータをCORBA.Anyの形式で返します。
CORBA.Anyに挿入できないユーザ例外の場合，例えば，未知の例外やバインディングでTypeCodeが提供されない場合などは，この属性は標準マイナーコード1のUNKNOWNシステム例外を格納するCORBA.Anyとなります。ただし，この例外のRepositoryIdは，received_exception_id属性に使用できます。

public java.lang.String received_exception_id();
このメソッドは，クライアントに返されるreceived_exceptionのIDを返します。

public org.omg.IOP.TaggedComponent get_effective_component(
int id);
このメソッドは，リクエストに対して選択されたプロファイルに指定されたIDを持つorg.omg.IOP.TaggedComponentを返します。
指定されたIDのコンポーネントが複数ある場合に，どのコンポーネントを返すかは定義されていません。指定されたIDのコンポーネントが複数ある場合は，このメソッドの代わりにget_effective_components()が呼び出されます。指定されたIDのコンポーネントがない場合は，標準マイナーコード28のBAD_PARAM例外が発生します。

id
返されるコンポーネントのID

public org.omg.IOP.TaggedComponent[ ]
get_effective_components(int id);
このメソッドは，リクエストに対して選択されたプロファイルに指定されたIDを持つタグ付きコンポーネントをすべて返します。org.omg.IOP.TaggedComponentの配列の形式で返されます。指定されたIDのコンポーネントがない場合は，標準マイナーコード28のBAD_PARAM例外が発生します。

id
返されるコンポーネントのID

public org.omg.CORBA.Policy get_request_policy(
int type);
このメソッドは，オペレーションに対して有効な所定のポリシーを返します。指定した型にORBが対応していない，または指定した型のポリシーオブジェクトがこのオブジェクトに対応づけられていないために，ポリシーの型が無効となる場合は，標準マイナーコード2のINV_POLICY例外が発生します。

type
返されるポリシーを指定するポリシーの型

public void add_request_service_context(
org.omg.IOP.ServiceContext service_context, boolean replace);
このメソッドを使用すると，インタセプタで一つ以上のサービスコンテキストをリクエストに登録できます。サービスコンテキストの順序の宣言はありません。登録された順序でサービスコンテキストが表示される場合も，されない場合もあります。

service_context
リクエストに登録するIOP.ServiceContext

replace
指定したIDのサービスコンテキストがすでに存在する場合のメソッドの動作。falseの場合は，標準マイナーコード15のBAD_INV_ORDER例外が発生します。trueの場合は，既存のコンテキストが新しいコンテキストに置き換えられます。

10.3　ClientRequestInterceptor

public interface ClientRequestInterceptor extends Interceptor,
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.ClientRequestInterceptorOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，ユーザ定義クライアント側インタセプタを継承するときに使用します。ClientRequestInterceptorインスタンスは，VisiBroker ORBに登録されます。詳細については，「10.4　Codec」を参照してください。

＜この節の構成＞

10.3.1　import文

10.3.2　ClientRequestInterceptorのメソッド

10.3.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.3.2　ClientRequestInterceptorのメソッド

public void send_request(
ClientRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントを使用すると，リクエストがサーバに送信される前に，リクエスト情報の照会とサーバコンテキストの修正が，インタセプタでできます。
このインタセプトポイントではシステム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのsend_request()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのインタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプトでこの例外が発生した場合，ほかのインタセプタのsend_requestメソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_other()インタセプトポイントが呼び出されます。ForwardRequest例外については，「10.8　ForwardRequest」を参照してください。

ri
インタセプタが使用するClientRequestInfoインスタンス

public void send_poll(
ClientRequestInfo ri);
このインタセプトポイントを使用すると，時間非依存呼び出し（TII）によるポーリングget replyシーケンス中に，インタセプタで情報を照会できます。
ただし，VisiBroker ORBはTIIに対応していないため，このsend_poll()インタセプトポイントが呼び出されることはありません。

ri
インタセプタが使用するClientRequestInfoインスタンス

public void receive_reply(
ClientRequestInfo ri);
このインタセプトポイントを使用すると，サーバから応答が返されてから，制御がクライアントに戻るまでの間に，インタセプタで応答の情報を照会できます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_reply()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_exception()インタセプトポイントが呼び出されます。

ri
インタセプタが使用するClientRequestInfoインスタンス

public void receive_exception(
ClientRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントは例外が発生したときに呼び出されます。これによって，例外の情報がクライアントに通知される前にインタセプタで例外の情報を照会できます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合は，フロースタックから取り出された一連のインタセプタが，receive_exception()呼び出し時に受け取る例外が変更されます。クライアントに通知される例外は，インタセプタが通知する最後の例外です。ほかのインタセプタが例外を変更しなければ，元の例外が通知されます。
また，このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタでこの例外が発生した場合，ほかのインタセプタのreceive_exception()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_other()インタセプトポイントが呼び出されます。ForwardRequest例外については，「10.8　ForwardRequest」を参照してください。

ri
インタセプタが使用するClientRequestInfoインスタンス

public void receive_other(
ClientRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントを使用すると，リクエストの結果が，正常な応答でも例外でもない場合に使用できる情報をインタセプタで照会できます。それは，リクエストがリトライになる場合（例えば，LOCATION_FORWARD状態でGIOP Replyを受信した場合）や，非同期呼び出し時にリクエストの直後に応答が返されないで，制御がクライアントに戻って終了インタセプトポイントが呼び出される場合などです。
リクエストがリトライになる場合は，適用されているポリシーによって，リトライ指示直後に新しいリクエストが発行されるときと発行されないときがあります。新しいリクエストが発行されるときは，このリクエストが新しいリクエストである間は，インタセプタに関して，元のリクエストとリトライとの間に相関性があります。制御がクライアントに戻らないため，リクエストをスコープとするCurrentは，元のリクエストの場合もリトライリクエストの場合も同一です。詳細については，「10.12　IORInterceptor」を参照してください。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_other()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_exception()インタセプトポイントが呼び出されます。
また，このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタがこの例外を出力した場合，ForwardRequest例外が提供する新しい情報で一連のインタセプタのreceive_other()メソッドが呼び出されます。

ri
インタセプタが使用するClientRequestInfoインスタンス

10.4　Codec

public interface Codec extends
   org.omg.CORBA.LocalInterface,
   org.omg.IOP.CodecOperations,
   org.omg.CORBA.portable.IDLEntity

ORBサービスが使用するIORコンポーネントとサービスコンテキストデータの形式は，IDLデータ型を持つCDRカプセル化エンコーディングインスタンスとして定義される場合があります。Codecは，IDLデータ型とCDRカプセル化表現との間でコンポーネントを受け渡すための機能を持っています。

CodecはCodecFactoryから取得します。CodecFactoryは，ORB.resolve_initial_references("CodecFactory")の呼び出しで取得できます。

＜この節の構成＞

10.4.1　import文

10.4.2　Codecのメンバ

10.4.3　Codecのメソッド

10.4.1　import文

コード内に「import org.omg.IOP.*;」と記述してください。

10.4.2　Codecのメンバ

public final class InvalidTypeForEncoding extends org.omg.CORBA.UserException;
この例外は，エンコーディングに不正な型が指定されている場合に，encode()またはencode_value()が出力します。

public final class FormatMismatch extends org.omg.CORBA.UserException;
この例外は，オクテットシーケンスのデータをCORBA.Anyにデコードできない場合に，decode()またはdecode_value()が出力します。

public final class TypeMismatch extends org.omg.CORBA.UserException;
この例外は，指定したTypeCodeとオクテットシーケンスが適合しない場合に，decode_value()が出力します。

10.4.3　Codecのメソッド

public byte[ ] encode(
org.omg.CORBA.Any data)
throws
InvalidTypeForEncoding
このメソッドは，このCodecに適用されているエンコーディング形式に基づいて，CORBA.Anyの形式で指定したデータをオクテットシーケンスに変換します。このオクテットシーケンスには，TypeCodeと型のデータの両方が格納されます。このオペレーションでは，InvalidTypeForEncoding例外が発生する場合があります。

data
オクテットシーケンスに変換する，CORBA.Any形式のデータ

public org.omg.CORBA.Any decode(
byte[ ] data)
throws
FormatMismatch, TypeMismatch;
このメソッドは，このCodecに適用されているエンコーディング形式に基づいて，指定したオクテットシーケンスをCORBA.Anyオブジェクトにデコードします。
オクテットシーケンスをCORBA.Anyにデコードできない場合，このメソッドはFormatMismatch例外を出力します。

data
CORBA.Anyに変換する，オクテットシーケンス形式のデータ

public byte[ ] encode_value(
org.omg.CORBA.Any data)
throws
InvalidTypeForEncoding;
このメソッドは，このCodecに適用されているエンコーディング形式に基づいて，指定したCORBA.Anyオブジェクトをオクテットシーケンスに変換します。CORBA.Anyのデータだけをエンコードします。TypeCodeのデータはエンコードしません。

data
エンコード済みCORBA.Anyのデータを格納するオクテットシーケンス

public org.omg.CORBA.Any decode_value(
byte[ ] data, org.omg.CORBA.TypeCode tc);
このメソッドは，指定したTypeCodeと，このCodecに適用されているエンコーディング形式に基づいて，指定したオクテットシーケンスをCORBA.Anyにデコードします。
オクテットシーケンスをCORBA.Anyにデコードできない場合，このメソッドはFormatMismatch例外を出力します。

data
CORBA.Anyにデコードする，オクテットシーケンス形式のデータ

tc
データのデコードに使用するTypeCode

10.5　CodecFactory

public interface CodecFactory extends
   org.omg.CORBA.LocalInterface,
   org.omg.IOP.CodecFactoryOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，Codecを取得するときに使用します。CodecFactoryは，ORB.resolve_initial_references("CodecFactory")の呼び出しで取得できます。

＜この節の構成＞

10.5.1　import文

10.5.2　CodecFactoryのメンバ

10.5.3　CodecFactoryのメソッド

10.5.1　import文

コード内に「import org.omg.IOP.*;」と記述してください。

10.5.2　CodecFactoryのメンバ

public final class UnknownEncoding extends org.omg.CORBA.UserException
この例外は，CodecFactoryでCodecを生成できない場合に発生します。「10.5.3　CodecFactoryのメソッド」のcreate_codec()メソッドを参照してください。

10.5.3　CodecFactoryのメソッド

public Codec create_codec(
Encoding enc)
throws
UnknownEncoding
このメソッドは，指定したエンコーディング形式のCodecを生成します。
指定したエンコーディング形式のCodecをファクトリが生成できない場合は，UnknownEncoding例外を出力します。

enc
Codecの生成に使用するエンコーディング形式

10.6　Current

public interface Current extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.CurrentOperations,
   org.omg.CORBA.portable.IDLEntity

Currentインタフェースは，単なるスロットテーブルです。このテーブルのスロットは，スロットのコンテキストと，リクエストまたは応答のサービスコンテキストとの間で，各サービスがコンテキストデータを受け渡すために使用されます。

Currentを使用する各サービスは，初期化時に確保したスロットを，リクエストと応答の処理中に使用します。「10.14.3　ORBInitInfoのメソッド」のallocate_slot_id()メソッドを参照してください。

Currentは，ORB.resolve_initial_references("PICurrent")の呼び出しで取得されます。

RequestInfoオブジェクトのget_slot()メソッドを使用すると，インタセプトポイントの内側から，スレッドスコープからリクエストスコープへ移動したCurrentのデータを使用できます。

＜この節の構成＞

10.6.1　import文

10.6.2　Currentのメソッド

10.6.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.6.2　Currentのメソッド

public org.omg.CORBA.Any get_slot(
int id)
throws
InvalidSlot;
このメソッドを使用すると，サービスは，PICurrentに設定したスロットデータを取得できます。
設定されていないスロットを指定した場合は，tk_nullのTCKind値を持つタイプコードを格納するCORBA.Anyを返します。
割り当てられていないスロットに対してget_slot()を呼び出すと，InvalidSlot例外が発生します。
ORBイニシャライザの内側からget_slot()を呼び出すと，マイナーコード14のBAD_INV_ORDER例外が発生します。ORBイニシャライザについては，「10.4　Codec」を参照してください。

id
データを取り出すスロットのSlotId

public void set_slot(
int id, org.omg.CORBA.Any data)
throws
InvalidSlot;
サービスは，このメソッドを使用して，スロットにデータをCORBA.Anyオブジェクトの形式で設定します。
スロットにすでにデータが設定されている場合，既存のデータは上書きされます。
割り当てられていないスロットに対してset_slot()を呼び出すと，InvalidSlot例外が発生します。
ORBイニシャライザの内側からset_slot()を呼び出すと，マイナーコード14のBAD_INV_ORDER例外が発生します。ORBイニシャライザについては，「10.4　Codec」を参照してください。

id
データを設定するスロットのSlotId

data
指定したスロットに設定する，CORBA.Anyオブジェクト形式のデータ

10.7　Encoding

public final class Encoding implements
   org.omg.CORBA.portable.IDLEntity

このクラスは，Codecのエンコーディング形式を定義します。CDRカプセル化エンコーディングなどのエンコード形式，メジャーバージョン，およびマイナーバージョンを定義します。

次のエンコード形式に対応しています。

ENCODING_CDR_ENCAPSバージョン1.0

ENCODING_CDR_ENCAPSバージョン1.1

ENCODING_CDR_ENCAPSバージョン1.2

GIOPの将来のバージョンすべてに対応するENCODING_CDR_ENCAPS

＜この節の構成＞

10.7.1　import文

10.7.2　Encodingのメンバ

10.7.1　import文

コード内に「import org.omg.IOP.*;」と記述してください。

10.7.2　Encodingのメンバ

public short format;
このメンバは，Codecのエンコーディング形式を保持します。

public byte major_version;
このメンバは，Codecのメジャーバージョン番号を保持します。

public byte minor_version;
このメンバは，Codecのマイナーバージョン番号を保持します。

10.8　ForwardRequest

public final class ForwardRequest extends
   org.omg.CORBA.UserException

インタセプタは，ForwardRequest例外を使用して新規オブジェクトを指定し，リクエストのリトライをORBに指示できます。インタセプタからのForwardRequest例外をORBが受信した場合だけ，リトライが指示されます。それ以外の場合にForwardRequest例外が発生すると，その例外は，ユーザ例外と同様にORBを介して渡されます。

インタセプタの呼び出しに対してインタセプタからForwardRequest例外が出力された場合，そのインタセプトポイントに，ほかのInterceptorは呼び出されません。フロースタックに蓄積されたインタセプタに対応する終了インタセプトポイント（クライアントのreceive_other，またはサーバのsend_other()）が呼び出されます。receive_other()およびsend_other()の中では，reply_status()はLOCATION_FORWARDを返します。

＜この節の構成＞

10.8.1　import文

10.8.2　ForwardRequestの変数

10.8.3　ForwardRequestのメソッド

10.8.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.8.2　ForwardRequestの変数

public org.omg.CORBA.Object forward;
この変数は，転送するオブジェクトリファレンスを表します。

10.8.3　ForwardRequestのメソッド

public ForwardRequest()
このメソッドは，空のプロパティを持つForwardRequestオブジェクトを生成します。

public ForwardRequest(
org.omg.CORBA.Object ref)
このメソッドは，指定されたプロパティを持つForwardRequestオブジェクトを生成します。

ref
転送するオブジェクトリファレンス

public ForwardRequest(
java.lang.String reason, org.omg.CORBA.Object ref)
このメソッドは，指定されたプロパティを持つForwardRequestオブジェクトを生成します。

reason
生成するForwardRequestオブジェクトの詳細メッセージ

ref
転送するオブジェクトリファレンス

10.9　Interceptor

public interface Interceptor extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.InterceptorOperations,
   org.omg.CORBA.portable.IDLEntity

Interceptorは，すべてのインタセプタの派生元となるベースクラスです。

＜この節の構成＞

10.9.1　import文

10.9.2　Interceptorのメソッド

10.9.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.9.2　Interceptorのメソッド

public java.lang.String name();
このメソッドは，インタセプタの名前を返します。個々のインタセプタには，インタセプタを並べ替えるための名前を付けられます。インタセプタ型ごとに，指定した名前を持つ唯一のインタセプタをVisiBroker ORBに登録できます。空文字列を名前に設定することで，インタセプタを匿名にすることもできます。
VisiBroker ORBには，幾つでも匿名のインタセプタを登録できます。

public void destroy();
このメソッドは，ORB.destroy()の実行中に呼び出されます。アプリケーションによってORB.destroy()が呼び出されると，VisiBroker ORBは次のように処理します。

処理中のリクエストがすべて完了するまで待ちます。

Interceptor.destroy()メソッドをインタセプタごとに呼び出します。

VisiBroker ORBのデストラクトを完了します。

デストラクト中のVisiBroker ORBに実装されているオブジェクトのオブジェクトリファレンスに，Interceptor.destroy()の中からメソッド呼び出しをした場合の動作は保証できません。ただし，デストラクト中ではないVisiBroker ORBに，実装されているオブジェクトのメソッド呼び出しはできます。つまり，デストラクト中のVisiBroker ORBは，クライアントとしては使用できますが，サーバとしては使用できません。

10.10　IORInfo

public interface IORInfo extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.IORInfoOperations,
   org.omg.CORBA.portable.IDLEntity

IORInfoインタフェースによって，サーバ側のORBサービスはコンポーネントを追加したり，IOR構築中に適用可能なポリシーへアクセスしたりできるようになります。

ORBは，このインタフェースのORBのインプリメンテーションのインスタンスをIORInterceptor.establish_components()にパラメタとして渡します。

次の表に，IORInterceptorに定義されたメソッドの，IORInfoでの属性またはメソッドの有効性を示します。IORInfoの属性またはメソッドに，不当な呼び出しをすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

表10-2　IORInfoの有効性（Java）

| establish_components | components_established
get_effective_policy | ○ | ○
add_component | ○ | ×
add_component_to_profile | ○ | ×
manager_id | ○ | ○
state | ○ | ○
adapter_template | × | ○
current_factory | × | ○

（凡例）

○：有効，×：無効

＜この節の構成＞

10.10.1　import文

10.10.2　IORInfoのメソッド

10.10.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.10.2　IORInfoのメソッド

public org.omg.CORBA.Policy get_effective_policy(
int type);
ORBサービスのインプリメンテーションでは，get_effective_policy()メソッドを呼び出すことで，特定の型のどのサーバ側ポリシーが構築中のIORに適用されているかを調べられます。構築中のIORが，POAを使用して実装されたオブジェクトのIORである場合，そのPOAを生成したPortableServer.POA.create_POA()呼び出しで渡されたPolicyオブジェクトはすべて，get_effective_policyでアクセスできます。
指定した型のポリシーをORBが認識していない場合，このメソッドは標準マイナーコード3のINV_POLICY例外を出力します。

type
取得するポリシーの型を指定したCORBA.PolicyType

public void add_ior_component(
org.omg.IOP.TaggedComponent a_component);
このメソッドは，IOR構築時にインクルードされるタグ付きコンポーネントのセットにメンバを追加するときに，establish_components()から呼び出されます。すべてのプロファイルにコンポーネントのセットがインクルードされます。
同じコンポーネントIDのコンポーネントを複数存在させることもできます。

a_component
追加するIOP.TaggedComponent

public void add_ior_component_to_profile(
org.omg.IOP.TaggedComponent a_component,int profile_id);
このメソッドは，IOR構築時にインクルードされるタグ付きコンポーネントのセットにメンバを追加するときに，establish_components()から呼び出されます。指定したプロファイルにコンポーネントのセットがインクルードされます。
指定したプロファイルIDが既存のプロファイルを定義していない場合，およびプロファイルにコンポーネントを追加できない場合，標準マイナーコード29のBAD_PARAM例外が発生します。

a_component
追加するIOP.TaggedComponent

profile_id
コンポーネントを追加するプロファイルのIOP.ProfileId

public int manager_id();
このメソッドは，アダプタのマネージャへの不透明なハンドルを提供する属性を返します。このメソッドは，同じアダプタマネージャに管理されているアダプタの状態変更を通知するために使用します。

public short state();
このメソッドは，アダプタの現在の状態を返します。状態として，HOLDING，ACTIVE，DISCARDING，INACTIVE，またはNON_EXISTENTのどれかを返します。

public ObjectReferenceTemplate adapter_template();
IORインタセプタが呼び出されたときは常に，このメソッドがオブジェクトリファレンスのテンプレートを取得するための属性を返します。オブジェクトリファレンスのテンプレートを直接作成する方法は標準では提供されません。adapter_template()が返す値は，add_component()とadd_component_to_profile()のIORインタセプタ呼び出しのために作成されるテンプレート，およびアダプタポリシーです。adapter_template()が返す値は，オブジェクトアダプタが存続している間は変更されません。

public ObjectReferenceFactory current_factory();
このメソッドが返す属性を使用して，アダプタがオブジェクトリファレンスを作成するときに使用するファクトリにアクセスできます。current_factory()が返す初期値はadapter_template属性と同じ値ですが，current_factoryにほかのファクトリを設定することで変更できます。オブジェクトアダプタが作成するオブジェクトリファレンスは，すべてcurrent_factoryのmake_object()メソッドを呼び出して作成する必要があります。

public void current_factory(
ObjectReferenceFactory current_factory);
このメソッドでは，current_factory属性を設定します。アダプタが使用するcurrent_factory属性の値を設定できるのは，components_established()メソッドの呼び出し時だけです。

current_factory
設定対象のcurrent_factoryオブジェクト

10.11　IORInfoExt

public interface IORInfoExt extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.IORInfo,
   com.inprise.vbroker.PortableInterceptor.IORInfoExtOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースでは，Borland Enterprise Server VisiBrokerのポータブルインタセプタを拡張して，POAをスコープとするサーバリクエストインタセプタをインストールします。IORInfoExtインタフェースは，IORInfoインタフェースから継承します。IORInfoExtインタフェースは，POAをスコープとするサーバリクエストインタセプタに対応するための拡張メソッドを提供します。

＜この節の構成＞

10.11.1　import文

10.11.2　IORInfoExtのメソッド

10.11.1　import文

コード内に「import com.inprise.vbroker.PortableInterceptor.*;」と記述してください。

10.11.2　IORInfoExtのメソッド

public void add_server_request_interceptor(
ServerRequestInterceptor interceptor);
このメソッドは，POAをスコープとするサーバ側リクエストインタセプタをサーバに追加するときに使用します。

interceptor
追加するServerRequestInterceptor

public java.lang.String full_poa_name();
このメソッドは，POAのフルネームを返します。

10.12　IORInterceptor

public interface IORInterceptor extends Interceptor,
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.IORInterceptorOperations,
   org.omg.CORBA.portable.IDLEntity

ポータブルORBサービスインプリメンテーションでは，クライアントのORBサービスインプリメンテーションが正しく機能するように，必要に応じてサーバまたはオブジェクトのORBサービスに関連する機能の定義情報をオブジェクトリファレンスに追加する必要があります。それは，IORInterceptorインタフェースとIORInfoインタフェースが提供しています。IORインタセプタは，IORにあるプロファイルにタグ付きコンポーネントを設定するために使用します。

＜この節の構成＞

10.12.1　import文

10.12.2　IORInterceptorのメソッド

10.12.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.12.2　IORInterceptorのメソッド

public void establish_components(
IORInfo info);
サーバ側ORBは，特定のオブジェクトリファレンスの一つ以上のプロファイルにインクルードするコンポーネントの一覧を生成するときに，登録済みIORInterceptorインスタンスすべてのestablish_components()メソッドを呼び出します。このメソッドは，オブジェクトリファレンスごとに呼び出す必要はありません。POAの場合は，POA.create_POA()呼び出し時に毎回呼び出されます。ほかのアダプタの場合は，通常，アダプタの初期化時に呼び出されます。
この段階では，アダプタテンプレートは使用できません。それは，アダプタテンプレートに必要な情報（コンポーネント）がまだ作成されていないためです。

info
適用可能なポリシーを照会し，生成されたIORにインクルードするコンポーネントを追加するときに，ORBサービスが使用するIORInfoインスタンス

public void components_established(
IORInfo info);
establish_components()メソッドがすべて呼び出されると，登録済みIORインタセプタすべてのcomponents_established()メソッドが呼び出されます。この段階では，アダプタテンプレートが使用できます。また，current_factory属性を取得したり設定したりすることもできます。
components_established()で発生する例外はすべて，components_established()の呼び出し元に返されます。このため，POAの場合，create_POA()呼び出しは失敗し，標準マイナーコード6のOBJ_ADAPTER例外がcreate_POA()の呼び出し元に返されます。

info
適用可能なポリシーにアクセスするためにORBサービスが使用するIORInfoインスタンス

public void adapter_manager_state_changed(
int id, short state);
アダプタマネージャの状態が変わったときに，登録済みIORインタセプタすべてのadapter_manager_state_changed()メソッドが呼び出されます。
状態の変化がadapter_manager_state_changed()によって通知される場合は，adapter_state_changed()では通知されません。

id
適用可能なポリシーにアクセスするためにORBサービスが使用するIORInfoインスタンス

state
オブジェクトアダプタの変更後の状態

public void adapter_state_changed(
ObjectReferenceTemplate[ ] templates, short state);
アダプタマネージャの状態の変化と関連なく，一つ以上のオブジェクトアダプタの状態が変更された場合は，このメソッドに通知されます。templatesパラメタは，状態が変更されたオブジェクトアダプタをテンプレートID情報で識別します。このパラメタには，通知対象のオブジェクトアダプタの，すべてのアダプタテンプレートが格納されます。

templates
状態が変更されたオブジェクトアダプタをテンプレートID情報で識別します。

state
オブジェクトアダプタの変更後の状態

10.13　ORBInitializer

public interface ORBInitializer extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.ORBInitializerOperations,
   org.omg.CORBA.portable.IDLEntity

ORBInitializerインタフェースをインプリメントするORBInitializerオブジェクトを登録すると，対応するインタセプタが登録されます。ORBは，初期化時に登録済みORBInitializerをすべて呼び出し，それぞれにORBInitInfoオブジェクトを渡します。このORBInitInfoオブジェクトは，ORBInitializerのインタセプタの登録に使用されます。

＜この節の構成＞

10.13.1　import文

10.13.2　ORBInitializerのメソッド

10.13.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.13.2　ORBInitializerのメソッド

public void pre_init(
ORBInitInfo info);
このメソッドは，ORBの初期化中に呼び出されます。インタセプタによって登録された初期サービスが，ほかのインタセプタに使用される場合は，事前にORBInitInfo.register_initial_reference()呼び出しで，その初期サービスが登録されます。

info
インタセプタを登録するための初期化属性とメソッド

public void post_init(
ORBInitInfo info);
このメソッドは，ORBの初期化中に呼び出されます。サービスが初期化の一部として初期リファレンスを解決する必要がある場合は，サービスは，この段階ですべての初期リファレンスを使用できるとみなします。
post_init()メソッド呼び出しは，ORBの初期化の最後の処理ではありません。post_init()のあとに，登録済みインタセプタの一覧をORBにアタッチするのが最後の処理です。したがって，post_init()呼び出し中は，ORBにはインタセプタが含まれていません。ORBを介する呼び出しがpost_init()の内部で実行された場合，その呼び出しに対するリクエストインタセプタは呼び出されません。
同様に，IORを作成するメソッドが実行された場合も，IORインタセプタは呼び出されません。

info
インタセプタを登録するための初期化属性とメソッド

10.14　ORBInitInfo

public interface ORBInitInfo extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.ORBInitInfoOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，インタセプタを登録するためにORBInitializerオブジェクトに渡されます。

＜この節の構成＞

10.14.1　import文

10.14.2　ORBInitInfoのメンバ

10.14.3　ORBInitInfoのメソッド

10.14.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.14.2　ORBInitInfoのメンバ

public final class DuplicateName extends org.omg.CORBA.UserException;
インタセプタ型ごとに，指定した名前を持つ唯一のインタセプタをORBに登録できます。既存のインタセプタと同じ名前でインタセプタを登録しようとすると，DuplicateName例外が発生します。
空文字列を名前に設定することで，インタセプタを匿名にすることもできます。ORBには，幾つでも匿名のインタセプタを登録できます。このため，匿名のインタセプタを登録する場合は，DuplicateName例外は発生しません。

public final class InvalidName extends org.omg.CORBA.UserException;
この例外は，register_initial_reference()とresolve_initial_references()で発生します。
register_initial_reference()でInvalidName例外が発生するのは次の場合です。

このメソッドが空文字列IDで呼び出された場合

このメソッドが，すでに登録されているIDで呼び出された場合（OMG定義済みの既定の名前で呼び出された場合も含みます）

resolve_initial_references()では，解決する名前が不正な場合にInvalidName例外が発生します。

10.14.3　ORBInitInfoのメソッド

public java.lang.String[ ] arguments();
このメソッドは，ORB_init()に渡されたパラメタを返します。パラメタには，ORBのパラメタが含まれる場合も，含まれない場合もあります。

public java.lang.String orb_id();
このメソッドは，初期化中のORBのIDを返します。

public CodecFactory codec_factory();
このメソッドは，IOP_CodecFactoryを返します。通常，CodecFactoryは，ORB.resolve_initial_references("CodecFactory")を呼び出して取得しますが，その時点では，ORBはまだ使用できません。しかし，サービスコンテキスト処理時などに，インタセプタがCodecを必要とするため，Codecを取得する手段がORBの初期化時に必要となります。

public void register_initial_reference(
java.lang.String id, org.omg.CORBA.Object obj);
例えば，このメソッドがID「Y」とオブジェクト「YY」で呼び出されたあとに，register_initial_referenceメソッドが再び呼び出されると，オブジェクト「YY」が返されます。
このメソッドの機能は，ORB.register_initial_reference()と同一です。このメソッドは，ORBが完全に初期化されていないためにまだ使用できない場合に，インタセプタの登録の一部として初期リファレンスが必要となるときに使用します。なお，このメソッドとORB::register_initial_reference()との違いは，ORBのメソッドのバージョンはPIDL（CORBA.ORB.ObjectIdとCORBA.ORB.InvalidName）を使用し，インタフェースのバージョンは，インタフェースに定義されたIDLを使用する点です。構文に違いはありません。
このメソッドが空文字列IDで呼び出された場合，またはこのメソッドがすでに登録されているIDで呼び出された場合（OMG定義済みの既定の名前で呼び出された場合も含みます）は，register_initial_reference()でInvalidName例外が発生します。

id
初期リファレンスを認識するためのID

obj
初期リファレンス

org.omg.CORBA.Object resolve_initial_references(
java.lang.String id)
throws
InvalidName;
このメソッドは，post_init()呼び出し時にだけ有効です。このメソッドの機能はORB.resolve_initial_references()と同一です。このメソッドは，ORBが完全に初期化されていないためにまだ使用できない場合に，インタセプタの登録の一部として初期リファレンスが必要となるときに使用します。

id
初期リファレンスを認識するためのID

解決する名前が不正な場合，resolve_initial_references()ではInvalidName例外が発生します。

public void add_client_request_interceptor(
ClientRequestInterceptor interceptor)
throws
DuplicateName;
このメソッドは，クライアント側リクエストインタセプタの一覧に項目を追加するときに使用します。同じ名前のクライアント側リクエストインタセプタがすでに存在している場合は，DuplicateName例外が発生します。

interceptor
追加するClientRequestInterceptor

public void add_server_request_interceptor(
ServerRequestInterceptor interceptor)
throws
DuplicateName;
このメソッドは，サーバ側リクエストインタセプタの一覧に項目を追加するときに使用します。同じ名前のサーバ側リクエストインタセプタがすでに存在している場合は，DuplicateName例外が発生します。

interceptor
追加するServerRequestInterceptor

public void add_ior_interceptor(
IORInterceptor interceptor)
throws
DuplicateName;
このメソッドは，IORインタセプタの一覧に項目を追加するときに使用します。同じ名前のIORインタセプタがすでに存在している場合は，DuplicateName例外が発生します。

interceptor
追加するIORInterceptor

public int allocate_slot_id();
このメソッドは，割り当て済みスロットのインデックスを返します。
サービスは，allocate_slot_idを呼び出してPortableInterceptor.Currentのスロットを割り当てます。

注

スロットIDの割り当ては，ORBイニシャライザの内部でできますが，スロット自体は初期化できません。ORBイニシャライザの内部でCurrentのset_slot()またはget_slot()を呼び出すと，マイナーコード14のBAD_INV_ORDER例外が発生します。詳細については，「10.12　IORInterceptor」を参照してください。

public void register_policy_factory(
int type, PolicyFactory policy_factory);
このメソッドは，指定したPolicyTypeのPolicyFactoryを登録します。
指定したPolicyTypeのPolicyFactoryがすでに登録されている場合は，標準マイナーコード16のBAD_INV_ORDER例外が発生します。

type
指定したPolicyFactoryのCORBA.PolicyType

policy_factory
指定したCORBA.PolicyTypeのファクトリ

10.15　Parameter

public final class Parameter

このクラスは，パラメタ情報を保持します。このクラスは，RequestInfoクラスのarguments()メソッドからパラメタ情報を渡すときに使用します。詳細については，「10.12　IORInterceptor」を参照してください。

＜この節の構成＞

10.15.1　import文

10.15.2　Parameterのメンバ

10.15.1　import文

コード内に「import org.omg.Dynamic.*;」と記述してください。

10.15.2　Parameterのメンバ

public org.omg.CORBA.Any argument;
このメンバは，CORBA.Any形式でパラメタデータを格納します。

public org.omg.CORBA.ParameterMode mode;
このメンバは，パラメタのモードを指定します。PARAM_IN，PARAM_OUT，またはPARAM_INOUTのどちらかのenum値がこのメンバの値となります。

10.16　PolicyFactory

public interface PolicyFactory extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.PolicyFactoryOperations,
   org.omg.CORBA.portable.IDLEntity

ポータブルORBサービスインプリメンテーションは，ORB初期化時に，PolicyFactoryインタフェースのインスタンスを登録します。これは，CORBA.ORB.create_policy()を使用してポリシーの型を構成できるようにするためです。POAは，この方法でORBInitInfoに登録されたポリシーを保存するために必要です。詳細については，「10.14.3　ORBInitInfoのメソッド」のregister_policy_factory()メソッドを参照してください。

＜この節の構成＞

10.16.1　import文

10.16.2　PolicyFactoryのメソッド

10.16.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.16.2　PolicyFactoryのメソッド

public org.omg.CORBA.Policy create_policy(
int type,
org.omg.CORBA.Any value)
throws
org.omg.CORBA.PolicyError;
登録済みPolicyFactoryのPolicyTypeにCORBA.ORB.create_policy()が呼び出されると，ORBは，登録済みPolicyFactoryインスタンスのcreate_policy()を呼び出します。create_policy()メソッドは，次に，指定したCORBA.Anyに対応する値を持つCORBA.Policyから派生したインタフェースのインスタンスを返します。失敗した場合は，CORBA.ORB.create_policy()で示す例外が発生します。

type
作成するポリシーの型を指定しているCORBA.PolicyType

value
CORBA.Policyを構成するためのデータを格納しているCORBA.Any

10.17　RequestInfo

public interface RequestInfo extends
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.RequestInfoOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，ClientRequestInfoとServerRequestInfoの派生元となるベースクラスです。各インタセプトポイントに与えられるオブジェクトを通じて，インタセプタはリクエスト情報にアクセスできます。クライアント側とサーバ側のインタセプトポイントでは扱う情報が異なるため，情報オブジェクトは二つあります。ClientRequestInfoはクライアント側インタセプトポイントに渡され，ServerRequestInfoは，サーバ側インタセプトポイントに渡されます。しかし，両方に共通する情報があるため，どちらも共通インタフェースのRequestInfoを継承しています。

＜この節の構成＞

10.17.1　import文

10.17.2　RequestInfoのメソッド

10.17.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.17.2　RequestInfoのメソッド

public int request_id();
このメソッドは，アクティブなリクエストまたは応答シーケンスを一意に識別するIDを返します。リクエストまたは応答シーケンスが解決された場合は，IDが再使用されることもあります。

注

このIDはGIOPのrequest_idとは異なります。GIOPがトランスポート機能として使用されている場合，このIDとGIOPのrequest_idは必ずしも一致するとは限りません。また，これらが一致している必要はありません。

public java.lang.String operation();
このメソッドは，呼び出されているオペレーションの名前を返します。

public Parameter[ ] arguments();
このメソッドは，呼び出されているオペレーションのパラメタを格納する，Parameter型の配列を返します。パラメタがない場合，この属性は長さが0のシーケンスとなります。
すべての環境でこれらのパラメタにアクセスできるとは限りません。例えば，Javaのポータブルバインディングでは，これらのパラメタは使用できません。アクセスできない環境でこの属性にアクセスしようとすると，標準マイナーコード1のNO_RESOURCES例外が発生します。

public org.omg.CORBA.TypeCode[ ] exceptions();
このメソッドは，オペレーション呼び出しで発生するユーザ例外のTypeCodeを定義するCORBA.TypeCode型の配列を返します。ユーザ例外がない場合，この属性は長さが0のシーケンスとなります。
すべての環境で例外リストにアクセスできるとは限りません。例えば，Javaのポータブルバインディングでは，この例外リストは使用できません。アクセスできない環境でこの属性にアクセスしようとすると，標準マイナーコード1のNO_RESOURCES例外が発生します。

public java.lang.String[ ] contexts();
このメソッドは，オペレーション呼び出しで渡される可能性のあるコンテキストを定義するjava.lang.Stringの配列を返します。コンテキストがない場合，この属性は長さが0のシーケンスとなります。
すべての環境でコンテキストリストにアクセスできるとは限りません。例えば，Javaのポータブルバインディングでは，このコンテキストリストは使用できません。アクセスできない環境でこの属性にアクセスしようとすると，標準マイナーコード1のNO_RESOURCES例外が発生します。

public java.lang.String[ ] operation_context();
このメソッドは，リクエストで送信されるコンテキストを定義するjava.lang.Stringの配列を返します。すべての環境でコンテキストにアクセスできるとは限りません。例えば，Javaのポータブルバインディングでは，このコンテキストは使用できません。アクセスできない環境でこの属性にアクセスしようとすると，標準マイナーコード1のNO_RESOURCES例外が発生します。

public org.omg.CORBA.Any result();
このメソッドは，オペレーション呼び出しの結果をCORBA.Any形式で返します。オペレーションのリターン型がvoidの場合，この属性は，TCKind値がtk_voidまたは値なしのタイプコードを格納するCORBA.Anyとなります。
すべての環境で呼び出し結果にアクセスできるとは限りません。例えば，Javaのポータブルバインディングでは，この呼び出し結果は使用できません。アクセスできない環境でこの属性にアクセスしようとすると，標準マイナーコード1のNO_RESOURCES例外が発生します。

public boolean response_expected();
このメソッドは，応答が期待されているかどうかを示すブール値を返します。
クライアントでは，response_expectedがfalseの場合，応答が返らないため，receive_reply()を呼び出せません。例外が発生した場合以外は，receive_other()を呼び出します。例外が発生した場合は，receive_exception()を呼び出します。

public short sync_scope();
このメソッドは，Messaging仕様で定義されている属性を返します。この属性は，response_expectedがfalseのときだけ有効です。response_expectedがtrueの場合，sync_scope()の値は不定です。この属性は，クライアントに制御が戻る前のリクエストの進捗状況を表します。この属性の値を次に示します。

Messaging.SYNC_NONE

Messaging.SYNC_WITH_TRANSPORT

Messaging.SYNC_WITH_SERVER

Messaging.SYNC_WITH_TARGET

サーバでは，すべてのスコープで，ターゲットオペレーション呼び出しの戻り値から応答が生成されますが，その応答はクライアントには返されません。クライアントに返されなくても応答は生成されているので，通常のサーバ側インタセプトポイント，つまり，receive_request_service_contexts()，receive_request()，send_reply()，またはsend_exception()に従います。
SYNC_WITH_SERVERとSYNC_WITH_TARGETに関しては，ターゲットオペレーションが呼び出される前に，サーバは空の応答をクライアントに返却します。サーバ側インタセプタはこの応答を受け取りません。

public short reply_status();
このメソッドは，オペレーションの呼び出し結果の状態を表す属性を返します。この属性の値を次に示します。

PortableInterceptor.SUCCESSFUL =0

PortableInterceptor.SYSTEM_EXCEPTION =1

PortableInterceptor.USER_EXCEPTION =2

PortableInterceptor.LOCATION_FORWARD =3

PortableInterceptor.TRANSPORT_RETRY =4

クライアント側では，この属性の値は次のようになります。

インタセプトポイントreceive_replyの中では，この属性の値はSUCCESSFULだけです。

インタセプトポイントreceive_exceptionの中では，この属性の値はSYSTEM_EXCEPTIONまたはUSER_EXCEPTIONです。

インタセプトポイントreceive_otherの中では，この属性の値はSUCCESSFUL，LOCATION_FORWARD，またはTRANSPORT_RETRYのどれかです。SUCCESSFULは，非同期リクエストが正常にリターンしたことを意味します。LOCATION_FORWARDは，LOCATION_FORWARD状態が応答で返却されたことを意味します。TRANSPORT_RETRYは，トランスポート機能がリトライを指示したことを意味します。例えば，NEEDS_ADDRESSING_MODE状態のGIOP応答が該当します。

サーバ側では，この属性の値は次のようになります。

インタセプトポイントsend_replyの中では，この属性の値はSUCCESSFULだけです。

インタセプトポイントsend_exceptionの中では，この属性の値はSYSTEM_EXCEPTIONまたはUSER_EXCEPTIONです。

インタセプトポイントsend_otherの中では，この属性の値はSUCCESSFULまたはLOCATION_FORWARDです。SUCCESSFULは，非同期リクエストが正常にリターンしたことを意味します。LOCATION_FORWARDは，LOCATION_FORWARD状態が応答で返却されたことを意味します。

public org.omg.CORBA.Object forward_reference();
reply_status()がLOCATION_FORWARDを返す場合，このメソッドは，リクエストフォワード先オブジェクトを返します。フォワードされるリクエストが実際に発生するかどうかはわかりません。

public org.omg.CORBA.Any get_slot(
int id)
throws
InvalidSlot;
このメソッドは，リクエストのスコープにあるCurrentの指定スロットからデータをCORBA.Any形式で返します。
指定したスロットが設定されていない場合，TCKind値がtk_nullのタイプコードを格納するCORBA.Anyが返されます。
IDが割り当てられていないスロットを表す場合は，InvalidSlot例外が発生します。
スロットとCurrentの詳細については，「10.12　IORInterceptor」を参照してください。

id
取得するスロットのSlotId

public org.omg.IOP.ServiceContext get_request_service_context(
int id);
このメソッドは，リクエストに対応づけられたサービスコンテキストのうち，指定したIDのサービスコンテキストのコピーを返します。
リクエストのサービスコンテキストに，指定したIDのエントリが含まれていない場合は，標準マイナーコード26のBAD_PARAM例外が発生します。

id
取得するサービスコンテキストのID

public org.omg.IOP.ServiceContext get_reply_service_context(
int id);
このメソッドは，応答に対応づけられたサービスコンテキストのうち，指定したIDのサービスコンテキストのコピーを返します。
応答のサービスコンテキストに，指定したIDのエントリが含まれていない場合は，標準マイナーコード26のBAD_PARAM例外が発生します。

id
取得するサービスコンテキストのID

10.18　ServerRequestInfo

public interface ServerRequestInfo extends RequestInfo,
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.ServerRequestInfoOperations,
   org.omg.CORBA.portable.IDLEntity

ServerRequestInfoは，RequestInfoから派生したインタフェースです。サーバ側インタセプトポイントに渡されます。ServerRequestInfoのメソッドは，一部のインタセプトポイントでは有効ではありません。

次の表に，属性またはメソッドの有効性を示します。無効の属性またはメソッドにアクセスすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

表10-3　ServerRequestInfoの有効性（Java）

| receive_request_service_contexts | receive_request | send_reply | send_exception | send_other
request_id | ○ | ○ | ○ | ○ | ○
operation | ○ | ○ | ○ | ○ | ○
arguments | × | ○※1 | ○ | ×※2 | ×※2
exceptions | × | ○ | ○ | ○ | ○
contexts | × | ○ | ○ | ○ | ○
operation_context | × | ○ | ○ | × | ×
result | × | × | ○ | × | ×
response_expected | ○ | ○ | ○ | ○ | ○
sync_scope | ○ | ○ | ○ | ○ | ○
reply_status | × | × | ○ | ○ | ○
forward_reference | × | × | × | × | ○※2
get_slot | ○ | ○ | ○ | ○ | ○
get_request_service_context | ○ | ○ | ○ | ○ | ○
get_reply_service_context | × | × | ○ | ○ | ○
sending_exception | × | × | × | ○ | ×
object_id | × | ○ | ○ | ○※3 | ○※3
adapter_id | × | ○ | ○ | ○※3 | ○※3
target_most_derived_interface | × | ○ | ×※4 | ×※4 | ×※4
get_server_policy | ○ | ○ | ○ | ○ | ○
set_slot | ○ | ○ | ○ | ○ | ○
target_is_a | × | ○ | ×※4 | ×※4 | ×※4
add_reply_service_context | ○ | ○ | ○ | ○ | ○

（凡例）

○：有効，×：無効

注※1

ServerRequestInfoがreceive_request()に渡される場合，in，inout，またはoutの各パラメタのリストにエントリがありますが，使用できるのはinパラメタとinoutパラメタだけです。

注※2

reply_status()がLOCATION_FORWARDを返さない場合，この属性にアクセスすると標準マイナーコード14のBAD_INV_ORDER例外が発生します。

注※3

Servant Locatorでロケーションのフォワードや，例外が発生した場合，この属性またはメソッドは，当該インタセプトポイントで使用できないことがあります。使用できない場合は，標準マイナーコード1のNO_RESOURCES例外が発生します。

注※4

このメソッドは，当該インタセプトポイントで使用できません。

それは，必要な情報を取得するためにはターゲットオブジェクトのサーバントにアクセスする必要がありますが，この時点でORBはこのサーバントを使用できないためです。例えば，ServantLocatorを使用するPOAがオブジェクトのアダプタである場合，ORBは，ServantLocator.postinvoke()を呼び出したあとでインタセプトポイントを呼び出します。

＜この節の構成＞

10.18.1　import文

10.18.2　ServerRequestInfoのメソッド

10.18.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.18.2　ServerRequestInfoのメソッド

public org.omg.CORBA.Any sending_exception();
このメソッドは，クライアントに返される例外を格納するデータをCORBA.Anyの形式で返します。
CORBA.Anyに挿入できないユーザ例外の場合，例えば，未知の例外やバインディングでTypeCodeが提供されない場合などは，この属性は標準マイナーコード1のUNKNOWNシステム例外を格納するCORBA.Anyとなります。

public byte[ ] object_id();
このメソッドは，オペレーション呼び出しのターゲットを表す不透明なobject_idをCORBA.OctetSequenceの形式で返します。

public byte[ ] adapter_id();
このメソッドは，オブジェクトアダプタの不透明な識別子をCORBA.OctetSequenceの形式で返します。

public java.lang.String target_most_derived_interface();
このメソッドは，サーバントのいちばん派生したインタフェースのRepositoryIDを返します。

public org.omg.CORBA.Policy get_server_policy(
int type);
このメソッドは，オペレーションに対して有効なポリシーのうち，指定したポリシー型を持つポリシーを返します。register_policy_factoryで登録された型を持つポリシーだけが，CORBA.Policyオブジェクトとして返されます。
指定した型のポリシーがregister_policy_factoryで登録されていない場合は，標準マイナーコード3のINV_POLICY例外が発生します。詳細については，「10.14.3　ORBInitInfoのメソッド」のregister_policy_factory()メソッドを参照してください。

type
取得するポリシーを指定するCORBA.PolicyType

public void set_slot(
int id, org.omg.CORBA.Any data)
throws
InvalidSlot;
このメソッドを使用すると，インタセプタでリクエストのスコープ内のCurrentのスロットにデータを設定できます。スロットにすでにデータが設定されている場合，既存データは上書きされます。割り当てられていないスロットを表すIDを指定した場合は，InvalidSlot例外が発生します。スロットとCurrentの詳細については，「10.12　IORInterceptor」を参照してください。

id
スロットのSlotId

data
指定したスロットに設定する，CORBA.Anyオブジェクト形式のデータ

public boolean target_is_a(
java.lang.String id);
このメソッドは，指定したRepositoryIdがサーバントの場合はtrueを返し，そうでない場合はfalseを返します。

id
サーバントが，このCORBA.RepositoryIdであるかどうかを呼び出し元が調べます。

public void add_reply_service_context(
org,omg.IOP.ServiceContext service_context,boolean replace);
このメソッドを使用すると，インタセプタでサービスコンテキストを応答に登録できます。サービスコンテキストの順序の宣言はありません。登録された順序でサービスコンテキストが表示される場合も，されない場合もあります。

service_context
応答に登録するIOP.ServiceContext

replace
指定したIDのサービスコンテキストがすでに存在する場合のメソッドの動作。falseの場合は，標準マイナーコード15のBAD_INV_ORDER例外が発生します。trueの場合は，既存のコンテキストが新しいコンテキストに置き換えられます。

10.19　ServerRequestInterceptor

public interface ServerRequestInterceptor extends Interceptor,
   org.omg.CORBA.LocalInterface,
   org.omg.PortableInterceptor.ServerRequestInterceptorOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，ユーザ定義サーバ側インタセプタを継承するときに使用します。ServerRequestInterceptorインスタンスは，VisiBroker ORBに登録されます。詳細については，「10.4　Codec」を参照してください。

＜この節の構成＞

10.19.1　import文

10.19.2　ServerRequestInterceptorのメソッド

10.19.1　import文

コード内に「import org.omg.PortableInterceptor.*;」と記述してください。

10.19.2　ServerRequestInterceptorのメソッド

public void receive_request_service_contexts(
ServerRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントでは，インタセプタは受信したリクエストからサービスコンテキスト情報を取得し，Currentのスロットに転送する必要があります。
このインタセプトポイントは，サーバントマネージャよりも先に呼び出されます。オペレーションのパラメタはまだこの時点では使用できません。このインタセプトポイントは，ターゲットオペレーションの呼び出しと同じスレッドで実行される場合も，実行されない場合もあります。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_request_service_contexts()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_exception()インタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外が発生する場合もあります。インタセプトでこの例外が発生した場合，ほかのインタセプタのreceive_request_service_contexts()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_otherインタセプトポイントが呼び出されます。ForwardRequest例外については，「10.8　ForwardRequest」を参照してください。

ri
インタセプタが使用するServerRequestInfoインスタンス

public void receive_request(
ServerRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントを使用すると，メソッドのパラメタを含むすべての情報が使用できる状態になったあとで，リクエスト情報をインタセプタで照会できます。このインタセプトポイントは，ターゲットオペレーションの呼び出しと同じスレッドで実行されます。
DSIモデルでは，ユーザコードがarguments()を呼び出したときに最初にパラメタが使用できるようになるため，arguments()の内側からreceive_request()が呼び出されます。DSIモデルでは，arguments()を呼び出さないようにすることもできます。
ターゲットオペレーションはarguments()より先にset_exception()を呼び出すことがあります。ORBは，arguments()とset_exception()のどちらが呼び出されても，receive_request()は1回だけ呼び出されることを保障します。
set_exception()でreceive_request()が呼び出された場合，arguments()のリクエストは，標準マイナーコード1のNO_RESOURCES例外となります。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_request()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_exception()インタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外が発生する場合もあります。インタセプトでこの例外が発生した場合，ほかのインタセプタのreceive_request()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_otherインタセプトポイントが呼び出されます。ForwardRequest例外については，「10.8　ForwardRequest」を参照してください。

ri
インタセプタが使用するServerRequestInfoインスタンス

public void send_reply(
ServerRequestInfo ri);
このインタセプトポイントを使用すると，ターゲットオペレーションが呼び出されてから応答がクライアントに返されるまでの間に，インタセプタで応答情報の照会と，応答サービスコンテキストの修正ができます。このインタセプトポイントは，ターゲットオペレーションと同じスレッドで実行されます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのsend_reply()インタセプトポイントは呼び出されません。フロースタックにあるインタセプタのsend_exception()インタセプトポイントが呼び出されます。

ri
インタセプタが使用するServerRequestInfoインスタンス

public void send_exception(
ServerRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントは，例外が発生したときに呼び出されます。このインタセプトポイントを使用すると，例外がクライアントに通知される前にインタセプタでリクエスト情報の照会と，応答サーバコンテキストの修正ができます。このインタセプトポイントは，ターゲットオペレーションと同じスレッドで実行されます。このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合は，フロースタックから取り出された一連のインタセプタが，send_exception()呼び出し時に受け取る例外が変更されます。クライアントに通知される例外は，インタセプタが通知する最後の例外です。ほかのインタセプタが例外を変更しなければ，元の例外が通知されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタでこの例外が発生した場合，ほかのインタセプタのsend_exception()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_otherインタセプトポイントが呼び出されます。ForwardRequest例外については，「10.8　ForwardRequest」を参照してください。

ri
インタセプタが使用するServerRequestInfoインスタンス

public void send_other(
ServerRequestInfo ri)
throws
ForwardRequest;
このインタセプトポイントを使用すると，リクエストの結果が，正常な応答でも例外でもない場合に使用できる情報をインタセプタで照会できます。それは，リクエストがリトライになる場合（例えば，LOCATION_FORWARD状態でGIOP Replyを受信した場合）などです。このインタセプトポイントでは，ターゲットオペレーションと同じスレッドで実行されます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのsend_otherインタセプトポイントは呼び出されません。フロースタックにあるインタセプタのsend_exception()インタセプトポイントが呼び出されます。
このインタセプトポイントでは，FowardRequest例外が発生する場合もあります。インタセプタがこの例外を出力した場合，ForwardRequest例外が提供する新しい情報で一連のインタセプタのsend_other()メソッドが呼び出されます。ForwardRequest例外については，「10.8　ForwardRequest」を参照してください。

ri
インタセプタが使用するServerRequestInfoインスタンス

11.　VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（Java）

この章では，VisiBroker 4.xインタセプタとオブジェクトラッパーに対して使用する，Borland Enterprise Server VisiBrokerのインタフェースとクラスについて，Java言語でのインタフェースを説明します。VisiBroker 4.xインタセプタおよびオブジェクトラッパーの生成方法と使用方法については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「VisiBroker 4.xインタセプタの使用」および「オブジェクトラッパーの使用」の記述を参照してください。

＜この章の構成＞

11.1　概要

11.2　インタセプタマネージャ

11.3　IORテンプレート

11.4　InterceptorManager

11.5　InterceptorManagerControl

11.6　BindInterceptor

11.7　BindInterceptorManager

11.8　ClientRequestInterceptor

11.9　ClientRequestInterceptorManager

11.10　POALifeCycleInterceptor

11.11　POALifeCycleInterceptorManager

11.12　ActiveObjectLifeCycleInterceptor

11.13　ActiveObjectLifeCycleInterceptorManager

11.14　ForwardRequestException

11.15　ServerRequestInterceptor

11.16　ServerRequestInterceptorManager

11.17　IORCreationInterceptor

11.18　IORCreationInterceptorManager

11.19　Location

11.20　Closure

11.21　ExtendedClosure

11.22　ChainUntypedObjectWrapperFactory

11.23　UntypedObjectWrapper

11.24　UntypedObjectWrapperFactory

11.1　概要

VisiBroker 4.xインタセプタは，VisiBroker 4.xに定義され，インプリメントされているインタセプタです。ポータブルインタセプタと同様に，Borland Enterprise Server VisiBrokerのORBサービスにORBの実行フローを受け取る機能を提供します。

VisiBroker 4.xインタセプタ，およびオブジェクトラッパーの使用方法の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「VisiBroker 4.xインタセプタの使用」および「オブジェクトラッパーの使用」の記述を参照してください。

VisiBroker 4.xインタセプタには次の3種類があります。

クライアントインタセプタ
システムレベルのインタセプタです。トランザクションやセキュリティなどのORBサービスのフックを提供し，クライアントのORBに処理させるために使用できます。

サーバインタセプタ
システムレベルのインタセプタです。トランザクションやセキュリティなどのORBサービスのフックをサーバのORBに処理させるために使用できます。

オブジェクトラッパー
ユーザレベルのインタセプタです。簡易なトレースとデータキャッシュができるような，スタブとスケルトンの呼び出しをインタセプトするための簡易な機構を提供します。

11.2　インタセプタマネージャ

インタセプタのインストールと管理は，インタセプタマネージャで実行します。InterceptorManagerインタフェースは，すべてのグローバルインタセプタを管理するためのグローバルインタセプタマネージャです。

グローバルインタセプタは，ローカライズされたインタセプタをインストールするために，インタセプタマネージャが追加されて渡されることがあります。例えば，各POAのインタセプタはPOAInterceptorManagerを使用します。

グローバルインタセプタマネージャのインスタンスであるInterceptorManagerは，文字列「VisiBrokerInterceptorControl」をパラメタとして渡すときに，ORB.resolve_initial_referencesを使用して取得できます。この値は，ORBが管理モードのとき，つまりORBの初期化中にだけ使用できます。

11.3　IORテンプレート

POALifeCycleInterceptor.createの呼び出し中に，インタセプタに加えて，インターオペラブルオブジェクトリファレンス（IOR）テンプレートを直接POAInterceptorManagerインタフェースで修正できます。IORテンプレートは完全なIOR値ですが，type_idが未設定で，GIOP ProfileBody値のオブジェクトキーはすべて不完全なものです。IORCreationInterceptorsの呼び出し前に，POAはtype_idを設定してテンプレートのオブジェクトキーを記述します。

11.4　InterceptorManager

public interface Interceptor InterceptorManager

ほかのすべてのインタセプタマネージャは，このインタフェースから継承します。インタセプタマネージャは，インタセプタのインストールと削除を管理するために使用するインタフェースです。

11.5　InterceptorManagerControl

public interface InterceptorManagerControl

このインタフェースは，関連のあるインタセプタマネージャを一括管理するために使用します。

＜この節の構成＞

11.5.1　import文

11.5.2　InterceptorManagerControlのメソッド

11.5.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.5.2　InterceptorManagerControlのメソッド

public com.inprise.vbroker.interceptor.InterceptorManager
get_manager(java.lang.string name)
ORBは，このメソッドを呼び出してInterceptorManagerのインスタンスを取得します。InterceptorManagerは，マネージャを識別する文字列を返します。

name
インタセプタの名前

11.6　BindInterceptor

public interface BindInterceptor

このインタフェースは，ユーザ独自のインタセプタを派生させて，クライアントアプリケーションまたはサーバアプリケーションのバインドイベントとリバインドイベントを処理させるために使用します。

バインドインタセプタは，バインドの前後にクライアント側で呼び出すグローバルインタセプタです。

バインド中に例外が発生した場合は，チェーンに登録されている残りのインタセプタは呼ばないで，それ以降のインタセプタをチェーンから削除します。bind_succeededまたはbind_failed中に発生した例外は無視されます。

＜この節の構成＞

11.6.1　import文

11.6.2　BindInterceptorのメソッド

11.6.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.6.2　BindInterceptorのメソッド

public com.inprise.vbroker.IOP.IORValue bind(
com.inprise.vbroker.IOP.IORValue ior,
org.omg.CORBA.Object obj,boolean rebind,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，すべてのORBバインドオペレーション中に呼び出されます。
新規IORを使用してバインドオペレーションを継続する場合，新規IORを返します。それ以外の場合はnullを返し，元のIORを使用してバインドを続行します。渡されたパラメタと同じIORを返すことは不正なので，バインド時に例外が発生します。

ior
クライアントがバインドしているサーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト。このオブジェクトはこの時点では適切に初期化されていないので，オブジェクトのオペレーションはしないでください。しかし，このオブジェクトをデータ構造体に保存してバインド完了後に使用できます。

rebind
リバインドを試行することを指定します。

closure
バインドオペレーション用の新しいclosureオブジェクト。closureは，bind_failed，またはbind_succeededに対応した呼び出しで使用します。

public com.inprise.vbroker.IOP.IORValue bind_failed(
com.inprise.vbroker.IOP.IORValue ior,
org.omg.CORBA.Object obj,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，バインドオペレーションが失敗したときに呼び出されます。
このIORに対してリバインドを試行する場合，新規IORを返します。それ以外の場合はnullを返し，リバインドは試行されません。

ior
バインドオペレーションが失敗したサーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト

closure
前回のバインド呼び出しで与えられたclosureオブジェクト

public void bind_succeeded(
com.inprise.vbroker.IOP.IORValue ior,
org.omg.CORBA.Object obj,int profileIndex,
com.inprise.vbroker.interceptor.InterceptorManagerControl
interceptorControl,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，バインドオペレーションが成功すると呼び出されます。

ior
バインドオペレーションが成功したサーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト

profileIndex
実際にバインドが成功したプロファイルのインデックス

interceptorControl
このマネージャがマネージャ種別一覧を提供します。

closure
前回のバインド呼び出しで与えられたclosureオブジェクト

public void exception_occurred,(
com.inprise.vbroker.IOP.IORValue ior,
org.omg.CORBA.Object obj,
org.omg.CORBA.Environment env,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，bindで例外が発生すると呼び出されます。

ior
成功したバインドオペレーションの対象サーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト

env
発生した例外の情報

closure
前回のバインド呼び出しで与えられたclosureオブジェクト

11.7　BindInterceptorManager

public interface BindInterceptorManager extends
   com.inprise.vbroker.interceptor.InterceptorManager

このインタフェースは，BindInterceptorを追加するために使用します。

＜この節の構成＞

11.7.1　import文

11.7.2　BindInterceptorManagerのメソッド

11.7.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.7.2　BindInterceptorManagerのメソッド

public void add(
com.inprise.vbroker.interceptor.BindInterceptor interceptor)
このメソッドを使用してBindInterceptorを追加します。

interceptor
追加するインタセプタ

11.8　ClientRequestInterceptor

public interface ClientRequestInterceptor

このインタフェースは，ユーザ独自のクライアントインタセプタを派生し，オーバーライド対象のメソッドにインプリメンテーションを提供するために使用します。

クライアントリクエストインタセプタは，バインドインタセプタのbind_succeeded呼び出し中にインストールできます。また，コネクションが確立されている間はアクティブ状態を維持します。ユーザが派生したクラスに定義しているメソッドは，オペレーションリクエストの準備時，送信時，返信メッセージの受信時，または例外発生時にORBによって呼び出されます。

＜この節の構成＞

11.8.1　import文

11.8.2　ClientRequestInterceptorのメソッド

11.8.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.8.2　ClientRequestInterceptorのメソッド

public void preinvoke_premarshal(
org.omg.CORBA.Object target,
java.lang.String operation,
com.inprise.vbroker.IOP.ServiceContextListHolder
service_contexts,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，リクエストごとに，それらがマーシャリングされる前にORBに呼び出されます。このインタセプタで例外が発生した場合は，即時にリクエストは終了させられます。インタセプタのチェーンでは，処理済みのインタセプタだけがチェーンに残ります。その例外を起こしたリクエストは送信されないで，exception_occurred( )がチェーンに残ったすべてのインタセプタに対して呼び出されます。

target
サーバへのバインドを試みたクライアントオブジェクト

operation
呼び出すオペレーションの名前を識別します。

service_contexts
ORBが割り当てたサービスを識別します。このサービスはOMGに規定されているものです。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

public void preinvoke_postmarshal(
org.omg.CORBA.Object target,
com.inprise.vbroker.CORBA.portable.Outstream payload,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，リクエストごとに，リクエストのマーシャル処理が済んでから送信されるまでの間に呼び出されます。このメソッドで例外が発生した場合は，残りのチェーンは呼び出されません。該当するリクエストはサーバに送信されません。その後，exception_occurred( )はインタセプタのチェーン全体に呼び出されます。

target
サーバへのバインドを試みたクライアントオブジェクト

payload
マーシャリング済みバッファ

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

public void postinvoke(
org.omg.CORBA.Object target,
com.inprise.vbroker.IOP.ServiceContext[ ] service_contexts,
com.inprise.vbroker.CORBA.portable.InputStream payload,
org.omg.CORBA.Environment env,
com.inprise.vbroker.interceptor.Closure closure)
リクエストの完了後，このメソッドが呼び出されます。

target
サーバへのバインドを試みたクライアントオブジェクト

service_context
ORBが割り当てたサービスを識別します。このサービスはOMGに規定されているものです。

payload
マーシャリング済みバッファ

env
発生した例外についての情報を格納します。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

public void exception_occurred(
org.omg.CORBA.Object target,
org.omg.CORBA.Environment env,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，呼び出し前に例外が発生した場合にORBが呼び出します。呼び出し後に発生した例外はすべて，postinvokeメソッドのEnvironmentパラメタに収集されます。

11.9　ClientRequestInterceptorManager

public interface ClientRequestInterceptorManager extends
   com.inprise.vbroker.interceptor.InterceptorManager

このインタフェースは，ClientRequestInterceptorの追加と削除を実行するのに使用します。

＜この節の構成＞

11.9.1　import文

11.9.2　ClientRequestInterceptorManagerのメソッド

11.9.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.9.2　ClientRequestInterceptorManagerのメソッド

public void add(
com.inprise.vbroker.interceptor.ClientRequestInterceptor
interceptor)
ORBがこのメソッドを呼び出してClientRequestInterceptorを追加します。

interceptor
追加するインタセプタ

11.10　POALifeCycleInterceptor

public interface POALifeCycleInterceptor

このインタフェースは，POAが生成またはデストラクトされるたびに呼び出されるグローバルインタセプタです。ほかのサーバ側インタセプタはすべてグローバルインタセプタとして，または特定のPOAに対してインストールできます。POALifeCycleInterceptorは，InterceptorManagerインタフェースを使用してインストールします。POALifeCycleInterceptorは，POAの生成時またはデストラクト時に呼び出されます。

＜この節の構成＞

11.10.1　import文

11.10.2　POALifeCycleInterceptorのメソッド

11.10.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。また，「import com.inprise.vbroker.PortableServerExt.*;」と記述してください。

11.10.2　POALifeCycleInterceptorのメソッド

public void create(
org.omg.PortableServer.POA poa,
org.omg.CORBA.PolicyListHolder policies,
com.inprise.vbroker.IOP.IORValueHolder iorTemplate,
com.inprise.vbroker.interceptor.InterceptorManagerControl
poaAdmin)
このメソッドは，新規POAがcreate_POAの呼び出しまたはAdapterActivatorによって生成されたときに，呼び出されます。AdapterActivatorの場合，インタセプタは，unknown_adapterメソッドがAdapterActivatorから正常にリターンしたあとにだけ呼び出されます。

poa
作成するPOA

policies
該当するPOAに指定したポリシーの一覧

iorTemplate
IORテンプレートは，type_idが未設定の完全IOR値であり，GIOP.ProfileBodyValueのオブジェクトキーがすべて不完全なものです。

poaAdmin
ほかのインタセプタマネージャを取得するために使用するInterceptorManagerControl

public void destroy(
org.omg.PortableServer.POA poa)
このメソッドは，POAのデストラクト時，そのすべてのオブジェクトがエーテライズされている場合に呼び出されます。createが同じ名前のPOAに対して再び呼び出される前に，destroyがすべてのインタセプタに対して必ず呼び出されるようにしなければなりません。destroyオペレーションにシステム例外が発生してもそのシステム例外は無視され，残りのインタセプタは引き続き呼び出されます。

poa
デストラクト対象のPOA

11.11　POALifeCycleInterceptorManager

public interface POALifeCycleInterceptorManager

このインタフェースは，POALifeCycleInterceptorを登録するために使用します。

＜この節の構成＞

11.11.1　import文

11.11.2　POALifeCycleInterceptorManagerのメソッド

11.11.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。また，「import com.inprise.vbroker.PortableServerExt.*;」と記述してください。

11.11.2　POALifeCycleInterceptorManagerのメソッド

public void add(
POALifeCycleInterceptor interceptor)
ORBがこのメソッドを呼び出して，POALifeCycleInterceptorを追加します。

interceptor
追加するインタセプタ

11.12　ActiveObjectLifeCycleInterceptor

public interface ActiveObjectLifeCycleInterceptor

このインタフェースは，オブジェクトをアクティブオブジェクトマップに追加するときと，アクティブオブジェクトマップからオブジェクトを削除するときに呼び出されます。このインタフェースは，POAにRETAINポリシーがあるときだけ使用できます。また，このインタフェースは，POA生成時にPOALifeCycleInterceptorがPOAごとにインストールできるインタセプタです。

＜この節の構成＞

11.12.1　import文

11.12.2　ActiveObjectLifeCycleInterceptorのメソッド

11.12.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。また，「import com.inprise.vbroker.PortableServerExt.*;」と記述してください。

11.12.2　ActiveObjectLifeCycleInterceptorのメソッド

public void create(
byte[ ] oid,
org.omg.PortableServer.Servant servant,
org.omg.PortableServer.POA adapter)
このメソッドは，直接APIまたはServantActivatorを使用して実行した（明示的または暗黙的な）呼び出しによってオブジェクトがアクティブオブジェクトマップに追加されたあとに，呼び出されます。オブジェクトリファレンスと新規アクティブオブジェクトのPOAはパラメタとして渡されます。

oid
活性化するサーバントのオブジェクトID

servant
活性化するサーバント

adapter
サーバントを活性化したPOA

public void destroy(
byte[ ] oid,
org.omg.PortableServer.Servant servant,
org.omg.PortableServer.POA adapter)
このメソッドは，オブジェクトが非活性化されエーテライズされたあとに，呼び出されます。該当するオブジェクトのオブジェクトリファレンスとPOAはパラメタとして渡されます。

oid
デストラクトするサーバントのオブジェクトID

servant
デストラクトするサーバント

adapter
サーバントをデストラクトしたPOA

11.13　ActiveObjectLifeCycleInterceptorManager

public interface ActiveObjectLifeCycleInterceptorManager

このインタフェースは，ActiveObjectLifeCycleInterceptorを追加するために使用します。

＜この節の構成＞

11.13.1　import文

11.13.2　ActiveObjectLifeCycleInterceptorManagerのメソッド

11.13.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。また，「import com.inprise.vbroker.PortableServerExt.*;」と記述してください。

11.13.2　ActiveObjectLifeCycleInterceptorManagerのメソッド

public void add(
ActiveObjectLifeCycleInterceptor interceptor)
ORBがこのメソッドを呼び出してActiveObjectLifeCycleInterceptorを追加します。

interceptor
追加するインタセプタ

11.14　ForwardRequestException

public interface ForwardRequestException extends
   org.omg.CORBA.UserException,

この例外は，ServerRequestInterceptorのpreinvokeメソッドで発生させることができます。preinvokeメソッドはこの例外を発生させて，リクエストをほかのオブジェクトに転送できます。

＜この節の構成＞

11.14.1　ForwardRequestExceptionの変数

11.14.1　ForwardRequestExceptionの変数

public boolean is_permanent
ロケーションの転送が恒久的であるかどうかを指定します。

public org.omg.CORBA.Object forward_reference
リクエストの転送先のオブジェクトのリファレンスを提供します。

11.15　ServerRequestInterceptor

public interface Interceptor ServerRequestInterceptor

このインタフェースは，POALifeCycleInterceptorがPOA生成時にPOAごとにインストールできるインタセプタです。このインタフェースを使用して，アクセス制御，サービスコンテキストの検査と挿入，およびリクエストの応答状況の変更ができます。

＜この節の構成＞

11.15.1　import文

11.15.2　ServerRequestInterceptorのメソッド

11.15.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.15.2　ServerRequestInterceptorのメソッド

public void preinvoke(
org.omg.CORBA.Object target,
java.lang.String operation,
com.inprise.vbroker.IOP.ServiceContext[ ] service_contexts,
com.inprise.vbroker.CORBA.portable.InputStream payload,
com.inprise.vbroker.interceptor.Closure closure)
raises (ForwardRequestException)
リクエストがサーバ側に到着するたびに，ORBがこのメソッドを呼び出します。このインタセプタで例外が発生した場合，リクエストはすぐに終了させられます。このメソッドは，Servant Locatorの呼び出し前に呼び出されるため，サーバントは利用できないことがあります。

target
リクエスト呼び出し対象のオブジェクト

operation
呼び出すオペレーションの名前を識別します。

service_contexts
ORBが割り当てたサービスをすべて識別します。このサービスはOMGに規定されているものです。

payload
マーシャリング済みバッファ

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

public void postinvoke_premarshal(
org.omg.CORBA.Object target,
com.inprise.vbroker.IOP.ServiceContextListHolder
service_contexts,
org.omg.CORBA.Environment env,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，サーバントにリクエストを送り，その応答をマーシャリングする前に呼び出されます。ここで発生した例外には，チェーンを中断することによって対処します。exception_occurred( )がチェーンのすべてのインタセプタに対して呼び出されます。

target
リクエスト呼び出し対象のオブジェクト

service_contexts
ORBが割り当てたサービスをすべて識別します。このサービスはOMGに規定されているものです。

env
発生した例外の情報を格納します。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

public void postinvoke_postmarshal(
org.omg.CORBA.Object target,
com.inprise.vbroker.CORBA.portable.OutputStream payload,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，応答をマーシャリングしてから，その応答をクライアントに送信する前に呼び出されます。ここで発生した例外は無視されます。チェーン全体が呼び出されるように保証されます。
このメソッドは，ServantLocatorの呼び出し後に呼び出されます。このメソッドに発生した例外は，アプリケーションに発生した例外を置換します。一方向呼び出しでは，リクエストが正常に送信されたあとで呼び出されます。

target
リクエスト呼び出し対象のオブジェクト

payload
マーシャリング済みバッファ

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

public void exception_occurred(
org.omg.CORBA.Object target,
org.omg.CORBA.Environment env,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，例外発生時にリクエスト処理のどこからでも呼び出せます。この呼び出し中に発生した例外によって，該当する環境の既存の例外が置き換えられなければいけません。

target
リクエスト呼び出し対象のオブジェクト

env
発生した例外の情報を格納します。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

11.16　ServerRequestInterceptorManager

public interface ServerRequestInterceptorManager extends
   com.inprise.vbroker.interceptor.InterceptorManager

このインタフェースは，ServerRequestInterceptorを追加するために使用します。

＜この節の構成＞

11.16.1　import文

11.16.2　ServerRequestInterceptorManagerのメソッド

11.16.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.16.2　ServerRequestInterceptorManagerのメソッド

public void add(
com.inprise.vbroker.interceptor.ServerRequestInterceptor
interceptor)
ORBがこのメソッドを呼び出して，ServerRequestInterceptorを追加します。

interceptor
追加するインタセプタ

11.17　IORCreationInterceptor

public interface PortableServerExt.IORCreationInterceptor

このインタフェースは，POA生成時にPOALifeCycleInterceptorがPOAごとにインストールできるインタセプタです。このインタセプタを使用して，プロファイルやコンポーネントを追加することによって，IORを修正できます。このインタフェースは通常，トランザクションやファイアウォールなどのサービスをサポートするために使用します。

このインタセプタに加えて，POAごとに，すべてのIORを制御するIORテンプレートを変更することもできます。詳細については，「11.3　IORテンプレート」を参照してください。IORの操作がリポジトリや生成するリファレンスのOIDに関連がない場合は，このIORテンプレートによる方法を使用するときがあります。

IORを根本的に変更することはお勧めしません。

＜この節の構成＞

11.17.1　import文

11.17.2　IORCreationInterceptorのメソッド

11.17.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。また，「import com.inprise.vbroker.PortableServerExt.*;」と記述してください。

11.17.2　IORCreationInterceptorのメソッド

public void create(
org.omg.PortableServer.POA poa,
com.inprise.vbroker.IOP.IORValueHolder ior)
このメソッドは，POAがオブジェクトリファレンスを生成する必要がある場合にいつでも呼び出せます。このインタセプタは，プロファイルやコンポーネントを追加したり，既存のプロファイルやコンポーネントに変更を加えることによって，IORValueを修正できます。

poa
オブジェクトリファレンスの生成対象のPOA

ior
IORのプロファイルやコンポーネントを変更できるIORのHolder

11.18　IORCreationInterceptorManager

public interface PortableServerExt.IORCreationInterceptorManager
   extends InterceptorManager

このインタフェースは，IORInterceptorを追加するために使用します。

＜この節の構成＞

11.18.1　import文

11.18.2　IORCreationInterceptorManagerのメソッド

11.18.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。また，「import com.inprise.vbroker.PortableServerExt.*;」と記述してください。

11.18.2　IORCreationInterceptorManagerのメソッド

public void add(
IORCreationInterceptor interceptor)
ORBがこのメソッドを呼び出して，IORInterceptorを追加します。

interceptor
追加するインタセプタ

11.19　Location

enum Location

これは，オブジェクトラッパーをクライアント側とサーバ側のどちらに登録するかを定義します。

＜この節の構成＞

11.19.1　import文

11.19.2　IDLの定義

11.19.3　Locationのメンバ

11.19.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.19.2　IDLの定義

enum Location {
    CLIENT,
    SERVER,
    BOTH
};

11.19.3　Locationのメンバ

CLIENT
オブジェクトラッパーをクライアント側に登録します。

SERVER
オブジェクトラッパーをサーバ側に登録します。

BOTH
オブジェクトラッパーをクライアント側，サーバ側の両方に登録します。

11.20　Closure

public interface Closure extends Object

Closureオブジェクトは，インタセプタ群の呼び出しシーケンスの開始時に，ORBが作成するオブジェクトです。一つのシーケンスの中で呼び出されるすべてのインタセプタは，同じClosureオブジェクトによって呼び出されます。Closureオブジェクトは，java.lang.Object型オブジェクトであるパブリックデータフィールドを一つ保持しています。このフィールドは，状態情報を保持するためにインタセプタによって設定されます。Closureオブジェクトが生成されるシーケンスは，インタセプタの型によって異なります。

コードサンプル11-1　Closureクラス

class Closure {
   java.lang.Object object;
};

11.21　ExtendedClosure

public interface ExtendedClosure extends Closure {
   public RequestInfo reqInfo;
   public InputStream payload;
}

このインタフェースはClosureから派生したインタフェースであり，読み取り専用属性に使用するRequestInfoを格納します。

IDLサンプル11-1　RequestInfo

struct RequestInfo {
   boolean response_expected;
   unsigned long request_id;
};

ServerRequestInterceptorおよびClientRequestInterceptorに渡されたClosureオブジェクトを，サブクラスExtendedClosureにキャストできます。ExtendedClosureを使用して，RequestInfoを抽出し，さらにそのRequestInfoからrequest_idとresponse_expectedを抽出できます。request_idは，リクエストに割り当てられた一意の識別子です。response_expectedフラグは，リクエストが一方向呼び出しであるかどうかを識別します。

int my_response_expected =
   ((ExtendedClosure)closure).reqInfo.response_expected;
int my_request_id = ((ExtendedClosure)closure).reqInfo.request_id;

詳細については，examples/interceptor/client_serverにある例を参照してください。

注

InputStreamを修正する場合は，ExtendedClosureのpayloadパラメタを使用してください。リクエストインタセプタのpayload属性は読み取り専用なので，InputStreamは変更できません。

このため，ExtendedClosureには読み書き可能なInputStream payloadパラメタが用意されています。payload属性の主な用途は，既存のInputStreamを新規に置き換えられるようにすることです。

examples/interceptor/encryptionの例は，ExtendedClosureのpayload属性の使用方法を示しています。この例では，暗号化されたInputStreamをインタセプタが解読するときに，解読されたメッセージを格納するための新規InputStreamを生成しなければいけません。ExtendedClosureはInputStreamのホルダの役割を果たします。payloadが新規InputStreamに割り当てられると，このInputStreamはリクエストに対応づけられたInputStreamとなります。

11.22　ChainUntypedObjectWrapperFactory

public interface ChainUntypedObjectWrapperFactory extends
   com.inprise.vbroker.interceptor.
   UntypedObjectWrapperFactory

このインタフェースは，クライアントまたはサーバのアプリケーションがUntypedObjectWrapperFactoryオブジェクトを追加または削除するために使用します。UntypedObjectWrapperFactoryオブジェクトは，クライアントアプリケーションがバインドするオブジェクトごとに，またはサーバアプリケーションが生成するオブジェクトインプリメンテーションごとにUntypedObjectWrapperを生成するために使用します。

コードサンプル11-2　ChainUntypedObjectWrapperFactory

enum Location (CLIENT,SERVER,BOTH );

abstract interface ChainUntypedObjectWrapperFactory :
   UntypedObjectWrapperFactory {
       void add(in UntypedObjectWrapperFactory owFactory,
                in Location loc);
       void remove(in UntypedObjectWrapperFactory owFactory,
                   in Location loc);
       long count(in Location loc);
};

オブジェクトラッパーの使用についての詳細は，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクトラッパーの使用」の記述を参照してください。

＜この節の構成＞

11.22.1　import文

11.22.2　ChainUntypedObjectWrapperFactoryのメソッド

11.22.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.22.2　ChainUntypedObjectWrapperFactoryのメソッド

public void add(
com.inprise.vbroker.interceptor.UntypedObjectWrapperFactory
owFactory,
com.inprise.vbroker.interceptor.Location loc)
このメソッドは，指定したアンタイプドオブジェクトラッパーファクトリを，クライアントまたはサーバのアプリケーションに追加します。

注

クライアント側では，オブジェクトをバインドする前にアンタイプドオブジェクトラッパーファクトリをインストールしておいてください。サーバ側では，インプリメンテーションオブジェクトを生成する前にアンタイプドオブジェクトラッパーファクトリをインストールしておいてください。

owfactory
追加するオブジェクトラッパーファクトリ

loc
オブジェクトラッパーの追加先

public void remove(
com.inprise.vbroker.interceptor.UntypedObjectWrapperFactory
owFactory,
com.inprise.vbroker.interceptor.Location loc)
このメソッドは，指定したアンタイプドオブジェクトラッパーファクトリをクライアントまたはサーバのアプリケーションから削除します。

注

オブジェクトラッパーファクトリをクライアントから削除しても，すでにクライアントからバインドされている同じクラスのオブジェクトには影響しません。しかし，そのあとにバインドしたオブジェクトには影響します。

オブジェクトラッパーファクトリをサーバから削除しても，生成済みのオブジェクトインプリメンテーションには影響しません。しかし，そのあとに生成したオブジェクトインプリメンテーションには影響します。

owfactory
削除するオブジェクトラッパーファクトリ

loc
オブジェクトラッパーファクトリの削除対象

long count(
com.inprise.vbroker.interceptor.Location loc)
このメソッドを呼び出して，アンタイプドオブジェクトラッパーファクトリを追加します。

loc
countが必要な場所

11.23　UntypedObjectWrapper

public interface UntypedObjectWrapper

このインタフェースは，アンタイプドオブジェクトラッパーをユーザのクライアントアプリケーションまたはサーバアプリケーションに派生させるために使用します。このインタフェースを使用して，アンタイプドオブジェクトラッパーを派生させる場合，クライアントアプリケーションがオペレーションリクエストを発行する前，またはサーバ側のオブジェクトインプリメンテーションがそのオペレーションリクエストを処理する前に呼び出されるpre_methodメソッドを定義します。また，サーバ側のオブジェクトインプリメンテーションがオペレーションリクエストを処理したあと，またはクライアントアプリケーションが応答を受信したあとに呼び出されるpost_methodメソッドも定義します。

UntypedObjectWrapperFactoryインタフェースからファクトリクラスも派生させてください。詳細については，「11.24　UntypedObjectWrapperFactory」を参照してください。UntypedObjectWrapperFactoryインタフェースは，ユーザのUntypedObjectWrapperオブジェクトを生成します。

オブジェクトラッパーの使用方法の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクトラッパーの使用」の記述を参照してください。

IDLサンプル11-2　UntypedObjectWrapper

interface UntypedObjectWrapper {
   void pre_method(
       in string operation,
       in Object target,
       in interceptor::Closure closure
   );
  void post_method(
     in string operation,
     in Object target,
     in CORBA::Environment env,
     in interceptor::Closure closure
  );
};

＜この節の構成＞

11.23.1　UntypedObjectWrapperのメソッド

11.23.1　UntypedObjectWrapperのメソッド

public void pre_method(
java.lang.String operation,
org.omg.CORBA.Object target,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，クライアント側でオペレーションリクエストが送信される前，またはサーバ側のオブジェクトインプリメンテーションがそのオペレーションリクエストを処理する前に呼び出されるメソッドです。

operation
リクエストされているオペレーションの名前

target
リクエストのターゲットオブジェクト

closure
オブジェクトラッパーメソッド間のデータ受け渡しに使用できるクロージャオブジェクト

public void post_method(
java.lang.String operation,
org.omg.CORBA.Object target,
org.omg.CORBA.Environment env,
com.inprise.vbroker.interceptor.Closure closure)
このメソッドは，サーバ側のオブジェクトインプリメンテーションがオペレーションリクエストを処理したあと，またはクライアント側のスタブが応答メッセージを処理する前に呼び出されるメソッドです。

operation
リクエストされているオペレーションの名前

target
リクエストのターゲットオブジェクト

env
オペレーションリクエストの処理中に発生した可能性のある例外を反映するときに使用されるEnvironmentオブジェクト

closure
オブジェクトラッパーメソッド間のデータ受け渡しに使用できるクロージャオブジェクト

11.24　UntypedObjectWrapperFactory

public interface UntypedObjectWrapperFactory

このインタフェースは，ユーザのアンタイプドオブジェクトラッパーファクトリを派生させるときに使用します。ChainUntypedObjectWrapperFactoryインタフェースが提供するaddメソッドを使用してユーザのアンタイプドオブジェクトラッパーファクトリを登録します。

新規オブジェクトのバインド時，またはオブジェクトインプリメンテーションの生成時に，ユーザのファクトリを使用して，クライアントアプリケーションまたはサーバアプリケーション用にユーザのアンタイプドオブジェクトラッパーのインスタンスを生成します。

IDLサンプル11-3　UntypedObjectWrapperFactory

interface UntypedObjectWrapperFactory {
   UntypedObjectWrapper create(
                               in Object obj,
                               in Location loc);
};

＜この節の構成＞

11.24.1　import文

11.24.2　UntypedObjectWrapperFactoryのメソッド

11.24.1　import文

コード内に「import com.inprise.vbroker.interceptor.*;」と記述してください。

11.24.2　UntypedObjectWrapperFactoryのメソッド

public com.inprise.vbroker.interceptor.UntypedObjectWrapper
create(
org.omg.CORBA.Object obj,
com.inprise.vbroker.interceptor.Location loc)
このメソッドは，ユーザ任意の型でUntypedObjectWrapperのインスタンスを生成するときに呼び出します。このメソッドをインプリメントすると，バインドされたオブジェクトまたはオブジェクトインプリメンテーションの型を検査し，そのオブジェクトラッパーの生成が必要かどうかを判定します。

obj
アンタイプドオブジェクトラッパーを生成中のクライアントアプリケーションがバインドしているオブジェクト。このメソッドがサーバ側で呼び出し中の場合，このパラメタは生成中のオブジェクトインプリメンテーションを表します。

loc
オブジェクトラッパーを生成する場所

12.　QoSインタフェースとクラス（Java）

この章では，Borland Enterprise Server VisiBrokerのJava言語でのQoSインタフェースとクラスについて説明します。

＜この章の構成＞

12.1　概要

12.2　PolicyManager

12.3　PolicyCurrent

12.4　Object

12.5　RebindPolicy

12.6　RebindForwardPolicy

12.7　RelativeConnectionTimeoutPolicy

12.8　Messaging.RelativeRequestTimeoutPolicy

12.9　Messaging.RelativeRoundtripTimeoutPolicy

12.10　DeferBindPolicy

12.11　ExclusiveConnectionPolicy

12.12　SyncScopePolicy

12.13　QoS例外

12.1　概要

QoS（Quality of Service）APIのBorland Enterprise Server VisiBrokerでのインプリメンテーションについて説明します。QoS APIによって，ポリシーを使用して，ユーザのクライアントアプリケーションとサーバとの間のコネクションを定義したり管理したりできます。ポリシーの作成方法については，「4.9　PortableServer.POA」を参照してください。

QoSは，VisiBroker ORBレベルのポリシー，スレッドレベルのポリシー，およびオブジェクトレベルのポリシーを管理するために，それぞれ次のクラスを提供しています。

VisiBroker ORBレベルのポリシー
VisiBroker ORBレベルのポリシーは，ローカルのPolicyManagerが取り扱います。PolicyManagerによって，ポリシーを設定したり，現在のポリシーのオーバーライドを参照できます。システムデフォルトをオーバーライドするVisiBroker ORBレベルでのポリシーです。

スレッドレベルのポリシー
スレッドレベルのポリシーは，PolicyCurrentによって設定します。PolicyCurrentは，スレッドレベルでのポリシーのオーバーライドを参照したり設定したりするための各種オペレーションを格納しています。システムデフォルトとVisiBroker ORBレベルで設定した値をオーバーライドするスレッドレベルでのポリシーです。

オブジェクトレベルのポリシー
オブジェクトレベルのポリシーは，継承元ObjectインタフェースのQoSオペレーションにアクセスすることによって適用できます。システムデフォルト，VisiBroker ORBレベル，およびスレッドレベルで設定した値をオーバーライドするオブジェクトレベルでのポリシーです。

12.2　PolicyManager

public interface org.omg.CORBA.PolicyManager extends
   org.omg.CORBA.Object,
   org.omg.CORBA.PolicyManagerOperations,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，VisiBroker ORBレベルでのポリシーオーバーライドにアクセスするために使用します。VisiBroker ORBレベルで定義されたポリシーは，任意のシステムデフォルトをオーバーライドします。マネージャスレッドに属するインスタンスには，resolve_initial_references("PolicyManager")を使用してPolicyManagerにナロウイングすることでアクセスできます。

＜この節の構成＞

12.2.1　IDLの定義

12.2.2　PolicyManagerのメソッド

12.2.1　IDLの定義

module CORBA {
   ...
   interface PolicyManager {
       PolicyList get_policy_overrides(in PolicyTypeSeq ts);
       void set_policy_overrides(in Policy[ ] policies,
           in SetOverrideType set_add)
           raises (InvalidPolicies);
   };
};

12.2.2　PolicyManagerのメソッド

Policy[ ] get_policy_overrides(
int[ ])
このメソッドは，要求した型のポリシーをすべて返します。引数に空のシーケンスを指定した場合，（つまり，長さ0の配列を指定した場合）該当するスコープのポリシーをすべて返します。指定したポリシーの型が対象PolicyManagerに設定されていない場合は，空のシーケンスを返します。

void set_policy_overrides(
Policy[ ] policies,
SetOverrideType set_add)
throws
InvalidPolicy
このメソッドは，指定したリストで現在のポリシーオーバーライドを更新します。このメソッドにポリシーとして空のシーケンスを処理モードとしてSET_OVERRIDEを指定して呼び出すと，PolicyManagerからオーバーライドをすべて削除します。このメソッドを使用してオーバーライドできるポリシーは，クライアント側でオペレーションの呼び出しに適用したポリシーだけです。それ以外のポリシーをオーバーライドしようとすると，CORBA.NO_PERMISSION例外が発生します。リクエストによって，対象PolicyManagerのオーバーライドポリシーに矛盾が生じる場合は，ポリシーの変更も追加も実行されないで，InvalidPolicies例外が発生します。ほかのPolicyManagerに設定されたポリシーとの互換性はチェックされません。
PolicyManager.set_policy_overrides( )のパラメタpoliciesに，複数のRebindPolicyを指定すると，リストの最後のRebindPolicyだけがPolicyManagerに設定されます。

policies
Policyオブジェクトのリファレンスの列

set_add
org.omg.CORBA.SetOverrideType型のパラメタ。このパラメタは，指定したポリシーを，オーバーライドがすでに登録されているPolicyManagerに追加するか（ADD_OVERRIDE），オーバーライドが登録されていないPolicyManagerに追加するか（SET_OVERRIDE）を示します。リクエストによって，指定したPolicyManagerに矛盾が生じる場合は，ポリシーの変更も追加も実行されないで，InvalidPolicies例外が発生します。

12.3　PolicyCurrent

public interface org.omg.CORBA.PolicyCurrent extends
   org.omg.CORBA.PolicyCurrentOperations,
   org.omg.CORBA.PolicyManager,
   org.omg.CORBA.Current,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，PolicyManagerとCurrentから，新しいメソッドを追加しないで派生したインタフェースです。このため，PolicyManagerインタフェースのオペレーションはすべてPolicyCurrentインタフェースでも使用できます。詳細については，「12.2　PolicyManager」を参照してください。

PolicyCurrentインタフェースを使用すると，スレッドレベルでオーバーライドされたポリシーにアクセスできます。スレッドのPolicyCurrentオブジェクトのリファレンスは，PolicyCurrentの識別子を指定したorg.omg.CORBA.ORB.resolve_initial_referencesメソッドを呼び出すことで取得できます。

＜この節の構成＞

12.3.1　IDLの定義

12.3.1　IDLの定義

interface PolicyCurrent :PolicyManager,Current {
};

12.4　Object

public interface org.omg.CORBA.Object

CORBA 2.4仕様には限られたQoSのサポートしかないため，Borland Enterprise Server VisiBrokerはorg.omg.CORBA.Objectを継承してOMG Messaging仕様に従った拡張QoSのサポートを提供しています。このため，2種類のObjectインタフェースがあることになっています。拡張機能を使用する場合は，org.omg.CORBA.Objectをcom.inprise.vbroker.CORBA.Objectにキャストしてください。OMG Messaging仕様に規定されている追加メソッドは現在のCORBA 2.4ではまだ利用できないので，追加メソッドをcom.inprise.vbroker.CORBA.Objectに追加することによって，QoSの機能を実現します。

＜この節の構成＞

12.4.1　org.omg.CORBA.Objectのメソッド

12.4.2　com.inprise.vbroker.CORBA.Objectのメソッド

12.4.1　org.omg.CORBA.Objectのメソッド

public org.omg.CORBA.Policy _get_policy(
int type)
該当するオブジェクトリファレンスの有効ポリシーを返します。このポリシーは，リクエストが発行された場合に使用されるポリシーです。このメソッドは最初に，_get_client_policyが返すPolicyTypeの有効オーバーライドを取得することによって，有効ポリシーを判定します。
次に，IORに指定されたポリシーと有効オーバーライドを比較します。有効ポリシーは，有効オーバーライドとIORに指定されたポリシーが許容する値の共通部分です。共通部分が空の場合は，INV_POLICYシステム例外が発生します。空でない場合は，値が共通部分のポリシーを有効ポリシーとして返します。IORにポリシー値の指定がない場合は，適当な値を使用してもよいことを意味します。オブジェクトリファレンスに対して_get_policyメソッドを呼び出す前に，_non_existentメソッドまたは_validate_connectionメソッドを呼び出すと，返される有効ポリシーの正確さが保証されます。
_get_policyを，オブジェクトリファレンスをバインドする前に呼び出すと，インプリメンテーション依存の有効ポリシーが返されます。この状況では，仕様に従って生成したインプリメンテーションは次のどれかの動作を実行する可能性があります。

CORBA.BAD_INV_ORDER例外が発生します。

バインドごとに変更される可能性のあるPolicyTypeの値を返します。

バインドを試みて有効ポリシーを返します。

RebindPolicyにTRANSPARENT，VB_TRANSPARENT，またはVB_NOTIFY_REBINDが設定されている場合は，透過的なリバインドによって，有効ポリシーは呼び出しごとに変わる可能性があります。

org.omg.CORBA.Object _set_policy_override(
const Policy[ ] _policies,
SetOverrideType _set_add)
throws
org.omg.CORBA.InvalidPolicy
このメソッドは，指定したオブジェクトレベルでのポリシーオーバーライドのリストで新規オブジェクトリファレンスを返します。さらに，オブジェクト，スレッド，またはVisiBroker ORBのカレントのポリシーを，指定したポリシーオーバーライドのリストで更新します。

12.4.2　com.inprise.vbroker.CORBA.Objectのメソッド

public org.omg.CORBA.Policy _get_client_policy(
int type)
_get_client_policyメソッドは，サーバ側ポリシーとの共通部分を考慮しないで，オブジェクトリファレンスの有効オーバーライドポリシーを返します。有効オーバーライドは，まず，指定したPolicyTypeのオーバーライドをオブジェクトのスコープでチェックし，次にカレントスコープでチェックし，最後にVisiBroker ORBのスコープでチェックして取得します。指定したPolicyTypeにオーバーライドが登録されていなければ，そのPolicyType固有のシステム依存デフォルト値を使用します。デフォルトのポリシー値は指定されないので，ポータブルなアプリケーションは，必要な「デフォルト」をVisiBroker ORBのスコープで設定することを求められています。

org.omg.CORBA.Policy[ ] _get_policy_overrides(
int[ ] types)
_get_policy_overridesメソッドは，オブジェクトレベルで指定したポリシー型のポリシーオーバーライドのリストを返します。引数に空のシーケンスを指定した場合，（つまり，長さ0の配列を指定した場合）オブジェクトレベルのオーバーライドをすべて返します。オブジェクトレベルでPolicyTypesが一つもオーバーライドされていない場合は，空のシーケンスを返します。

boolean _validate_connection(
org.omg.CORBA.PolicyListHolder inconsistent_policies)
_validate_connectionメソッドは，該当するオブジェクトのカレントの有効ポリシーで呼び出しができるかどうかをBoolean値で返します。呼び出しができる場合はtrueを返します。オブジェクトリファレンスがバインド済みでない場合，このメソッドはオペレーションの一環としてバインディングを実行します。バインド済みの場合でも，カレントのポリシーオーバーライドが変更されていたり，何らかの理由でバインディングが無効になっている場合は，RebindPolicyオーバーライドの設定に関係なくリバインドされます。
カレントの有効RebindPolicyが暗黙的なリバインドを許可していない場合，そのようなリバインドを強制的にできるのは_validate_connectionだけです。バインドやリバインドの実行を試みると，VisiBroker ORBによってGIOPのLocateRequests処理が実行されます。
カレントの有効ポリシーで呼び出すとINV_POLICYシステム例外が発生する場合，このメソッドはfalseを返します。カレントの有効ポリシーに互換性がない場合，outパラメタ「inconsistent_policies」に非互換性を生じさせたポリシーを格納します。このパラメタに返されたポリシーのリストはすべての原因を網羅しているわけではありません。ポリシーのオーバーライドに関係しない原因によってバインディングが失敗した場合は，その原因に応じたシステム例外が発生します。

12.5　RebindPolicy

public interface org.omg.Messaging.RebindPolicy extends
   org.omg.Messaging.RebindPolicyOperations,
   org.omg.CORBA.Policy,
   org.omg.CORBA.portable.IDLEntity

VisiBrokerでのRebindPolicyのインプリメンテーションは，CORBA 2.4仕様に完全に従ったインプリメンテーションです。さらに，VisiBrokerではオブジェクト障害後osagentを使用したほかのオブジェクトの呼び出しをサポートするための拡張をしています。

RebindPolicyは，クローズしたコネクション，GIOPのロケーションフォワードメッセージ，およびオブジェクト障害をクライアント側のVisiBroker ORBがどのように処理するかを決定します。VisiBroker ORBはorg.omg.CORBA.Objectインスタンスにある有効ポリシーを参照して，オブジェクト障害後osagentを使用したほかのオブジェクトの呼び出し，リバインド，および再接続を処理します。

VisiBroker ORBが対象サーバに正常にバインドされたあとで，VisiBroker ORBが透過的にリバインドするかどうかが，OMGが定義したポリシーの値によって決定されます。また，VisiBroker ORBがターゲットのオブジェクトにバインドされたあとで，VisiBroker ORBが透過的にオブジェクト障害後osagentを使用したほかのオブジェクトの呼び出しをするかどうかが，継承されたポリシーの値によって決定されます。

注

RebindPolicyが実行されるのは，オブジェクトに正常にバインドされたあとだけです。GIOPに従ったプロトコルの場合，オブジェクトリファレンスはLocateReplyメッセージが返されたあとでバインドされるとみなされます。

RebindPolicyの値によって切断，オブジェクトフォワードリクエスト，またはオブジェクト障害の対処方法が決定されます。

RebindPolicyの値には，仕様にない値を指定しないでください。仕様にない値を引数にして，ORB.create_policy( )を呼ぶと，INV_POLICY例外が発生します。

＜この節の構成＞

12.5.1　IDLの定義

12.5.2　ポリシーの値

12.5.1　IDLの定義

#pragma prefix "omg.org"

module Messaging {
   typedef short RebindMode;
   const CORBA::PolicyType REBIND_POLICY_TYPE =23;
   interface RebindPolicy::CORBA::Policy {
       readonly attribute RebindMode rebind_mode;
   };
};

12.5.2　ポリシーの値

RebindPolicyとして設定できるOMGのポリシー値について，次の表に示します。

表12-1　OMGのポリシー値（Java）

ポリシー値 | 説明
TRANSPARENT | このポリシーは，リモートリクエスト実行時に，オブジェクト障害後osagentを使用してほかのオブジェクトを呼び出すことと必要な再接続処理をVisiBroker ORBが暗黙的に実行することを許可します。これは，最も制限を加えない値です。
NO_REBIND | このポリシーは，リモートリクエスト実行時に，クローズしたコネクションの再開をVisiBroker ORBが暗黙的に実行することを許可します。ただし，クライアント側で有効になっているQoSポリシーに変更を加えるような，透過的な呼び出し（オブジェクト障害後osagentを使用してほかのオブジェクト呼び出すこと）は許可しません。
NO_RECONNECT | このポリシーは，オブジェクト障害後osagentを使用してほかのオブジェクトを呼び出すことと，クローズしたコネクションの再開をVisiBroker ORBが暗黙的に実行することを禁止します。これは，最も制限を加える値です。

注

次の条件がすべて重なる場合，サーバへの呼び出しをするとMARSHAL例外またはDATA_CONVERSION例外が発生します。

複数のスレッドで同じオブジェクトリファレンスを使用する。

QoSのRebindPolicyにNO_RECONNECT以外を指定する。

サーバが再起動，またはサーバへの呼び出しでタイムアウトが発生することによってコネクションが切断され，透過的な再接続処理が行われる。

次のデータ型を使用する。
char
java.lang.String
java.lang.Object

RebindPolicyに設定できるVisiBroker固有のポリシー値について，次の表に示します。

表12-2　VisiBroker固有のポリシー値（Java）

ポリシー値
説明

com.inprise.vbroker.QoSExt.VB_TRANSPARENT
これは，TRANSPARENTのオブジェクト障害後osagentを使用したほかのオブジェクトの呼び出しをする動作を継承したポリシーです。これはデフォルトポリシーです。
サーバダウンが原因でリモート呼び出しが失敗するときにこのポリシーを設定すると，VisiBroker ORBはosagentを使用してほかのサーバへの再接続を試みます。リバインドに成功すると，クライアントのVisiBroker ORBは通信障害をマスクし，呼び出し元のスレッドに例外を返しません。

com.inprise.vbroker.QoSExt.VB_NOTIFY_REBIND
VB_NOTIFY_REBINDはVB_TRANSPARENTと同様の動作をしますが，通信障害を検知した場合に例外を発生します。もう一度呼び出しをすると，このポリシーは，ほかのオブジェクトへの透過的な再接続を試みます。

com.inprise.vbroker.QoSExt.VB_NO_REBIND
VB_NO_REBINDは，オブジェクト障害後，osagentを使用してほかのオブジェクトを呼び出すことを有効にしません。また，オブジェクトの転送も許可しません。クライアントVisiBroker ORBが，同じサーバに対してクローズしたコネクションを再開することだけを許可します。

注

ユーザのクライアントの有効ポリシーがVB_TRANSPARENTであり，かつ状態データを保存しているサーバと連携している場合，VB_TRANSPARENTはそのクライアントを新規サーバに接続することがあります。この場合，クライアントはサーバが変更されたことを認識しないで，元のサーバに保存されていた状態データは失われます。

クライアントでRebindPolicyにNO_RECONNECTまたはVB_NO_REBINDを設定した場合，かつ，初回リクエストでオブジェクト転送が発生した場合，オブジェクト転送を許可します。

12.6　RebindForwardPolicy

public interface com.inprise.vbroker.QoSExt.RebindForwardPolicy
   extends com.inprise.vbroker.QoSExt.RebindForwardPolicyOperations,
   org.omg.CORBA.Policy,
   org.omg.CORBA.portable.IDLEntity

RebindForwardPolicyは，LOCATION_FORWARD時に接続が失敗した場合に，クライアントのVisiBroker ORBがリバインドを実行するかどうかを決定します。また，クライアントが新規オブジェクトにフォワードされたとき，新規フォワード先オブジェクトへの接続を試みます。接続に失敗した場合，VisiBroker ORBは透過的に元のオブジェクト（フォワード元）に接続し直します。この再接続は，次に示す場合に実行されます。

この時点でのフォワード数の合計が，当該ポリシーに指定したforward_countの値を超えていない場合

同じフォワード先への接続を試みた直後ではない場合

vbroker.orb.rebindForwardプロパティは，VisiBroker ORBレベルでforward_countの値を設定します。forward_countの値は，QoSポリシーと同様，VisiBroker ORBレベル，スレッドレベル，またはオブジェクトレベルでオーバーライドできます。

デフォルト値の0は，制限を設定しないことを指定します。

＜この節の構成＞

12.6.1　IDLの定義

12.6.1　IDLの定義

#pragma prefix "inprise.org"

module QoSExt{
   typedef short ForwardCount;
   const CORBA::PolicyType REBIND_FORWARD_POLICY_TYPE
                                              = 0x56495314
   interface RebindForwardPolicy::CORBA::Policy {
       readonly attribute ForwardCount forward_count;
   };
};

12.7　RelativeConnectionTimeoutPolicy

public interface com.inprise.vbroker.QoSExt.
   RelativeConnectionTimeoutPolicy extends
   com.inprise.vbroker.QoSExt.RelativeConnectionTimeoutPolicyOperations,
   org.omg.CORBA.Policy,
   org.omg.CORBA.portable.IDLEntity

RelativeConnectionTimeoutPolicyは，有効なエンドポイントを使用してオブジェクトと接続しようとしたときに，どれだけの時間，接続に成功しなければ処理をタイムアウトするかを表します。ファイアウォールに保護されたオブジェクトで，オブジェクトへの接続手段がHTTPトンネリング以外にない場合，タイムアウトしやすくなります。

注

このポリシーはプロセス内通信には適用されません。

insert_ulonglong型のポリシーは，100ナノ秒単位でタイムアウトを指定します。タイムアウトは，VisiBroker ORBが接続を試みるエンドポイントのそれぞれに適用されます。したがって，複数の接続リクエストが発行された場合，経過時間は，設定したタイムアウトの倍数となります。その精度もJava VMのインプリメンテーションによって制限されます。

＜この節の構成＞

12.7.1　IDLの定義

12.7.1　IDLの定義

#pragma prefix "inprise.com"

module QoSExt{
   const CORBA::PolicyType RELATIVE_CONN_TIMEOUT_POLICY_TYPE
                                                 = 0x56495304
   interface RelativeConnectionTimeoutPolicy : CORBA::Policy {
       readonly attribute TimeBase::TimeT relative_expiry:
   };
};

12.8　Messaging.RelativeRequestTimeoutPolicy

public interface org.omg.Messaging.RelativeRequestTimeoutPolicy
   extends org.omg.Messaging.RelativeRequestTimeoutPolicyOperations,
   org.omg.CORBA.Policy,
   org.omg.CORBA.portable.IDLEntity

RelativeRequestTimeoutPolicyは，リクエストが渡されるときのタイムアウトを指定します。指定した時間が経過すると，リクエストは取り消されます。このポリシーは，同期呼び出しと非同期呼び出しの両方に適用されます。指定したタイムアウト以内にリクエストが完了するとみなされるため，タイムアウトによって応答が破棄されることはありません。タイムアウトの値は100ナノ秒単位で指定します。

＜この節の構成＞

12.8.1　IDLの定義

12.8.1　IDLの定義

#pragma prefix "omg.org"

module Messaging {
   const CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE = 31;
   interface RelativeRequestTimeoutPolicy : CORBA::Policy {
       readonly attribute TimeBase::TimeT relative_expiry;
   };
};

12.9　Messaging.RelativeRoundtripTimeoutPolicy

public interface org.omg.Messaging.RelativeRoundtripTimeoutPolicy
   extends org.omg.Messaging.RelativeRoundtripTimeoutPolicyOperations,
   org.omg.CORBA.portable.IDLEntity

RelativeRoundtripTimeoutPolicyは，リクエストまたはその応答が渡されるときのタイムアウトを指定します。指定した時間が経過しても応答が渡されない場合，リクエストは取り消されます。また，リクエストがすでに渡されて応答が返ってきた場合，応答はタイムアウトに指定した時間が経過したときに破棄されます。このポリシーは，同期呼び出しと非同期呼び出しの両方に適用されます。指定したタイムアウト以内にリクエストが完了するとみなされるため，タイムアウトによって応答が破棄されることはありません。タイムアウトの値は100ナノ秒単位で指定します。

＜この節の構成＞

12.9.1　IDLの定義

12.9.1　IDLの定義

#pragma prefix "omg.org"

module Messaging {
   const CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32;
   interface RelativeRoundtripTimeoutPolicy : CORBA::Policy {
       readonly attribute TimeBase::TimeT relative_expiry;
   }
};

12.10　DeferBindPolicy

public interface com.inprise.vbroker.QoSExt.DeferBindPolicy extends
   com.inprise.vbroker.QoSExt.DeferBindPolicyOperations,
   org.omg.CORBA.Policy,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，リモートオブジェクトが最初に生成されたときにVisiBroker ORBがすぐにコンタクトをするのか，それとも呼び出しがあるまでコンタクトを延期するのかを決定します。デフォルトでは，VisiBroker ORBはbind()を発行したときに（リモート）オブジェクトに接続します。DeferBindPolicyにTRUEが設定されている場合は，VisiBroker ORBは呼び出しがあるまでそのオブジェクトにコンタクトしません。

クライアントオブジェクトを生成し，DeferBindPolicyをTRUEに設定すると，サーバの起動を呼び出しがあるまで延期できます。このオプションは，生成されたHelperクラスのBindメソッドのオプションとして以前からあったものです。

＜この節の構成＞

12.10.1　IDLの定義

12.10.1　IDLの定義

#pragma prefix "inprise.com"

module QoSExt{
   const CORBA::PolicyType DEFER_BIND_POLICY_TYPE =
                                         0x56495305
   interface DeferBindPolicy: CORBA::Policy {
       readonly attribute boolean value:
   }
};

12.11　ExclusiveConnectionPolicy

public interface com.inprise.vbroker.QoSExt.
   ExclusiveConnectionPolicy extends
   com.inprise.vbroker.QoSExt.ExclusiveConnectionPolicyOperations,
   org.omg.CORBA.Policy, org.omg.CORBA.portable.IDLEntity

ExclusiveConnectionPolicyは，指定したサーバオブジェクトとの排他接続（共有でない接続）を確立するための，VisiBroker固有のポリシーです。このポリシーは，trueまたはfalseのブール値を持ちます。trueが設定された場合は，サーバオブジェクトへの排他接続をオープンします。falseが設定された場合で既存のコネクションを再使用できるときは，既存のコネクションを再使用します。既存のコネクションを再使用できないときは，新しいコネクションをオープンします。デフォルトはfalseです。

このポリシーにtrueを設定した場合は，「vbroker.ce.iiop.ccm.connectionMax」が有効にならないため，このプロパティに指定した値以上のコネクションが使用される可能性があります。

このポリシーは，VisiBroker 3.xのObject._clone()と同じ動作をします。

このポリシーが有効になるのは次のような場合です。

_bind()前にORBまたはPolicyCurrentに対してPolicyを設定している場合

string_to_objectで作成したObjectを呼び出す前に，ORBまたはPolicyCurrentに対してPolicyを設定している場合

string_to_objectや_bindで作成したObjectに対してPolicyを設定し，Policyを設定されたObjectに対してリクエストを行う場合

＜この節の構成＞

12.11.1　IDLの定義

12.11.1　IDLの定義

module QoSExt {
 const CORBA::PolicyType EXCLUSIVE_CONNECTION_POLICY_TYPE = 0x56495320;
 interface ExclusiveConnectionPolicy :CORBA::Policy {
   /** Returns the current setting of */
   /** the ExclusiveConnectionPolicy  */
   readonly attribute boolean value;
 };
};

12.12　SyncScopePolicy

public interface org.omg.Messaging.SyncScopePolicy extends
   org.omg.Messaging.SyncScopePolicyOperations,
   org.omg.CORBA.Policy,
   org.omg.CORBA.portable.IDLEntity

このインタフェースは，CORBA::Policyから派生したローカルオブジェクトです。このインタフェースは，一方向オペレーションに適用され，オペレーション要求の対象への同期のスコープを示します。非一方向オペレーションが呼び出された場合は無視されます。このポリシーは，DIIがINV_NO_RESPONSEのフラグで使用されているときも適用されます。それは，インタフェース定義を照会してオペレーションが一方向かどうかを調べるためのDIIのインプリメンテーションが不要なためです。このポリシーのデフォルトはSYNC_WITH_TRANSPORTです。各アプリケーションは，SyncScopePolicyを明示的に設定して，VisiBroker ORBインプリメンテーション間のポータビリティを保障する必要があります。SyncScopePolicyのインスタンスが作成されると，Messaging::SyncScope型の値がCORBA::ORB::create_policyに渡されます。このポリシーは，クライアント側のオーバーライドとしてだけ適用できます。

＜この節の構成＞

12.12.1　IDLの定義

12.12.2　SyncScopeポリシーの値

12.12.1　IDLの定義

module Messaging {
   interface SyncScopePolicy :CORBA::Policy {
       readonly attribute SyncScope synchronization;
   };
};

12.12.2　SyncScopeポリシーの値

SyncScopeポリシーの値と動作を次の表に示します。

表12-3　SyncScopeのポリシー値（Java）

ポリシー値
説明

SYNC_NONE
VisiBroker ORBは，リクエストメッセージをトランスポートプロトコルに渡す前に（例えば，メソッド呼び出しから），クライアントに制御を返します。クライアントは，動作を抑止しないことが保障されます。サーバから応答はないため，このレベルの同期ではロケーションフォワードは実行されません。
IDLにoneway宣言したオペレーションを，QoSのSyncScopeポリシーにSYNC_NONEを設定して実行した場合，send_oneway( )を呼び出した延長で送信するリクエスト電文がTCPの送信バッファに書き込めずプロセス内で滞留すると，オペレーションがブロッキングされます。回避策として，QoSのRelativeRequestTimeoutポリシーに有限値を設定してください。送信タイムアウト時間経過後に，onewayリクエストにてTIMEOUTを検知し終了させることができます。

SYNC_WITH_TRANSPORT
VisiBroker ORBは，リクエストメッセージをトランスポートプロトコルに渡したあとに，クライアントに制御を返します。サーバから応答はないため，このレベルの同期ではロケーションフォワードは実行されません。

SYNC_WITH_SERVER
サーバ側VisiBroker ORBは，対象インプリメンテーションを呼び出す前に応答を送信します。NO_EXCEPTIONの応答が送信された場合，必要なロケーションフォワードがすでに発生しています。この応答受信時に，クライアント側VisiBroker ORBは，制御をクライアントアプリケーションに返します。クライアントは，ロケーションフォワードがすべて完了するまで動作を抑止します。POAを使用しているサーバの場合，応答は，ServantManagerが呼び出されてから対象サーバントにリクエストが渡されるまでの間に送信されます。

SYNC_WITH_TARGET
CORBA 2.2の，同期型非一方向オペレーションと同等です。サーバ側VisiBroker ORBは，オペレーション呼び出し先でオペレーションが完了したあとに，応答メッセージの送信だけを実行します。LOCATION_FORWARDの応答は，オペレーション呼び出し前に送信済みです。SYSTEM_EXCEPTIONの応答は，例外の構文に従った任意の時間に送信できる状態となります。一方向と定義されている場合でも，実際は，オペレーションは同期オペレーションと同様に動作します。この形式の同期では，対象オペレーションがリクエストを解釈し，そのリクエストに従って実行したことをクライアントが認識していることが保障されます。CORBA 2.2と同様，この最高レベルの同期では，OTSだけを使用できます。これより低いレベルの同期で呼び出されたオペレーションでは，対象はクライアントのカレントトランザクションに入れません。

12.13　QoS例外

QoSで発生する例外について，次の表に示します。

表12-4　QoSで発生する例外（Java）

例外 | 説明
org.omg.CORBA.INV_POLICY | ポリシーオーバーライド間に互換性がない場合に発生します。
org.omg.CORBA.REBIND | RebindPolicyにNO_REBIND，NO_RECONNECT，またはVB_NOTIFY_REBINDを設定し，バインドされたオブジェクトリファレンスの呼び出しがオブジェクトフォワードメッセージまたはロケーションフォワードメッセージとなった場合に発生します。
org.omg.CORBA.PolicyError | 指定したポリシーがサポートされていない場合に発生します。

13.　IOPおよびIIOPのインタフェースとクラス（Java）

この章では，General Inter-ORB Protocolの主なインタフェース，およびCORBA仕様で定義されたそのほかの構造体の，Borland Enterprise Server VisiBrokerでのインプリメンテーションについて，Java言語でのインタフェースを説明します。

＜この章の構成＞

13.1　IIOP.ProfileBody

13.2　IOP.IORValue

13.3　IOP.ServiceContext

13.4　IOP.TaggedProfile

13.1　IIOP.ProfileBody

public final class com.inprise.vbroker.IIOP.ProfileBody extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，オブジェクトがサポートするプロトコルについての情報を含んでいます。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

13.1.1　IDLの定義

13.1.2　IIOP.ProfileBodyの変数

13.1.3　IIOP.ProfileBodyのコンストラクタ

13.1.1　IDLの定義

struct ProfileBody {
   ::GIOP::Version iiop_version;
   string host;
   unsigned short port;
   ::CORBA::OctetSequence object_key;
   sequence<::IOP::TaggedComponent>components;
};

13.1.2　IIOP.ProfileBodyの変数

public com.inprise.vbroker.GIOP.Version iiop_version
IIOPがサポートするバージョンを表します。

public java.lang.String host
オブジェクトがインプリメントされるホスト名を表します。

public short port
オブジェクトへのコネクションを確立するために使用するポート番号を表します。

public byte[ ] object_key
オブジェクトリファレンスを一意に識別するために使用し，オブジェクトをインプリメントするサーバントを見つけるための情報を格納します。
オブジェクトキーはベンダ固有の形式で格納され，IORが生成されたときに生成されます。

public com.inprise.vbroker.IOP.TaggedComponent[ ] components
0個以上のTaggedComponentオブジェクトのシーケンスを表します。このプロファイルが記述するオブジェクトの呼び出しに使用できる追加情報を格納するために使用します。

13.1.3　IIOP.ProfileBodyのコンストラクタ

public ProfileBody( )
空のProfileBodyを生成します。

public ProfileBody(
com.inprise.vbroker.GIOP.Version iiop_version,
java.lang.String host,short port,byte[ ] object_key,
com.inprise.vbroker.IOP.TaggedComponent[ ] components)
指定したIIOPバージョン，ホスト名，ポート番号，オブジェクトキー，およびコンポーネントで初期化したProfileBodyを生成します。

iiop_version
サポートするIIOPのバージョン

host
オブジェクトがインプリメントされるホスト名

port
オブジェクトのコネクション確立時に使用するポート番号

object_key
オブジェクトのキー

components
0個以上のTaggedComponentオブジェクトのシーケンス。このプロファイルが記述するオブジェクトの呼び出しに使用できる追加情報を格納するために使用します。

13.2　IOP.IORValue

public abstract class com.inprise.vbroker.IOP.IORValue extends
   java.lang.Object implements org.omg.CORBA.portable.StreamableValue

このクラスは，インターオペラブルオブジェクトリファレンスを表し，オブジェクトリファレンスについての重要な情報を提供するために使います。クライアントアプリケーションはORB::object_to_stringメソッドを呼び出してIORを生成できます。ORB::object_to_stringメソッドについては，「4.5　ORB」を参照してください。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

13.2.1　IDLの定義

13.2.2　IOP.IORValueの変数

13.2.3　IOP.IORValueのメソッド

13.2.1　IDLの定義

valuetype IORValue {
   public string type_id;
   public ProfileValueSeq profiles;
   IOR toIOR( );
   IORValue copy( );
   boolean matchesTemplate (in IORValue iorv);
};

13.2.2　IOP.IORValueの変数

public java.lang.String type_id
このIORによって表されるオブジェクトリファレンスの型を記述します。

public com.inprise.vbroker.IOP.ProfileValue[ ] profiles
一つ以上のTaggedProfileオブジェクトのシーケンスを表します。そのオブジェクトには，サポートしているプロトコルについての情報が含まれています。

13.2.3　IOP.IORValueのメソッド

public com.inprise.vbroker.IOP.IOR toIOR( )
IORに変換します。

public com.inprise.vbroker.IOP.IORValue copy( )
IORValueの複製を作成します。

public boolean matchesTemplate(
IORValue iorv)
IORValueがテンプレートIORValueと一致しているか調べます。

13.3　IOP.ServiceContext

public final class com.inprise.vbroker.IOP.ServiceContext extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，リクエストまたは応答を渡すときに付加するサーバ固有のコンテキスト情報を表します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

13.3.1　IDLの定義

13.3.2　IOP.ServiceContextの変数

13.3.3　IOP.ServiceContextのコンストラクタ

13.3.1　IDLの定義

struct ServiceContext {
   ::IOP::ServiceID context_id;
   ::CORBA::OctetSequence context_data;
};

13.3.2　IOP.ServiceContextの変数

public int Context_id
特定のサービスとデータ形式を識別します。

public byte[ ] context_data
context_idで識別されるサービスに対応するコンテキストデータを表します。このコンテキストデータはサービス固有の形式でエンコードされ，オクテットのシーケンスとしてカプセル化されます。

13.3.3　IOP.ServiceContextのコンストラクタ

public ServiceContext( )
空のServiceContextを生成します。

public ServiceContext(
int context_id, byte[ ] context_data)
指定した識別子とデータで初期化したServiceContextを生成します。

context_id
特定のサービスとデータ形式を識別します。

context_data
オクテットのシーケンスとしてカプセル化したサービス固有のデータを示します。

13.4　IOP.TaggedProfile

public final class com.inprise.vbroker.IOP.TaggedProfile extends
   java.lang.Object implements org.omg.CORBA.portable.IDLEntity

このクラスは，サポートするプロトコルと，そのプロトコルがオブジェクトを識別するために必要とするカプセル化された基本情報を表します。

このクラスには，HelperクラスとHolderクラスもあります。これらのクラスとそのメソッドの詳細については，「3.　生成されるインタフェースとクラス（Java）」を参照してください。

＜この節の構成＞

13.4.1　IDLの定義

13.4.2　IOP.TaggedProfileの変数

13.4.3　IOP.TaggedProfileのコンストラクタ

13.4.1　IDLの定義

struct TaggedProfile {
   ::IOP::ProfileId tag;
   sequence <octet> profile_data;
};

13.4.2　IOP.TaggedProfileの変数

public int tag
プロファイルデータの内容を識別する，次の値のどれかを指定します。

TAG_INTERNET_IOP
標準IIOPプロトコルであることを示します。

TAG_MULTIPLE_COMPONENTS
プロファイルデータが，プロトコルで利用できるORBサービスの一覧を含んでいることを示します。

TAG_VB_LOCATOR
IORが，osagentが実IORを受信するまで使用されるinterimの擬似オブジェクトであることを示します。

TAG_VSGN_LIOP
プロトコルが，ローカルIPC機能をカバーするIOPであることを示します。

public byte[ ] profile_data
オブジェクトを識別するために必要なプロトコル情報をすべてカプセル化します。

13.4.3　IOP.TaggedProfileのコンストラクタ

public TaggedProfile( )
空のTaggedProfileを生成します。

public TaggedProfile(
int tag, byte[ ] profile_data)
指定したタグとデータで初期化したTaggedProfileを生成します。

tag
プロファイルデータの内容を識別する次の値のどれかを指定します。
TAG_INTERNET_IOP
TAG_MULTIPLE_COMPONENTS
TAG_VB_LOCATOR
TAG_VSGN_LIOP

profile_data
IORに対するオペレーションを呼び出すために必要なプロトコル情報

14.　RMIインタフェースとクラス（Java）

この章では，Java言語でRMI-IIOPをサポートするために使用するインタフェースとクラスについて説明します。Borland Enterprise Server VisiBrokerは現在，VisiBroker 4.xのRMI-IIOPのサーバ側でのプログラミングモデルをサポートしていません。サーバ側の各種APIをここで説明してはいますが，それらを使用するとOBJECT_NOT_EXIST例外が発生する可能性があります。

＜この章の構成＞

14.1　PortableRemoteObject

14.1　PortableRemoteObject

public abstract class javax.rmi.PortableRemoteObject
   extends java.lang.Object { }

このクラスから継承してすべてのサーバインプリメンテーションを生成します。RMI-IIOPのサーバインプリメンテーションはjavax.rmi.PortableRemoteObjectから継承するか，RMI-IIOPリモートインタフェースをインプリメントしてから，exportObjectメソッドを使用してサーバインプリメンテーション自体を一つサーバオブジェクトとして登録できます。クライアントはnarrowメソッドを使用して，一般的なリモートインタフェースを特定のリモートインタフェースにナロウイングします。

＜この節の構成＞

14.1.1　PortableRemoteObjectのコンストラクタ

14.1.2　PortableRemoteObjectのメソッド

14.1.1　PortableRemoteObjectのコンストラクタ

public static void exportObject(
Remote obj)
サーバオブジェクトをリモート呼び出し受信ができる状態にします。このコンストラクタが呼び出すPortableRemoteObjectのサブクラスは，このメソッドを呼び出す必要はありません。

obj
エクスポートするサーバオブジェクト

14.1.2　PortableRemoteObjectのメソッド

protected PortableRemoteObject( )
このメソッドは，exportObject( )を呼び出すことによってオブジェクトを初期化します。

public static Remote toStub(
Remote obj)
このメソッドは，指定したサーバオブジェクトのスタブを返します。サーバは，リモート通信が受信できる状態でなければなりません。このためには，PortableRemoteObject.connect(Remote，Remote)メソッドが必要な場合があります（オブジェクトがリモートメソッド呼び出しの引数として渡されていない場合）。指定したサーバオブジェクトにスタブが見つからない場合は，java.rmi.NoSuchObjectException例外が発生します。

obj
スタブを調べたいサーバオブジェクト。PortableRemoteObjectのサブクラスであるか，PortableRemoteObject.exportObject( )を呼び出していなければなりません。

public static void unexportObject(
Remote obj)
このメソッドは，ランタイムからサーバオブジェクトの登録を解除します。登録を解除したサーバオブジェクトは，ガーベッジコレクションの対象になります。リモートオブジェクトが現在エクスポートされていない場合，java.rmi.NoSuchObjectException例外が発生します。

obj
エクスポートするオブジェクト

public static java.lang.Object narrow(
java.lang.Object narrowFrom, java.lang.Class narrowTo)
このメソッドは，該当するRMI-IIOPオブジェクトを，narrowToクラスのリモートインタフェースのスタブにナロウイングします。narrowFromをnarrowToにキャストできない場合はClassCastException例外が発生します。

narrowFrom
型にキャストするオブジェクト

narrowTo
キャストするオブジェクトの型

public static void connect(
Remote unconnected, Remote connected)
このメソッドは，リモートオブジェクトを，リモート通信が実行できる状態にします。通常，オブジェクトをリモートメソッド呼び出しの引数として送受信する場合に暗黙的にこの状態になりますが，状況によっては，明示的にこれを実行した方がよい場合があります。connectedに指定したオブジェクトが接続されていなかったり，unconnectedに指定したオブジェクトがすでに接続されていたりした場合，java.rmi.RemoteException例外が発生します。

unconnected
接続するオブジェクト

connected
接続済みのオブジェクト

15.　URLネーミングインタフェースとクラス（Java）

この章では，Borland Enterprise Server VisiBrokerのURLネーミングサービスで使用するResolverインタフェースとクラスについて説明します。

以前のバージョンではURLネーミングサービスは，Webネーミングサービスと呼ばれていました。

＜この章の構成＞

15.1　Resolver

15.1　Resolver

public interface Resolver extends Object

URLネーミングサービスを使用する場合，ResolverはORBのresolve_initial_referencesで呼び出されます。Resolver使用の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「URLネーミングの使用」の記述を参照してください。

interface Resolver {

   // Read Operations
   Object locate(in string url_s)
       raises (InvalidURL, CommFailure, ReqFailure);

   // Write Operations
   void force_register_url(in string url_s, in Object obj)
       raises (InvalidURL, CommFailure, ReqFailure);

   void register_url(in string url_s, in Object obj)
       raises (InvalidURL, CommFailure, ReqFailure,
               AlreadyExists);
};

＜この節の構成＞

15.1.1　Resolverのメソッド

15.1.1　Resolverのメソッド

Object locate(
String url_s)
Resolverに接続する必要がある場合，クライアントアプリケーションはbindメソッド呼び出し時にパラメタにURLを指定します。このとき，locate( )メソッドが，bind( )メソッドから透過的に呼び出されます。
URLが無効の場合は，InvalidURL例外が発生します。

url_s
URLの文字列

void force_register_url(
String url_s, Object obj)
このメソッドは，サーバのオブジェクトのIORをURLに対応づけて，そのオブジェクトを登録します。
force_register_urlメソッドを使用してURLとオブジェクトのIORを対応づけようとした場合，URLがすでにそのオブジェクトに対応づけられているとき，新しいURL対応が古い対応と入れ替わります。

url_s
URLの文字列

obj
URLに対応づけるオブジェクト

void register_url(
String url_s, Object obj)
このメソッドは，サーバのオブジェクトのIORをURLに対応づけて，そのオブジェクトを登録します。
register_urlメソッドを使用してURLとオブジェクトのIORを対応づけようとした場合に，URLがすでにオブジェクトに対応づけられているとき，AlreadyExists例外が発生します。

url_s
URLの文字列

obj
URLに対応づけるオブジェクト

16.　ロケーションサービスインタフェースとクラス（Java）

この章では，スマートエージェントが管理するネットワーク上にあるオブジェクトインスタンスの検索に使用できる，Java言語のロケーションサービスのエージェントとTriggerHandlerインタフェースについて説明します。ロケーションサービスの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ロケーションサービスの使用」の記述を参照してください。

＜この章の構成＞

16.1　Agent

16.2　Desc

16.3　Fail

16.4　TriggerDesc

16.5　TriggerHandler

16.1　Agent

public interface Agent extends
   com.inprise.vbroker.CORBA.Object

ロケーションサービスエージェントはスマートエージェントが管理するネットワーク上のオブジェクトインスタンスを検索できるインタフェースを提供します。Agentインタフェースのメソッドは，二つのグループに分けられます。一つは，インスタンスの情報をスマートエージェントに問い合わせます。もう一つは，トリガーの登録，および登録解除をします。

問い合わせは，インタフェースのリポジトリID，またはインタフェースのリポジトリIDと，インスタンス名の組み合わせに基づいてできます。問い合わせ結果は，オブジェクトリファレンス，またはそれよりも詳細なインスタンス記述を返せます。トリガーとは，ロケーションサービスを利用しているクライアントにインスタンスの可用性の変化を通知する通知機能です。

＜この節の構成＞

16.1.1　IDLの定義

16.1.2　Agentのメソッド

16.1.1　IDLの定義

interface Agent {
   HostnameSeq all_agent_locations( )
       raises(Fail);
   RepositoryIdSeq all_repository_ids( )
       raises(Fail);
   ObjSeq all_instances(in string repository_id)
       raises(Fail);
   ObjSeq all_replica(in string repository_id,
                      in string instance_name)
       raises(Fail);
   DescSeq all_instances_descs(in string repository_id)
       raises(Fail);
   DescSeq all_replica_descs(in string repository_id,
                             in string instance_name)
       raises(Fail);
   void reg_trigger(in TriggerDesc desc,
                    in TriggerHandler handler)
       raises(Fail);
   void unreg_trigger(in TriggerDesc desc,
                      in TriggerHandler handler)
       raises(Fail);
};

16.1.2　Agentのメソッド

public java.lang.String[ ] all_agent_locations( )
throws
com.inprise.vbroker.ObjLocation.Fail
このメソッドは，osagentが常駐しているホスト名を取得します。
このメソッドでは，次の例外が発生します。

Fail

使用できるエージェントがありません。またはosagentとの通信に失敗しました。

public org.omg.CORBA.Object[ ] all_instances(
java.lang.String repository_id)
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，指定されたリポジトリIDを満足させる，インタフェースのインスタンスのオブジェクトリファレンスを取得します。

repository_id
リポジトリIDを含む文字列

このメソッドでは，次の例外が発生します。

Fail

リポジトリIDが無効です。

public com.inprise.vbroker.ObjLocation.Desc[ ] all_instances_descs(
java.lang.String repository_id)
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，指定されたリポジトリIDをインプリメントするインタフェースのインスタンスに対する完全な記述情報を取得します。

repository_id
リポジトリIDを含む文字列

このメソッドでは，次の例外が発生します。

Fail

リポジトリIDが無効です。

public org.omg.CORBA.Object[ ] all_replica(
java.lang.String repository_id,
java.lang.String instance_name)
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，指定されたリポジトリIDとインスタンス名を満足させる，インタフェースのインスタンスのオブジェクトリファレンスを取得します。

repository_id
リポジトリIDを含む文字列

instance_name
インスタンス名を含む文字列

このメソッドでは，次の例外が発生します。

Fail

リポジトリID，またはインスタンス名が無効です。

public com.inprise.vbroker.ObjLocation.Desc[ ] all_replica_descs(
java.lang.String repository_id,
java.lang.String instance_name)
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，指定されたリポジトリIDをインプリメントし，指定したインスタンス名を持つインタフェースの類似名インスタンスに対する完全な記述情報を取得します。

repository_id
リポジトリIDを含む文字列

instance_name
インスタンス名を含む文字列

このメソッドでは，次の例外が発生します。

Fail

リポジトリID，またはインスタンス名が無効です。

public java.lang.String[ ] all_repository_ids( )
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，任意のosagentが保持しているすべてのインタフェースを検索します。
このメソッドでは次の例外が発生します。

Fail

リポジトリIDが無効です。

public void reg_trigger(
com.inprise.vbroker.ObjLocation.TriggerDesc desc,
com.inprise.vbroker.ObjLocation.TriggerHandler handler)
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，トリガーハンドラを登録します。

desc
インスタンスの記述。インスタンス記述として指定できるのは，リポジトリID，インスタンス名，およびホスト名など，インスタンス情報の組み合わせです。インスタンス情報が多いほど，具体的にインスタンスの指定ができます。

handler
登録対象のTriggerHandlerオブジェクト

このメソッドでは，次の例外が発生します。

Fail

該当するトリガーはありません。

public void unreg_trigger(
com.inprise.vbroker.ObjLocation.TriggerDesc desc,
com.inprise.vbroker.ObjLocation.TriggerHandler handler)
throws
com.inprise.inprise.vbroker.ObjLocation.Fail
このメソッドは，トリガーハンドラを登録解除します。

desc
インスタンスの記述。インスタンス記述として指定できるのは，リポジトリID，インスタンス名，およびホスト名など，インスタンス情報の組み合わせです。インスタンス情報が多いほど，具体的にインスタンスの指定ができます。

handler
登録解除対象のTriggerHandlerオブジェクト

注

トリガーは何度も呼び出されることがあります。TriggerHandlerは，トリガー記述を満たすオブジェクトがアクセスできるたびに呼び出されます。最初のインスタンスがいつアクセスできるかということを知りたい場合，エージェントのunreg_trigger( )メソッドを呼び出して，最初のイベントが見つかったあとはトリガーを登録解除してください。

このメソッドでは，次の例外が発生します。

Fail

該当するトリガーはありません。

16.2　Desc

public interface Desc

このインタフェースは，オブジェクトの特性を記述するための情報を含んでいます。ロケーションサービスのメソッドには，Desc構造体をパラメタとして必要とするものや，Desc構造体またはDesc構造体の列を返すものがあります。

＜この節の構成＞

16.2.1　IDLの定義

16.2.2　Descの変数

16.2.3　Descのコンストラクタ

16.2.4　Descのメソッド

16.2.1　IDLの定義

struct Desc {
   CORBA::Object ref;
   ::IIOP::ProfileBodyValue iiop_locator;
   string repository_id;
   string instance_name;
   boolean activable;
   string agent_hostname;
};

16.2.2　Descの変数

public boolean activable
オブジェクトがオブジェクト活性化デーモンに登録されている場合，trueとなります。オブジェクトが手動で起動され，osagentに登録されている場合，falseとなります。

public org.omg.CORBA.Object ref
定義するオブジェクトのリファレンスです。

public com.inprise.vbroker.IIOP.ProfileBodyValue iiop_locator
定義するオブジェクトのリファレンスです。

public java.lang.String repository_id
オブジェクトのリポジトリIDです。

public java.lang.String instance_name
オブジェクトのインスタンス名です。

public java.lang.String agent_hostname
このオブジェクトが登録されているスマートエージェントが動作しているホストの名前です。

16.2.3　Descのコンストラクタ

public Desc(
org.omg.CORBA.Object ref,
com.inprise.vbroker.IIOP.ProfileBodyValue iiop_locator,
java.lang.String repository_id,
java.lang.String instance_name,
boolean activable,
java.lang.String agent_hostname)
指定したパラメタで初期化したDescオブジェクトを生成します。

ref
記述するオブジェクトのリファレンス

iiop_locator
記述するオブジェクトのリファレンス

repository_id
オブジェクトのリポジトリID

instance_name
オブジェクトのインスタンス名

activable
オブジェクトがオブジェクト活性化デーモンに登録されている場合，trueとなります。オブジェクトが手動で起動され，osagentに登録されている場合，falseとなります。

agent_hostname
このオブジェクトが登録されているスマートエージェントが稼働しているホストの名前

16.2.4　Descのメソッド

public java.lang.String toString( )
このメソッドは，オブジェクトの内容を含む文字列を返します。

16.3　Fail

public interface Fail extends org.omg.CORBA.UserException

この例外は，各種エラーを示すためにAgentクラスが発生させます。データメンバ「FailReason」は，障害の性質を示します。

＜この節の構成＞

16.3.1　Fail変数

16.3.1　Fail変数

com.inprise.vbroker.ObjLocation.FailReason reason
障害の性質を示す次の値のどれかを示します。

NO_AGENT_AVAILABLE

INVALID_REPOSITORY_ID

INVALID_OBJECT_NAME

NO_SUCH_TRIGGER

AGENT_ERROR

16.4　TriggerDesc

public final interface TriggerDesc

このインタフェースは，TriggerHandlerを登録する，一つ以上のオブジェクトの特性を記述するために使用する情報を含みます。TriggerHandlerについては，「16.5　TriggerHandler」を参照してください。

できる限り広範囲にオブジェクトを監視するには，次に示すメンバをnullに設定します。多くの情報を指定するほど，対象オブジェクトを絞り込めます。

＜この節の構成＞

16.4.1　IDLの定義

16.4.2　TriggerDescの変数

16.4.3　TriggerDescのコンストラクタ

16.4.4　TriggerDescのメソッド

16.4.1　IDLの定義

struct TriggerDesc {
  string repository_id;
  string instance_name;
  string host_name;
};

16.4.2　TriggerDescの変数

public java.lang.String host_name
TriggerHandlerで監視するオブジェクトのホスト名を表します。ネットワーク上のホストをすべて対象とするには，nullを設定します。

public java.lang.String instance_name
TriggerHandlerで監視するオブジェクトのインスタンス名を表します。監視可能なインスタンス名をすべて対象とするには，nullを設定します。

public java.lang.String repository_id
このメンバは，TriggerHandlerで監視するオブジェクトのリポジトリIDを表します。監視可能なリポジトリIDをすべて対象とするには，nullを設定します。

16.4.3　TriggerDescのコンストラクタ

public TriggerDesc(java.lang.String.repository_id,
java.lang.String instance_name,
java.lang.String hostname)
指定したパラメタで初期化したDescオブジェクトを生成します。

repository_id
TriggerHandlerが監視するオブジェクトのリポジトリID。監視可能なすべてのリポジトリIDを含めるためには，nullを設定する場合があります。

instance_name
TriggerHandlerが監視するオブジェクトのインスタンス名。監視可能なすべてのインスタンス名を含めるためには，nullを設定する場合があります。

hostname
TriggerHandlerが監視するオブジェクトのあるホスト名。ネットワーク上のすべてのホストを含めるためには，nullを設定する場合があります。

16.4.4　TriggerDescのメソッド

public java.lang.String toString( )
このメソッドは，オブジェクトの内容を含む文字列を返します。

16.5　TriggerHandler

public interface TriggerHandler extends
   com.inprise.vbroker.CORBA.Object

このインタフェースは，トリガー記述を満たすオブジェクトがアクセスできるたびに呼び出されるコールバックオブジェクトです。TriggerHandlerをインプリメントするには，_TriggerHandlerImplBaseクラスを継承して，そのimpl_is_ready( )メソッドとimpl_is_down( )メソッドをインプリメントしてください。

＜この節の構成＞

16.5.1　IDLの定義

16.5.2　TriggerHandlerのメソッド

16.5.1　IDLの定義

interface TriggerHandler {
  void impl_is_ready(in Desc desc);
  void impl_is_down(in Desc desc);
};

16.5.2　TriggerHandlerのメソッド

public void impl_is_ready(
com.inprise.vbroker.ObjLocation.Desc desc)
このメソッドは，descに一致するインスタンスがアクセスできるとロケーションサービスから呼び出されます。

desc
インスタンスの記述。インスタンス記述として指定できるのは，リポジトリID，インスタンス名，およびホスト名など，インスタンス情報の組み合わせです。インスタンス情報が多いほど，具体的にインスタンスの指定ができます。

public void impl_is_down(
com.inprise.vbroker.ObjLocation.Desc desc)
このメソッドは，descに一致するインスタンスがアクセスできなくなると，ロケーションサービスから呼び出されます。

desc
インスタンスの記述。インスタンス記述として指定できるのは，リポジトリID，インスタンス名，およびホスト名など，インスタンス情報の組み合わせです。インスタンス情報が多いほど，具体的にインスタンスの指定ができます。

17.　コマンドラインオプション（Java）

この章では，Java言語を使用してプログラミングするときに，オブジェクトリクエストブローカー（ORB）およびロケーションサービスで設定するオプションについて説明します。

オブジェクトリクエストブローカー（ORB）およびロケーションサービスは，VisiBroker 3.x形式で使用できます。しかし，現在のバージョンに対応したプロパティを使用してください。VisiBroker 4.x形式で使用する場合については，「18.　Borland Enterprise Server VisiBrokerプロパティ（Java）」を参照してください。

＜この章の構成＞

17.1　ORBオプションの設定方法

17.2　ORB.init( )メソッド

17.3　ロケーションサービスオプション

17.1　ORBオプションの設定方法

ORBの初期設定オプションを設定するには，次に示す方法があります。

vbjコマンドでコマンドラインパラメタを使用する

vbjコマンドのコマンドラインパラメタを使用してJavaアプリケーションを起動する

アプレットにオプションを設定する

メソッドでプログラム的にオプションを設定する

＜この節の構成＞

17.1.1　vbjコマンドでコマンドラインパラメタを使用する

17.1.2　vbjコマンドを使用してJavaアプリケーションを起動する

17.1.3　アプレットにオプションを設定する

17.1.4　メソッドでプログラム的にオプションを設定する

17.1.1　vbjコマンドでコマンドラインパラメタを使用する

vbjコマンドを使用して，アプリケーション起動時のORBの動作をカスタマイズするコマンドラインパラメタを定義できます。コマンドラインからvbjコマンドを使用する場合は，次の例のように等号（=）を使用して値を設定します。

vbj -DORBdebug=true Server

注

javaコマンドを使用して，アプリケーション起動時のORBの動作をカスタマイズするコマンドラインプロパティを定義することもできます。vbjコマンドを使用するときは，ORBが環境変数も検証します。

17.1.2　vbjコマンドを使用してJavaアプリケーションを起動する

vbjコマンドのコマンドラインパラメタを使用して，Javaアプリケーションを起動することもできます。コマンドラインパラメタを指定するときは，ハイフン（-）のあとにDを付けないように注意してください。また，値を設定するときに等号（=）を使用しないように注意してください。次に例を示します。

vbj <Javaアプリケーション名> -ORBdebug true

注

vbjコマンドを使用してJavaアプリケーションを起動する場合は，ORB.initを呼び出してパラメタを渡してください。詳細については，「17.2　ORB.init( )メソッド」のコードサンプル17-1を参照してください。

17.1.3　アプレットにオプションを設定する

アプレットにオプションを設定する場合は，パラメタ名と値を使用します。次に例を示します。

<param name=ORBInitRef value=NameService=corbaname::TestHost:20003/>

17.1.4　メソッドでプログラム的にオプションを設定する

ORBの初期化メソッド（ORB.init( )）を使用して，プログラム的にオプションを設定できます。これらのメソッドの使用方法の詳細については，「17.2　ORB.init( )メソッド」を参照してください。

17.2　ORB.init( )メソッド

public static ORB init(String[ ] args, Properties props)

ORB.init( )メソッドは，使用するスマートエージェントのIPアドレスやポート番号などのオプションを設定するときにアプリケーションが使用します。各パラメタはアプリケーション起動時にパラメタとして渡されます。

ORB.init( )メソッドに渡されるパラメタは，アプリケーションのメインルーチンに渡されるパラメタと同じです。ORB.init( )メソッドが認識できないパラメタは無視します。

コードサンプル17-1では，ORB.init( )にスマートエージェントのポートを指定するパラメタを渡しています。

コードサンプル17-1　パラメタを指定したORB.init()の使用例

public static void main(String[ ] args) {
   ...
   java.util.Properties props =
                             new java.util.Properties( );
   props.put("ORBagentPort", "9898");
   org.omg.CORBA.ORB orb =
                     org.omg.CORBA.ORB.init(args, props);
  ...
}

＜この節の構成＞

17.2.1　ORBオプション

17.2.1　ORBオプション

次の表に，ORB.init( )メソッドのオプションの概要を示します。

表17-1　ORB.initオプション（Java）

オプション
説明

ORBagentAddr <hostname | ip_address>
クライアントが使うスマートエージェントを実行するホストのホスト名またはIPアドレスを指定します。
スマートエージェントが指定のアドレスで見つからない場合，またはこのオプションの指定がない場合，ブロードキャストメッセージでスマートエージェントを探します。

ORBagentAddrFile <file_name>
デフォルトファイルのagentaddrの代わりに使用するファイルを指定します。

ORBagentNoFailOver <false | true>
VisiBrokerアプリケーションが通信しているosagentが終了した場合，ほかのosagentとの通信を行うかどうかを指定します。
trueを指定した場合，VisiBrokerアプリケーションは先に通信を行っていたosagentにだけ，再度通信を試みます。
falseを指定した場合，VisiBrokerアプリケーションは先に通信を行っていたosagentだけでなくほかのosagentにも再度通信を試みます。
デフォルトはfalseです。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

ORBagentPort <port_number>
スマートエージェントのポート番号を指定します。このオプションは，複数のORBドメインが必要なときに便利です。このオプションを指定しないと，デフォルトのポート番号14000が使用されます。
アプリケーション内でORB.init( )メソッドの第2引数にORBagentPortまたはORBdisableLocatorのプロパティを設定した場合，その効果はありません。ORBオプションの値を有効にする場合は，コマンドライン上で-Dオプションで指定してください。

ORBalwaysProxy <false | true>
クライアントが常にゲートキーパーを使用して接続する必要があるかどうかを指定します。デフォルトはfalseです。
trueを設定した場合は，ORBgatekeeperIORオプションも設定してください。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

ORBalwaysTunnel <false | true>
クライアントが常にHTTPを使用してゲートキーパーに接続する必要があるかどうかを指定します。デフォルトはfalseです。
trueを設定した場合は，ORBgatekeeperIORオプションも設定してください。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

ORBconnectionMax <#>
可能なコネクションの最大数を指定します。
このオプションを指定しない場合，コネクション数は無制限です。

ORBconnectionMaxIdle <#>
コネクションが非アクティブな状態の最大監視時間を秒単位で指定します。最大監視時間を経過してもコネクションが非アクティブなままの場合，VisiBrokerがコネクションを終了します。
このオプションはインターネットアプリケーションで設定します。
0を設定した場合，監視しません。デフォルトは0です。
最大アイドル時間の監視は，プロパティvbroker.orb.gcTimeoutの設定値（デフォルト30秒）の範囲の誤差があります。

ORBdebug <false | true>
デバッグ機能を有効にします。

ORBDefaultInitRef
デフォルトの初期リファレンスを指定します。nameservには，ORBDefaultInitRefを使用しないでください。ORBInitRefを使用してください。

ORBdisableAgentCache <false | true>
スマートエージェントのキャッシュを有効にします。デフォルトはfalseです。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

ORBdisableGatekeeperCallbacks <false | true>
ゲートキーパーのコールバックを有効（または無効）にします。デフォルトはfalseです。
falseを設定した場合は，ゲートキーパーのコールバックが有効となります。trueを設定した場合は，ORBgatekeeperIORオプションも設定してください。

ORBdisableLocator <false | true>
スマートエージェントとゲートキーパーを無効にします。
アプリケーション内でORB.init( )メソッドの第2引数にORBagentPortまたはORBdisableLocatorのプロパティを設定した場合，その効果はありません。ORBオプションの値を有効にする場合は，コマンドライン上で-Dオプションで指定してください。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

ORBgatekeeperIOR <URL>
IORに対応するURLを指定します。

ORBgcTimeout <#>
ORBのガーベッジコレクションを実行する周期（秒）を指定します。デフォルトは30（秒）です。

ORBInitRef
初期リファレンスを指定します。

ORBmbufSize <buffer_size>
Borland Enterprise Server VisiBrokerがオペレーションリクエストを処理するときに使用する中間バッファのサイズ（バイト）を指定します。
ORBは，VisiBrokerの旧バージョンよりも複雑なバッファ管理で性能の向上を図っています。
送信バッファと受信バッファのデフォルトサイズは4096バイトです。送受信データがデフォルトサイズより大きい場合は，リクエスト／応答の実行ごとに追加バッファが割り当てられます。デフォルトサイズより大きいデータを頻繁に送信するアプリケーションを使用する場合は，このシステムプロパティでバイト数を指定してデフォルトサイズを調整すると，効率的にバッファ管理ができます。

ORBnullString <false | true>
trueを設定すると，NULL文字列のマーシャリングが有効になります。デフォルトはfalseです。

ORBwarn <#>
出力する警告メッセージのレベルを，0，1，2のどれかの値で設定します。
0：デフォルトです。警告メッセージを出力しません。
1：ユーザ作成コードからのCORBA以外の例外と，その例外のスタックトレースを出力します。
2：1に加えて，CORBAの例外と，その例外のスタックトレースを出力します。

17.3　ロケーションサービスオプション

VisiBroker 4.xでは，コマンドラインオプションのLOCdebug，LOCtimeout，およびLOCverifyをサポートしていません。これらのオプションの代わりに使用できるプロパティとデフォルトの詳細については，「18.6　ロケーションサービスプロパティ」を参照してください。

18.　Borland Enterprise Server VisiBrokerプロパティ（Java）

この章では，Java言語でプログラミングする場合に，Borland Enterprise Server VisiBrokerで設定できるプロパティについて説明します。

この章で説明しているプロパティは現在のバージョンでも使用できます。VisiBroker 3.x形式で使用する場合については，「17.　コマンドラインオプション（Java）」を参照してください。

＜この章の構成＞

18.1　プロパティの設定方法

18.2　RMI-IIOPプロパティ

18.3　osagent（スマートエージェント）プロパティ

18.4　ORBプロパティ

18.5　POAプロパティ

18.6　ロケーションサービスプロパティ

18.7　ネーミングサービスプロパティ

18.8　OADプロパティ

18.9　インタフェースリポジトリプロパティ

18.10　URLネーミングプロパティ

18.11　クライアント側コネクションプロパティ

18.12　クライアント側プロセス内コネクションプロパティ

18.13　サーバ側エンジンプロパティ

18.14　サーバ側スレッドセッションIIOP_TSプロパティ，およびIIOP_TSコネクションプロパティ

18.15　サーバ側スレッドプールIIOP_TPプロパティ，およびIIOP_TPコネクションプロパティ

18.16　双方向通信をサポートするプロパティ

18.1　プロパティの設定方法

プロパティを設定するには，次に示す方法があります。

vbjコマンドでコマンドラインパラメタを使用する

vbjコマンドのコマンドラインパラメタを使用してJavaアプリケーションを起動する

アプレットにプロパティを設定する

メソッドでプログラム的にプロパティを設定する

＜この節の構成＞

18.1.1　vbjコマンドでコマンドラインパラメタを使用する

18.1.2　vbjコマンドを使用してJavaアプリケーションを起動する

18.1.3　アプレットにプロパティを設定する

18.1.4　メソッドでプログラム的にプロパティを設定する

18.1.1　vbjコマンドでコマンドラインパラメタを使用する

vbjコマンドを使用して，アプリケーション起動時のORBの動作をカスタマイズするコマンドラインパラメタを定義できます。コマンドラインからvbjコマンドを使用する場合は，次の例のように等号（=）を使用して値を設定します。

vbj -J-Dvbroker.agent.port=14001 Server

注

javaコマンドを使用して，アプリケーション起動時のORBの動作をカスタマイズするコマンドラインプロパティを定義することもできます。vbjコマンドを使用するときは，ORBが環境変数も検証します。

18.1.2　vbjコマンドを使用してJavaアプリケーションを起動する

vbjコマンドのコマンドラインパラメタを使用して，Javaアプリケーションを起動することもできます。コマンドラインパラメタを指定するときは，ハイフン（-）のあとにDを付けないように注意してください。また，値を設定するときに等号（=）を使用しないように注意してください。次に例を示します。

vbj  <Javaアプリケーション名> -vbroker.agent.port  14001

注

vbjコマンドを使用してJavaアプリケーションを起動する場合は，ORB.initを呼び出してパラメタを渡してください。詳細については，「18.1.4　メソッドでプログラム的にプロパティを設定する」のコードサンプル18-1を参照してください。

18.1.3　アプレットにプロパティを設定する

アプレットにプロパティを設定する場合は，パラメタ名と値を使用します。次に例を示します。

<param name=vbroker.agent.port value=14001>

18.1.4　メソッドでプログラム的にプロパティを設定する

ORBの初期化メソッド（ORB.init( )）を使用して，プログラム的にプロパティを設定できます。これらのメソッドの使用例をコードサンプル18-1に示します。

コードサンプル18-1　パラメタを指定したORB.init()の使用例

public static void main(String[ ] args){
  ...
  java.util.Properties props = new java.lang.util.Properties();
  props.put("vbroker.agent.port", "14001");
  org.omg.CORBA.ORB orb =org.omg.CORBA.ORB.init(args, props);
  ...
}

18.2　RMI-IIOPプロパティ

RMI-IIOPのプロパティを次の表に示します。

表18-1　RMI-IIOPプロパティ（Java）

プロパティ
デフォルト
説明

javax.rmi.CORBA.StubClass
com.inprise.vbroker.rmi.CORBA.StubImpl
RMI-IIOPスタブすべての継承元であるStubベースクラスのインプリメンテーションの名前を指定します。

javax.rmi.CORBA.UtilClass
com.inprise.vbroker.rmi.CORBA.UtilImpl
共通オペレーションを実行するためのスタブとtieを提供するUtilityクラスのインプリメンテーションの名前を指定します。

javax.rmi.CORBA.PortableRemoteObjectClass
com.inprise.vbroker.rmi.CORBA.
PortableRemoteObjectImpl
RMI-IIOPサーバのインプリメンテーションオブジェクトがjavax.rmi.PortableRemoteObjectを継承することを指定します。
または，RMI-IIOPリモートインタフェースを単にインプリメントしてから，exportObjectメソッドを使用してそのオブジェクトをそれぞれサーバオブジェクトとして登録できることを指定します。

java.rmi.server.codebase
null
未知のクラスをサーバが見つけることのできる場所を指定します。
日本語や2バイトコード文字を含むパスを指定しないでください。指定した場合，POAのcreate_POA( )メソッドでDATA_CONVERSION例外となります。

java.rmi.server.useCodebaseOnly
false
サーバが未知のクラスを見つけられるかどうかを指定します。trueを設定すると，クライアントがリモートクラスをサーバに送信する場合であっても，サーバはリモートクラスを見つけることはできません。

18.3　osagent（スマートエージェント）プロパティ

osagent（スマートエージェント）のプロパティを次の表に示します。

表18-2　osagent（スマートエージェント）プロパティ（Java）

プロパティ
デフォルト
旧プロパティ
説明

vbroker.agent.addr
null
ORBagentAddr
osagentが動作しているホストのIPアドレスまたはホスト名を，VisiBrokerアプリケーションに指定します。デフォルトのnullに設定すると，VisiBrokerアプリケーションはOSAGENT_ADDR環境変数の値を使用します。
OSAGENT_ADDR環境変数が未設定のときは，osagentがローカルホストで動作していると仮定します。

vbroker.agent.addrFile
null
ORBagentAddrFile
osagentがIPアドレスまたはホスト名をどこで見つけられるかどうかを記述したファイルを指定します。

vbroker.agent.debug
false
ORBdebug
trueを設定すると，システムはVisiBrokerアプリケーションとosagentとの間での通信のデバッグ情報を表示します。

vbroker.agent.enableCache
true
ORBagentCache
trueを設定すると，VisiBrokerアプリケーションはIORをキャッシュできます。
不正な値を指定した場合，falseを設定したときと同じ動作をします。

vbroker.agent.enableLocator
true
ORBdisableLocator
falseを設定すると，VisiBrokerアプリケーションはosagentと通信できません。
不正な値を指定した場合，falseを設定したときと同じ動作をします。

vbroker.agent.failOver
true
ORBagentNoFailOver
VisiBrokerアプリケーションが通信しているosagentが終了した場合，ほかのosagentとの通信を行うかどうかを指定します。
trueを指定した場合，VisiBrokerアプリケーションは先に通信を行っていたosagentだけでなくほかのosagentにも再度通信を試みます。
falseを指定した場合，VisiBrokerアプリケーションは先に通信を行っていたosagentにだけ，再度通信を試みます。
不正な値を指定した場合，falseを設定したときと同じ動作をします。

vbroker.agent.port
14000
ORBagentPort
ネットワーク上のドメインを定義するポート番号を指定します。VisiBrokerアプリケーションとosagentに同一のポート番号を設定すると，それらを連携させることができます。このプロパティはOSAGENT_PORT環境変数と同じ働きをします。
注
0以外を指定する場合，有効範囲は5001～65535の範囲の整数値です。それ以外の値を指定した場合，動作の保証はできません。

18.4　ORBプロパティ

VisiBroker ORBのプロパティを次の表に示します。

表18-3　ORBプロパティ（Java）

プロパティ
デフォルト
旧プロパティ
説明

vbroker.orb.admDir
<環境変数TPDIRの設定値>/adm
該当しません。
さまざまなシステムファイルが存在する管理ディレクトリを指定します。このプロパティはVBROKER_ADM環境変数を使って設定できます。環境変数TPDIRについては，マニュアル「TPBroker　ユーザーズガイド」を参照してください。

vbroker.orb.alwaysProxy
false
ORBalwaysProxy
trueを設定すると，クライアントは常にゲートキーパーを使用してサーバに接続しなければならないことを指定します。

vbroker.orb.alwaysSecure
false
該当しません。
trueを設定すると，クライアントは常にサーバへセキュアに接続しなければならないことを指定します。

vbroker.orb.alwaysTunnel
false
ORBalwaysTunnel
trueを設定すると，クライアントは常にサーバにHTTPトンネル（IIOPのオブジェクトラッパー）を使用して接続することを指定します。

vbroker.orb.autoLocateStubs
false
該当しません。
オブジェクトリファレンスの読み込み時にスタブを検索する機能を有効にします。この機能は，渡された正式なクラス引数の一般オブジェクトやスタブではなく，オブジェクトのリポジトリIDに基づいて，read_Objectを使用して実行します。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

vbroker.orb.bidOrder
inprocess:liop:ssl:iiop:proxy:hiop:locator
該当しません。
各トランスポートの相対的な重要度を指定します。トランスポートの優先順位は，次のように割り当てられています。

inprocess

liop

ssl

iiop

proxy

hiop

locator

例えば，IORにLIOPとIIOPの両プロファイルが含まれている場合は，LIOPが優先されます。IIOPが使用されるのは，LIOPが失敗したときだけです。ただし，vbroker.orb.bidOrderとvbroker.orb.bids.criticalに同時に優先順位が設定されている場合は，vbroker.orb.bids.criticalの設定が有効となります。

vbroker.orb.bids.critical
inprocess
該当しません。
vbroker.orb.bidOrderとvbroker.orb.bids.criticalに同時に優先順位が設定されている場合は，vbroker.orb.bids.criticalの設定が有効となります。vbroker.orb.bids.criticalで複数の値が設定されている場合は，vbroker.orb.bidOrderに基づいて相対的な重要度が決まります。

vbroker.orb.defAddrMode
0（Key）
該当しません。
クライアントのVisiBroker ORBが使用するデフォルトアドレッシングモードを指定します。0を設定するとアドレッシングモードはKeyとなります。1を設定するとアドレッシングモードはProfileとなります。2を設定するとアドレッシングモードはIORとなります。

vbroker.orb.bufferCacheTimeout
6000
該当しません。
メッセージチャンクを破棄する前にキャッシュに保存しておく時間を指定します。

vbroker.orb.compliantExceptions
true
該当しません。
org.omg.CORBA.Object.non_existentメソッドの延長でサーバにアクセスできない場合，例外を返すかtrueを返すかを指定します。trueを設定した場合はTRANSIENT例外を返し，falseを設定した場合はtrueを返します。

vbroker.orb.debug
false
該当しません。
trueを設定すると，ORBはデバッグ情報を表示できるようになります。

vbroker.orb.defaultInitRef
null
ORBDefaultInitRef
デフォルトの初期リファレンスを指定します。

vbroker.orb.dynamicLibs
null
該当しません。
VisiBroker ORBが使用できるサービスの一覧を指定します。

vbroker.orb.embedCodeset
true
該当しません。
IORが作成されると，VisiBroker ORBは，codesetコンポーネントをIORに埋め込みます。これによって問題が発生する非準拠のORBもあります。offを設定すると，VisiBroker ORBはcodesetコンポーネントを埋め込みません。falseを設定すると，クライアントとサーバとの間ではネゴシエーションなしでchar型とwchar型が変換されます。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

vbroker.orb.enableVB4backcompat
false
該当しません。
VisiBroker 4.xでGIOP 1.2に準拠していない動作に対処できるようにするためのプロパティです。クライアントがVisiBroker 4.xの場合は，このフラグにtrueを設定する必要があります。これはサーバ側専用のフラグです。クライアント側で設定する必要はありません。

vbroker.orb.enableBiDir
none
該当しません。
選択的に双方向コネクションを確立します。
クライアント側で「vbroker.orb.enableBiDir=client」と定義し，サーバ側で「vbroker.orb.enableBiDir=server」と定義すると，ゲートキーパーのvbroker.orb.enableBiDirの値でコネクションの状態が決まります。このプロパティの値は，server，client，both，またはnoneです。詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「双方向通信」の記述を参照してください。

vbroker.orb.enableKeyId
true
該当しません。
falseを設定すると，クライアントリクエストのキーIDを無効にします。

vbroker.orb.enableNullString
false
ORBnullString
trueを設定すると，NULL文字列のマーシャリングが有効になります。
不正な値を指定した場合，trueを設定したときと同じ動作をします。

vbroker.orb.fragmentSize
0
該当しません。
GIOPメッセージのフラグメントサイズを指定します。チャンクサイズの整数倍である値を指定します。0を指定するとフラグメント化をしません。

vbroker.orb.initRef
null
ORBInitRef
初期リファレンスを指定します。

vbroker.orb.streamChunkSize
4096
該当しません。
GIOPメッセージのチャンクサイズを指定します。2の累乗を指定します。
設定できる値の最小値は16です。

vbroker.orb.gcTimeout
30
ORBgcTimeout
未使用の重要リソースを削除する場合のタイムアウトを秒数で指定します。

vbroker.orb.logger.appName
VBJ-Application
該当しません。
ログに記録するアプリケーション名を指定します。

vbroker.orb.logger.catalog
com.inprise.vbroker.Logging.ORBMsgs
該当しません。
ロギングが有効の場合，ORBが使用するメッセージのメッセージカタログを指定します。

vbroker.orb.logger.output
stdout
該当しません。
ログの出力先を指定します。指定できるのは標準出力またはファイル名です。

vbroker.orb.logLevel
emerg
該当しません。
ログに記録するメッセージのレベルを指定します。
デフォルトの「emerg」は，VisiBrokerシステムが正常に通信の処理ができないときに必要最小限のメッセージをログに記録することを指定します。

vbroker.orb.procId
0
該当しません。
サーバのプロセスIDを指定します。

vbroker.orb.rebindForward
0
該当しません。
クライアントが新規フォワード先オブジェクトへの接続に失敗した場合，元のオブジェクト（フォワード元）への再接続の回数を指定します。
指定できる値の上限値は，2147483647​です。

vbroker.orb.sendLocate
false
該当しません。
trueを設定すると，VisiBrokerシステムは，IIOP 1.2の対象オブジェクトを呼び出す前に強制的にロケートリクエストを送信します。

vbroker.orb.systemLibs.applet
com.inprise.vbroker.IIOP.Init,
com.inprise.vbroker.LIOP.Init,
com.inprise.vbroker.qos.Init,
com.inprise.vbroker.URLNaming.Init,
com.inprise.vbroker.HIOP.Init,
com.inprise.vbroker.firewall.Init,
com.inprise.vbroker.dynamic.Init,
com.inprise.vbroker.naming.Init
該当しません。
アプレットにロードされたシステムライブラリのリストを提供します。

vbroker.orb.systemLibs.application
com.inprise.vbroker.IIOP.Init,
com.inprise.vbroker.LIOP.Init,
com.inprise.vbroker.qos.Init,
com.inprise.vbroker.ds.Init,
com.inprise.vbroker.URLNaming.Init,
com.inprise.vbroker.dynamic.Init,
com.inprise.vbroker.ir.Init,
com.inprise.vbroker.naming.Init
該当しません。
アプリケーションにロードされたシステムライブラリのリストを提供します。

vbroker.orb.tcIndirection
true
該当しません。
タイプコードを書き込むときに間接参照を無効にすることを指定します。VisiBroker ORBをほかのベンダからインターオペレートする場合にこのプロパティが必要となることがあります。
falseを設定すると，再帰型タイプコードのマーシャリングができなくなります。

vbroker.orb.warn
0
ORBwarn
出力するメッセージの警告レベルを0，1，または2で指定します。

18.5　POAプロパティ

POAのプロパティを次の表に示します。

表18-4　POAプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.poa.logLevel | emerg | ログに記録するメッセージのレベルを指定します。デフォルトの「emerg」は，システムが使用できないときやパニック状態のときにメッセージをログに記録することを指定します。

18.6　ロケーションサービスプロパティ

ロケーションサービスのプロパティを次の表に示します。

表18-5　ロケーションサービスプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.locationservice.debug | false | trueを設定すると，ロケーションサービスはデバッグ情報を表示できるようになります。
vbroker.locationservice.verify | false | trueを設定すると，ロケーションサービスはosagentから送られたオブジェクトリファレンスで参照されるオブジェクトがあるかをチェックできるようになります。BY_INSTANCEで登録されたオブジェクトだけをチェックします。OADまたはBY_POAポリシーで登録されたオブジェクトのチェックはしません。
vbroker.locationservice.timeout | 1 | ロケーションサービスとの通信時の接続，受信，および送信のタイムアウトを指定します。

18.7　ネーミングサービスプロパティ

ネーミングサービスプロパティについては，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ネーミングサービスプロパティ」の記述を参照してください。

18.8　OADプロパティ

設定可能なOADのプロパティを次の表に示します。

表18-6　認定可能なOADプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.oad.spawnTimeOut | 20 | OADが実行形式ファイルを生成したあと，オブジェクトからコールバックが何秒間来なければNO_RESPONSE例外を出力するかを指定します。
vbroker.oad.verbose | false | OADがオペレーションの詳細情報を出力できるようにします。
vbroker.oad.readOnly | false | trueを設定すると，OADインプリメンテーションの登録，登録解除，および変更ができなくなります。
vbroker.oad.iorFile | oadj.ior | OADの文字列化IORのファイル名を指定します。
vbroker.oad.quoteSpaces | false | コマンドを引用するかどうかを指定します。
vbroker.oad.killOnUnregister | false | 生成したサーバの登録を解除した場合に，それらをkillするかどうかを指定します。
vbroker.oad.verifyRegistration | false | オブジェクトの登録を確認するかどうかを指定します。

プロパティファイルにオーバーライドできないOADプロパティを次の表に示します。なお，このプロパティは，環境変数またはコマンドラインでオーバーライドできます。

表18-7　プロパティファイルにオーバーライドできないOADプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.oad.implName | impl_rep | インプリメンテーションリポジトリのファイル名を指定します。
vbroker.oad.implPath | null | インプリメンテーションリポジトリを格納しているディレクトリを指定します。
vbroker.oad.path | null | OADのディレクトリを指定します。
vbroker.oad.systemRoot | null | ルートディレクトリを指定します。
vbroker.oad.winDir | null | Windowsディレクトリを指定します。
vbroker.oad.vbj | vbj | VisiBrokerディレクトリを指定します。

18.9　インタフェースリポジトリプロパティ

インタフェースリポジトリ（IR）のプロパティを次の表に示します。

表18-8　インタフェースリポジトリプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.ir.debug | false | trueを設定すると，IRリゾルバはデバッグ情報を表示できるようになります。
vbroker.ir.ior | null | vbroker.ir.nameプロパティにデフォルト値の「null」が設定されている場合，ORBはこのプロパティを使用してIRを捜し出します。
vbroker.ir.name | null | VisiBroker ORBがIRを探すときに使用する名前を指定します。

18.10　URLネーミングプロパティ

URLネーミングサービスのプロパティを次の表に示します。

表18-9　URLネーミングプロパティ（Java）

プロパティ
デフォルト
説明

vbroker.URLNaming.allowUserInteraction
true
trueを設定すると，URLネーミングサービスはGUIの使用を開始できるようになります。
不正な値を指定した場合，falseを設定したときと同じ動作をします。

vbroker.URLNaming.debug
false
trueを設定すると，URLネーミングサービスはデバッグ情報を表示できるようになります。

18.11　クライアント側コネクションプロパティ

クライアント側コネクションのプロパティを次の表に示します。

表18-10　クライアント側コネクションプロパティ（Java）

プロパティ
デフォルト
説明

vbroker.ce.iiop.ccm.connectionMax
0
1クライアントの合計コネクション数の上限を指定します。この値は，アクティブなコネクションの数です。デフォルトの0を指定すると，クライアントは以前のアクティブなコネクションをクローズしません。

vbroker.ce.iiop.ccm.connectionMaxIdle
0
コネクションが非アクティブな状態の最大監視時間を秒単位で指定します。最大監視時間を経過してもコネクションが非アクティブなままの場合，VisiBrokerがコネクションを終了します。
このプロパティはインターネットアプリケーションで設定します。0を設定した場合，監視しません。デフォルトは0です。

vbroker.ce.iiop.connection.tcpNoDelay
true
falseを設定すると，ソケットのバッファリング機能が有効になります。true（デフォルト）では，すべてのパケットが使用可能になったときに直ちに送信されるように，ソケットのバッファリング機能を無効にします。

vbroker.ce.iiop.ccm.type
Pool
クライアントが使用するクライアントコネクション管理の種類を指定します。デフォルト値の「Pool」はコネクションプールの意味です。

18.12　クライアント側プロセス内コネクションプロパティ

クライアント側プロセス内コネクションのプロパティを次の表に示します。

表18-11　クライアント側プロセス内コネクションプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.ce.inprocess.ccm.bid | 9488 | POA bidderのbid値を指定します。ここで指定した値は，VisiBroker ORBがクライアントコネクションを処理するプロトコルを選択する自動プロセスに作用します。
vbroker.ce.iiop.ccm.bid | 10000 | iiop bidderのbid値を指定します。ここで指定した値は，VisiBroker ORBがクライアントコネクションを処理するプロトコルを選択する自動プロセスに作用します。

18.13　サーバ側エンジンプロパティ

サーバ側のサーバエンジンのプロパティを次の表に示します。

表18-12　サーバ側エンジンプロパティ（Java）

プロパティ
デフォルト
説明

vbroker.se.default
iiop_tp
デフォルトサーバエンジンを指定します。

vbroker.se.<se>.scm.<scm>.listener.giopVersion
1.2
このプロパティを使用すると，古いVisiBroker ORBでは未知のマイナーGIOPバージョンを正しく処理できないインターオペラビリティの問題を解決できます。このプロパティの値は，1.0，1.1，または1.2です。例えば，ネームサービスでGIOP 1.1のiorを生成する場合は，次のように指定します。

nameserv -VBJprop vbroker.se.iiop_tp.scm.iiop_tp.listener.giopVersion=1.1

18.14　サーバ側スレッドセッションIIOP_TSプロパティ，およびIIOP_TSコネクションプロパティ

サーバ側スレッドセッションIIOP_TS/IIOP_TSコネクションのプロパティを次の表に示します。

表18-13　サーバ側スレッドセッションIIOP_TS/IIOP_TSコネクションプロパティ（Java）

プロパティ
デフォルト
説明

vbroker.se.iiop_ts.host
null
該当するサーバエンジンが使用するホスト名を指定します。デフォルト値の「null」は，システムからホスト名を使用することを指定します。
日本語や2バイトコード文字を含むパスを指定しないでください。指定した場合，POAのcreate_POA( )メソッドでDATA_CONVERSION例外となります。

vbroker.se.iiop_ts.proxyHost
null
IOR文字列に出力するホスト名を指定します。IOR文字列にホスト名で出力する場合は，このプロパティにホスト名を指定してください。このプロパティの指定を省略した場合は，vbroker.se.iiop_ts.hostの指定に従います。
日本語や2バイトコード文字を含むパスを指定しないでください。指定した場合，POAのcreate_POA( )メソッドでDATA_CONVERSION例外となります。

vbroker.se.iiop_ts.scms
iiop_ts
サーバコネクションマネージャ名の一覧を指定します。

vbroker.se.iiop_ts.scm.iiop_ts.manager.type
Socket
サーバコネクションマネージャの種別を指定します。

vbroker.se.iiop_ts.scm.iiop_ts.manager.connectionMax
0
サーバが許可するコネクション数の最大値を指定します。デフォルト値の0は，コネクション数を制限しないことを表します。

vbroker.se.iiop_ts.scm.iiop_ts.manager.connectionMaxIdle
0
アイドルなコネクションをクローズするかどうかをサーバが判定するためのタイムアウトを秒数で指定します。最大アイドル時間の監視は，プロパティvbroker.orb.gcTimeoutの設定値（デフォルト30秒）の範囲の誤差があります。

vbroker.se.iiop_ts.scm.iiop_ts.listener.type
IIOP
リスナーが使用するプロトコルの種別を指定します。

vbroker.se.iiop_ts.scm.iiop_ts.listener.port
0
ホスト名プロパティに使用するポート番号を指定します。デフォルト値の0は，システムはポート番号を無作為に選び取ることを表します。65536より小さい値を指定してください。65536以上の値を指定すると，create_POA( )でIllegalArgumentExceptionが発生します。

vbroker.se.iiop_ts.scm.iiop_ts.listener.proxyPort
0
プロキシホスト名プロパティに使用するプロキシポート番号を指定します。デフォルト値の0は，システムはポート番号を無作為に選択することを表します。

vbroker.se.iiop_ts.scm.iiop_ts.dispatcher.type
"ThreadSession"
サーバコネクションマネージャに使用するスレッドディスパッチャの種別を指定します。

18.15　サーバ側スレッドプールIIOP_TPプロパティ，およびIIOP_TPコネクションプロパティ

サーバ側スレッドプールIIOP_TP/IIOP_TPコネクションのプロパティを次の表に示します。

表18-14　サーバ側スレッドプールIIOP_TP/IIOP_TPコネクションプロパティ（Java）

プロパティ
デフォルト
説明

vbroker.se.iiop_tp.host
null
該当するサーバエンジンが使用するホスト名を指定します。デフォルト値の「null」は，システムからホスト名を使用することを指定します。
日本語や2バイトコード文字を含むパスを指定しないでください。指定した場合，POAのcreate_POA( )メソッドでDATA_CONVERSION例外となります。

vbroker.se.iiop_tp.proxyHost
null
IOR文字列に出力するホスト名を指定します。IOR文字列にホスト名で出力する場合は，このプロパティにホスト名を指定してください。このプロパティの指定を省略した場合は，vbroker.se.iiop_tp.hostの指定に従います。
日本語や2バイトコード文字を含むパスを指定しないでください。指定した場合，POAのcreate_POA( )メソッドでDATA_CONVERSION例外となります。

vbroker.se.iiop_tp.scms
iiop_tp
サーバコネクションマネージャ名の一覧を指定します。

vbroker.se.iiop_tp.scm.iiop_tp.connection.tcpNoDelay
true
falseを設定すると，ソケットのバッファリング機能が有効になります。true（デフォルト）では，すべてのパケットが使用可能になったときに直ちに送信されるように，ソケットのバッファリング機能を無効にします。

vbroker.se.iiop_tp.scm.iiop_tp.manager.type
Socket
サーバコネクションマネージャの種別を指定します。

vbroker.se.iiop_tp.scm.iiop_tp.manager.connectionMax
0
サーバが許可するキャッシュコネクション数の最大値を指定します。デフォルト値の0は，コネクション数を制限しないことを表します。

vbroker.se.iiop_tp.scm.iiop_tp.manager.connectionMaxIdle
0
アイドルなコネクションをクローズするかどうかをサーバが判定するためのタイムアウトを秒数で指定します。最大アイドル時間の監視は，プロパティvbroker.orb.gcTimeoutの設定値（デフォルト30秒）の範囲の誤差があります。

vbroker.se.iiop_tp.scm.iiop_tp.listener.type
IIOP
リスナーが使用するプロトコルの種別を指定します。

vbroker.se.iiop_tp.scm.iiop_tp.listener.port
0
ホスト名プロパティに使用するポート番号を指定します。デフォルト値の0は，システムはポート番号を無作為に選び取ることを表します。65536より小さい値を指定してください。65536以上の値を指定すると，create_POA( )でIllegalArgumentExceptionが発生します。

vbroker.se.iiop_tp.scm.iiop_tp.listener.proxyPort
0
プロキシホスト名プロパティに使用するプロキシポート番号を指定します。デフォルト値の0は，システムはポート番号を無作為に選択することを表します。

vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.type
ThreadPool
サーバコネクションマネージャに使用するスレッドディスパッチャの種別を指定します。

vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMin
0
サーバコネクションマネージャが生成できるスレッド数の下限を指定します。

vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMax
0
サーバコネクションマネージャが生成できるスレッド数の上限を指定します。デフォルト値の0は，スレッド数を制限しないことを表します。

vbroker.se.iiop_tp.scm.iiop_tp.dispatcher.threadMaxIdle
300
アイドルなスレッドをデストラクトするまでのタイムアウトを秒数で指定します。0を指定した場合は，スレッドのアイドル時間が無限になり，スレッドがデストラクトされなくなります。

18.16　双方向通信をサポートするプロパティ

双方向通信をサポートしているプロパティを次の表に示します。

注

ここで示すプロパティが評価されるのは，SCMが生成されるときの一度だけです。SCMのexportBiDirプロパティとimportBiDirプロパティには，enableBiDirプロパティで優先順位が設定されます。つまり，これらのプロパティに矛盾する値が設定された場合は，SCM固有のプロパティが有効になります。これによって，enableBiDirプロパティをグローバルに設定し，各SCMで双方向性を無効にできます。

表18-15　双方向通信をサポートするプロパティ（Java）

プロパティ | デフォルト | 説明
vbroker.orb.enableBiDir | none | 選択的に双方向コネクションを確立できます。クライアントにvbroker.orb.enableBiDir=clientを設定し，サーバにvbroker.orb.enableBiDir=serverを設定した場合は，ゲートキーパーのvbroker.orb.enableBiDirの値でコネクションの状態が決まります。このプロパティの値は，server，client，both，またはnoneです。
vbroker.se.<se>.scm.<scm>.manager.exportBiDir | ORBは設定しません。 | クライアント側プロパティを指定します。trueを設定すると，指定したサーバエンジンの双方向コールバックPOAを生成できるようになります。falseを設定すると，指定したサーバエンジンの双方向コールバックPOAを生成できなくなります。
vbroker.se.<se>.scm.<scm>.manager.importBiDir | ORBは設定しません。 | サーバ側プロパティを指定します。trueを設定すると，リクエストをクライアントに送信するために，クライアントによってすでに確立されたコネクションをサーバ側で再使用できます。falseを設定した場合は，再使用できません。

19.　プログラマツール（C++）

この章では，Borland Enterprise Server VisiBrokerが提供するC++言語用のプログラマツールについて説明します。

＜この章の構成＞

19.1　引数とオプション

19.2　idl2cpp

19.3　idl2ir

19.4　ir2idl

19.1　引数とオプション

引数とオプションには，すべてのVisiBrokerプログラマツールに共通するものと，各ツールに固有のものがあります。ツール固有の引数とオプションについては，ツールごとに説明します。

＜この節の構成＞

19.1.1　一般オプション

19.1.2　プログラマツールの動作環境

19.1.1　一般オプション

次に示すオプションはすべてのプログラマツールに共通のオプションです。

オプション

-J<java_option>
java_optionを直接Java VMに渡します。

-VBJversion
Borland Enterprise Server VisiBrokerのバージョンを出力します。

-VBJdebug
Borland Enterprise Server VisiBrokerのデバッグ情報を出力します。

-VBJclasspath
CLASSPATH環境変数の前にクラスパスを指定します。

-VBJprop <name> [=<value>]
対になった名前と値をJava VMに渡します。

-VBJjavavm <jvmpath>
Java VMへのパスを指定します。

-VBJaddJar <jarfile>
Java VMを実行する前にCLASSPATHにjarfileを付けます。

19.1.2　プログラマツールの動作環境

この章で説明しているBorland Enterprise Server VisiBrokerのプログラマツールは，動作環境がUNIXまたはWindowsのどちらであるかによって異なります。

＜この項の構成＞

(1)　UNIXの場合

(2)　Windowsの場合

(1)　UNIXの場合

UNIXユーザは，次の構文でコマンドのオプションを表示できます。

command name -¥?

次のように入力します。

例： idl2cpp -¥?

(2)　Windowsの場合

Windowsユーザは，次の構文でコマンドのオプションを表示できます。

command name -?

次のように入力します。

例： idl2cpp -?

19.2　idl2cpp

このコマンドは，VisiBrokerのIDL（インタフェース定義言語）からidl2cppコンパイラを実装します。IDLからC++へのコンパイラを使って，IDLファイルからクライアントスタブおよびサーバスケルトンコードを生成します。

＜この節の構成＞

19.2.1　構文

19.2.2　説明

19.2.1　構文

idl2cpp [arguments] file1 [file2]...

例

idl2cpp -hdr_suffix hx -server_ext _serv -no_tie
-no_excep-spec bank.idl

19.2.2　説明

idl2cppコマンドは，IDLファイルを入力として使用し，クライアントおよびサーバ側のためのC++コード，クライアントスタブ，およびサーバスケルトンコードを生成します。

infileパラメタは，C++コードの生成の対象となるIDLファイルを表します。argumentは生成されたコードに対して機能を付加します。

（Windows）

idl2cppコマンドが生成するスタブおよびスケルトンに基づくインプリメンテーションをリンクする場合，-DSTRICTプリプロセサオプションを使用してください。これを使用しないと，リンカは，orb.libにコンストラクタがないことを示すエラーメッセージを表示する場合があります。

引数

-C, -retain_comments
C++コード生成時に，IDLファイルからコメントを引き継ぎます。このオプションを指定しないと，コメントはC++コードに表示されません。デフォルトはoffです。

-D, -define foo[=bar]
fooにプリプロセサマクロを定義します。barで値を指定できます。プリプロセサマクロを複数指定するには，-Dfoo=bar -Dhello=world のように-Dオプションを複数回使用してください。

-H, -list_includes
インクルードファイルへのパスを標準出力に出力します。デフォルトはoffです。

-I, -include <dir>
#include検索用の拡張ディレクトリを指定します。#include検索用の拡張ディレクトリを複数指定するには，-I/home/include -I/app/include のように-Iオプションを複数回使用してください。

-P, -no_line_directives
行番号情報の生成を抑止します。デフォルトはoffです。

-U, -undefine foo
fooに指定されたプリプロセサマクロの定義を解除します。

-client_ext <file_extension>
生成されたクライアントファイルに対して使用するファイル拡張子を指定します。デフォルトの拡張子は_cです。拡張子なしのクライアントファイルを生成するには，<file_extension>の値にnoneを指定してください。

-[no_]back_compat_mapping
現バージョンでは，この引数は無効です。以降のバージョンで変更される可能性もあります。

-[no_]comments
生成されたコードにコメントを入れることを指定します。デフォルトでは，コメントは生成されたコード中に表示されます。

-[no_]idl_strict
IDLソースに，OMG標準規格を指定します。デフォルトではOMG標準規格は使いません。

-[no_]obj_wrapper
オブジェクトラッパーサポートでスタブとスケルトンを生成します。また，ほかのすべてのオブジェクトラッパーが継承するベースのタイプドオブジェクトラッパーと，アンタイプドオブジェクトラッパー呼び出しを実行するデフォルトのオブジェクトラッパーを生成します。このオプションが設定されないと，idl2cppは，オブジェクトラッパー用のコードを生成しません。

-[no_]preprocess
解析前にIDLファイルの前処理をします。デフォルトはonです。

-[no_]preprocess_only
前処理の終了後に，IDLファイルの解析を中止します。このオプションを使用すると，コンパイラで前処理フェーズの結果をstdoutに生成できます。デフォルトはoffです。

-[no_]pretty_print
_pretty_printメソッドを生成します。デフォルトはonです。

-[no_]servant
サーバ側コードを生成します。デフォルトでは，サーバントが生成されます。

-[no_]stdstream
クラスのシグニチャ内に，標準のiostreamクラスを使ったストリーム演算子を生成します。デフォルトはonです。

-[no_]tie
_tieテンプレートクラスを生成します。デフォルトでは，_tieクラスが生成されます。

-[no_]warn_all
警告をすべて抑止します。デフォルトはoffです。

-[no_]warn_missing_define
あらかじめ宣言された名前を定義しなかった場合に警告します。デフォルトはonです。

-[no_]warn_unrecognized_pragmas
#pragmaが認識されない場合に警告を生成します。

-corba_inc <filename>
生成されたコードに，通常の#include <corba.h>ではなく#include <filename>が挿入されます。デフォルトでは，#include <corba.h>が生成コードに挿入されます。

-excep_spec
メソッドの例外仕様を生成します。デフォルトでは，例外仕様は生成されません。

-export <tag>　(Windows)
生成されたすべてのクライアント側宣言（クラス，関数など）に挿入するタグ名を定義します。idl2cppの起動時に，-export _MY_TAG と指定すると，クラス定義が「class Bank {...}」の代わりに「class _MY_TAG Bank {...}」となります。
デフォルトでは，クライアント側宣言のタグ名は生成されません。

-export_skel <tag>　(Windows)
生成されたサーバ側の宣言だけに挿入するタグ名を定義します。idl2cppの起動時に-export_skel _MY_TAG と指定すると，クラス定義が「class POA_Bank {...}」の代わりに「class _MY_TAG POA_Bank {...}」となります。
デフォルトでは，サーバ側宣言のタグ名は生成されません。

-gen_included_files
#includeファイルのコードの生成を指定します。デフォルトではこのコードは生成されません。

-h, -help, -usage, -?
ヘルプ情報を出力します。

-hdr_suffix <string>
ヘッダファイル名の拡張子を指定します。デフォルトの拡張子は.hhです。

-impl_inherit
インプリメンテーション継承を生成します。デフォルトはoffです。

-list_files
コード生成時に書き込まれたファイルのリスト表示を指定します。デフォルトではこのリストは生成されません。

-map_keyword <keywrd> <map>
キーワードとして<keywrd>を追加し，表示されたマッピングに対応させます。<keywrd>と矛盾するIDL識別子は，C++で<map>にマッピングされます。これによって，C++コードで使用されるキーワードと名前間で矛盾が発生しないようにします。
すべてのC++キーワードにはデフォルトのマッピングがあります。このようなキーワードは，このオプションを使用して指定する必要はありません。

-namespace
モジュールをネームスペースとして実装します。デフォルトはoffです。

-root_dir <path>
生成コードが書き込まれるディレクトリを指定します。デフォルトでは，コードはカレントディレクトリに書き込まれます。

-server_ext <file_extension>
生成されたサーバファイルに対して使用するファイル拡張子を指定します。デフォルトの拡張子は_sです。拡張子なしのサーバファイルを生成するには，<file_extension>の値にnoneを指定してください。

-src_suffix <string>
ソースファイルのファイル拡張子を指定します。デフォルトの拡張子は.ccです。

-type_code_info
動的起動インタフェースを使用するクライアントプログラムで必要とされるタイプコード情報を生成できるようになります。詳細については，「23.　動的インタフェースとクラス（C++）」を参照してください。デフォルトでは，タイプコード情報は生成されません。

-version
Borland Enterprise Server VisiBrokerのバージョンを表示します。

file1 [file2] ...
処理対象のファイルを一つ以上指定します。または，標準入力として「-」を指定します。

19.3　idl2ir

このコマンドは，IDLソースファイルで定義されたオブジェクトにインタフェースリポジトリを実装します。

＜この節の構成＞

19.3.1　構文

19.3.2　説明

19.3.1　構文

idl2ir [options] file1 [file2]...

例

idl2ir -irep my_repository -replace bank/Bank.idl

19.3.2　説明

idl2irコマンドはIDLファイル名を入力として使用します。また，idl2irコマンドは，このコマンド自体をインタフェースリポジトリサーバにバインドし，<filename>.idlに指定されたIDL構成体にリポジトリを実装します。-replaceオプションを指定した場合，リポジトリにIDLファイルの項目と同じ名前を持つ項目がすでにあると，その項目は新しい項目と置き換えられます。

注

idl2irコマンドが匿名の配列およびシーケンスを適切に処理できないという問題があります。この問題の対処として，すべての配列およびシーケンスに対してtypedefsを使用します。

オプション

-D, -define foo[=bar]
fooに指定されたプリプロセサマクロを定義します。barで値を指定できます。

-I, -include <dir>
#includeファイルを検索するディレクトリを指定します。

-P, -no_line_directives
行番号情報の生成を抑止します。デフォルトはoffで，行の番号づけは抑止されません。

-H, -list_includes
インクルードされたファイル名を標準出力に出力します。デフォルトはoffです。

-C, -retain_comments
C++コード生成時に，IDLファイルからコメントを引き継ぎます。このオプションを指定しないと，コメントはC++コードに表示されません。

-U, -undefine foo
fooに指定されたプリプロセサマクロの定義を解除します。

-[no_]back_compat_mapping
VisiBroker 3.xとの下位互換性を持つマッピングの使用を指定します。

-[no_]idl_strict
IDLソースに，OMG標準規格を指定します。デフォルトではOMG標準規格は使いません。

-[no_]preprocess
解析前にIDLファイルの前処理をします。デフォルトはonです。

-[no_]preprocess_only
前処理の終了後に，IDLファイルの解析を中止します。このオプションを使用すると，コンパイラで前処理フェーズの結果をstdoutに生成できます。デフォルトはonです。

-[no_]warn_all
警告をすべて抑止します。デフォルトはoffです。

-[no_]warn_unrecognized_pragmas
#pragmaが認識されない場合に警告を生成します。

-deep
シャロウマージではなく，ディープマージを指定します。-deepを指定した場合，新しい内容と既存内容との違いだけをマージします。-deepを指定しない場合はシャロウマージが選択されて，新しい内容が同じ名前を定義すると，すべての既存内容を新しい内容と置き換えます。デフォルトはoffです。

-h, -help, -usage, -?
ヘルプ情報を出力します。

-irep <name>
idl2irがバインドしようとするインタフェースリポジトリのインスタンス名を指定します。名前を指定しないと，idl2irは，カレントドメインで見つけたインタフェースリポジトリサーバにバインドします。現在のドメインは，OSAGENT_PORT環境変数によって定義されます。

-replace
定義を更新しないで，そのまま置き換えます。

-version
Borland Enterprise Server VisiBrokerのバージョンを表示します。

file1 [file2] ...
処理対象のファイルを一つ以上指定します。処理対象のファイルにstdinを指定するときは，「-」を指定します。

19.4　ir2idl

このコマンドは，インタフェースリポジトリから取得したオブジェクトでIDLソースファイルを生成します。

＜この節の構成＞

19.4.1　構文

19.4.2　説明

19.4.1　構文

ir2idl [options]

例

fooというインタフェースリポジトリの内容から，foo.idlを生成します。

ir2idl -irep foo -o foo.idl

19.4.2　説明

ir2idlコマンドは，IRの内容を抽出し，それをIDLとして出力します。

オプション

-irep <irep name>
インタフェースリポジトリの名前を指定します。

-o <file>
出力ファイルの名前を指定します。または，標準出力として「-」を指定します。

-strict
OMG標準規格に準拠してコード生成を行うことを指定します。デフォルトはonです。

-version
使用中のBorland Enterprise Server VisiBrokerのバージョンを表示，または出力します。

-h, -help, -usage, -?
ヘルプ情報を出力します。

20.　IDLからC++言語へのマッピング

この章では，CORBA C++言語マッピング仕様に準拠しているBorland Enterprise Server VisiBroker idl2cppコンパイラによって供給されるIDLからC++言語へのマッピングについて説明します。

＜この章の構成＞

20.1　基本データ型

20.2　文字列

20.3　定数

20.4　列挙体

20.5　型定義

20.6　module句

20.7　複合データ型

20.8　構造体

20.9　Valuetype

20.10　抽象インタフェース

20.1　基本データ型

次の表に，IDLによって提供されている基本的なデータ型の概要を示します。プラットフォーム間のハードウェアの違いによって，幾つかのIDL基本データ型がプラットフォームに依存する場合があります。そのようなデータ型には，その定義の説明に"プラットフォームに依存"と示してあります。例えば，64ビット整数型のプラットフォームでも，CORBA::Long型は32ビットとなってしまいます。プラットフォームに依存する基本データ型の正確なマッピングについては，インクルードファイル"orbtypes.h"，"vdef.h"，または"ptypedef.h"を参照してください。

表20-1　IDL基本型マッピング（C++）

IDL型 | VisiBroker型 | C++定義
short | CORBA::Short | short
long | CORBA::Long | プラットフォームに依存
unsigned short | CORBA::UShort | unsigned short
unsigned long | CORBA::ULong | unsigned long
float | CORBA::Float | float
double | CORBA::Double | double
char | CORBA::Char | char
wchar | CORBA::WChar | wchar_t
boolean | CORBA::Boolean | unsigned char
octet | CORBA::Octet | unsigned char
longlong | CORBA::LongLong | プラットフォームに依存
ulonglong | CORBA::ULongLong | プラットフォームに依存

注

IDL boolean型は，1または0しか使用できないようにCORBAの仕様によって定義されています。それ以外の値を使用すると，未定義の動作となります。

20.2　文字列

IDLにある文字列型は，固定長でも可変長でも，C++のchar*型(wstring型はCORBA::WChar*)にマッピングされます。アプリケーションとVisiBrokerが，同一のメモリ管理機能を使うようにするために，文字列を動的に割り当てる場合，および動的に解放する場合は，コードサンプル20-1に示している関数を使用してください。すべてのCORBA文字列型は，NULLで終わる文字列です。

コードサンプル20-1　文字列に対するメモリの割り当ておよび解放の際に使用するメソッド

class CORBA
{
   ...
   static char *string_alloc(CORBA::ULong len);
   static void string_free(char *data);
   ...
   static CORBA::WChar *wstring_alloc(CORBA::ULong len);
   static void wstring_free(CORBA::WChar *);
   ...
};

メソッドの詳細については，「22.4.2　CORBAのメソッド」を参照してください。

＜この節の構成＞

20.2.1　String_varクラス

20.2.2　WString_varクラス

20.2.1　String_varクラス

IDLのstringをchar *にマッピングするとき，IDLコンパイラは，String_varクラスも生成します。これは，文字列用に割り当てられたメモリを指しているポインタを保持するクラスです。String_varオブジェクトがデストラクトされたり，スコープ外になったりすると，文字列用のメモリが自動的に解放されます。コードサンプル20-2に，String_varクラスおよびこのクラスがサポートするメソッドを示します。_varクラスの詳細については，「21.6　<class_name>_var」を参照してください。

コードサンプル20-2　String_varクラス

class CORBA {
  class String_var {
     protected:
        char*_p;
        ...
     public:
        String_var();
        String_var(const String_var& var);
        String_var(char *p);
        ~String_var();
        String_var&  operator=(const char *p);
        String_var&  operator=(char *p);
        String_var&  operator=(const String_var& s);
        operator const char *() const;
        operator char *();
        char &operator[ ](CORBA::ULong index);
        char operator[ ](CORBA::ULong index) const;
        friend ostream&  operator<<(
                           ostream&, const String_var&);
        inline friend Boolean  operator==(
                           const String_var& s1,
                           const String_var& s2);
        ...
     };
     ...
};

20.2.2　WString_varクラス

IDLのwstringをCORBA::WChar *にマッピングするとき，IDLコンパイラは，WString_varクラスも生成します。これは，文字列用に割り当てられたメモリを指しているポインタを保持するクラスです。WString_varオブジェクトがデストラクトされたり，スコープ外になったりすると，文字列用のメモリが自動的に解放されます。コードサンプル20-3に，WString_varクラスおよびこのクラスがサポートするメソッドを示します。_varクラスの詳細については，「21.6　<class_name>_var」を参照してください。

コードサンプル20-3　WString_varクラス

class CORBA {
  class WString_var {
     private:
        CORBA::WChar *_p;
        ...
     public:
        WString_var();
        WString_var(const WString_var& var);
        WString_var(CORBA::WChar *p);
        WString_var(const CORBA::Whcar *p);
        ~WString_var();

        WString_var&  operator=(const CORBA::WChar *p);
        WString_var&  operator=(CORBA::WChar *p);
        WString_var&  operator=(const WString_var& s);
        operator CORBA::WChar *();
        operator const CORBA::WChar *();
        CORBA::WChar &operator[ ](CORBA::ULong index);
        CORBA::WChar operator[ ](CORBA::ULong index);

        friend ostream&  operator<<(
                           ostream&, const WString_var&);
        friend CORBA::Long compare(
                           const WString_var& s1,
                           const WString_var& s2);
        ...
     };
     ...
};

20.3　定数

interfaceの外で定義されたIDL定数がインクルードファイルでC++定数宣言にダイレクトにマッピングされます。コードサンプル20-4～20-5に例を示します。

コードサンプル20-4　IDLのトップレベル定義

const string str_example = "this is an example";
const long long_example = 100;
const boolean bool_example = TRUE;

コードサンプル20-5　定数のC++コード

const char * str_example = "this is an example";
const CORBA::Long long_example = 100;
const CORBA::Boolean bool_example = 1;

interfaceの中で定義された定数がインクルードファイルで宣言され，またソースファイルに値が代入されます。コードサンプル20-6～20-8に例を示します。

コードサンプル20-6　example.idlファイルのIDL定義

interface example {
   const string str_example = "this is an example";
   const long long_example = 100;
   const boolean bool_example = TRUE;
};

コードサンプル20-7　example_client.hhインクルードファイルに生成されたC++コード

class example :: public virtual CORBA::Object
{
  ...
  static const char *str_example; /* "this is an example" */
  static const CORBA::Long long_example; /* 100 */
  static const CORBA::Boolean bool_example; /* 1 */
  ...
};

コードサンプル20-8　example_client.ccソースファイルに生成されたC++コード

const char *example::str_example = "this is an example";
const CORBA::Long example::long_example = 100;
const CORBA::Boolean example::bool_example = 1;

＜この節の構成＞

20.3.1　定数を含む特別なケース

20.3.1　定数を含む特別なケース

状況によってIDLコンパイラは，IDL定数の名前を生成するのではなく，IDL定数の値を含んでいるC++コードを生成する必要があります。例えば，C++コードが適切にコンパイルできるようにするために，typedef Vに対して定数lengthの値が生成される必要があります。例をコードサンプル20-9～20-10に示します。

コードサンプル20-9　値を持つIDL定数の定義

// IDL
interface foo {
   const long length = 10;
   typedef long V[length];
};

コードサンプル20-10　C++でのIDL定数の値の生成

class foo : public virtual CORBA::Object
{
   const CORBA::Long length;
   typedef CORBA::Long V[10];
};

20.4　列挙体

IDL内の列挙体がC++列挙体へとダイレクトにマッピングされています。例をコードサンプル20-11～20-12に示します。

コードサンプル20-11　列挙体のIDL定義

// IDL
enum enum_type {
   first,
   second,
   third
};

コードサンプル20-12　IDL列挙体のC++enumへのダイレクトマッピング

// C++ code
enum enum_type {
   first,
   second,
   third
};

20.5　型定義

IDL内の型定義がC++型定義にダイレクトにマッピングされています。元のIDL型定義が複数のC++型にマッピングされる場合，IDLコンパイラは，それぞれの型に対応するC++のエイリアスを生成します。例をコードサンプル20-13～20-14に示します。

コードサンプル20-13　IDLの型定義

// IDL
typedef octet example_octet;
typedef enum enum_values {
   first,
   second,
   third
} enum_example;

コードサンプル20-14　IDLの型定義のC++へのマッピング

// C++
typedef octet example_octet;
enum enum_values {
   first,
   second,
   third
};
typedef enum_values enum_example;

その他の型定義のマッピング例を，コードサンプル20-15～20-18に示します。

コードサンプル20-15　インタフェースのIDL typedef

// IDL
interface A1;
typedef A1 A2;

コードサンプル20-16　IDLインタフェース型定義のC++へのマッピング

// C++
class A1;
typedef A1 *A1_ptr;
typedef A1_ptr A1Ref;
class A1_var;

typedef A1 A2;
typedef A1_ptr A2_ptr;
typedef A1Ref A2Ref;
typedef A1_var A2_var;

コードサンプル20-17　シーケンスのIDL typedef

// IDL
typedef sequence<long> S1;
typedef S1 S2;

コードサンプル20-18　IDLシーケンス型定義のC++へのマッピング

// C++
class S1;
typedef S1 *S1_ptr;
typedef S1_ptr S1Ref;
class S1_var;

typedef S1 S2;
typedef S1_ptr S2_ptr;
typedef S1Ref S2Ref;
typedef S1_var S2_var;

20.6　module句

OMGのIDLからC++言語へのマッピングでは，IDLのmoduleをC++のnamespaceにマッピングする際に同じ名前を使用するように指定します。現在，ネームスペースをサポートするコンパイラの数が限られているため，VisiBrokerは，moduleからclassへのマッピングだけをサポートしています。コードサンプル20-19～20-20では，Borland Enterprise Server VisiBrokerのIDLコンパイラがmodule定義をclassへとマッピングしています。

コードサンプル20-19　IDLモジュール定義

// IDL
module ABC
{
   ...
};

コードサンプル20-20　C++クラスとして生成

// C++
class ABC
{
   ...
};

20.7　複合データ型

次の複合データ型が，どのようにIDLからC++マッピングされるかを説明します。

Any型

string型（固定長または可変長）

sequence型（固定長または可変長）

オブジェクトリファレンス

可変長メンバを含むその他のstructまたはunion

可変長要素を持つarray

可変長要素を持つtypedef

複合データ型のC++マッピングについて次の表に示します。

表20-2　複合データ型のC++マッピングの概要（C++）

IDL型 | C++マッピング
struct（固定長） | structおよび_varクラス
struct（可変長） | structおよび_varクラス（各可変長メンバは，そのT_varクラスとともに宣言されます）
union | classおよび_varクラス
sequence | classおよび_varクラス
array | array，array_slice，array_forany，およびarray_var

20.8　構造体

固定長構造体，可変長構造体などについて説明します。

＜この節の構成＞

20.8.1　固定長構造体

20.8.2　可変長構造体

20.8.3　union

20.8.4　Sequence

20.8.5　配列

20.8.6　Principal

20.8.1　固定長構造体

Borland Enterprise Server VisiBrokerのIDLコンパイラは，C++にマッピングされた固定長IDL構造体に，構造体と構造体に対する_varクラスを生成します。_varクラスの詳細については，「21.6　<class_name>_var」を参照してください。

コードサンプル20-21　IDL内の固定長構造体定義

// IDL
struct example {
   short a;
   long b;
};

コードサンプル20-22　固定長IDL構造体のC++へのマッピング

// C++
struct example {
   CORBA::Short a;
   CORBA::Long b;
};

class example_var
{
   ...
   private:
   example *_ptr;
};

＜この項の構成＞

(1)　固定長構造体の使用

(1)　固定長構造体の使用

_varクラスであるフィールドにアクセスするには，->演算子が必要となります。コードサンプル20-23は，その例を示しています。ex2がスコープ外となると，割り当てられていたメモリが自動的に解放されます。

コードサンプル20-23　example構造体およびexample_varクラスの使用

// example構造体を宣言し，領域を初期化します。
example ex1 = { 2, 5 };

// _varクラスを宣言し，新しく作成したexample構造体を代入します。
// _varは，未初期化の領域を持つ構造体を指します。
example_var ex2 = new example;

// ex1からex2の領域を初期化します。
ex2->a = ex1.b;

20.8.2　可変長構造体

可変長のメンバを持つ構造体か，または固定長のメンバを持つ構造体かによって，C++で生成するコードが異なります。コードサンプル20-21に示したexample構造体を可変長にした例を，コードサンプル20-24～20-25に示します。ここでは，可変長構造体に変換するため，longメンバがstringと入れ替えられ，オブジェクトリファレンスが追加されています。

コードサンプル20-24　IDL内の可変長構造体定義

// IDL
interface ABC {
   ...
};
struct vexample {
   short a;
   ABC c;
   string name;
};

コードサンプル20-25　可変長構造体のC++へのマッピング

// C++
struct vexample {
   CORBA::Short a;
   ABC_var c;
   CORBA::String_var name;
   vexample& operator=(const vexample& s);
};

class vexample_var {
   ...
};

ABCオブジェクトがABC_varクラスにマッピングされています。同様に，nameというstringがCORBA::String_varクラスにマッピングされます。また，可変長構造体の代入演算子も生成されます。

＜この項の構成＞

(1)　可変長構造体でのメモリ管理

(1)　可変長構造体でのメモリ管理

可変長構造体で_varクラスを使用すると，可変長メンバに対応するメモリが透過的に管理されます。

構造体がスコープ外になると，可変長メンバに対応するすべてのメモリが自動的に解放されます。

構造体の初期化または代入が繰り返されると，繰り返し前のデータに対応するメモリは解放されます。

オブジェクトリファレンスに可変長メンバが割り当てられると，そのオブジェクトリファレンスのコピーが作成されます。ポインタに可変長メンバを代入した場合，そのポインタのコピーは作成されません。

20.8.3　union

IDLに指定したunionは，メソッドとともにC++クラスへとマッピングされます。IDLに指定したunionの各メンバは，アクセッサ，およびミューテータとして動作する関数にマッピングされます。ミューテータ関数は，データメンバの値を設定します。

あらかじめ定義されている識別型の_dという名前のデータメンバも生成されます。unionが初めて作成される際には，この識別型の値は設定されていません。したがって，unionを使用する前に，アプリケーションはその識別型の値を設定する必要があります。提供されているメソッドのどれかを使用してデータメンバを設定すると，それらすべてのデータメンバは自動的に識別型として設定されます。次の表は，example_unionクラスで使用できるメソッドの幾つかを示しています。

表20-3　example_unionクラス用に生成されたメソッド（C++）

メソッド | 説明
_d() | ディスクリミネータの値を返します。
_d(CORBA::Long) | ディスクリミネータの値を設定します。ここでは，ディスクリミネータはlong型です。入力する引数の型は，ディスクリミネータのデータ型によって異なります。
example_union() | デフォルトコンストラクタでは，識別型にデフォルト値が設定されますが，データメンバの初期化は実行されません。
example_union(const example_union& obj) | コピーコンストラクタがソースオブジェクトのディープコピーを実行します。
~example_union() | デストラクタがunionによって所有されているメモリを解放します。
operator=(const example_union& obj) | 代入演算子がディープコピーを実行します。また，必要な場合は，古いメモリを解放します。

コードサンプル20-26～20-27では，example_unionの生成方法を示しています。

コードサンプル20-26　structを含むIDL union

// IDL
struct example_struct
{
  long abc;
};
union example_union switch(long)
{
  case 1: long x; // a primitive data type
  case 2: string y; // a simple data type
  case 3: example_struct z; // a complex data type
};

コードサンプル20-27　IDL unionのC++クラスへのマッピング

// C++
struct example_struct
{
        CORBA::Long abc;
};
class example_union
{
  private:
        CORBA::Long _disc;
        CORBA::Long _x;
        CORBA::String_var _y;
        example_struct _z;
  public:
        example_union();
        ~example_union();
        example_union(const example_union& obj);
        example_union& operator=(const example_union& obj);
        void x(const CORBA::Long val);
        const CORBA::Long x() const;
        void y(char *val);
        void y(const char *val);
        void y(const CORBA::String_var& val);
        const char *y() const;
        void z(const example_struct& val);
        const example_struct& z() const;
        example_struct& z();
        CORBA::Long _d();
        void _d(CORBA::Long);
        ...
};

＜この項の構成＞

(1)　unionの管理型

(2)　unionでのメモリ管理

(1)　unionの管理型

コードサンプル20-27に示したexample_unionクラスに加えて，example_union_varクラスも生成されます。_varの詳細については，「21.6　<class_name>_var」を参照してください。

(2)　unionでのメモリ管理

union内の複合データ型のメモリ管理をするときは，次の点を注意してください。

データメンバの値を設定する際にアクセッサメソッドを使用する場合，ディープコピーが実行されます。小さめの型の場合は値を，大きめの型の場合は定数リファレンスを使って，パラメタをアクセッサメソッドに渡してください。

アクセッサメソッドを使用してデータメンバを設定する場合，そのメンバに対応していたメモリが解放されます。代入されているメンバがオブジェクトリファレンスである場合，そのオブジェクトのリファレンスカウントは，アクセッサメソッドが返される前に増やされます。

char *アクセッサメソッドは，渡されたポインタの所有権が引き受けられる前に，すべてのメモリを解放します。

const char *およびString_varアクセッサメソッドは，新しいパラメタのメモリがコピーされる前に，すべての古いメモリを解放します。

配列データメンバのアクセッサメソッドは，配列スライスを指すポインタを返します。詳細については，「20.8.5(1)　配列スライス」を参照してください。

20.8.4　Sequence

固定長および可変長に関係なくIDLに指定したSequenceは，現在の長さおよび最大長を持つC++クラスにマッピングされます。固定長シーケンスの最大長は，そのシーケンスの型によって定義されます。C++コンストラクタが呼び出される際に可変長シーケンスの最大長を指定できます。プログラミングによって，現在の長さを変更できます。コードサンプル20-28～20-29では，IDLシーケンスがアクセッサメソッドを含むC++クラスへとマッピングされています。

注

可変長シーケンスの長さが，指定した最大長よりも長い場合，Borland Enterprise Server VisiBrokerは，バッファが大きい方を透過的に割り当てます。その際，古いバッファが新しいバッファへとコピーされ，その古いバッファに割り当てられていたメモリが解放されます。しかし，最大長が減ると，使用されなかったメモリは解放されません。

コードサンプル20-28　IDL可変長シーケンス

// IDL
typedef sequence<long> LongSeq;

コードサンプル20-29　IDL可変長シーケンスのC++クラスへのマッピング

// C++
class LongSeq
{
   public:
       LongSeq(CORBA::ULong max=0);
       LongSeq(CORBA::ULong max=0, CORBA::ULong length,
               CORBA::Long *data, CORBA::Boolean release = 0);
       LongSeq(const LongSeq&);
       ~LongSeq();
       LongSeq&    operator=(const LongSeq&);
       CORBA::ULong    maximum() const;
       void   length(CORBA::ULong len);
       CORBA::ULong    length() const;
       const CORBA::ULong&    operator[ ](
                                 CORBA::ULong index) const;
       ...
       static LongSeq    *_duplicate(LongSeq* ptr);
       static void    _release(LongSeq *ptr);
       static CORBA::Long    *allocbuf(CORBA::ULong nelems);
       static void    freebuf(CORBA::Long *data);
   private:
       CORBA::Long* _contents;
       CORBA::ULong   _count;
       CORBA::ULong   _num_allocated;
       CORBA::Boolean   _release_flag;
       CORBA::Long   _ref_count;
};

コードサンプル20-29に示した可変長シーケンスのために生成されたメソッド一覧を次の表に示します。

表20-4　コードサンプル20-29に示した可変長シーケンスのために生成されたメソッドの一覧（C++）

メソッド
説明

LongSeq(CORBA::ULong max=0)
可変長シーケンスのコンストラクタは，最大長を引数として使用します。固定長シーケンスには定義された最大長が含まれます。

LongSeq(CORBA::Ulong max=0,
CORBA::ULong length,
CORBA::Long *data,
CORBA::Boolean release=0)
コンストラクタで，最大長，現在の長さ，対応するデータバッファのポインタ，解放フラグを設定できます。releaseが0でない場合にシーケンスのサイズを拡大する際，データバッファに対応するメモリを解放します。releaseが0である場合，古いデータバッファのメモリは解放されません。固定長シーケンスでは，max以外のこれらすべてのパラメタを使用します。

LongSeq(const LongSeq&)
コピーコンストラクタは，ソースオブジェクトのディープコピーを実行します。

~LongSeq();
解放フラグが構成された際に0以外の値を持つ場合だけ，デストラクタがシーケンスによって所有されるメモリを解放します。

operator=(const LongSeq&)
代入演算子がディープコピーを実行します。必要な場合，古いメモリを解放します。

maximum()
シーケンスのサイズを返します。

length()
シーケンスの長さを設定したり，返したりするために，二つのメソッドが定義されます。

operator[ ] ()
シーケンス内の要素にアクセスするために二つのインデックス演算子が提供されています。一方はその要素を修正するための演算子で，もう一方は要素を読み込むためだけ（読み取り専用）の演算子です。

_release()
シーケンスを解放します。オブジェクトが生成され，シーケンス要素型が文字列およびオブジェクトリファレンスである場合で，コンストラクタの解放フラグが0以外の値であるときは，バッファが解放される前に各要素が解放されます。

allocbuf()
freebuf()
シーケンス用のメモリを割り当てたり，解放したりするために，これら二つの静的メソッドを使用します。

＜この項の構成＞

(1)　シーケンスの管理型

(2)　シーケンスでのメモリ管理

(1)　シーケンスの管理型

コードサンプル20-29に示したLongSeqクラスに加えて，LongSeq_varクラスも生成されます。_varの詳細については，「21.6　<class_name>_var」を参照してください。また，通常の_varメソッドに加えて，シーケンスのインデックスメソッドが二つ定義されています。

コードサンプル20-30　シーケンスを表す_varクラスに追加された二つのインデックスメソッド

CORBA::Long& operator[ ](CORBA::ULong index);
const CORBA::Long& operator[ ](CORBA::ULong index) const;

(2)　シーケンスでのメモリ管理

メモリ管理をする際には，次の事項に注意してください。コードサンプル20-31～20-32は，次の事項を配慮しています。

シーケンスが生成された際にその解放フラグが0以外の値で設定された場合，そのシーケンスがユーザのメモリの管理を引き受けます。要素が代入された際，右側にあるメモリの所有権が引き受けられる前に，古いメモリが解放されます。

文字列またはオブジェクトリファレンスを含むシーケンスが生成された際に，その解放フラグが0以外の値で設定された場合，シーケンスのコンテンツバッファが解放される前，およびそのオブジェクトがデストラクトされる前に，各要素が解放されます。

解放フラグに1が設定されていないかぎり，[ ]演算子を使ってシーケンス要素を代入しないでください。代入した場合，メモリ管理のエラーが発生するおそれがあります。

解放フラグに0を設定してシーケンスを生成した場合，そのシーケンスをinoutパラメタとして使用しないでください。オブジェクトサーバでメモリ管理のエラーが発生するおそれがあります。

シーケンスで使用するメモリを作成および解放する場合は，必ずallocbufおよびfreebufを使用してください。

コードサンプル20-31　固定長シーケンスのIDL仕様

// IDL
typedef sequence<string, 3> StringSeq;

コードサンプル20-32　二つの固定長シーケンスでのメモリ管理の例

// C++
char *static_array[ ] = {(char*)"1", (char*)"2", (char*)"3"};
char **dynamic_array = StringSeq::allocbuf(3);
dynamic_array[0] = CORBA::string_dup("1");
dynamic_array[1] = CORBA::string_dup("2");
dynamic_array[2] = CORBA::string_dup("3");

// シーケンスを作成し，解放フラグはデフォルトのFALSEを設定します。
StringSeq static_seq(3, static_array);

// 別のシーケンスを作成し，解放フラグはTRUEを設定します。
StringSeq dynamic_seq(3, dynamic_array, 1);

static_seq[1] = "1"; // 古い領域は，解放されないでコピーされます。

char *str = CORBA::string_dup("1");
dynamic_seq[1] = str; // 古い領域は，解放され代入されます。

20.8.5　配列

IDLで指定した配列は，C++配列にマッピングされます。マッピングされた配列を静的に初期化できます。IDL配列要素が文字列またはオブジェクトリファレンスである場合，C++配列ではそれらの要素が_var型となります。コードサンプル20-33～20-34は，異なる要素型を持つ三つの配列を示しています。

コードサンプル20-33　IDL配列定義

// IDL
interface Intf
{
   ...
};
typedef long L[10];
typedef string S[10];
typedef Intf A[10];

コードサンプル20-34　IDL配列のC++配列へのマッピング

// C++
typedef CORBA::Long L[10];
typedef CORBA::String_var S[10];
typedef Intf_var A[10];

文字列およびオブジェクトリファレンスに対して_varという管理型を使うことによって，配列要素が代入された際にメモリが透過的に管理できます。

＜この項の構成＞

(1)　配列スライス

(2)　配列の管理型

(3)　タイプセーフ配列

(4)　配列でのメモリ管理

(1)　配列スライス

array_slice型は複次元配列のパラメタを渡す際に使用されます。一次元配列以外の配列に対して_slice型がVisiBrokerのIDLコンパイラによって生成されます。パラメタを渡したり，返したりする際に，_slice型を使うと便利です。コードサンプル20-35とコードサンプル20-36は，_slice型の例を示しています。

コードサンプル20-35　複次元配列のIDL定義

// IDL
typedef long L[10];
typedef string str[1][2][3];

コードサンプル20-36　_slice型の生成

// C++
typedef CORBA::Long L_slice;
typedef CORBA::String_var str_slice[2][3];

(2)　配列の管理型

VisiBrokerのIDLコンパイラは，IDL配列に対するC++配列だけでなく，_varクラスも生成します。このクラスは，配列の拡張機能を提供します。

配列要素への直感的なアクセスを可能にするためoperator[ ]がオーバーロードされます。

配列の_sliceオブジェクトに対するポインタを引数として使用するために，コンストラクタと代入演算子が提供されます。

コードサンプル20-37　配列のIDL定義

// IDL
typedef long L[10];

コードサンプル20-38　配列に対して生成された_varクラス

// C++
class L_var
{
   public:
       L_var();
       L_var(L_slice *slice);
       L_var(const L_var& var);
       ~L_var();
       L_var&  operator=(L_slice *slice);
       L_var&  operator=(const L_var& var);
       CORBA::Long&  operator[ ](CORBA::ULong index);
       operator L_slice *();
       operator L &() const;
       ...
   private:
       L_slice*_ptr;
};

(3)　タイプセーフ配列

any型にマッピングされた要素を持つ配列を処理するために，_foranyという特別なクラスが生成されます。_varクラスと同様に，_foranyクラスでも下位の配列型にアクセスできます。Any型がメモリの所有権を引き受けるので，_foranyクラスは，デストラクトの際にメモリを解放しません。関数を適切にオーバーロードし，ほかの型と見分けられるようにするため，_foranyクラスはtypedefとして実装されません。

コードサンプル20-39　IDL配列定義

// IDL
typedef long L[10];

コードサンプル20-40　IDL配列に対して生成された_foranyクラス

// C++
class L_forany
{
   public:
       L_forany();
       L_forany(L_slice *slice);
       ~L_forany();
       CORBA::Long&  operator[ ](CORBA::ULong index);
       const CORBA::Long&  operator[ ](
                              CORBA::ULong index) const;
       operator L_slice *();
       operator L &() const;
       operator const L & () const;
       operator const L& () const;
       L_forany& operator=(const L_forany obj);
       ...
   private:
       L_slice*_ptr;
};

(4)　配列でのメモリ管理

配列に対応するメモリの割り当て，および解放のため，VisiBrokerのIDLコンパイラは四つの関数を生成します。これらの関数を使うと，VisiBroker ORBはnewおよびdelete演算子をオーバーライドしなくてもメモリを管理できます。

コードサンプル20-41　IDL配列定義

// IDL
typedef long L[10];

コードサンプル20-42　配列メモリの割り当ておよび解放のため生成されたメソッド

// C++
static inline L_slice* L_alloc(); // 配列を動的に割り当てます。
static inline void L_free(L_slice *data);
                                 // L_allocを使って割り当てられた
                                 // 配列のメモリを解放します。
static inline void L_copy(L_slice *_to, L_slice *_from)
              // _from配列を_to配列にコピーします。
static inline L_slice *L_dup(const L_slice *_date)
              // 新しくコピーされた_date配列を返します。

20.8.6　Principal

Principalは，オブジェクトインプリメンテーションに対して，オペレーション要求を発行しているクライアントアプリケーションについての情報を表します。PrincipalのIDLインタフェースにオペレーションはありません。Principalは，octetのシーケンスとして実装されます。Principalは，クライアントアプリケーションによって設定され，VisiBroker ORBインプリメンテーションによってチェックされます。Borland Enterprise Server VisiBrokerでは，Principalは不透過な型として取り扱われ，Principalの内容はVisiBroker ORBには，検査されません。

20.9　Valuetype

IDLのvaluetypeは，IDLのvaluetypeと同じ名前のC++クラスにマッピングされます。このクラスは，valuetypeの状態メンバに対応する純粋仮想アクセッサとモディファイア関数，およびvaluetypeのオペレーションに対応する純粋仮想関数を持つ抽象ベースクラスです。

C++クラス名がvaluetypeの完全なスコープ名称に"OBV_"を持つ，C++クラスが生成されます。このC++クラスは抽象ベースクラスのアクセッサ，およびモディファイアの，デフォルトインプリメンテーションを提供します。

valuetypeインスタンスは，アプリケーションで生成します。生成後，これらのアプリケーションはポインタを使ってインスタンスを処理します。C++ valuetypeインスタンスへのハンドルは，C++ポインタです。C++ポインタ，または類似のオブジェクトとして実装されるC++ _ptr型にマッピングされるオブジェクトリファレンスとは異なります。これによって，ハンドルとオブジェクトリファレンスを区別できます。

インタフェースのマッピングとは異なり，valuetypeのリファレンスカウント機能は，valuetypeのインタフェースごとに実装しなければなりません。valuetypeの_var型はリファレンスカウントを自動化します。コードサンプル20-43では，この機能を示します。

コードサンプル20-43　リファレンスカウントを自動化するvaluetypeの_var型

valuetype Example {
 short op1();
long op2( in Example x );
private short val1;
public long val2;
};

また，コードサンプル20-44では，IDL定義に対して生成される三つのクラスのC++マッピングを示します。

コードサンプル20-44　IDL定義のC++マッピング

class Example : public virtual CORBA::ValueBase {
public:
  virtual CORBA::Short op1() = 0;
  virtual CORBA::Long op2(Example_ptr _x) = 0;
// すべてのパブリックな状態の純粋仮想getter/setterです。
// これらのアクセッサは，C++のunionメンバと同じように，
// リファレンスによってread-write属性でアクセスできます。
virtual void val2(const CORBA::Long _val2) = 0;
virtual const CORBA::Long val2() const = 0;

protected:
Example() {}
virtual ~Example() {}
virtual void val1(const CORBA::Short _val1) = 0;
virtual const CORBA::Short val1() const = 0;

  private:
void operator=(const Example&);
};
class OBV_Example: public virtual Example{
public:
virtual void val2(const CORBA::Long _val2) {
_obv_val2 = _val2;
}
virtual const CORBA::Long val2() const {
return _obv_val2;
}

protected:
virtual void val1(const CORBA::Short _val1) {
_obv_val1 = _val1;
}
virtual const CORBA::Short val1() const {
return _obv_val1; }
OBV_Example() {}
virtual ~OBV_Example() {}
OBV_Example(const CORBA::Short _val1,
    const CORBA::Long _val2) {
  _obv_val1 = _val1;
  _obv_val2 = _val2;
}
CORBA::Short _obv_val1;
CORBA::Long _obv_val2;
};

class Example_init : public CORBA::ValueFactoryBase {
};

_initクラスは，valuetypeのファクトリを実装する方法を提供します。valuetypeは，回線上を値で渡されます。そのため，ストリームして送信したvaluetypeの受信側が，ストリームからvaluetypeインスタンスを生成するために，ファクトリを実装します。ストリーム上でvaluetypeを受信する可能性がある場合は，サーバとクライアントの両方がこのファクトリを実装している必要があります。コードサンプル20-45で示すように，_initクラスはCORBA::ValueBase *を返すcreate_for_unmarshalも実装してください。コードサンプル20-46およびコードサンプル20-47では，ほかのvaluetypeからvaluetypeを派生させる例を示します。

コードサンプル20-45　_initクラス例

class Example_init_impl: public Example_init{
public:
  Example_init_impl();
  virtual ~Example_init_impl();
CORBA::ValueBase * create_for_unmarshal() {
...// return an Example_ptr
}
};

コードサンプル20-46　ほかのvaluetypeから派生したvaluetypeのIDL

valuetype DerivedExample: Example{
short op3();
};

コードサンプル20-47　派生valuetypeに対して生成されたC++

// IDL valuetype: DerivedExample
class DerivedExample  : public virtual Example {
public:
  virtual CORBA::Short op3() = 0;
protected:
  DerivedExample() {}
  virtual ~DerivedExample() {}
private:
  void operator=(const DerivedExample&);
};
class OBV_DerivedExample: public virtual DerivedExample, public virtual OBV_Example{
protected:
  OBV_DerivedExample() {}
  virtual ~OBV_DerivedExample() {}
};
class DerivedExample_init : public CORBA::ValueFactoryBase { };

コードサンプル20-48に，派生したvaluetypeをベースのvaluetypeに切り落とす例を示します。これは，ストリームの受信側が，派生valuetypeは構築できないが，ベースvaluetypeは構築できる場合に必要です。

コードサンプル20-48　切り落とされた派生valuetype

valuetype DerivedExample : truncatable Example { };

マッピングは通常の派生したvaluetypeと同じですが，Exampleというベースクラスに切り落とされることを示すため，DerivedExampleクラスのType情報に情報が追加されるという点が異なります。

valuetypeはインタフェースからは派生できませんが，インタフェースのすべてのオペレーションを提供することによって一つ以上のインタフェースをサポートできます。この場合，supportsというIDLキーワードを使用できます。

コードサンプル20-49　派生valuetypeのIDLキーワード「support」

interface myInterface{
long op5();
};

valuetype IderivedExample supports myInterface {
short op6();
};

コードサンプル20-50　派生valuetypeのC++

// IDL valuetype: DerivedExample
class IderivedExample  : public virtual CORBA::ValueBase  {
public:
  virtual CORBA::Short op6() = 0;
  virtual CORBA::Long op5() = 0;

protected:
  IderivedExample() {}
  virtual ~IderivedExample() {}
private:
  void operator=(const IderivedExample&);
};

class OBV_IderivedExample: public virtual IderivedExample{
protected:
  OBV_IderivedExample() {}
  virtual ~OBV_IderivedExample() {}
};

リファレンスカウント用に，C++ マッピングは二つの標準クラスを提供します。クラスCORBA::DefaultValueRefCountBaseは，任意のアプリケーションが提供する，どのIDLインタフェースからも派生しない具象valuetypeのベースクラスとして使用します。この種類のvaluetypeの場合，アプリケーションは独自のリファレンスカウントメカニズムを実装できます。クラスPortableServer::ValueRefCountBaseは，任意のアプリケーションが提供する，一つ以上のIDLインタフェースから派生する具象valuetypeクラスのベースクラスとして使用します。

＜この節の構成＞

20.9.1　Valuebox

20.9.1　Valuebox

valueboxは，構造体，union，any，文字列，基本型，オブジェクトリファレンス，enum，シーケンス，および配列型に適用されるvaluetypeです。これらの型はメソッド，継承，およびインタフェースはサポートしません。valueboxはリファレンスカウントされ，CORBA::DefaultValueRefCountBaseから派生します。マッピングはベースとなる型によって異なります。すべてのvaluebox C++クラスはベースとなる型へのマッピング用に_boxed_in()，_boxed_out()，および_boxed_inout()を提供します。valuebox idのファクトリは，生成されたスタブが自動的に登録します。

20.10　抽象インタフェース

抽象インタフェースで，オブジェクトをリファレンス（IOR）で渡すか，または値（valuetype）で渡すかを実行時に決定するには，プリフィクス"abstract"を，インタフェース宣言前に使用します。

コードサンプル20-51　IDLコードサンプル

abstract interface foo {
  void func():
};

抽象インタフェースをサポートするvaluetypeは，その抽象インタフェースとして渡せます。抽象インタフェースはコードサンプル20-52に示すように宣言されます。

コードサンプル20-52　抽象インタフェースとしてのvaluetype

valuetype vt supports foo {
  ...
};

抽象インタフェースとして渡す必要があるインタフェースはコードサンプル20-53に示すように宣言されます。

コードサンプル20-53　抽象インタフェースとしてのインタフェース

interface intf : foo {
};

コードサンプル20-53で宣言したfooという抽象インタフェースのC++マッピングの結果は，コードサンプル20-54のようなクラスになります。

コードサンプル20-54　抽象インタフェースのC++マッピング

class foo_var : public CORBA::_var{
  ...
};
class foo_out{
  ...
};

class foo : public virtual CORBA:::AbstractBase{
  private:
     ...
     void operator=(const foo&) {}
  protected:
     foo();
     foo(const foo& ref) {}
     virtual ~foo() {}
  public:
     static CORBA::Object* _factory():
     foo_ptr _this();
     static foo_ptr _nil() { ... }
     static foo_ptr _narrow(CORBA::AbstractBase* _obj);
     static foo_ptr _narrow(CORBA::Object_ptr _obj);
     static foo_ptr _narrow(CORBA::ValueBase_ptr _obj);

     virtual void func() = 0;

     ...

};

class _vis_foo_stub : public virtual foo, public virtual CORBA::Object {
  public :
     _vis_foo_stub() {}
     virtual ~_vis_foo_stub() {}

     ...
     virtual void func():
};

_varクラス，_outクラス，およびメソッドを実装するCORBA::AbstractBaseから派生したクラスがあります。

21.　生成されるインタフェースとクラス（C++）

この章では，Borland Enterprise Server VisiBrokerのIDLコンパイラで生成されるクラス，その使い方，および機能について説明します。

＜この章の構成＞

21.1　概要

21.2　<interface_name>

21.3　<interface_name>ObjectWrapper

21.4　POA_<class_name>

21.5　_tie_<class_name>

21.6　<class_name>_var

21.1　概要

Borland Enterprise Server VisiBrokerのIDLコンパイラは，クライアントアプリケーションおよびオブジェクトサーバの開発をより簡単にするために，多様なクラスを生成できます。生成されたクラスのほとんどは，CORBAクラスでも使用できます。

スタブクラス（<interface_name>）

オブジェクトラッパークラス（<interface_name>ObjectWrapper）

サーバントクラス（POA_<class_name>）

tieクラス（_tie_<class_name>）

varクラス（<class_name>_var）

21.2　<interface_name>

class <interface_name>

<interface_name>クラスは，特定のIDLインタフェースのために生成され，クライアントアプリケーションによって使用されます。このクラスは，特定のIDLインタフェースのために定義されたメソッドを提供します。クライアントが，オブジェクトリファレンスを使って，オブジェクトに対してメソッドを呼び出す場合，実際に呼び出されるのはスタブメソッドです。スタブメソッドは，クライアントのオペレーション要求をパッケージ化して，オブジェクトインプリメンテーションに送信し，その結果を反映します。この全プロセスはクライアントアプリケーションにとって透過的です。

クライアントがローカルオブジェクトリファレンスを使用してローカルオブジェクトのメソッドを呼び出す場合，スタブメソッドは使用されません。

注

IDLコンパイラによって生成されたスタブクラスの内容は変更しないでください。

static <interface_name>_ptr _bind(
const char *_poa_name,
const CORBA::OctetSequence& _id,
const char *_host_name=(const char*)NULL,
const CORBA::BindOptions* _opt=(CORBA::BindOptions*)NULL,
CORBA::ORB_ptr _orb=(CORBA::ORB_ptr)NULL);

_poa_name
絶対パスで記述されたPOA名

_id
リファレンスを生成するオブジェクトの識別子

_host_name
対象オブジェクトがあるホスト名

opt
省略するか，またはNULLだけ指定してください。

orb
サーバが使用するVisiBroker ORB。ORB.initメソッドの呼び出しによって取得されます。

static <interface_name>_ptr _narrow(
CORBA::Object * _obj);
このメソッドは，CORBA::Objectリファレンスを，<interface_name>型のオブジェクトにナロウイングします。オブジェクトリファレンスをナロウイングできない場合，CORBA::BAD_PARAM例外またはnullが返されます。

_obj
<interface_name>型にナロウイングされるオブジェクト

static <interface_name>_ptr _bind(
const char *_object_name = (const char*)NULL,
const char *_host_name = (const char*)NULL,
const CORBA::BindOptions* _opt = (CORBA::BindOptions*)NULL,
CORBA::ORB_ptr _orb = (CORBA::ORB_ptr)NULL);
このメソッドは，VisiBroker ORBオブジェクトにバインドし，オブジェクトリファレンスを取得します。

_object_name
オブジェクト名を識別する文字列。このパラメタはオプションです。

_host_name
ORBオブジェクトを探すホスト名を識別する文字列。このパラメタはオプションです。

_opt
このオプションは省略するか，またはNULLを指定してください。

_orb
サーバが使用するVisiBroker ORB。ORB_initメソッドの呼び出しによって取得されます。

21.3　<interface_name>ObjectWrapper

class <interface_name>ObjectWrapper

このクラスは，ローカルインタフェースには適用されません。

それ以外のインタフェースでは，このクラスは，タイプドオブジェクトラッパーを派生するために使用されます。idl2cppコマンドを-obj_wrapperオプション付きで呼び出すと，ローカルインタフェース以外のすべてのインタフェースに対して生成されます。idl2cppコマンドについては，「19.2　idl2cpp」を参照してください。オブジェクトラッパー機能を使用する際の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクトラッパーの使用」の記述を参照してください。

static void add(
CORBA::ORB_ptr orb,
CORBA::WrapperFactory factory,
VISObjectWrapper::Location loc);
クライアントアプリケーションから，タイプドオブジェクトラッパーを追加します。複数のタイプドオブジェクトラッパーがインストールされている場合，登録された順に呼び出されます。

orb
クライアントが使用したいORB。ORB_initメソッドによって返されます。

factory
追加したいオブジェクトラッパークラスのファクトリメソッド。

loc
追加されるオブジェクトラッパーのロケーション。次の値のどれかです。
VISObjectWrapper::Client
VISObjectWrapper::Server
VISObjectWrapper::Both

static void remove(
CORBA::ORB_ptr orb,
CORBA::WrapperFactory factory,
VISObjectWrapper::Location loc);
サーバアプリケーションからタイプドオブジェクトラッパーを削除します。

orb
クライアントが使用したいORB。ORB_initメソッドによって返されます。

factory
削除したいオブジェクトラッパークラスのファクトリメソッド。

loc
削除されるオブジェクトラッパーのロケーション。次の値のどれかです。
VISObjectWrapper::Client
VISObjectWrapper::Server
VISObjectWrapper::Both

21.4　POA_<class_name>

class POA_<class_name>

POA_<class_name>クラスは，IDLコンパイラによって生成される抽象ベースクラスです。このPOAクラスを使って，オブジェクトインプリメンテーションクラスを派生させます。オブジェクトインプリメンテーションは通常，クライアントのオペレーション要求の受信，および解釈に必要なメソッドを提供するサーバントクラスから派生します。

21.5　_tie_<class_name>

class _tie_<class_name>

_tie_<class_name>クラスは，デリゲーションインプリメンテーションの生成をサポートするために，IDLコンパイラによって生成されます。このtieクラスを使って，ほかのオブジェクトに対するすべてのオペレーション要求をデリゲートする，オブジェクトインプリメンテーションを生成します。したがって，CORBA::Objectクラスから継承させない既存のオブジェクトを使用できます。

21.6　<class_name>_var

class <class_name>_var

<class_name>_varクラスは，IDLインタフェースのために生成されるクラスで，メモリ管理の負担を軽減させるセマンティックを提供します。

22.　コアインタフェースとクラス（C++）

この章では，C++言語のコアインタフェースとクラスについて説明します。

＜この章の構成＞

22.1　PortableServer::AdapterActivator

22.2　PortableServer

22.3　CompletionStatus

22.4　CORBA

22.5　Context

22.6　PortableServer::Current

22.7　Exception

22.8　Object

22.9　ORB

22.10　Policy

22.11　PortableServer::POA

22.12　PortableServer::POAManager

22.13　PortableServer::POAManager::State

22.14　PortableServer::RefCountServantBase

22.15　PortableServer::ServantActivator

22.16　PortableServer::ServantBase

22.17　PortableServer::ServantLocator

22.18　PortableServer::ServantManager

22.19　PortableServer::ForwardRequest

22.20　SystemException

22.21　UserException

22.22　VISPropertyManager

22.1　PortableServer::AdapterActivator

class PortableServer::AdapterActivator :
                      public CORBA::PseudoObject

アダプタアクティベータはPOA（ポータブルオブジェクトアダプタ）と対応し，オンデマンドで子POAを作成する機能をPOAに提供します。この機能は，子POAを指定したリクエストを受信するとき，または活性化パラメタをTRUEに設定してfind_POAメソッドを呼び出すときに使用される機能です。

＜この節の構成＞

22.1.1　インクルードファイル

22.1.2　PortableServer::AdapterActivatorのメソッド

22.1.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.1.2　PortableServer::AdapterActivatorのメソッド

CORBA::Boolean unknown_adapter(
POA_ptr parent, const char* name);
存在しないPOAのオブジェクトリファレンスリクエストを受信すると，VisiBroker ORBがこのメソッドを呼び出します。作成する必要のあるPOAごとに，VisiBroker ORBはこのメソッドを呼び出して作成します。その際，ルートPOAに最も近い祖先のPOA下から作成します。

parent
このメソッドを生成したアダプタアクティベータに対応する親POA

name
作成するPOAの名前（親POAに対応するPOA名）

22.2　PortableServer

class PortableServer

＜この節の構成＞

22.2.1　インクルードファイル

22.2.2　PortableServerのメソッド

22.2.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.2.2　PortableServerのメソッド

char* ObjectId_to_string(
const ObjectId& oid);
このメソッドは，指定されたObjectIdを文字列に変換します。例えば，文字列に変換されたObjectIdをファイルなどに格納できます。

oid
文字列に変換されるObjectId

ObjectId* string_to_ObjectId(
const char* str);
このメソッドは，オブジェクトを表す文字列をObjectIdに変換します。

str
ObjectIdを示す文字列

22.3　CompletionStatus

enum CORBA::CompletionStatus

この列挙体は，オペレーションの完了状態を表します。

＜この節の構成＞

22.3.1　CompletionStatusのメンバ

22.3.1　CompletionStatusのメンバ

COMPLETED_YES = 0
オペレーションが無事完了したことを表します。

COMPLETED_NO = 1
例外，またはエラーの発生のため，オペレーションが開始されなかったことを表します。

COMPLETED_MAYBE = 2
例外，またはエラーの発生のため，オペレーションが完了しなかった可能性があることを表します。

22.4　CORBA

class CORBA

CORBAクラスは，ORBを使用する上で基本的なメソッドを提供します。

＜この節の構成＞

22.4.1　インクルードファイル

22.4.2　CORBAのメソッド

22.4.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.4.2　CORBAのメソッド

static CORBA::ORB_ptr ORB_init(
int& argc, char *const *argv, const char *orb_id = NULL);
このメソッドは，ORBを初期化し，クライアントおよびオブジェクトインプリメンテーションによって使用されます。また，ORBメソッドを呼び出すために使用できるORBを指すポインタを返します。アプリケーションのメイン関数に渡されるargcおよびargvパラメタを，直接このメソッドに渡せます。このメソッドによって受け取られる引数は，ほかのコマンドライン引数と見分けられるように名前・値ペアとなっています。指定できるORB_initオプションの詳細については，「34.　コマンドラインオプション（C++）」を参照してください。

argc
渡された引数の数

argv
引数を指すcharポインタの配列。二つの引数を除く，すべての引数がキーワードと値の形式になります。このメソッドは認識できないキーワードを無視します。

orb_id
使用されるORBの型を識別します。デフォルトはORBです。

static char *string_alloc(
CORBA::ULong len);
文字列領域を動的に割り当て，その文字列を指すポインタを返します。割り当てが失敗すると，NULLポインタが返されます。

len
確保する文字列領域の長さを指定します。指定する文字列の長さは，NULLターミネータを含まなくてもかまいません。

static void string_free(
char *str);
CORBA::string_allocメソッドを使って割り当てた文字列に対応するメモリを解放します。

str
CORBA::string_allocメソッドを使って割り当てた文字列を指すポインタです。

static CORBA::WChar *wstring_alloc(
CORBA::ULong len);
ワイド文字列領域を動的に割り当て，その文字列を指すポインタを返します。割り当てに失敗すると，NULLポインタが返されます。

len
確保するワイド文字列領域の長さを指定します。指定するワイド文字列の長さは，NULLターミネータを含まなくてもかまいません。

static void wstring_free(
CORBA::WChar *str);
CORBA::wstring_allocメソッドを使って割り当てた文字列に対応するメモリを解放します。

str
CORBA::wstring_allocメソッドを使って割り当てた文字列を指すポインタです。

22.5　Context

class CORBA::Context

Contextクラスは，静的，または動的なメソッドの呼び出しの際に暗黙的なパラメタとしてサーバに渡され，クライアントアプリケーションの環境についての情報を表します。このクラスは，リクエストと対応づける必要がある特別な情報の伝達に使用できますが，このクラスはメソッドの引数の一部ではありません。

Contextクラスは，名前・値のペアとして格納されているプロパティのリストによって構成されています。このクラスは，それらのプロパティの設定，および操作に必要なメソッドを提供します。Contextは，NVListオブジェクトを含んでいて，名前・値ペア群を保持します。

また，Context_varクラスも使用できます。このクラスは，メモリ管理を容易にするセマンティックを提供します。

「22.9.2　CORBA::ORBのメソッド」の「void get_default_context(CORBA::Context_out contextPtr);」も参照してください。

＜この節の構成＞

22.5.1　インクルードファイル

22.5.2　Contextのメソッド

22.5.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.5.2　Contextのメソッド

const char *context_name() const;
このメソッドは，コンテキストを示す名前を返します。このオブジェクトが生成された際に名前が提供されないと，NULL値が返されます。

void create_child(
const char * name, CORBA::Context_out context);
このメソッドは，このオブジェクトの子Contextを生成します。

name
新しいContextオブジェクトの名前

context
新しく生成された子Contextに対するリファレンス

void delete_values(
const char *name);
このメソッドは，オブジェクトからプロパティを削除します。

name
削除される一つ以上のプロパティの名前。該当するプロパティを削除するために，名前にワイルドカード"*"（アスタリスク）を含めることができます。すべてのプロパティを削除するには，"*"を一つ指定します。

static CORBA::Context_ptr _duplicate(
CORBA::Context_ptr ctx);
このメソッドは，指定されたオブジェクトを複製します。

ctx
複製されるオブジェクト

void get_values(
const char *start_scope,
CORBA::Flags flag,
const char *name,
CORBA::NVList_out NVList_ptr);
このメソッドは，Contextオブジェクト階層を検索し，nameパラメタで指定された一つ以上の名前・値ペアを取り出します。次に，NVListオブジェクトを生成し，検索した名前・値ペアを配置し，そのオブジェクトに対するリファレンスを返します。
start_scopeパラメタで，検索が開始される最初のコンテキストの名前を指定します。プロパティが見つからない場合，Contextオブジェクト階層での検索は一致するプロパティが見つかるまで，または検索対象となるContextオブジェクトがなくなるまで続きます。
該当するContextが見つからない場合，このメソッドはBAD_CONTEXT例外を発生させます。また，このメソッドは，nameに空の文字列を指定するとBAD_PARAM例外を発生させます。
メモリの確保に失敗した場合は，NO_RESOURCES例外を発生させます。

start_scope
検索が開始される最初のContextオブジェクトの名前。CORBA::Context::_nil()と設定した場合，カレントContextから検索が開始されます。

flag
検索スコープをカレントContextに限定するには，CORBA::CTX_RESTRICT_SCOPEと指定します。
限定しない場合は，CORBA::CTX_RESTRICT_SCOPE(15)以外の値を指定してください。

name
検索の対象となるプロパティ名。ワイルドカード"*"を使って，nameと一致するすべてのプロパティを取り出せます。一致するコンテキスト名が発見できない場合，例外が発生します。

NVList_ptr
見つかったプロパティのリストに対するリファレンス

static CORBA::Context_ptr _nil();
このメソッドは，初期化の際に使用するNULL Context_ptrを返します。

CORBA::Context_ptr parent();
このパラメタは，親Contextを指すポインタを返します。親Contextがない場合，NULL値が返されます。

static void _release(
CORBA::Context_ptr ctx);
この静的メソッドは，指定されたContextオブジェクトを解放します。オブジェクトのリファレンスカウントが0になると，そのオブジェクトは自動的に削除されます。

ctx
解放されるオブジェクト

void set_one_value(
const char *name, const CORBA::Any& anAny);
このメソッドは，指定された名前と値を使って，このオブジェクトにプロパティを追加します。

name
プロパティの名前

anAny
プロパティの値

void set_values(
CORBA::NVList_ptr _list);
このメソッドは，NVListで指定された名前・値ペアを使って，オブジェクトに一つ以上のプロパティを追加します。このメソッドに対するinパラメタとして使用するためにNVListオブジェクトを生成した場合は，Flagsフィールドに0を設定し，NVListに追加したAnyオブジェクトのTypeCodeにTC_stringを設定する必要があります。NVListクラスの詳細については，「23.14　NVList」を参照してください。

_list
このオブジェクトに追加される名前・値ペアのリスト

22.6　PortableServer::Current

class PortableServer::Current : public CORBA::Current

Currentクラスは，メソッド呼び出し先オブジェクトへアクセスするためのメソッドを提供します。このクラスは，複数のオブジェクトを実装するサーバントをサポートするために提供されていますが，任意のサーバントに対して，POAがディスパッチしたメソッドを呼び出すコンテキストの中では使用できません。

＜この節の構成＞

22.6.1　インクルードファイル

22.6.2　PortableServer::Currentのメソッド

22.6.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.6.2　PortableServer::Currentのメソッド

PortableServer::POA *get_POA( );
このメソッドは，コンテキストの中で，このメソッドを呼び出しているオブジェクトを実装しているPOAのリファレンスを返します。POAによってディスパッチされたメソッドのコンテキストの外部で，このメソッドが呼び出された場合は，NoContext例外が発生します。

PortableServer::ObjectId *get_object_id( );
このメソッドは，呼び出されたコンテキストのオブジェクトのObjectIdを返します。POAによってディスパッチされたメソッドのコンテキストの外部で，このメソッドが呼び出された場合は，NoContext例外が発生します。

22.7　Exception

class CORBA::Exception

Exceptionクラスは，システム例外クラス，およびユーザ例外クラスのベースクラスです。詳細については，「22.20　SystemException」を参照してください。

＜この節の構成＞

22.7.1　インクルードファイル

22.7.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.8　Object

class CORBA::Object

すべてのORBオブジェクトはObjectクラスから派生します。Objectクラスは，次のメソッドを提供します。

クライアントとオブジェクトをバインドするメソッド

オブジェクトリファレンスを処理するメソッド

オブジェクトの状態を確認したり，設定したりするメソッド

Objectクラスによって提供されるメソッドは，ORBが実装します。

Borland Enterprise Server VisiBrokerは，CORBA Objectの仕様には規定されていない拡張機能を提供しています。詳細については，「22.8.3　CORBA::Objectに対するVisiBrokerの拡張機能」を参照してください。

＜この節の構成＞

22.8.1　インクルードファイル

22.8.2　CORBA::Objectのメソッド

22.8.3　CORBA::Objectに対するVisiBrokerの拡張機能

22.8.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.8.2　CORBA::Objectのメソッド

void _create_request(
CORBA::Context_ptr ctx,
const char *operation,
CORBA::NVList_ptr arg_list,
CORBA::NamedValue_ptr result,
CORBA::Request_out request,
CORBA::Flags req_flags);
このメソッドは，動的起動インタフェースによる呼び出しの際に使用する，オブジェクトインプリメンテーションのRequestを生成します。

ctx
このリクエストに対応するContext。詳細については，「22.5　Context」を参照してください。

operation
オブジェクトインプリメンテーションで実行されるオペレーションの名前

arg_list
オブジェクトインプリメンテーションに渡す引数のリスト。詳細については，「23.14　NVList」を参照してください。

result
オペレーションの結果。詳細については，「23.13　NamedValue」を参照してください。

request
生成されたRequestを指すポインタ。詳細については，「23.15　Request」を参照してください。

req_flags
arg_listに，一つ以上のNamedValue項目がout引数である場合，このフラグにOUT_LIST_MEMORYを設定します。

void _create_request(
CORBA::Context_ptr ctx,
const char *operation,
CORBA::NVList_ptr arg_list,
CORBA::NamedValue_ptr result,
CORBA::ExceptionList_ptr eList,
CORBA::ContextList_ptr ctxList,
CORBA::Request_out request,
CORBA::Flags req_flags);
このメソッドは，動的起動インタフェースによる呼び出しに使用する，オブジェクトインプリメンテーションのRequestを生成します。

ctx
このリクエストに対応するContext。詳細については，「22.5　Context」を参照してください。

operation
オブジェクトインプリメンテーションで実行されるオペレーションの名前

arg_list
オブジェクトインプリメンテーションに渡す引数のリスト。詳細については，「23.14　NVList」を参照してください。

result
オペレーションの結果。詳細については，「23.13　NamedValue」を参照してください。

eList
このリクエストの例外リスト

ctxList
このリクエストのContextオブジェクトのリスト

request
生成されたRequestを指すポインタ。詳細については，「23.15　Request」を参照してください。

req_flags
arg_listに，一つ以上のNamedValue項目がout引数である場合，このフラグにOUT_LIST_MEMORYを設定します。

static CORBA::Object_ptr _duplicate(
CORBA::Object_ptr obj);
この静的メソッドは，指定されたObject_ptrを複製し，そのオブジェクトを指すポインタを返します。オブジェクトのリファレンスカウントは1ずつ増やします。

obj
複製されるオブジェクトポインタ

CORBA::InterfaceDef_ptr _get_interface();
このメソッドは，オブジェクトのインタフェース定義を指すポインタを返します。詳細については，「24.19　InterfaceDef」を参照してください。

CORBA::ULong _hash(
CORBA::ULong maximum);
このメソッドは，オブジェクトのハッシュ値を返します。このオブジェクトが存在する間，ハッシュ値は変更されませんが，その値が一意である必要はありません。二つのオブジェクトが異なるハッシュ値を返す場合，それらのオブジェクトが同一のものでないことを表しています。

maximum
返されるハッシュ値の上限（下限は0）。

CORBA::Boolean _is_a(
const char *logical_type_id);
このオブジェクトがリポジトリIDに対応するインタフェースを実装する場合，このメソッドはTRUEを返します。そうでない場合はFALSEを返します。

logical_type_id
チェックするリポジトリID

CORBA::Boolean _is_equivalent(
CORBA::Object_ptr other_object);
指定されたオブジェクトポインタと，このオブジェクトが同一のオブジェクトインプリメンテーションを指す場合，このメソッドはTRUEを返します。そうでない場合はFALSEを返します。

other_object
このオブジェクトと比較されるオブジェクトを指すポインタ

static CORBA::Object_ptr _nil();
この静的メソッドは，初期化に使用されるNULLポインタを返します。

CORBA::Boolean _non_existent();
オブジェクトが，すでに存在しないオブジェクトリファレンスによって表されている場合，このメソッドはTRUEを返します。

CORBA::Request_ptr _request(
const char* operation);
このメソッドは，オブジェクトに対してメソッドを呼び出すために使われるRequestを生成します。Requestオブジェクトを指すポインタが返されます。詳細については，「23.15　Request」を参照してください。

operation
呼び出されるオブジェクトメソッドの名前

CORBA::Object_ptr _resolve_reference(
const char* id);
ユーザのクライアントアプリケーションは，指定サービス識別子のサーバ側インタフェースを解決するために，オブジェクトリファレンスに対してこのメソッドを呼び出せます。このメソッドは，指定のサービスを解決するために，サーバ側でORB::resolve_initial_referencesメソッドを呼び出します。ORB::resolve_initial_referencesメソッドは，クライアントが該当するサーバ型にナロウできるオブジェクトリファレンスを返します。
一般に，このメソッドは，サーバの属性を管理するクライアントアプリケーションによって使用されます。

id
サーバ側で解決されるインタフェース名

22.8.3　CORBA::Objectに対するVisiBrokerの拡張機能

static CORBA::Object _ptr _clone(
CORBA::Object_ptr obj, CORBA::Boolean reset_connection = 1UL);
このメソッドは，指定されたオブジェクトリファレンスをクローンします。

obj
クローンされるオブジェクトリファレンス

reset_connection
このパラメタは使用されません。

static const CORBA::TypeInfo *_desc();
このオブジェクトの型情報を返します。

const char *_interface_name() const;
このメソッドは，オブジェクトのインタフェース名を返します。

CORBA::Boolean _is_bound() const;
クライアントプロセスがオブジェクトインプリメンテーションと接続している場合，このメソッドはTRUEを返します。

CORBA::Boolean _is_local() const;
オブジェクトインプリメンテーションが，クライアントアプリケーションと同じプロセス，またはアドレス空間に属している場合，このメソッドはTRUEを返します。

CORBA::Boolean _is_persistent() const;
オブジェクトがパーシステントオブジェクトである場合，このメソッドはTRUEを返します。トランジェントである場合はFALSEを返します。

CORBA::Boolean _is_remote() const;
オブジェクトインプリメンテーションが，クライアントアプリケーションと異なるプロセス，またはアドレス空間に属している場合，このメソッドはTRUEを返します。クライアントとオブジェクトインプリメンテーションは，同じホストに属しているとは限りません。

CORBA::Long _ref_count() const;
このオブジェクトのリファレンスカウントを返します。

void _release();
オブジェクトのリファレンスカウントを減らし，そのリファレンスカウントが0になったらオブジェクトを解放します。

const char *_repository_id() const;
このメソッドはオブジェクトのリポジトリIDを返します。

22.9　ORB

class CORBA::ORB

ORBクラスは，ORBのインタフェースを提供します。このクラスは，特定のObjectまたはObjectアダプタから独立した形で，クライアントオブジェクトに対して使用できるメソッドを提供します。

Borland Enterprise Server VisiBrokerは，CORBA ORBの仕様には規定されていない拡張機能を提供します。詳細については，「22.9.3　CORBA::ORBに対するVisiBrokerの拡張機能」を参照してください。このクラスは，コネクションおよびスレッドを管理したり，サービスを活性化するメソッドを提供します。

＜この節の構成＞

22.9.1　インクルードファイル

22.9.2　CORBA::ORBのメソッド

22.9.3　CORBA::ORBに対するVisiBrokerの拡張機能

22.9.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.9.2　CORBA::ORBのメソッド

CORBA::Boolean work_pending();
このメソッドは，ORBに処理待ちの作業がある場合にtrueを返します。

static CORBA::TypeCode_ptr create_alias_tc(
const char *repository_id,
const char *type_name,
CORBA::TypeCode_ptr original_type);
この静的メソッドは，指定された型，および名前を持つエイリアスのTypeCodeを動的に生成します。

repository_id
IDLコンパイラによって生成された識別子，または動的に構築された識別子

type_name
エイリアスの型の名前

original_type
このエイリアスが生成される元の型

static CORBA::TypeCode_ptr create_array_tc(
CORBA::Ulong length, TypeCode_ptr element_type);
この静的メソッドは，配列のTypeCodeを動的に生成します。

length
配列要素の最大数

element_type
この配列に格納されている要素の型

static CORBA::TypeCode_ptr create_enum_tc(
const char *repository_id,
const char *type_name,
const CORBA::EnumMemberSeq& members);
この静的メソッドは，指定された型，およびメンバを持つ，列挙体のTypeCodeを動的に生成します。

repository_id
IDLコンパイラによって生成された識別子，または動的に構築された識別子

type_name
列挙体の型の名前

members
列挙体メンバの値のリスト

void create_environment(
CORBA::Environment_out env);
このメソッドは，Environmentオブジェクトを生成します。

env
新しく生成されたEnvironmentを指すポインタに設定されるリファレンス

static CORBA::TypeCode_ptr create_exception_tc(
const char *repository_id,
const char *type_name,
const CORBA::StructMemberSeq& members);
この静的メソッドは，指定された型，およびメンバを持つ例外のTypeCodeを動的に生成します。

repository_id
IDLコンパイラによって生成された識別子，または動的に構築された識別子

type_name
構造体の型の名前

members
構造体メンバの値のリスト

static CORBA::TypeCode_ptr create_interface_tc(
const char *repository_id, const char *type_name);
この静的メソッドは，指定された型を持つインタフェースのTypeCodeを動的に生成します。

repository_id
IDLコンパイラによって生成された識別子，または動的に構築された識別子

type_name
インタフェースの型の名前

void create_list(
CORBA::Long num, CORBA::NVList_out nvList);
このメソッドは，指定された要素数を持つNVListを生成し，そのリストに対するリファレンスを返します。

num
リスト内の要素数

nvList
新しく生成されたリストを指すポインタに初期化されます。

void create_named_value(
CORBA::NamedValue_out value);
このメソッドはNamedValueオブジェクトを生成します。

void create_operation_list(
CORBA::OperationDef_ptr opDefPtr, CORBA::NVList_out nvList);
このメソッドは，指定されたOperationDefオブジェクトの引数リストを生成します。

static CORBA::TypeCode_ptr create_recursive_sequence_tc(
CORBA::Ulong bound, CORBA::Ulong offset);
この静的メソッドは，再帰的シーケンスのTypeCodeを動的に生成します。このメソッドの結果は，ほかの型の生成に使用できます。offsetパラメタは，どのTypeCodeがシーケンスの要素を表しているかを判別します。

bound
シーケンス要素の最大数

offset
現在の要素のタイプコードが生成されたバッファ内の位置

static CORBA::TypeCode_ptr create_sequence_tc(
CORBA::Ulong bound, CORBA::TypeCode_ptr element_type);
この静的メソッドは，シーケンスのTypeCodeを動的に生成します。

bound
シーケンス要素の最大数

element_type
このシーケンスに格納されている要素の型

static CORBA::TypeCode_ptr create_string_tc(
CORBA::Ulong bound);
この静的メソッドは，文字列のTypeCodeを動的に生成します。

bound
文字列の最大長

static CORBA::TypeCode_ptr create_struct_tc(
const char *repository_id,
const char *type_name,
const CORBA::StructMemberSeq& members);
この静的メソッドは，指定された型とメンバを持つ構造体のTypeCodeを動的に生成します。

repository_id
IDLコンパイラによって生成された識別子，または動的に構築された識別子

type_name
構造体の型の名前

members
構造体メンバの値のリスト

static CORBA::TypeCode_ptr create_union_tc(
const char *repository_id,
const char *type_name,
CORBA::TypeCode_ptr discriminator_type,
const CORBA::UnionMemberSeq& members);
この静的メソッドは，指定された型，ディスクリミネータ，およびメンバを持つunionのTypeCodeを動的に生成します。

repository_id
IDLコンパイラによって生成された識別子，または動的に構築された識別子

type_name
unionの型の名前

discriminator_type
unionの識別型

members
unionメンバの値のリスト

void get_default_context(
CORBA::Context_out contextPtr);
このメソッドは，VisiBrokerによって保持されている，プロセスごとのContextのデフォルトを返します。デフォルトのContextは，DIIリクエストを構成する際によく使用されます。詳細については，「22.5　Context」を参照してください。

contextPtr
プロパティの値

void get_next_response(
CORBA::Request_out req);
このメソッドは，遅延リクエストに対応する応答を待ちます。このメソッドを呼び出す前に，受信されることを待っている応答があるかどうかを判別するには，ORB::poll_next_responseメソッドを使用します。

req
応答が得られたリクエスト情報を指すポインタが設定されます。

ObjectIdList *list_initial_services();
このメソッドは，アプリケーションで使用できるすべてのオブジェクトサービス名のリストを返します。それらのサービスには，ロケーションサービス，インタフェースリポジトリ，およびネームサービスが含まれます。返された名前はORB::resolve_initial_referencesメソッドで，このサービスのトップレベルオブジェクトを取得するのに使用します。

char *object_to_string(
CORBA::Object_ptr obj);
このメソッドは，指定されたオブジェクトリファレンスを文字列に変換します。この処理は，CORBAの仕様で「文字列化（stringification）」と呼ばれます。例えば，文字列に変換されたオブジェクトリファレンスをファイルなどに格納できます。ORBインプリメンテーションによって，オブジェクトリファレンスから文字列への変換方法が異なるので，このメソッドはORBメソッドになっています。

obj
文字列に変換されるオブジェクトを指すポインタ

void perform_work();
このメソッドは，ORBに処理の実行を指示します。

CORBA::Boolean poll_next_response();
遅延リクエストの応答を受信している場合，このメソッドはTRUEを返します。そうでない場合はFALSEを返します。このメソッドを呼び出しても遅延リクエストの応答を待ちません。

CORBA::Object_ptr resolve_initial_references(
const char * identifier);
このメソッドは，ORB::list_initial_servicesメソッドによって返された名前と一致するインプリメンテーションオブジェクトを解決します。このメソッドよって返された解決済みオブジェクトは，適切なサーバ型にナロウできます。指定されたサービスが見つからない場合，InvalidName例外が発生します。この節の「ObjectIdList *list_initial_services();」も参照してください。

identifier
返されるトップレベルオブジェクトのサービスの名前。識別子の名前は，返されるオブジェクトの名前ではありません。
アドオンされるORBサービスの識別子を次に示します。
・ORBPolicyManager
・PolicyCurrent
・DynAnyFactory
・CodecFactory
・PlCurrent
・RootPOA
・LocationService
・InterfaceRepository
・VisiBrokerInterceptorControl
・NameService

void send_multiple_requests_deferred(
const CORBA::RequestSeq& req);
このメソッドは，指定されたシーケンス内のすべてのクライアントリクエストを遅延リクエストとして送信します。ORBは，そのオブジェクトインプリメンテーションからの応答待ちをしません。クライアントアプリケーションが，ORB::get_next_responseメソッドを使って各リクエストの応答を取得します。

req
送信される遅延リクエストのシーケンス

void send_multiple_requests_oneway(
const CORBA::RequestSeq& req);
このメソッドは，指定されたシーケンス内のすべてのクライアントリクエストを一方向リクエストとして送信します。一方向リクエストはオブジェクトインプリメンテーションからの応答を生成しないので，ORBはリクエストからの応答を待ちません。

req
送信される一方向リクエストのシーケンス

CORBA::Object_ptr string_to_object(
const char *str);
このメソッドは，オブジェクトを表す文字列をオブジェクトポインタに変換します。なお，その文字列はORB::object_to_stringメソッドを使って生成されたものでなければなりません。

str
オブジェクトを表す文字列を指すポインタ

static CORBA::ORB_ptr _nil();
この静的メソッドは，初期化に使用できるNULL ORBポインタを返します。

void run();
このメソッドは，ORBに処理の実行を開始させます。ORBはリクエストを受信し，ディスパッチします。この呼び出しはORBがシャットダウンするまでプロセスを続行します。

CORBA::ValueFactory register_value_factory(
const char* id, CORBA::ValueFactory factory);
ValueFactoryを登録します。

id
ファクトリのリポジトリID

factory
登録するValueFactory

void unregister_value_factory(
const char* id);
ValueFactoryの登録を削除します。

id
ファクトリのリポジトリID

CORBA::ValueFactory lookup_value_factory(
const char* id);
ValueFactoryの登録を検索します。

id
ファクトリのリポジトリID

CORBA::Policy_ptr create_policy(
CORBA::PolicyType type, const CORBA::Any& val);
このメソッドは，指定された初期値で特定のタイプのPolicyオブジェクトを作成するために使用します。サポートしていないポリシーを指定した場合，PolicyError例外が発生します。

type
作成されるPolicyオブジェクトのPolicyType

val
作成されるPolicyオブジェクトの初期状態を設定するために使われる値

static void shutdown(
CORBA::Boolean wait_for_completion=0);
このメソッドは，runメソッドをリターンさせます。すべてのオブジェクトアダプタがシャットダウンされ，そのアダプタ用のメモリが解放されます。

22.9.3　CORBA::ORBに対するVisiBrokerの拡張機能

CORBA::Object_ptr bind(
const char* logical_type_id,
const char *poa_name,
const CORBA::OctetSequence& oid,
const char *host_name = (const char*)NULL,
const CORBA::BindOptions *opt = (CORBA::BindOptions*)NULL);
このメソッドは，VisiBroker ORBオブジェクトにバインドし，オブジェクトリファレンスを取得します。

logical_type_id
リポジトリIDを識別する文字列

poa_name
POA名を識別する文字列

oid
オブジェクトIDを識別する文字列

host_name
ORBオブジェクトを探すホスト名を識別する文字列。このパラメタはオプションです。

opt
このオプションは省略するか，またはNULLを指定してください。

CORBA::ULong connection_count();
このメソッドは，クライアントアプリケーションが活性化状態のコネクションの数を返すために使用されます。

void connection_max(
CORBA::ULong max_conn);
このメソッドは，クライアントアプリケーションが最大コネクション数を設定するために使用されます。また，コマンドラインオプションの-ORBconnectionMax を使ってもこのプロパティを設定できます。コマンドラインオプションの詳細については，「34.　コマンドラインオプション（C++）」を参照してください。

max_conn
最大コネクション数

CORBA::ULong connection_max();
このメソッドは，クライアントアプリケーションが最大コネクション数を返すために使用されます。

static CORBA::TypeCode_ptr create_wstring_tc(
CORBA::Ulong bound);
この静的メソッドは，Unicode文字列のTypeCodeを動的に生成します。

bound
文字列の最大長

static VISPropertyManager_ptr getPropertyManager();
このメソッドは，特定サーバエンジンによるPOAの生成の際に使用するVISPropertyManagerを取得するために使用されます。
詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「これらのプロパティはいつ使用するか」を参照してください。返却されたVISPropertyManagerを解放しないでください。

CORBA_Object_ptr bind(
const char *rep_id,
const char *object_name = (const char*)NULL,
const char *host_name = (const char*)NULL,
const CORBA_BindOptions *opt=(CORBA_BindOptions*)NULL);
このメソッドは，VisiBroker ORBオブジェクトにバインドし，オブジェクトリファレンスを取得します。

rep_id
リポジトリIDを識別する文字列

object_name
オブジェクト名を識別する文字列。このパラメタはオプションです。

host_name
ORBオブジェクトを探すホスト名を識別する文字列。このパラメタはオプションです。

opt
このオプションは省略するか，またはNULLを指定してください。

22.10　Policy

class　CORBA::Policy ：public virtual CORBA::PseudoObject

Policyクラスは，オペレーションに影響を与える，特定の情報の利用を許可するための機構を，ORBおよびオブジェクトサービスに提供します。

＜この節の構成＞

22.10.1　インクルードファイル

22.10.2　Policyのメソッド

22.10.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.10.2　Policyのメソッド

CORBA::Policy *copy()
このメソッドはPolicyオブジェクトのコピーを返します。

void destroy()
このメソッドはPolicyオブジェクトを削除します。

CORBA::PolicyType policy_type()
このメソッドはPolicyオブジェクトの型を返します。

22.11　PortableServer::POA

class PortableServer::POA : public virtual CORBA::PseudoObject

POAクラスのオブジェクトがオブジェクトインプリメンテーション群を管理します。POAは，これらのオブジェクトをObjectIdで識別する，ネームスペースをサポートします。一つのPOAは，ほかの複数のPOAのネームスペースを提供します。そのネームスペースの中では，POAは既存POAの子POAとして作成され，ルートPOAから始まる階層を形成します。

ルートPOAは，ORB::resolve_initial_references("RootPOA")を使用して取得します。

POAオブジェクトをほかのプロセスにエクスポートしたり，文字列化したりしないでください。POAオブジェクトのエクスポートや文字列化を試みるとMARSHAL例外が発生します。

＜この節の構成＞

22.11.1　インクルードファイル

22.11.2　PortableServer::POAのメソッド

22.11.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.11.2　PortableServer::POAのメソッド

PortableServer::ObjectId* activate_object(
PortableServer::Servant _p_servant);
このメソッドは，バイト配列で構成されるオブジェクトIDを生成して返します。
生成したオブジェクトIDと，_p_servantに指定したサーバントは，アクティブオブジェクトマップに登録されます。POAにUNIQUE_IDポリシーがあり，_p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は，ServantAlreadyActive例外が発生します。
このメソッドを使用するには，POAにSYSTEM_IDポリシーとRETAINポリシーが必要です。もしSYSTEM_IDポリシーとRETAINポリシーがなければ，WrongPolicy例外が発生します。

_p_servant
アクティブオブジェクトマップに登録するサーバント

void activate_object_with_id(
const PortableServer::ObjectId& _oid,
PortableServer::Servant _p_servant);
このメソッドは，_oidで指定したオブジェクトを活性化して，そのオブジェクトを_p_servantで指定したサーバントにアクティブオブジェクトマップの中で対応づけます。アクティブオブジェクトマップの中で，すでに_oidにバインドされたサーバントがある場合は，ObjectAlreadyActive例外が発生します。POAにUNIQUE_IDポリシーがあり，_p_servantに指定したサーバントがすでにアクティブオブジェクトマップにある場合は，ServantAlreadyActive例外が発生します。
このメソッドを使用するには，POAにRETAINポリシーが必要です。RETAINポリシーがなければWrongPolicy例外が発生します。

_oid
活性化するオブジェクトのオブジェクトID

_p_servant
アクティブオブジェクトマップに登録するサーバント

PortableServer::ImplicitActivationPolicy_ptr
create_implicit_activation_policy(
PortableServer::ImplicitActivationPolicyValue _value);
このメソッドは，_valueに指定したImplicitActivationPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にImplicitActivationPolicyを指定しなかった場合のデフォルトは，NO_IMPLICIT_ACTIVATIONです。

_value
IMPLICIT_ACTIVATIONを設定すると，POAはサーバントの暗黙的活性化をサポートします。この場合，SYSTEM_IDポリシーとRETAINポリシーも必要です。NO_IMPLICIT_ACTIVATIONを設定すると，POAはサーバントの暗黙的活性化をサポートしません。

CORBA::Object_ptr create_reference(
const char* _intf);
このメソッドは，POAが生成したObjectIdの値と_intfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。_intfは生成されるオブジェクトリファレンスのtype_idになります。_intfにNULLを指定することもできます。このメソッドを呼び出しても活性化は起こりません。_intfに指定した値が，オブジェクトの最下位派生インタフェースを識別するものでもなく，派生元インタフェースのどれかを識別するものでもない場合は，このメソッドの動作は不定です。返されたオブジェクトのPOA::reference_to_idメソッドを呼び出すとObjectIdが取得できます。
このメソッドを使用するには，POAにSYSTEM_IDポリシーとRETAINポリシーが必要です。SYSTEM_IDポリシーとRETAINポリシーがなければWrongPolicy例外が発生します。

_intf
生成するオブジェクトのクラスのリポジトリインタフェースID

CORBA::Object_ptr create_reference_with_id(
const PortableServer::ObjectId& _oid, const char* _intf);
このメソッドは，_oidに指定した値と_intfに指定した値とをカプセル化したオブジェクトリファレンスを生成して返します。_intfは生成されるオブジェクトリファレンスのtype_idになります。_intfにNULLを指定することもできます。intfに指定した値が，オブジェクトの最下位派生インタフェースを識別するものでもなく，派生元インタフェースのどれかを識別するものでもない場合は，このメソッドの動作は不定です。このメソッドを呼び出しても活性化は起こりません。必要であれば，このメソッドが返すオブジェクトリファレンスを複数のクライアントに渡して，そのリファレンスをクライアントからリクエストすることによってオブジェクトを活性化したり，デフォルトサーバントを使用したりできます。それは適用するポリシーに依存します。
POAにSYSTEM_IDポリシーがあり，ObjectId値がシステムによって，またはPOA用に生成されていない場合は，BAD_PARAMシステム例外が発生することがあります。

_oid
リファレンスを生成するオブジェクトのオブジェクトID

_intf
生成するオブジェクトのクラスのリポジトリインタフェースID

PortableServer::IdAssignmentPolicy_ptr
create_id_assignment_policy(
PortableServer::IdAssignmentPolicyValue _value);
このメソッドは，_valueに指定したIdAssignmentPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にIdAssignmentPolicyを指定しなかった場合，デフォルトはSYSTEM_IDです。

_value
USER_IDを設定すると，POAで生成したオブジェクトに，アプリケーションだけがオブジェクトIDを割り当てます。SYSTEM_IDを設定すると，POAで生成したオブジェクトに，POAだけがオブジェクトIDを割り当てます。

PortableServer::IdUniquenessPolicy_ptr
create_id_uniqueness_policy(
PortableServer::IdUniquenessPolicyValue _value);
このメソッドは，_valueに指定したIdUniquenessPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にIdUniquenessPolicyを指定しなかった場合，デフォルトはUNIQUE_IDです。

_value
UNIQUE_IDを設定すると，POAが活性化するサーバントはすべてオブジェクトIDを一つだけサポートします。MULTIPLE_IDを設定すると，POAが活性化するサーバントはそれぞれ一つ以上のオブジェクトIDをサポートできます。

PortableServer::LifespanPolicy_ptr create_lifespan_policy(
PortableServer::LifespanPolicyValue _value);
このメソッドは，_valueに指定したLifespanPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にLifespanPolicyを指定しなかった場合，デフォルトはTRANSIENTです。

_value
TRANSIENTを設定した場合，POAに実装されたオブジェクトは，そのオブジェクトを最初に作成したPOAインスタンスより長くは存続できません。一度トランジェントPOAを非活性化したあとで，そのPOAから生成したオブジェクトリファレンスを使用しようとすると，OBJECT_NOT_EXIST例外が発生します。PERSISTENTを設定した場合，POAに実装されたオブジェクトは，そのオブジェクトを最初に作成したPOAインスタンスより長く存続できます。

PortableServer::POA_ptr create_POA(
const char* _adapter_name,
PortableServer::POAManager_ptr _a_POAManager,
const CORBA::PolicyList& _policies);
このメソッドは，_a_POAManagerに指定したオブジェクトの子オブジェクトとして，POAを_adapter_nameに指定した名前で新規作成します。指定した親オブジェクトにすでに同名の子POAがある場合は，PortableServer::AdapterAlreadyExists例外が発生します。
_policiesに指定したポリシーは，新規作成したPOAに対応づけられ，新規作成したPOAの動作を制御します。矛盾したポリシーを設定した場合は，InvalidPolicy例外が発生します。

_adapter_name
新規作成するPOAを指定する名前

_a_POAManager
新規作成するPOAの親POAオブジェクト

_policies
新規作成するPOAに適用するポリシーの一覧

PortableServer::RequestProcessingPolicy_ptr
create_request_processing_policy(
PortableServer::RequestProcessingPolicyValue _value);
このメソッドは，_valueに指定したRequestProcessingPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にRequestProcessingPolicyを指定しなかった場合，デフォルトはUSE_ACTIVE_OBJECT_MAP_ONLYです。

_value
USE_ACTIVE_OBJECT_MAP_ONLYを設定し，オブジェクトIDがアクティブオブジェクトマップにない場合は，OBJECT_NOT_EXIST例外をクライアントに返します。RETAINポリシーも必要です。
USE_DEFAULT_SERVANTを設定し，オブジェクトIDがアクティブオブジェクトマップになく（またはNON_RETAINポリシーがあり），デフォルトサーバントがset_servantメソッドでPOAに登録されている場合は，リクエストをデフォルトサーバントにディスパッチします。デフォルトサーバントが登録されていない場合は，OBJ_ADAPTER例外をクライアントに返します。MULTIPLE_IDポリシーも必要です。
USE_SERVANT_MANAGERを設定し，オブジェクトIDがアクティブオブジェクトマップになく（またはNON_RETAINポリシーがあり），サーバントマネージャがset_servant_managerメソッドでPOAに登録されている場合は，そのサーバントマネージャはサーバントを捜し出すか，例外を発生します。サーバントマネージャが登録されていない場合，OBJ_ADAPTER例外をクライアントに返します。

PortableServer::ServantRetentionPolicy_ptr
create_servant_retention_policy(
PortableServer::ServantRetentionPolicyValue _value);
このメソッドは，_valueに指定したServantRetentionPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にServantRetentionPolicyを指定しなかった場合，デフォルトはRETAINです。

_value
RETAINを設定した場合，POAは活性化したサーバントをアクティブオブジェクトマップの中に保持します。NON_RETAINを設定した場合，POAはサーバントを保持しません。

PortableServer::ThreadPolicy_ptr create_thread_policy(
PortableServer::ThreadPolicyValue _value);
このメソッドは，_valueに指定したThreadPolicyオブジェクトへのポインタを返します。Policyオブジェクトが不要になると，アプリケーションは，Policyオブジェクトから継承したdestroyメソッドを呼び出します。
POA生成時にThreadPolicyを指定しなかった場合，デフォルトはORB_CTRL_MODELです。

_value
ORB_CTRL_MODELを設定すると，ORBは，ORBが制御するPOAのリクエストをスレッドに割り当てます。マルチスレッド環境では，複数のスレッドを使用して，同時に複数のリクエストを送信できます。
SINGLE_THREAD_MODELを設定すると，POAへのリクエストは一つずつ順次処理されます。マルチスレッド環境では，POAからサーバントとサーバントマネージャに出されたすべてのリクエストは，マルチスレッドに透過的なコードを保証する方法で実行されます。

void deactivate_object(
const PortableServer::ObjectId& _oid);
このメソッドは，_oidで指定したオブジェクトを非活性化します。非活性化したあとも，そのオブジェクトに対するアクティブなリクエストがすべてなくなるまでは，そのオブジェクトはリクエストの処理を続けます。そのオブジェクトに対して実行中のリクエストがすべて終了したときに，そのオブジェクトのObjectIdがアクティブオブジェクトマップから削除されます。
サーバントマネージャがPOAに対応づけられている場合は，ObjectIdがアクティブオブジェクトマップから削除されたあとで，ServantActivator::etherealizeメソッドが，そのオブジェクトと，対応づけられたサーバントに対して呼び出されます。エーテライズが完了するまで，必要に応じて，そのオブジェクトの再活性化は抑止されます。ただし，このメソッドは，リクエストやエーテライズの完了を待たないで，常に指定したオブジェクトを非活性化した直後にリターンします。
このメソッドを使用するには，POAにRETAINポリシーが必要です。RETAINポリシーがない場合，WrongPolicy例外が発生します。

_oid
非活性化するオブジェクトのオブジェクトID

void destroy(
CORBA::Boolean _etherealize_objects,
CORBA::Boolean _wait_for_completion);
このメソッドは，該当するPOAオブジェクトとそのすべての子POAを破棄します。最初に子POAを破棄し，最後にカレントコンテナPOAを破棄します。必要であれば，破棄したあとで同じプロセスに同じ名前でPOAを作成できます。

_etherealize_objects
このパラメタにTRUEを設定し，POAにRETAINポリシーがあり，サーバントマネージャがPOAに登録されている場合，アクティブオブジェクトマップ中の各アクティブオブジェクトでetherealizeメソッドが呼び出されます。etherealizeメソッドが呼び出される前に，見かけ上，POAの破棄が発生します。このため，POAにメソッドを呼び出すetherealizeメソッドは，OBJECT_NOT_EXIST例外を発生します。

_wait_for_completion
このパラメタにTRUEを設定し，カレントスレッドがPOAからディスパッチされた呼び出しでない場合，destroyメソッドは，アクティブなリクエストとetherealizeメソッドの呼び出しがすべて完了したあとでリターンします。
このパラメタにTRUEを設定し，カレントスレッドがPOAからディスパッチされた呼び出しの場合，destroyメソッドは，BAD_INV_ORDER例外が発生し，POAの破棄は発生しません。

PortableServer::POA_ptr find_POA(
const char* _adapter_name, CORBA::Boolean _activate_it);
このメソッドの呼び出し先のPOAオブジェクトが，指定した_adapter_nameのPOAの親である場合，子POAを返します。

_adapter_name
該当するPOAに対応するAdapterActivatorの名前

_activate_it
このパラメタにTRUEを設定し，_adapter_nameで指定したPOAの子POAがない場合は，POAのAdapterActivator（NULL以外の場合）が呼び出されます。子POAの活性化に成功した場合，そのPOAを返します。それ以外の場合は，AdapterNonExistent例外が発生します。

PortableServer::Servant get_servant();
このメソッドは，POAに対応づけられたデフォルトサーバントを返します。対応づけられたサーバントがない場合，NoServant例外が発生します。このメソッドを使用するには，POAにUSE_DEFAULT_SERVANTポリシーが必要です。USE_DEFAULT_SERVANTポリシーがない場合，WrongPolicy例外が発生します。

PortableServer::ServantManager_ptr get_servant_manager();
このメソッドは，POAに対応づけられたServantManagerオブジェクトへのポインタを返します。対応づけられたサーバントマネージャがない場合，NULLを返します。このメソッドを使用するには，POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがない場合，WrongPolicy例外が発生します。

CORBA::Object_ptr id_to_reference(
PortableServer::ObjectId& _oid);
このメソッドは，_oidに指定したオブジェクトがアクティブであればオブジェクトリファレンスを返します。アクティブでなければ，ObjectNotActive例外が発生します。このメソッドを使用するには，POAにRETAINポリシーが必要です。RETAINポリシーがない場合，WrongPolicy例外が発生します。

_oid
リファレンスの取得対象オブジェクトのオブジェクトID

PortableServer::Servant id_to_servant(
PortableServer::ObjectId& _oid);
このメソッドの動作には次の3種類があります。

POAにRETAINポリシーがあり，アクティブオブジェクトマップに指定したオブジェクトがある場合，そのオブジェクトに対応づけられたサーバントを返します。

POAにUSE_DEFAULT_SERVANTポリシーがあり，POAにデフォルトサーバントが登録されている場合，登録されているデフォルトサーバントを返します。

上記以外の場合は，ObjectNotActive例外を出力します。

このメソッドを使用するには，POAにUSE_DEFAULT_SERVANTポリシーまたはRETAINポリシーが必要です。どちらのポリシーもない場合，WrongPolicy例外が発生します。
パラメタの意味を次に示します。

_oid
サーバントの取得対象オブジェクトのオブジェクトID

PortableServer::Servant reference_to_servant(
CORBA::Object_ptr _reference);
このメソッドの動作には次の3種類があります。

POAにRETAINポリシーがあり，アクティブオブジェクトマップに指定したオブジェクトがある場合，そのオブジェクトに対応づけられたサーバントを返します。

POAにUSE_DEFAULT_SERVANTポリシーがあり，POAにデフォルトサーバントが登録されている場合，登録されているデフォルトサーバントを返します。

上記以外の場合は，ObjectNotActive例外を出力します。

このメソッドを使用するには，POAにRETAINポリシー，またはUSE_DEFAULT_SERVANTポリシーが必要です。どちらのポリシーもない場合，WrongPolicy例外が発生します。
reference_to_servantで引数となるreferenceが，そのPOAで作られていないとWrongAdapter例外が発生します。
パラメタの意味を次に示します。

_reference
サーバントの取得対象オブジェクト

PortableServer::ObjectId* reference_to_id(
CORBA::Object_ptr _reference);
このメソッドは，_referenceに指定したオブジェクトにカプセル化されているObjectIdの値を返します。このメソッドは，_referenceに指定したオブジェクトを作成したPOAに対して呼び出した場合だけ有効です。このメソッドの呼び出し先POAが，指定したオブジェクトを作成したPOAと異なる場合，WrongAdapter例外が発生します。このメソッドを呼び出すときに，_referenceパラメタで指定するオブジェクトがアクティブになっている必要はありません。
このメソッドがWrongPolicy例外も出力するようにIDLでは規定されていますが，それは将来的な拡張性を考慮してのことです。

_reference
ObjectIdの取得対象オブジェクト

PortableServer::ObjectId* servant_to_id(
PortableServer::Servant _p_servant);
このメソッドの動作には次の4種類があります。

POAにUNIQUE_IDポリシーがあり，_p_servantに指定したサーバントがアクティブである場合，そのサーバントに対応づけられたObjectIdを返します。

POAにIMPLICIT_ACTIVATIONポリシーがあり，MULTIPLE_IDポリシーがあるか，または_p_servantに指定したサーバントがアクティブでない場合，POAが生成したObjectId，およびサーバントに対応づけられたリポジトリインタフェースIDを使用してサーバントを活性化して，そのObjectIdを返します。

POAにUSE_DEFAULT_SERVANTポリシーがあり，_p_servantに指定したサーバントがデフォルトサーバントである場合，現在の呼び出しに対応づけられたObjectIdを返します。

上記以外の場合は，ServantNotActive例外を出力します。

このメソッドを使用するには，USE_DEFAULT_SERVANTポリシーが必要です。このポリシーがない場合でも，RETAINポリシーと，UNIQUE_IDポリシー，またはIMPLICIT_ACTIVATIONポリシーの組み合わせがあればこのメソッドを使用できます。この条件を満たしていない場合は，WrongPolicy例外が発生します。
パラメタの意味を次に示します。

_p_servant
ObjectIdの取得対象サーバント

CORBA::Object_ptr servant_to_reference(
PortableServer::Servant _p_servant);
このメソッドの動作には次の4種類があります。

POAにRETAINポリシーとUNIQUE_IDポリシーがあり，_p_servantに指定したサーバントがアクティブな場合，そのサーバントを活性化するための情報をカプセル化しているオブジェクトリファレンスを返します。

POAにRETAINポリシーとIMPLICIT_ACTIVATIONポリシーがあり，さらに，MULTIPLE_IDポリシーがあるか，または_p_servantに指定したサーバントがアクティブでない場合，POAが生成したObjectId，およびサーバントに対応づけられたリポジトリインタフェースIDを使用してサーバントを活性化して，オブジェクトリファレンスを返します。

このメソッドが，_p_servantに指定したサーバントへのリクエストを実行するコンテキストの中で呼び出された場合，現在の呼び出しに対応づけられたリファレンスを返します。

上記以外の場合は，ServantNotActive例外を出力します。

POAがディスパッチしたメソッドのコンテキストの外でこのメソッドを呼び出す場合は，RETAINポリシーと，UNIQUE_IDポリシーまたはIMPLICIT_ACTIVATIONポリシーが必要です。このメソッドが，_p_servantに指定したサーバントに対するリクエストを実行するコンテキストの中で呼び出されないで，さらに，上記のポリシーもない場合は，WrongPolicy例外が発生します。
パラメタの意味を次に示します。

_p_servant
リファレンスの取得対象サーバント

void set_servant(
PortableServer::Servant _p_servant);
このメソッドは，POAに対応するデフォルトサーバントを設定します。指定したサーバントは，アクティブオブジェクトマップの中にサーバントが登録されていないすべてのリクエストに対して適用されます。
このメソッドを使用するには，POAにUSE_DEFAULT_SERVANTポリシーが必要です。USE_DEFAULT_SERVANTポリシーがない場合，WrongPolicy例外が発生します。

_p_servant
デフォルトとして使用する，POAに対応するサーバント

void set_servant_manager(
PortableServer::ServantManager_ptr _imagr);
このメソッドは，POAに対応するデフォルトサーバントマネージャを設定します。このメソッドは，POAが生成されたときだけ呼び出せます。POAに対応するサーバントマネージャがすでに設定されているときにこのメソッドを呼び出すと，BAD_INV_ORDER例外が発生します。
このメソッドを使用するには，POAにUSE_SERVANT_MANAGERポリシーが必要です。USE_SERVANT_MANAGERポリシーがない場合，WrongPolicy例外が発生します。

_imagr
POAのデフォルトとして使用するサーバントマネージャ

PortableServer::AdapterActivator_ptr the_activator();
このメソッドは，POAに対応づけられたアダプタアクティベータを返します。POAの作成直後は，POAにはアダプタアクティベータがありません。つまり，属性がNULLになります。システムによっては，ルートPOAの持つアクティベータの一つをアプリケーションに割り当てさせることができます。

void the_activator(
PortableServer::AdapterActivator_ptr _val);
このメソッドは，POAに対応するアダプタアクティベータを，指定されたものに設定します。

_val
POAに対応づけるアダプタアクティベータ

char* the_name();
このメソッドは，POAを識別する属性を返します。この属性は，親POAを基準にPOAを識別する，read-onlyの属性です。この属性は，POAを作成したときに割り当てられたものです。ルートPOAの名前はシステムに依存し，アプリケーションには依存しません。

PortableServer::POA_ptr the_parent();
このメソッドは，該当するPOAの親POAへのポインタを返します。ルートPOAの親はnullです。

PortableServer::POAManager_ptr the_POAManager();
このメソッドは，POAに対応づけられたPOAマネージャへのポインタであるread-onlyの属性を返します。

22.12　PortableServer::POAManager

class PortableServer::POAManager : public CORBA::PseudoObject

どのPOAにも，POAマネージャが一つ対応づけられています。POAマネージャは一つ以上のPOAオブジェクトに順番に対応づけることができます。POAマネージャは，対応づけられているすべてのPOAの処理状態をカプセル化しています。

POAマネージャの状態には次の4種類があります。

アクティブ（ACTIVE）

非アクティブ（INACTIVE）

待機中（HOLDING）

破棄（DISCARDING）

作成直後のPOAマネージャは「待機中」状態です。メソッド呼び出しによってPOAマネージャの状態がどのように遷移するかを，次の図に示します。

図22-1　C++でのPOAマネージャの状態遷移

＜この節の構成＞

22.12.1　インクルードファイル

22.12.2　PortableServer::POAManagerのメソッド

22.12.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.12.2　PortableServer::POAManagerのメソッド

void activate();
このメソッドは，POAマネージャの状態を「アクティブ」に変更します。POAマネージャに対応づけられているすべてのPOAは，リクエストの処理が可能な状態となります。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。

void deactivate(
CORBA::Boolean _etherealize_objects,
CORBA::Boolean _wait_for_completion);
このメソッドは，POAマネージャの状態を「非アクティブ」に変更します。POAマネージャが「非アクティブ」状態のときは，対応づけられているすべてのPOAは，新規リクエストを含む実行開始前のリクエストを拒絶します。状態変更後の動作は，_etherealize_objectsパラメタの設定値によって次のようになります。

設定値がTRUEの場合，POAマネージャは，対応するサーバントマネージャで，RETAINポリシーとUSE_SERVANT_MANAGERポリシーが，すべてのアクティブオブジェクトに対するetherealizeオペレーションをPOAに実行させます。

設定値がFALSEの場合，etherealizeオペレーションを呼び出しません。この目的は，回復不能エラーなどの危機発生時にPOAをシャットダウンする手段を開発者に提供することです。

_wait_for_completionパラメタがFALSEの場合，このオペレーションは状態変更直後にリターンします。このパラメタがTRUEの場合で，該当するPOAと同じVisiBroker ORBに属するほかのPOAがディスパッチした呼び出しコンテキスト内に，カレントスレッドがないときは，このオペレーションは，該当するPOAマネージャに対応するすべてのPOAから，アクティブに実行中のリクエストがなくなるまで（つまり状態変更前に開始されたリクエストがすべて完了するまで），リターンしません。また，_etherealize_objectsパラメタがTRUEの場合，このオペレーションはRETAINポリシーとUSE_SERVANT_MANAGERポリシーがあるすべてのPOAに対するetherealizeの呼び出しが完了するまでリターンしません。このパラメタがTRUEの場合で，該当するPOAと同じVisiBroker ORBに属するほかのPOAがディスパッチした呼び出しコンテキスト内に，カレントスレッドがあるときは，BAD_INV_ORDER例外が発生し状態は変わりません。

void discard_requests(
CORBA::Boolean _wait_for_completion);
このメソッドは，POAマネージャの状態を「破棄」に変更します。POAマネージャが「破棄」状態のときは，対応づけられているすべてのPOAは，到着したリクエストを破棄します。また，キューの中で実行待ち状態にあるリクエストも破棄されます。リクエストが破棄されると，個々のリクエストを発行したクライアントにそれぞれ，TRANSIENTシステム例外が返されます。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。
_wait_for_completionパラメタがFALSEの場合，このオペレーションは状態変更直後にリターンします。このパラメタがTRUEの場合で，該当するPOAと同じVisiBroker ORBに属するほかのPOAがディスパッチした呼び出しコンテキスト内に，カレントスレッドがないときは，このオペレーションは該当するPOAマネージャに対応するすべてのPOAから，アクティブに実行中のリクエストがなくなるまで（つまり状態変更前に開始されたリクエストがすべて完了するまで），またはPOAマネージャの状態が「破棄」以外の状態に変更されるまで，リターンしません。このパラメタがTRUEの場合で，該当するPOAと同じVisiBroker ORBに属するほかのPOAがディスパッチした呼び出しコンテキスト内に，カレントスレッドがあるときは，BAD_INV_ORDER例外が発生し，状態は変わりません。

void hold_requests(
CORBA::Boolean _wait_for_completion);
このメソッドは，POAマネージャの状態を「待機中」に変更します。POAマネージャが「待機中」状態のときは，対応づけられているすべてのPOAは，到着したリクエストをキューに保存します。このメソッドでPOAマネージャを「待機中」状態にする前からキューの中で実行待ち状態にあったリクエストは，継続してキューの中で実行を待ちます。POAマネージャが「非アクティブ」状態のときにこのメソッドを呼び出すと，AdapterInactive例外が発生します。
_wait_for_completionパラメタがFALSEの場合，このオペレーションは状態変更直後にリターンします。このパラメタがTRUEの場合で，該当するPOAと同じVisiBroker ORBに属するほかのPOAがディスパッチした呼び出しコンテキスト内に，カレントスレッドがないときは，このオペレーションは該当するPOAマネージャに対応するすべてのPOAから，アクティブに実行中のリクエストがなくなるまで（つまり状態変更前に開始されたリクエストがすべて完了するまで），リターンしません。

PortableServer::POAManager::State get_state();
このメソッドはPOAmanagerの状態を返します。

22.13　PortableServer::POAManager::State

enum PortableServer::POAManager::State

この列挙体はPOAManagerの状態を表します。

＜この節の構成＞

22.13.1　インクルードファイル

22.13.2　PortableServer::POAManager::Stateのメソッド

22.13.1　インクルードファイル

この列挙体を使用するときは，poa_c.hhファイルをインクルードしてください。

22.13.2　PortableServer::POAManager::Stateのメソッド

ACTIVE
POAManagerがアクティブであることを表します。

INACTIVE
POAManagerが非アクティブであることを表します。

HOLDING
POAManagerが待機中であることを表します。

DISCARDING
POAManagerが破棄中であることを表します。

それぞれの状態遷移については，「22.12　PortableServer::POAManager」を参照してください。

22.14　PortableServer::RefCountServantBase

class Portable Server::RefCountServantBase :
                      public virtual PortableServer::ServantBase

このクラスは，継承クラスとともに使用するPortableServer::ServantBaseクラスとしてではなく，標準サーバントのリファレンスカウント用ミックスインクラスとして使用できます。「22.16　PortableServer::ServantBase」も参照してください。

＜この節の構成＞

22.14.1　インクルードファイル

22.14.2　PortableServer::RefCountServantBaseのメソッド

22.14.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.14.2　PortableServer::RefCountServantBaseのメソッド

void _add_ref();
このメソッドはリファレンスカウントを1ずつ増やします。正確なリファレンスカウントを提供するために，このメソッドをベースクラスからオーバーライドできます。

void _remove_ref();
このメソッドはリファレンスカウントを1ずつ減らします。正確なリファレンスカウントを提供するために，このメソッドをベースクラスからオーバーライドできます。

22.15　PortableServer::ServantActivator

class PortableServer::ServantActivator :
                      public PortableServer::ServantManager

POAにRETAINポリシーがある場合は，PortableServer::ServantActivatorオブジェクトであるサーバマネージャを使用します。

＜この節の構成＞

22.15.1　インクルードファイル

22.15.2　PortableServer::ServantActivatorのメソッド

22.15.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.15.2　PortableServer::ServantActivatorのメソッド

void etherealize(
PortableServer::ObjectId& oid,
PortableServer::POA_ptr adapter,
PortableServer::Servant serv,
CORBA::Boolean cleanup_in_progress,
CORBA::Boolean remaining_activations);
このメソッドは，oidで指定したオブジェクトのサーバントを非活性化するときに，指定したアダプタによって呼び出されます。このメソッドは，RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。

oid
非活性化するサーバントを持つオブジェクトのオブジェクトID

adapter
アクティブなオブジェクトのスコープを持つPOA

serv
非活性化するサーバント

cleanup_in_progress
このパラメタにTRUEを設定した場合，etherealize_objectsパラメタにTRUEを設定したdeactivateメソッド，またはdestroyメソッドを呼び出したときに，このメソッドが呼び出されます。このパラメタにTRUEを設定しない場合，それ以外の理由でこのメソッドが呼び出されます。

remaining_activations
servに指定したサーバントが，adapterで指定したPOAで他オブジェクトに対応づけられている場合はTRUEを設定し，それ以外の場合はFALSEを設定します。

PortableServer::Servant incarnate(
const PortableServer::ObjectId& oid,
PortableServer::POA_ptr adapter);
このメソッドは，oidに指定した非アクティブ状態のオブジェクトに対するリクエストをPOAが受け取るたびに，POAによって呼び出されます。このメソッドは，RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。
このメソッドを使用するためには，指定したオブジェクトに対応する適切なサーバントを探索，および生成するサーバントマネージャのインプリメンテーションを，ユーザが提供してください。このメソッドが返すサーバントは，アクティブオブジェクトマップにも登録されます。以後，アクティブなオブジェクトに対するリクエストは，サーバントマネージャを呼び出さないで直接そのオブジェクトに対応づけられたサーバントに送られます。
このメソッドが返すサーバントが，すでにほかのオブジェクトIDに対してアクティブで，POAにUNIQUE_IDポリシーがある場合，OBJ_ADAPTER例外が発生します。

oid
活性化するサーバントを持つオブジェクトのオブジェクトID

adapter
オブジェクトを活性化するスコープを持つPOA

22.16　PortableServer::ServantBase

class PortableServer::ServantBase

Portable::ServantBaseクラスは，ご使用のサーバアプリケーションのベースクラスです。

＜この節の構成＞

22.16.1　インクルードファイル

22.16.2　PortableServer::ServantBaseのメソッド

22.16.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.16.2　PortableServer::ServantBaseのメソッド

void _add_ref();
このメソッドは該当するサーバントのリファレンスカウントを追加します。デフォルトインプリメンテーションは何もしないので，このクラスから派生したクラスのリファレンスカウント機能を提供するには，このメソッドをオーバーライドしてください。

PortableServer::POA_ptr _default_POA();
このメソッドは，デフォルトVisiBroker ORBに対して，カレントプロセスのデフォルトVisiBroker ORBの，ルートPOAへのオブジェクトリファレンスを返します。これは，ORB::resolve_initial_references("RootPOA")の呼び出しと同じ戻り値です。必要に応じて，PortableServer::ServantBaseから派生したクラスにこのメソッドをオーバーライドして，独自に選択したPOAを返せます。

CORBA::InterfaceDef_ptr _get_interface();
このメソッドは該当するオブジェクトのインタフェース定義を指すポインタを返します。詳細については，「24.19.2　InterfaceDefのメソッド」を参照してください。

CORBA::Boolean _is_a(
const char *rep_id);
該当するサーバントがリポジトリIDに対応するインタフェースを実装する場合，このメソッドはTRUEを返します。そうでない場合はFALSEを返します。

rep_id
チェックするリポジトリID

void _remove_ref();
このメソッドは該当するサーバントのリファレンスカウントを削除します。デフォルトインプリメンテーションは何もしないので，このクラスから派生したクラスのリファレンスカウント機能を提供するには，このメソッドをオーバーライドしてください。

22.17　PortableServer::ServantLocator

class PortableServer::ServantLocator :
                      public PortableServer::ServantManager

POAにNON_RETAINポリシーがある場合，POAはPortableServer::ServantLocatorオブジェクトであるサーバントマネージャを使用します。サーバントマネージャが返すサーバントは，1件のリクエストにだけ使用できます。

POAは，このサーバントマネージャが返すサーバントは1件のリクエストに対してだけ使用されるということを知っているので，サーバントマネージャのメソッドに追加情報を提供できます。これによってサーバントマネージャの1組のメソッドは，PortableServer::ServantLocatorサーバントマネージャとは異なる処理を実行できます。

＜この節の構成＞

22.17.1　インクルードファイル

22.17.2　PortableServer::ServantLocatorのメソッド

22.17.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.17.2　PortableServer::ServantLocatorのメソッド

PortableServer::Servant preinvoke(
const PortableServer::ObjectId& oid,
PortableServer::POA_ptr adapter,
const char* operation,Cookie& the_cookie);
このメソッドは，POAが現在アクティブの状態にないオブジェクトへのリクエストを受け取ったときに呼び出されます。このメソッドは，NON_RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。
ユーザが提供するサーバントマネージャは，oidに指定したオブジェクトに対応する適切なサーバントを探索，および作成する必要があります。

oid
到着したリクエストに対応するオブジェクトID

adapter
オブジェクトを活性化するPOA

operation
サーバントが返されるときにPOAが呼び出すオペレーションの名前

the_cookie
サーバントマネージャがあとでpostinvokeメソッドに設定して使用できる不特定の値

void postinvoke(
const PortableServer::ObjectId& oid,
PortableServer::POA_ptr adapter,
const char* operation,
Cookie the_cookie,
PortableServer::Servant the_servant);
このメソッドは，サーバントがリクエストの実行を完了するときに呼び出されます。このメソッドは，POAにNON_RETAINポリシーとUSE_SERVANT_MANAGERポリシーがあることを前提とします。このメソッドは，オブジェクトに対するリクエストの一部とみなされます。つまり，メソッドが正常終了したのにpostinvokeメソッドがシステム例外を出力した場合は，このメソッドの正常リターンはオーバーライドされ，リクエストは例外を発生して終了します。
POAが認識しているサーバントをデストラクトした場合，結果は不定です。

oid
到着したリクエストに対応するオブジェクトID

adapter
オブジェクトを活性化するPOA

operation
サーバントが返されるときにPOAが呼び出すオペレーションの名前

the_cookie
サーバントマネージャがpreinvokeメソッドに設定して使用できる不特定の値

the_servant
オブジェクトに対応するサーバント

22.18　PortableServer::ServantManager

class PortableServer::ServantManager

サーバントマネージャは，POAに対応づけられています。サーバントマネージャによってPOAは，POAが「非アクティブ」状態のオブジェクトに対するリクエストを受信したときに，オンデマンドでオブジェクトを活性化できます。

PortableServer::ServantManagerクラスはメソッドを持たないで，ほかの二つのクラス（PortableServer::ServantActivatorとPortableserver::ServantLocator）のベースクラスとして使用します。詳細については，「22.15　PortableServer::ServantActivator」，および「22.17　PortableServer::ServantLocator」を参照してください。PortableServer::ServantActivatorクラスを使用するには，POAにRETAINポリシーが必要です。Portableserver::ServantLocatorクラスを使用するには，POAにNON_RETAINポリシーが必要です。

＜この節の構成＞

22.18.1　インクルードファイル

22.18.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.19　PortableServer::ForwardRequest

class PortableServer::ForwardRequest :public CORBA::UserException

この例外を使用して，別のオブジェクトにリクエストを転送するようにクライアントに指示できます。PortableServer::ServantLocatorのpreinvoke()メソッド，およびPortableServer::ServantActivatorのincarnate()メソッドで使用できます。

＜この節の構成＞

22.19.1　インクルードファイル

22.19.2　PortableServer::ForwardRequestのメソッド

22.19.1　インクルードファイル

このクラスを使用するときは，poa_c.hhファイルをインクルードしてください。

22.19.2　PortableServer::ForwardRequestのメソッド

PortableServer::ForwardRequest(
CORBA::Object_ptr ref);
このメソッドは，指定されたプロパティを持つForwardRequestオブジェクトを生成します。

ref
転送するオブジェクトリファレンス

22.20　SystemException

class CORBA::SystemException : public CORBA::Exception

SystemExceptionクラスは，VisiBroker ORBまたはオブジェクトインプリメンテーションに対して発生する標準システム例外を報告します。このクラスは，Exceptionクラスから派生し，出力ストリームに例外の名前，または記述を出力するメソッドを提供します。Exceptionクラスについては，「22.7　Exception」を参照してください。

SystemExceptionオブジェクトには，例外の原因となるオペレーションが完了しているかを表す，完了ステータスが含まれます。また，SystemExceptionオブジェクトは，設定，および参照できるマイナーコードも含んでいます。

＜この節の構成＞

22.20.1　インクルードファイル

22.20.2　SystemExceptionのメソッド

22.20.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

22.20.2　SystemExceptionのメソッド

CORBA::SystemException(
CORBA::ULong minor = 0,
CORBA::CompletionStatus status = CORBA::COMPLETED_NO);
このメソッドは，指定されたプロパティを持つSystemExceptionオブジェクトを生成します。

minor
マイナーコード

status
次に示す完了ステータスのどれか一つ
CORBA::COMPLETED_YES
CORBA::COMPLETED_NO
CORBA::COMPLETED_MAYBE

CORBA::CompletionStatus completed() const;
このメソッドは，オブジェクトの完了ステータスを返します。

void completed(
CORBA::CompletionStatus status);
このメソッドは，オブジェクトの完了ステータスを設定します。

status
次に示す完了ステータスのどれか一つ
CORBA::COMPLETED_YES
CORBA::COMPLETED_NO
CORBA::COMPLETED_MAYBE

CORBA::ULong minor() const;
このメソッドは，オブジェクトのマイナーコードを返します。

void minor(
CORBA::ULong val);
このメソッドは，オブジェクトのマイナーコードを設定します。

val
マイナーコード

static CORBA::SystemException *_downcast(
CORBA::Exception *exc);
このメソッドは，指定されたExceptionポインタをSystemExceptionポインタにダウンキャストしようとします。指定されたポインタがSystemExceptionオブジェクトまたはSystemExceptionから派生したオブジェクトを指す場合，オブジェクトを指すポインタが返されます。指定されたポインタがSystemExceptionオブジェクトを指していない場合は，NULLポインタが返されます。

注

このメソッドを使って，Exceptionオブジェクトのリファレンスカウントを増やすことはできません。

exc
ダウンキャストされるExceptionポインタ

システム例外一覧を次の表に示します。

表22-1　システム例外一覧（C++）

例外 | 例外の内容
BAD_CONTEXT | サーバに無効コンテキストが渡されました。
BAD_INV_ORDER | オペレーション要求の前に，必要な前提条件オペレーションが呼び出されていません。
BAD_OPERATION | 無効オペレーションが実行されました。
BAD_PARAM | 無効なパラメタが引き渡されました。
BAD_TYPECODE | ORBが不正なTypeCodeを検出しました。
CODESET_INCOMPATIBLE | クライアントとサーバのコードセットに互換がないため，通信に失敗しました。
COMM_FAILURE | 通信障害が発生しました。
DATA_CONVERSION | データ変換エラーが発生しました。
FREE_MEM | メモリを解放できません。
IMP_LIMIT | インプリメンテーションの上限に違反しました。
INITIALIZE | 必要な初期化が実行されませんでした。
INTERNAL | 内部エラーが発生しました。
INTF_REPOS | インタフェースリポジトリへのアクセスエラーが発生しました。
INV_FLAG | 無効フラグが指定されました。
INV_IDENT | 識別子の構文が無効です。
INV_OBJREF | 無効なオブジェクトリファレンスが検出されました。
INV_POLICY | 無効なポリシーの変更が検出されました。
INVALID_TRANSACTION | トランザクションコンテキストが不正です。
MARSHAL | マーシャルパラメタまたは結果が不当です。
NO_IMPLEMENT | オペレーションのインプリメンテーションが使用できません。
NO_MEMORY | 動的メモリ割り当て障害が発生しました。
NO_PERMISSION | 許可されていないオペレーションを実行しようとしました。
NO_RESOURCES | 必要な資源を取得できませんでした。
NO_RESPONSE | クライアントが送信したリクエストの応答がまだありません。
OBJ_ADAPTER | オブジェクトアダプタが障害を検出しました。
OBJECT_NOT_EXIST | リクエストされたオブジェクトが存在していません。
PERSIST_STORE | パーシステントストレージ障害が発生しました。
REBIND | クライアントが，QoSポリシーに矛盾するIORを受信しました。
TIMEOUT | オペレーションがタイムアウトしました。
TRANSACTION_REQUIRED | リクエスト時に無効なトランザクションコンテキストがトランザクションサービスに渡されましたが，アクティブなトランザクションが必要です。
TRANSACTION_ROLLEDBACK | リクエストに対応するトランザクションがすでにロールバックされているか，またはロールバック用にマーキングされています。
TRANSIENT | 通信エラーが検出されましたが，再接続できる場合があります。
UNKNOWN | 未知の例外です。

22.21　UserException

class CORBA::UserException : public CORBA::Exception

UserExceptionベースクラスは，オブジェクトインプリメンテーションが発生させるユーザ例外を派生します。このクラスは，Exceptionクラスから派生しています。

22.22　VISPropertyManager

class VISPropertyManager

このクラスは，ユーザ作成のサーバエンジンプロパティの変更が必要な場合に使用します。詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「これらのプロパティはいつ使用するか」を参照してください。

＜この節の構成＞

22.22.1　インクルードファイル

22.22.2　VISPropertyManagerのメソッド

22.22.1　インクルードファイル

このクラスを使用する場合にはcorba.hファイルをインクルードしてください。

22.22.2　VISPropertyManagerのメソッド

void addProperty(
const char* property, const char* value);
プロパティを設定します。

property
プロパティ名称を表す文字列

value
プロパティの指定値を表す文字列

void addProperty(
const char* property, CORBA::Boolean value);
プロパティを設定します。

property
プロパティ名称を表す文字列

value
プロパティの指定値を表すBoolean

void addProperty(
const char* property, CORBA::ULong value);
プロパティを設定します。

property
プロパティ名称を表す文字列

value
プロパティの指定値を表す定数値

char* getString(
const char* property);
文字列型を指定されるプロパティ値を取得します。存在しないプロパティや，指定値が文字列型ではないプロパティを引数に指定した場合，CORBA::BAD_PARAM例外が発生します。

property
プロパティ名称を表す文字列

CORBA::Boolean getBoolean(
const char* property);
boolean型を指定されるプロパティ値を取得します。存在しないプロパティや，指定値がboolean型ではないプロパティを引数に指定した場合，CORBA::BAD_PARAM例外が発生します。

property
プロパティ名称を表す文字列

CORBA::ULong getULong(
const char* property);
整数型を指定されるプロパティ値を取得します。存在しないプロパティや，指定値が整数型ではないプロパティを引数に指定した場合，CORBA::BAD_PARAM例外が発生します。

property
プロパティ名称を表す文字列

23.　動的インタフェースとクラス（C++）

この章では，C++言語のクライアントアプリケーションが使用する動的起動インタフェース，およびオブジェクトサーバが使用する動的スケルトンインタフェースをサポートするクラスについて説明します。

＜この章の構成＞

23.1　Any

23.2　ContextList

23.3　DynamicImplementation

23.4　DynAny

23.5　DynAnyFactory

23.6　DynArray

23.7　DynEnum

23.8　DynSequence

23.9　DynStruct

23.10　DynUnion

23.11　Environment

23.12　ExceptionList

23.13　NamedValue

23.14　NVList

23.15　Request

23.16　ServerRequest

23.17　TCKind

23.18　TypeCode

23.1　Any

class CORBA::Any

このクラスは，値がタイプセーフで渡せるようなIDL型を表します。このクラスのオブジェクトは，オブジェクトの型を定義するTypeCodeを指すポインタ，およびオブジェクトの値を指すポインタを持っています。オブジェクトを構築・コピーしたりデストラクトしたりするためのメソッド，オブジェクトの型や値を確認したり初期化したりするためのメソッド，およびオブジェクトをストリームに読み込んだり書き込んだりするためのストリーム演算子が，このクラスによって提供されます。コードサンプル23-1にAnyの生成と使用方法を示します。

コードサンプル23-1　Anyオブジェクトの生成と使用

// create an any object
CORBA::Any anObject;
// use the typecode operator to specify that
// 'anObject' object can store long
anObject <<= CORBA::_tc_long;

＜この節の構成＞

23.1.1　インクルードファイル

23.1.2　Anyのメソッド

23.1.3　初期化演算子

23.1.4　抽出演算子

23.1.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.1.2　Anyのメソッド

CORBA::Any();
これは，空のAnyオブジェクトを生成するデフォルトのコンストラクタです。

CORBA::Any(
const CORBA::Any& val);
これは，指定されたターゲットのコピーであるAnyオブジェクトを生成するコピーコンストラクタです。

val
コピーされるオブジェクト

CORBA::Any(
CORBA::TypeCode_ptr tc, void *value,
CORBA::Boolean release = 0);
このコンストラクタは，指定された値，およびTypeCodeで初期化されたAnyオブジェクトを生成します。

tc
このAnyに含まれる値のTypeCode

value
このAnyに含まれる値

release
TRUEを設定した場合，このAnyオブジェクトがデストラクトされた際に，Anyオブジェクトの値に対応するメモリが解放されます。

static CORBA::Any_ptr _duplicate(
CORBA::Any_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを増やし，そのポインタを返します。

ptr
複製されるAny

static CORBA::Any_ptr _nil();
この静的メソッドは，初期化の際に使用できるNULLポインタを返します。

static void _release(
CORBA::Any_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。カウントが0になった場合，そのオブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトは削除されます。

ptr
解放されるAny

23.1.3　初期化演算子

void operator<<=(CORBA::Short);
  void operator<<=(CORBA::UShort);
  void operator<<=(CORBA::Long);
  void operator<<=(CORBA::ULong);
  void operator<<=(CORBA::Float);
  void operator<<=(CORBA::Double);
  void operator<<=(const CORBA::Any&);
  void operator<<=(const char *);
  void operator<<=(CORBA::LongLong);
  void operator<<=(CORBA::ULongLong);
  void operator<<=(CORBA::LongDouble);

これらの演算子は，指定された値でこのオブジェクトを初期化します。これらの演算子によって，指定された値のTypeCodeが自動的に設定されます。このAnyオブジェクトのreleaseフラグにTRUEが設定されている場合，新しい値が代入される前に，このAnyオブジェクトに格納されていた値が解放されます。

void operator<<=(
CORBA::TypeCode_ptr tc);
このメソッドは，指定された値のTypeCodeでこのオブジェクトを初期化します。

tc
このAnyに対して設定するTypeCode

23.1.4　抽出演算子

CORBA::Boolean operator>>=(CORBA::Short&) const;
  CORBA::Boolean operator>>=(CORBA::UShort&) const;
  CORBA::Boolean operator>>=(CORBA::Long&) const;
  CORBA::Boolean operator>>=(CORBA::ULong&) const;
  CORBA::Boolean operator>>=(CORBA::Float&) const;
  CORBA::Boolean operator>>=(CORBA::Double&) const;
  CORBA::Boolean operator>>=(CORBA::Any&) const;
  CORBA::Boolean operator>>=(char *&) const;
  CORBA::Boolean operator>>=(CORBA::LongLong&) const;
  CORBA::Boolean operator>>=(CORBA::ULongLong&) const;
  CORBA::Boolean operator>>=(CORBA::LongDouble&) const;

これらの演算子は，このオブジェクトからの値を，指定されたターゲットに格納します。ターゲットのTypeCodeが，格納されている値のTypeCodeと一致しない場合，FALSEが返され，値は抽出されません。一致する場合は，ターゲットに格納されている値が代入され，TRUEが返されます。

CORBA::Boolean operator>>=(
CORBA::TypeCode_ptr& tc) const;
このメソッドは，このオブジェクトに格納されている値のTypeCodeを抽出します。

tc
このAnyのTypeCodeが格納されているオブジェクト

23.2　ContextList

class CORBA::ContextList

このクラスには，オペレーション要求に対応する可能性のあるコンテキストのリストが含まれます。「23.15　Request」も参照してください。

＜この節の構成＞

23.2.1　ContextListのメソッド

23.2.1　ContextListのメソッド

CORBA::ContextList();
このメソッドは，空のContextリストを構築します。

void add(
const char *ctx);
このメソッドは，指定されたコンテキストをこのオブジェクトのリストに追加します。

ctx
リストに追加されるコンテキスト

void add_consume(
char *ctx);
このメソッドは，指定されたコンテキストコードをこのオブジェクトのリストに追加します。引数で指定されたコンテキストの所有権は，このリストによって引き受けられます。このメソッドを呼び出したあとに，コンテキストへアクセスしたり，コンテキストを解放したりすることはできません。

ctx
リストに追加されるコンテキスト

CORBA::ULong count() const;
このメソッドは，現在リストに格納されている項目数を返します。

const char *item(
CORBA::Long index);
このメソッドは，指定されたインデックスのリストに格納されているコンテキストを指すポインタを返します。そのインデックスが不当な場合，NULLポインタが返されます。返されたコンテキストは解放できません。リストからコンテキストを削除するには，removeメソッドを使用します。

index
返されるコンテキストのインデックス。インデックスは0から始まります。

void remove(
CORBA::long index);
このメソッドは，指定されたインデックスを持つコンテキストをリストから削除します。インデックスが不当な場合は，削除されません。

index
削除されるコンテキストのインデックス。インデックスは0から始まります。

static CORBA::ContextList_ptr _duplicate(
CORBA::ContextList_ptr ptr);
この静的メソッドは，オブジェクトのリファレンスカウントを増やし，そのオブジェクトを指すポインタを返します。

ptr
複製されるオブジェクト

static CORBA::ContextList_ptr _nil();
この静的メソッドは，初期化の際に使用できるNULLポインタを返します。

static void _release(
CORBA::ContextList *ptr);
この静的メソッドは，このオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

ptr
解放されるオブジェクト

23.3　DynamicImplementation

class PortableServer::DynamicImplementation :
                      public virtual PortableServer::ServantBase

このベースクラスを使って，IDLコンパイラによって生成されたスケルトンクラスの代わりに，動的スケルトンインタフェースを使用するオブジェクトインプリメンテーションを派生します。このクラスから派生させるには，invokeメソッドと，_primary_interface()メソッドのインプリメンテーションを提供する必要があります。

＜この節の構成＞

23.3.1　DynamicImplementationのメソッド

23.3.1　DynamicImplementationのメソッド

virtual void invoke(
CORBA::ServerRequest_ptr request) = 0;
このメソッドは，オブジェクトインプリメンテーションに対するクライアントオペレーション要求が受信された際に，必ずPOAによって呼び出されます。このメソッドのインプリメンテーションには，ServerRequestオブジェクトの内容の有効化，リクエスト条件を満たすために必要な処理，およびクライアントに対する結果の送信が含まれます。ServerRequestクラスの詳細については，「23.16　ServerRequest」を参照してください。

request
クライアントのオペレーション要求を表すServerRequestオブジェクト

virtual CORBA::RepositoryId _primary_interface(
const PortableServer::ObjectId& oid,
PortableServer::POA_ptr poa) const;
このメソッドは，POAによってコールバックとして呼び出されます。 DynamicImplementationクラスから継承したサーバントは，このメソッドを実装する必要があります。このメソッドを直接呼び出し以外の状況で呼び出すと，予想できない結果が生じることがあります。_primary_interfaceメソッドは，入力パラメタとしてObjectId値とPOA_ptrを受け取り，そのoidに対して最下位派生インタフェースを示す有効なRepositoryIdを返します。

23.4　DynAny

class DynamicAny::DynAny : public CORBA::PseudoObject

コンパイル時にデータ型が定義されなかった場合，実行時にクライアントアプリケーション，またはサーバがこのクラスのオブジェクトを使用して，データ型の作成と解釈をします。DynAnyは，基本型（boolean，int，floatなど），または複合型（structまたはunion）を格納できます。DynAnyに含まれる型は作成時に定義され，オブジェクトの存在期間内は変更できません。

DynAnyオブジェクトは，データ型を，値を持つ一つ以上のコンポーネントとして表すことがあります。next，seek，rewind，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

DynAnyFactoryはORB::resolve_initial_references("DynAnyFactory")の呼び出しによって生成されます。ファクトリは，基本型や複合型の生成に使用されます。DynAnyFactoryはDynamicAnyモジュールに属します。

基本型のDynAnyオブジェクトは，DynAnyFactory::create_dyn_any_from_type_codeメソッドを使用して作成します。また，DynAnyオブジェクトは，DynAnyFactory::create_dyn_anyメソッドを使用してAnyオブジェクトから作成，および初期化することもできます。これらのメソッドについては，「22.　コアインタフェースとクラス（C++）」を参照してください。

次のインタフェースはDynAnyから派生したもので，動的に管理される構造化型のサポートを提供します。

Array
「23.6　DynArray」を参照してください。

Enumeration
「23.7　DynEnum」を参照してください。

Sequence
「23.8　DynSequence」を参照してください。

Structure
「23.9　DynStruct」を参照してください。

Union
「23.10　DynUnion」を参照してください。

＜この節の構成＞

23.4.1　インクルードファイル

23.4.2　注意事項

23.4.3　DynAnyのメソッド

23.4.4　DynAnyの抽出メソッド

23.4.5　DynAnyの挿入メソッド

23.4.1　インクルードファイル

このクラスを使用するときは，dynany.hファイルをインクルードしてください。

23.4.2　注意事項

DynAnyオブジェクトは，オペレーション要求，およびDIIリクエストのパラメタとして使用できません。また，ORB::object_to_stringメソッドで外部化することもできません。ただし，DynAny::to_anyメソッドを使用してDynAnyオブジェクトをAnyオブジェクトに変換すれば，パラメタとして使用できるようになります。

23.4.3　DynAnyのメソッド

void assign(
DynamicAny::DynAny_ptr dyn_any);
このメソッドは，指定したDynAnyから，このオブジェクト内の値を初期化します。Anyに含まれる型がこのオブジェクトに含まれる型と一致しなかった場合，TypeMismatch例外が発生します。

DynamicAny::DynAny_ptr copy();
このメソッドは，このオブジェクトのコピーを返します。

virtual CORBA::ULong component_count();
このメソッドは，DynAnyに格納された複合型コンポーネントの数をunsigned longとして返します。

virtual DynamicAny::DynAny_ptr current_component();
このメソッドは，このオブジェクト内のカレントコンポーネントを返します。

virtual void destroy();
このメソッドは，このオブジェクトをデストラクトします。

virtual CORBA::Boolean equal(
const DynamicAny::DynAny_ptr value);
このメソッドは，二つのDynAny値が等しいかどうか比較します。等しい場合はTRUEを，等しくない場合はFALSEを返します。

virtual void from_any(
CORBA::Any& value);
このメソッドは，指定したAnyオブジェクトから，このオブジェクトのカレントコンポーネントを初期化します。
Anyに含まれる値のTypeCodeが，このオブジェクトの作成時に定義したTypeCodeと一致しない場合，TypeMismatch例外が発生します。また，渡されたvalueパラメタが不正の場合，InvalidValue例外が発生します。

value
このオブジェクトに設定する値を格納するAnyオブジェクト

virtual boolean next();
このメソッドは，次のコンポーネントがあれば，制御をそこへ進め，TRUEを返します。次のコンポーネントがなければFALSEを返します。

virtual void rewind();
このメソッドは，このオブジェクトのカレントコンポーネントを，DynAnyで定義された先頭のコンポーネントに設定します。
オブジェクトにコンポーネントが一つしかなかった場合，このメソッドは何もしません。

virtual CORBA::Boolean seek(
CORBA::Long index);
このメソッドは，指定したインデックスのコンポーネントをカレントコンポーネントにします。指定したインデックスのコンポーネントがない場合，FALSEを返します。そうでない場合，TRUEを返します。

index
目標コンポーネントのインデックス。インデックスは0から始まります。

virtual CORBA::Any* to_any( );
このメソッドは，DynAnyオブジェクトをAnyオブジェクトに変換し，Anyオブジェクトを指すポインタを返します。

CORBA::TypeCode_ptr type();
このメソッドは，DynAnyが格納する値のTypeCodeを返します。

23.4.4　DynAnyの抽出メソッド

抽出メソッドは，DynAnyオブジェクトのカレントコンポーネントが格納する型を返すメソッドの集まりです。コードサンプル23-2に各抽出メソッドの名前を示します。

使用した抽出メソッドの返す型が，DynAnyが格納する値と一致しない場合，TypeMismatch例外が発生します。

コードサンプル23-2　DynAnyクラスが提供する抽出メソッド

virtual CORBA::Any* get_any();
virtual CORBA::Boolean get_boolean();
virtual CORBA::Char get_char();
virtual CORBA::Double get_double();
virtual DynamicAny::DynAny* get_dyn_any();
virtual CORBA::Float get_float();
virtual CORBA::Long get_LongLong();
virtual CORBA::Long get_longlong();
virtual CORBA::Octet get_octet();
virtual CORBA::Object_ptr get_reference();
virtual CORBA::Short get_short();
virtual char* get_string();
virtual CORBA::TypeCode_ptr get_typecode();
virtual CORBA::ULong get_ulong();
virtual CORBA::ULongLong get_ulonglong();
virtual CORBA::UShort get_ushort();
virtual CORBA::ValueBase* get_val();
virtual CORBA::WChar get_wchar();
virtual CORBA::WChar* get_wstring();

（UNIX）
virtual CORBA::LongDouble get_longdouble();

23.4.5　DynAnyの挿入メソッド

挿入メソッドは，特定の型の値を，DynAnyオブジェクトのカレントコンポーネントにコピーするメソッドの集まりです。コードサンプル23-3に，さまざまな型の挿入例を示します。

挿入したオブジェクトの型が，DynAnyオブジェクトの型と一致しない場合，InvalidValue例外を発行します。

コードサンプル23-3　DynAnyクラスが提供する挿入メソッド

virtual void insert_any(const CORBA:Any& value);
virtual void insert_boolean(CORBA::Boolean value);
virtual void insert_char(CORBA::Char value);
virtual void insert_double(CORBA::Double value);
virtual void insert_dyn_any (DynamicAny::DynAny_ph_value);
virtual void insert_float(CORBA::Float value);
virtual void insert_long(CORBA::Long value);
virtual void insert_longlong(CORBA::LongLong value);
virtual void insert_octet(CORBA::Octet value);
virtual void insert_reference(CORBA:Object_ptr value);
virtual void insert_short(CORBA::Short value);
virtual void insert_string(const char* value);
virtual void insert_typecode(CORBA:TypeCode_ptr value);
virtual void insert_ulong(CORBA::ULong value);
virtual void insert_ulonglong(CORBA::ULongLong value);
virtual void insert_ushort(CORBA::UShort value);
virtual void insert_val(count CORBA::ValueBase& value);
virtual void insert_wchar(CORBA::WChar value);
virtual void insert_wstring(const CORBA::WChar* value);

（UNIX）
virtual void insert_longdouble(CORBA::LongDouble value);

23.5　DynAnyFactory

class DynamicAny::DynAnyFactory : public CORBA::PseudoObject

DynAnyFactoryオブジェクトは，新しいDynAnyオブジェクトの生成に使用します。DynAnyFactoryオブジェクトのリファレンスを取得するには，ORB::resolve_initial_references("DynAnyFactory")を呼び出します。

＜この節の構成＞

23.5.1　DynAnyFactoryのメソッド

23.5.1　DynAnyFactoryのメソッド

DynamicAny::DynAny_ptr create_dyn_any(
const CORBA::Any& value);
このメソッドは，指定した値のDynAnyオブジェクトを作成します。

value
作成するDynAnyオブジェクトの値

DynamicAny::DynAny_ptr create_dyn_any_from_type_code(
CORBA::TypeCode_ptr type);
このメソッドは，指定した型のDynAnyオブジェクトを作成します。

type
作成するDynAnyオブジェクトの型

23.6　DynArray

class DynamicAny::DynArray : public VISDynComplex

コンパイル時にデータ型が定義されなかった場合，実行時にクライアントアプリケーション，またはサーバがこのクラスのオブジェクトを使用して，配列データ型の作成と解釈をします。DynArrayは，基本型（boolean，int，floatなど），または複合型（struct，unionなど）を格納できます。

DynAnyに含まれる型は作成時に定義され，オブジェクトの存在期間内は変更できません。

DynAnyから継承したnext，rewind，seek，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

VISDynComplexクラスはhelperクラスの一つで，このクラスによってVisiBroker ORBは複雑なDynAnyの型を管理できます。

＜この節の構成＞

23.6.1　注意事項

23.6.2　DynArrayのメソッド

23.6.1　注意事項

DynAnyオブジェクトは，オペレーション要求，およびDIIリクエストのパラメタとして使用できません。また，ORB::object_to_stringメソッドで外部化することもできません。ただし，DynAny::to_anyメソッドを使用してDynArrayオブジェクトをAnyオブジェクトのシーケンスに変換すれば，パラメタとして使用できるようになります。

23.6.2　DynArrayのメソッド

virtual void destroy();
このメソッドは，このオブジェクトをデストラクトします。

CORBA::AnySeq* get_elements();
このメソッドは，このオブジェクトが格納する値を含むAnyオブジェクトのシーケンスを返します。

void set_elements(
CORBA::AnySeq& _value);
このメソッドは，valueパラメタで指定したシーケンスの要素に，DynArrayの要素を設定します。

DynamicAny::DynAnySeq* get_elements_as_dyn_any();
このメソッドは，DynAnyの要素をDynAnyシーケンスとして返します。

void set_elements_as_dyn_any(
const DynamicAny::DynAnySeq& value);
このメソッドは，指定したDynAnyシーケンスから，このオブジェクトに含まれる要素を設定します。
value内の要素数がこのDynArrayの要素数と一致しない場合，InvalidValue例外が発生します。Anyに含まれる値のTypeCodeが，このオブジェクトの作成時に定義したTypeCodeと一致しない場合，TypeMismatch例外が発生します。

value
DynArrayに値を設定するAnyオブジェクトの配列

23.7　DynEnum

class DynamicAny::DynEnum : public DynamicAny::DynAny

コンパイル時に列挙体の値が定義されなかった場合，実行時にクライアントアプリケーション，またはサーバがこのクラスのオブジェクトを使用して，値の作成と解釈をします。

この型が含むコンポーネントは一つだけなので，DynEnumオブジェクトに対してDynAny::rewindメソッド，またはDynAny::nextメソッドを起動すると，常にFALSEを返します。

＜この節の構成＞

23.7.1　注意事項

23.7.2　DynEnumのメソッド

23.7.1　注意事項

DynEnumオブジェクトは，オペレーション要求，およびDIIリクエストのパラメタとして使用できません。また，ORB::object_to_stringメソッドで外部化することもできません。ただし，to_anyメソッドを使用してDynEnumオブジェクトをAnyオブジェクトに変換すれば，パラメタとして使用できるようになります。

23.7.2　DynEnumのメソッド

void from_any(
const CORBA::Any& value);
このメソッドは，指定したAnyオブジェクトから，このオブジェクトの値を初期化します。
Anyに含まれる値のTypeCodeが，このオブジェクトの作成時に定義したTypeCodeと一致しない場合，Invalid例外が発生します。

value
Anyオブジェクト

CORBA::Any* to_any();
カレントコンポーネントの値を格納するAnyオブジェクトを返します。

char* get_as_string();
このメソッドは，DynEnumオブジェクトの値を文字列として返します。

void set_as_string(
const char* value_as_string);
このメソッドは，指定した文字列に，DynEnumの値を設定します。

value_as_string
このDynEnumに値を設定するために使用する文字列

CORBA::ULong get_as_ulong();
このメソッドは，DynEnumオブジェクトの値を格納するunsigned longを返します。

void set_as_ulong(
CORBA::ULong value_as_ulong);
このメソッドは，指定したCORBA::Ulongに，DynEnumの値を設定します。

value_as_ulong
DynEnumに値を設定するために使用する整数

23.8　DynSequence

class DynamicAny::DynSequence : public DynamicAny::DynArray

コンパイル時にシーケンスデータ型が定義されなかった場合，実行時にクライアントアプリケーション，またはサーバがこのクラスのオブジェクトを使用して，シーケンスデータ型の作成と解釈をします。DynSequenceは，基本型（boolean，int，floatなど），または複合型（struct，unionなど）を格納できます。DynSequenceに含まれる型は作成時に定義され，オブジェクトの存在期間内は変更できません。

next，rewind，seek，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

＜この節の構成＞

23.8.1　注意事項

23.8.2　DynSequenceのメソッド

23.8.1　注意事項

DynSequenceオブジェクトは，オペレーション要求，およびDIIリクエストのパラメタとして使用できません。また，ORB::object_to_stringメソッドで外部化することもできません。ただし，to_anyメソッドを使用してDynSequenceオブジェクトをAnyオブジェクトのシーケンスに変換すれば，パラメタとして使用できるようになります。

23.8.2　DynSequenceのメソッド

CORBA::ULong get_length();
このメソッドは，このDynSequenceが格納する要素数を返します。

void set_length(
CORBA::ULong length);
このメソッドは，このDynSequenceが格納できる要素数を設定します。
カレント要素数より小さい値（length）を指定すると，指定した数までのシーケンスが格納されます。

length
このDynSequenceが格納するコンポーネントの数

CORBA::AnySeq * get_elements();
このメソッドは，このオブジェクトに格納された値を含むAnyオブジェクトのシーケンスを返します。

void set_elements(
const AnySeq& _value);
このメソッドは，指定されたAnyオブジェクトのシーケンスで，このオブジェクト内に要素を設定します。

void set_elements_as_dyn_any(
const DynamicAny::DynAnySeq& value);
このメソッドの詳細については，「23.6　DynArray」を参照してください。

DynamicAny::DynAnySeq* get_elements_as_dyn_any();
このメソッドの詳細については，「23.6　DynArray」を参照してください。

23.9　DynStruct

class DynamicAny::DynStruct : public VISDynComplex

コンパイル時に構造体が定義されなかった場合，実行時にクライアントアプリケーション，またはサーバがこのクラスのオブジェクトを使用して，作成と解釈をします。

next，rewind，seek，およびcurrent_componentメソッドを使用して，各構造体メンバ間を自由に行き来できます。

DynStructオブジェクトは，DynAnyFactory::create_dyn_any_from_type_codeメソッドを起動することで作成されます。

＜この節の構成＞

23.9.1　注意事項

23.9.2　DynStructのメソッド

23.9.1　注意事項

DynStructオブジェクトは，オペレーション要求，およびDIIリクエストのパラメタとして使用できません。また，ORB::object_to_stringメソッドで外部化することもできません。ただし，to_anyメソッドを使用してDynStructオブジェクトをAnyオブジェクトに変換すれば，パラメタとして使用できるようになります。

23.9.2　DynStructのメソッド

void destroy();
このメソッドは，このオブジェクトをデストラクトします。

CORBA::FieldName current_member_name();
このメソッドは，カレントコンポーネントのメンバ名を返します。

CORBA::TCKind current_member_kind();
このメソッドは，カレントコンポーネントに対応するTypeCodeを返します。

DynamicAny::NameValuePairSeq get_members();
このメソッドは，この構造体のすべてのメンバを，NameValuePairオブジェクトのシーケンスとして返します。

void set_members(
const DynamicAny::NameValuePairSeq& value);
このメソッドは，NameValuePairオブジェクトの配列から，構造体メンバを設定します。

DynamicAny::Name DynAnyPairSeq get_members_as_dyn_any();
このメソッドは，構造体メンバを，NameDynAnyPairシーケンスとして返します。

void set_members_as_dyn_any(
const DynamicAny::nameDynAnyPairSeq value);
このメソッドは，NameDynAnyPairオブジェクトから，構造体メンバを設定します。
valueのシーケンスの長さと，このDynStructオブジェクトのメンバ数が一致しない場合，InvalidValue例外が発生します。要素のタイプコードに構造体のタイプコードと一致しないものが一つでもある場合，TypeMismatch例外が発生します。

23.10　DynUnion

class DynamicAny::DynUnion : public VISDynComplex

コンパイル時にunionが定義されなかった場合，実行時にクライアントアプリケーション，またはサーバがこのインタフェースを使用して，unionの作成と解釈をします。DynUnionには，unionの識別子と実メンバの二つの要素のシーケンスがあります。

next，rewind，seek，およびcurrent_componentメソッドを使用して，各コンポーネント間を自由に行き来できます。

DynUnionオブジェクトは，DynamicAny::DynAnyFactory::create_dyn_any_from_type_codeメソッドを起動し，union型を引数として渡すことで作成されます。

＜この節の構成＞

23.10.1　注意事項

23.10.2　DynUnionのメソッド

23.10.1　注意事項

DynUnionオブジェクトは，オペレーション要求，およびDIIリクエストのパラメタとして使用できません。また，ORB::object_to_stringメソッドで外部化することもできません。ただし，DynAny::to_anyメソッドを使用してDynUnionオブジェクトをAnyオブジェクトに変換すれば，パラメタとして使用できるようになります。

23.10.2　DynUnionのメソッド

DynamicAny::DynAny_ptr get_discriminator();
このメソッドは，unionの識別子を格納するDynAnyオブジェクトを返します。

CORBA::TCKind discriminator_kind();
このメソッドは，unionの識別子のタイプコードを返します。

DynamicAny::DynAny_ptr member();
このメソッドは，unionのメンバであるカレントコンポーネントのDynAnyオブジェクトを返します。

CORBA::TCKind member_kind();
このメソッドは，unionのメンバであるカレントコンポーネントのタイプコードを返します。

CORBA::FieldName member_name();
このメソッドは，カレントコンポーネントのメンバ名を返します。

void set_discriminator(
DynamicAny::DynAny_ptr value);
このメソッドは，DynUnionのディスクリミネータを，指定した値に設定します。

void set_to_default_member();
このメソッドは，ディスクリミネータを，unionのデフォルト値と一致する値に設定します。

void set_to_no_active_member();
このメソッドは，ディスクリミネータを，どのunionのケースラベルにも対応しない値に設定します。

boolean has_no_active_member();
このメソッドは，unionにアクティブなメンバがない場合，つまり，ディスクリミネータの値が明示的なケースラベルとしてリストされていないため，unionの値がディスクリミネータだけで構成されている場合，TRUEを返します。

23.11　Environment

class CORBA::Environment

Environmentクラスは，C++言語例外がサポートされていないプラットフォーム上でシステム例外，およびユーザ例外の両方にアクセスし，それらの例外を報告するために使います。ユーザ例外がオブジェクトのメソッドによって発生したものであるとインタフェースが指定する場合，Environmentクラスがそのメソッドの明示的なパラメタとなります。インタフェースが例外を発生させない場合，Environmentクラスは，暗黙的なパラメタとなり，システム例外を報告するだけの目的で使用されます。クライアントからスタブへEnvironmentオブジェクトが渡されない場合，各オブジェクトのEnvironmentのデフォルトが使用されます。

マルチスレッドアプリケーションには，各スレッドに対してグローバルEnvironmentオブジェクトが生成されます。マルチスレッドではないアプリケーションは，グローバルEnvironmentオブジェクトが一つしかありません。

＜この節の構成＞

23.11.1　インクルードファイル

23.11.2　Environmentのメソッド

23.11.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.11.2　Environmentのメソッド

void ORB::create_environment(
CORBA::Environment_ptr& ptr);
このメソッドは，新しいEnvironmentオブジェクトの生成に使用できます。

注

このメソッドはCORBA準拠のために提供されています。Environmentクラス用のコンストラクタ，またはC++言語のnew演算子を使用した方が便利な場合があります。

ptr
新しく生成されたオブジェクトを指すように設定されたポインタ

Environment();
このメソッドは，Environmentオブジェクトを生成するコンストラクタです。このメソッドの呼び出しは，ORB::create_environmentメソッドの呼び出しに相当します。

static CORBA::Environment& current_environment();
この静的メソッドは，アプリケーションプロセスのグローバルEnvironmentオブジェクトに対するリファレンスを返します。マルチスレッドのアプリケーションでは，スレッドに対するグローバルEnvironmentオブジェクトが返されます。

void exception(
CORBA::Exception *exp);
このメソッドは，引数として渡されたExceptionオブジェクトを記録します。指定されたオブジェクトがExceptionオブジェクトの所有権を引き受け，Environment自体が削除される際に，その所有権を破棄します。したがって，Exceptionオブジェクトは動的に割り当てられる必要があります。このメソッドにNULLポインタを渡すことは，Environmentでclearメソッドを呼び出すことに相当します。

exp
Environmentで記録されるExceptionオブジェクトを指すポインタ。このExceptionオブジェクトは動的に割り当てられます。

CORBA::Exception *exception() const;
このメソッドは，Environmentに現在記録されているExceptionを指すポインタを返します。この呼び出しによって返されたExceptionポインタに対してdeleteを呼び出さないでください。記録されているExceptionがない場合，NULLポインタが返されます。

void clear();
このメソッドを使って，Environmentが保持するExceptionオブジェクトをEnvironment自体に削除させます。オブジェクトが例外を持たない場合，このメソッドは有効にはなりません。

23.12　ExceptionList

class CORBA::ExceptionList

このクラスは，オペレーション要求によって発生する可能性のある例外を表すタイプコードのリストを含みます。「23.15　Request」を参照してください。

＜この節の構成＞

23.12.1　ExceptionListのメソッド

23.12.1　ExceptionListのメソッド

CORBA::ExceptionList();
このメソッドは，空の例外リストを生成するコンストラクタです。

CORBA::ExceptionList(
CORBA::ExceptionList& list);
このメソッドはコピーコンストラクタです。

list
コピーされるリスト

~CORBA::ExceptionList();
このメソッドは，デフォルトデストラクタです。

void add(
CORBA::TypeCode_ptr tc);
このメソッドは，オブジェクトのリストに指定された例外のタイプコードを追加します。

tc
リストに追加される例外のタイプコード

void add_consume(
CORBA::TypeCode_ptr tc);
このメソッドは，指定された例外のタイプコードをこのオブジェクトのリストに追加します。渡された引数の所有権は，ExceptionListが引き受けます。このメソッドを呼び出したあとに，渡された引数へのアクセス，およびその解放はしないでください。

tc
リストに追加される例外のタイプコード

CORBA::ULong count() const;
このメソッドは，リストに現在格納されている項目の数を返します。

CORBA::TypeCode_ptr item(
CORBA::Long index);
このメソッドは，指定されたインデックスのリストに格納されているTypeCodeを指すポインタを返します。インデックスが不当な場合，NULLポインタが返されます。このメソッドを呼び出したあとに，渡された引数へアクセスしたり，その引数を解放したりできません。リストからTypeCodeを削除するには，removeメソッドを使用します。

index
返されるタイプコードのインデックス。インデックスは0から始まります。

void remove(
CORBA::long index);
このメソッドは，指定されたインデックスを持つTypeCodeをリストから削除します。インデックスが不当な場合は，削除されません。

index
削除するタイプコードのインデックス。インデックスは0から始まります。

static CORBA::ExceptionList_ptr _duplicate(
CORBA::ExceptionList_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを増やし，そのオブジェクトを指すポインタを返します。

ptr
複製されるオブジェクト

static CORBA::ExceptionList_ptr _nil();
この静的メソッドは，初期化に使用できるNULLポインタを返します。

static void _release(
CORBA::ExceptionList *ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

ptr
解放するオブジェクト

23.13　NamedValue

class CORBA::NamedValue

NamedValueクラスは，動的起動インタフェースリクエストのパラメタ，またはリターン値として使用される名前・値ペアを表すためのクラスです。このクラスのオブジェクトは，NVListにグループ化されます。名前・値ペアの値は，Anyクラスを使って表します。NVListクラスの詳細については，「23.14　NVList」を，Requestクラスの詳細については，「23.15　Request」を参照してください。

＜この節の構成＞

23.13.1　インクルードファイル

23.13.2　NamedValueのメソッド

23.13.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.13.2　NamedValueのメソッド

CORBA::Flags flags() const;
このメソッドは，名前・値ペアがどのように使用されるかを定義するフラグを返します。次のどれかが返されます。

ARG_IN

inパラメタとして使用します。

ARG_OUT

outパラメタとして使用します。

ARG_INOUT

inoutパラメタとして使用します。

IN_COPY_VALUE

このフラグと，ARG_INOUTフラグを組み合わせると，ORBがoutパラメタのコピーを作成するように指定できます。これによってクライアントアプリケーションのメモリに影響を及ぼすことなく，そのパラメタのメモリを解放できます。

const char *name() const;
このメソッドは，このオブジェクトの名前・値ペアの名前の部分だけを返します。返された引数がポイントしているメモリを絶対に解放しないでください。

CORBA::Any *value() const;
このメソッドは，このオブジェクトの名前・値ペアの値の部分だけを返します。返された引数がポイントしているメモリを絶対に解放しないでください。

static CORBA::NamedValue_ptr _duplicate(
CORBA::NamedValue_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを増やし，そのオブジェクトを指すポインタを返します。

ptr
複製されるオブジェクト

static CORBA::NamedValue_ptr _nil();
この静的メソッドは，CORBA::NamedValue_ptrの初期化に使用できるNULLポインタを返します。

static void _release(
CORBA::NamedValue *ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

ptr
解放するオブジェクト

23.14　NVList

class CORBA::NVList

NVListクラスは，NamedValueオブジェクトのリストを含ませるために使用されます。また，動的起動インタフェースリクエストに対応するパラメタを渡すために使用されます。NamedValueオブジェクトについては，「23.13　NamedValue」を，Requestクラスについては，「23.15　Request」を参照してください。

リストに項目を追加する際に使用できるメソッドが提供されています。返された引数がポイントしているメモリを絶対に解放しないでください。リストからの項目を削除する際には，必ずremoveメソッドを使用してください。

＜この節の構成＞

23.14.1　インクルードファイル

23.14.2　NVListのメソッド

23.14.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.14.2　NVListのメソッド

CORBA::NamedValue_ptr add(
CORBA::Flags flags);
このメソッドは，フラグだけを初期化し，NamedValueオブジェクトをリストに追加します。追加されたオブジェクトの名前，またはオブジェクトの値は初期化されません。NamedValueの名前および値の属性を初期化するために，返されたポインタを使用できます。返された引数がポイントしているメモリを絶対に解放しないでください。

flags
NamedValueオブジェクトの用途を表すフラグ。このフラグは，ARG_IN，ARG_OUT，ARG_INOUTのどれかになります。

CORBA::NamedValue_ptr add_item(
const char *name, CORBA::Flags flag);
このメソッドは，オブジェクトのフラグまたは名前の属性を初期化して，NamedValueオブジェクトをリストに追加します。NamedValueの値の属性を初期化するために，返されたポインタを使用できます。
返された引数がポイントしているメモリを絶対に解放しないでください。

name
名前

flag
NamedValueオブジェクトの用途を表すフラグ。このフラグは，ARG_IN，ARG_OUT，ARG_INOUTのどれかになります。

NamedValue_ptr add_item_consume(
char *nm, CORBA::Flags flag);
nmが示すメモリの管理がNVListによって引き継がれるという点を除き，このメソッドはadd_itemメソッドと同じです。そのリストがすでにnmのコピーや解放をしている可能性があるので，このメソッドを呼び出したあとは，nmにアクセスできません。この項目を削除すると，自動的にそのメモリが解放されます。
このメソッドのリターン値のメモリを絶対に解放しないでください。

nm
名前

flag
NamedValueオブジェクトの用途を表すフラグ。このフラグは，ARG_IN，ARG_OUT，ARG_INOUTのどれかになります。

CORBA::NamedValue_ptr add_value(
const char *name,
const CORBA::Any *value,
CORBA::Flags flag);
このメソッドは，オブジェクトのフラグ，名前，および値を初期化して，リストにNamedValueを追加します。NamedValueオブジェクトを指すポインタが返されます。
返された引数がポイントしているメモリを絶対に解放しないでください。

name
名前

value
値

flag
NamedValueオブジェクトの用途を表すフラグ。このフラグは，ARG_IN，ARG_OUT，ARG_INOUTのどれかになります。

NamedValue_ptr add_value_consume(
char *nm,
CORBA::Any *value,
CORBA::Flags flag);
このメソッドは，nmまたはvalueが示すメモリの管理をNVListが引き継ぐという点を除き，add_valueメソッドと同じです。そのリストがすでにnmのコピーや解放をしている可能性があるので，このメソッドを呼び出したあとは，nmまたはvalueにアクセスできません。この項目を削除すると，自動的にそのメモリが解放されます。

nm
名前

value
値

flag
NamedValueオブジェクトの用途を表すフラグ。このフラグは，ARG_IN，ARG_OUT，ARG_INOUTのどれかになります。

CORBA::Long count() const;
このメソッドは，リスト内にあるNamedValueオブジェクトの数を返します。

static CORBA::Boolean CORBA::is_nil(
NVList_ptr obj);
指定されたNamedValueポインタがNULLの場合，このメソッドはTRUEを返します。

obj
チェックされるオブジェクトを指すポインタ

NamedValue_ptr item(
CORBA::Long index);
このメソッドは，指定されたインデックスを持つリストのNamedValueを返します。
返された引数がポイントしているメモリを絶対に解放しないでください。

index
NamedValueオブジェクトのインデックス。インデックスは0から始まります。

static void CORBA::release(
CORBA::NVList_ptr obj);
この静的メソッドは指定されたオブジェクトを解放します。

obj
解放されるオブジェクト

Status remove(
CORBA::Long index);
このメソッドは，指定されたインデックスにあるリストからNamedValueオブジェクトを削除します。add_item_consumeまたはadd_value_consumeメソッドを使用して追加されたリストの項目が格納されているメモリは，その項目が削除される前に解放されます。

index
NamedValueオブジェクトのインデックス。インデックスは0から始まります。

static CORBA::NVList_ptr _duplicate(
CORBA::NVList_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを増やし，そのオブジェクトを指すポインタを返します。

ptr
複製されるオブジェクト

static CORBA::NVList_ptr _nil();
この静的メソッドは，NV_Listポインタの初期化に使用できるNULLポインタを返します。例を次に示します。

CORBA::NV_List_ptr p = CORBA::NVList::_nil();

static void _release(
CORBA::NVList *ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

ptr
解放されるオブジェクト

23.15　Request

class CORBA::Request

Requestクラスは，動的起動インタフェースを使ってORBオブジェクトに対するオペレーションを呼び出す際に，クライアントアプリケーションによって使用されます。一つのRequestオブジェクトに対して一つのORBオブジェクトが対応づけられます。Requestは，ORBオブジェクトに対して実行されるオペレーションを表します。Requestには，渡される必要のある引数，Context，およびEnvironmentオブジェクトが含まれます。また，リクエストを呼び出したり，オブジェクトインプリメンテーションからの応答を受信したり，オペレーションの結果を取得したりするためのメソッドか提供されています。

「22.8.2　CORBA::Objectのメソッド」のObject::_create_requestを使って，Requestオブジェクトを生成できます。

Requestオブジェクトがすべての返されたパラメタの所有権を保持することに注意してください。それらのパラメタを絶対に解放しないでください。

＜この節の構成＞

23.15.1　インクルードファイル

23.15.2　Requestのメソッド

23.15.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.15.2　Requestのメソッド

CORBA::Any& add_in_arg();
このメソッドは，名前が付けられていないin引数をRequestに追加し，そのAnyオブジェクトのリファレンスを返すことによって，そのin引数の名前，型，および値を設定できるようにします。

CORBA::Any& add_in_arg(
const char *name);
このメソッドは，名前が付けられているin引数をRequestに追加し，そのAnyオブジェクトのリファレンスを返すことによって，そのin引数の型，および値を設定できるようにします。
このメソッドのリターン値のメモリを絶対に解放しないでください。

name
追加されるin引数の名前

CORBA::Any& add_inout_arg();
このメソッドは，名前が付けられていないinout引数をRequestに追加し，そのAnyオブジェクトのリファレンスを返すことによって，そのinout引数の名前，型，および値を設定できるようにします。

CORBA::Any& add_inout_arg(
const char *name);
このメソッドは，名前が付けられているinout引数をRequestに追加し，そのAnyオブジェクトのリファレンスを返すことによって，そのinout引数の型，および値を設定できるようにします。

name
追加されるinout引数の名前

CORBA::Any& add_out_arg();
このメソッドは，名前が付けられていないout引数をRequestに追加し，そのAnyオブジェクトのリファレンスを返すことによって，そのout引数の名前，型，および値を設定できるようにします。

CORBA::Any& add_out_arg(
const char *name);
このメソッドは，名前が付けられているout引数をRequestに追加し，そのAnyオブジェクトのリファレンスを返すことによって，そのout引数の型，および値を設定できるようにします。

name
追加されるout引数の名前

CORBA::NVList_ptr arguments();
このメソッドは，このリクエストの引数を含んでいるNVListオブジェクトを指すポインタを返します。引数の値を設定したり取得したりする際に，このポインタを使えます。NVListの詳細については，「23.14　NVList」を参照してください。
このメソッドのリターン値のメモリを絶対に解放しないでください。

CORBA::ContextList_ptr contexts();
このメソッドは，Requestに対応するすべてのContextオブジェクトのリストを指すポインタを返します。Contextクラスの詳細については，「22.5　Context」を参照してください。
このメソッドのリターン値のメモリを絶対に解放しないでください。

CORBA::Context_ptr ctx() const;
このメソッドは，このリクエストに対応するContextを指すポインタを返します。

void ctx(
CORBA::Context_ptr ctx);
このメソッドは，このリクエストで使用されるContextを設定します。Contextクラスの詳細については，「22.5　Context」を参照してください。

ctx
このリクエストに対応づけられるContextオブジェクト

CORBA::Environment_ptr env();
このメソッドは，このリクエストに対応するEnvironmentを指すポインタを返します。Environmentクラスの詳細については，「23.11　Environment」を参照してください。

CORBA::ExceptionList_ptr exceptions();
このメソッドは，このリクエストによって発生されるすべての例外のリストを指すポインタを返します。
このメソッドのリターン値のメモリを絶対に解放しないでください。

void get_response();
オブジェクトインプリメンテーションからの応答を取得するために，send_deferredが呼び出されたあとに，このメソッドを使用します。応答がない場合，このメソッドは，クライアントアプリケーションが応答を受信するまで待ちます。

void invoke();
このメソッドは，このリクエストに対応するORBオブジェクトに対してRequestを呼び出します。このメソッドは，クライアントが，オブジェクトインプリメンテーションからの応答を受信するまで待ちます。このメソッドを呼び出す前に，Requestをターゲットオブジェクト，オペレーション名，および引数で初期化します。

const char* operation() const;
このメソッドは，このリクエストが表すオペレーションの名前を返します。

CORBA::Boolean poll_response();
応答を待たないこのメソッドは，send_deferredメソッドが，応答を受信したかを判別したあとに呼び出されます。応答が受信されている場合，このメソッドはTRUEを返し，そうでない場合はFALSEを返します。

CORBA::NamedValue_ptr result();
このメソッドは，オペレーションのリターン値が格納されるNamedValueオブジェクトを指すポインタを返します。このポインタは，オブジェクトインプリメンテーションによって，リクエストが処理されたあとの結果値を参照するのに使用できます。NamedValueクラスの詳細については，「23.13　NamedValue」を参照してください。

CORBA::Any& return_value();
このメソッドは，このRequestオブジェクトのリターン値を表すAnyオブジェクトのリファレンスを返します。

void set_return_type(
CORBA::TypeCode_ptr tc);
このメソッドは，受け取るTypeCodeのリターン値を設定します。invokeメソッドまたはsendメソッドのどちらかを呼び出す前に，リターン値の型を設定する必要があります。

tc
リターン値の型

void send_deferred();
このメソッドは，invokeメソッドと同様に，このRequestをオブジェクトインプリメンテーションへ送信します。しかし，invokeメソッドとは異なり，このメソッドは応答を待ちません。クライアントアプリケーションはget_responseメソッドを使って応答を取得できます。

void send_oneway();
このメソッドは，一方向オペレーションとしてこのRequestを呼び出します。一方向オペレーションは，オブジェクトインプリメンテーションからクライアントアプリケーションへ送信される応答を待ちません。また，そのような応答を送信することもありません。

CORBA::Object_ptr target() const;
このメソッドは，このリクエストが実行されるターゲットオブジェクトのリファレンスを返します。

static CORBA::Request_ptr _duplicate(
CORBA::Request_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを増やし，そのオブジェクトを指すポインタを返します。

ptr
複製されるポインタ

static CORBA::Request_ptr _nil();
この静的メソッドは，CORBA::Request_ptrオブジェクトの初期化に使用できるNULLポインタを返します。

static void _release(
CORBA::Request *ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

ptr
解放されるオブジェクト

23.16　ServerRequest

class CORBA::ServerRequest

ServerRequestクラスは，動的スケルトンインタフェースを使用するオブジェクトインプリメンテーションによって受信される，オペレーション要求を表します。POAは，クライアントオペレーション要求を受信すると，そのオブジェクトインプリメンテーションのinvokeメソッドを呼び出し，この型のオブジェクトを渡します。

このクラスは，リクエストされたオペレーション，および引数を判別するオブジェクトインプリメンテーションにとって必要なメソッドを提供します。また，リターン値の設定，およびクライアントアプリケーションへの例外の反映のために必要なメソッドも提供します。

このクラスが返す値に対応するメモリを絶対に解放しないでください。

動的スケルトンの使用については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「動的スケルトンインタフェースの使用」の記述を参照してください。

＜この節の構成＞

23.16.1　インクルードファイル

23.16.2　ServerRequestのメソッド

23.16.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.16.2　ServerRequestのメソッド

void arguments(
CORBA::NVList_ptr params);
このメソッドは，このリクエストのパラメタリストを設定します。

params
項目を追加するパラメタリスト。このメソッドを呼び出す前に，適切な数のAnyオブジェクトでこのリストを初期化し，それらの型とフラグの値を設定します。

CORBA::Context_ptr ctx();
このメソッドは，リクエストに対応するContextオブジェクトを返します。
このメソッドのリターン値のメモリを絶対に解放しないでください。

const char *operation() const;
リクエストされたオペレーションの名前を返します。

void set_exception(
const CORBA::Any& a);
このメソッドは，クライアントアプリケーションに反映される例外を設定します。

a
例外を表すAnyオブジェクト

void set_result(
const CORBA::Any& a);
このメソッドは，クライアントアプリケーションに反映される結果を設定します。

a
リターン値を表すAnyオブジェクト

static CORBA::ServerRequest_ptr _duplicate(
CORBA::ServerRequest_ptr ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを増やし，そのオブジェクトを指すポインタを返します。

ptr
複製されるオブジェクト

static CORBA::ServerRequest_ptr _nil();
この静的メソッドは，初期化に使用できるNULLポインタを返します。

static void _release(
CORBA::ServerRequest *ptr);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

ptr
解放されるオブジェクト

23.17　TCKind

enum TCKind

この列挙体は，TypeCodeオブジェクトが表す，いろいろな型を記述しています。TypeCodeオブジェクトについては，「23.18　TypeCode」を参照してください。その値を次の表に示します。

表23-1　型の一覧（TCKind）（C++）

名前 | 意味
tk_abstract_interface | 抽象インタフェース
tk_alias | エイリアス
tk_any | Any
tk_array | 配列
tk_boolean | boolean
tk_char | 文字
tk_double | double
tk_enum | enum
tk_except | 例外
tk_fixed | fixed type
tk_float | float
tk_long | long
tk_longdouble | long double
tk_longlong | long long
tk_native | native type
tk_null | NULL
tk_objref | オブジェクトリファレンス
tk_octet | オクテット文字列
tk_Principal | Principal
tk_sequence | シーケンス
tk_short | short
tk_string | 文字列
tk_struct | 構造体
tk_TypeCode | TypeCode
tk_ulong | unsigned long
tk_ulonglong | unsigned long long
tk_union | union
tk_ushort | unsigned short
tk_value | value
tk_value_box | value box
tk_void | void
tk_wchar | Unicode文字
tk_wstring | Unicode文字列

23.18　TypeCode

class CORBA::TypeCode

TypeCodeクラスは，IDLで定義できるさまざまな型を表します。タイプコードは，通常Anyオブジェクトに格納されている値の型を定義するために使います。詳細については，「23.1.2　Anyのメソッド」のCORBA::Any();メソッドを参照してください。また，タイプコードはパラメタとしてメソッド呼び出しに渡すこともできます。

TypeCodeオブジェクトは，CORBA::ORB::create_<type>_tcメソッド，またはここで提供されるコンストラクタを使って生成できます。CORBA::ORB::create_<type>_tcメソッドについては，「22.8　Object」を参照してください。

＜この節の構成＞

23.18.1　インクルードファイル

23.18.2　TypeCodeのコンストラクタ

23.18.3　TypeCodeのメソッド

23.18.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

23.18.2　TypeCodeのコンストラクタ

CORBA::TypeCode(
CORBA::TCKind kind, CORBA::Boolean is_constant);
このメソッドは，拡張パラメタを必要としない型のTypeCodeオブジェクトを構築します。kindがこのコンストラクタに対して不当な型である場合，BAD_PARAM例外が発生します。

kind
表されるオブジェクトの型の記述。次のどれかになります。

   CORBA::tk_null, CORBA::tk_void, CORBA::tk_short,
   CORBA::tk_long, CORBA::tk_ushort, CORBA::tk_ulong,
   CORBA::tk_float, CORBA::tk_double, CORBA::tk_boolean,
   CORBA::tk_char, CORBA::tk_octet, CORBA::tk_any,
   CORBA::tk_TypeCode, CORBA::tk_Principal, CORBA::tk_longlong,
   CORBA::tk_ulonglong, CORBA::tk_longdouble, CORBA::tk_wchar,
   CORBA::tk_fixed, CORBA::tk_value, CORBA::tk_value_box,
   CORBA::native, CORBA::tk_abstract_interface.

is_constant
TRUEである場合，表されている型が定数であると考えられます。TRUEでない場合，そのオブジェクトは定数ではありません。

23.18.3　TypeCodeのメソッド

CORBA::TypeCode_ptr content_type() const;
このメソッドは，シーケンスまたは配列の要素のTypeCodeを返します。また，エイリアスの型も返します。オブジェクトの種類が，CORBA::tk_sequence，CORBA::tk_array，またはCORBA::tk_aliasのどれでもない場合，BadKind例外が発生します。

CORBA::Long default_index() const;
このメソッドは，unionを表すTypeCodeのデフォルトインデックスを返します。このオブジェクトの種類がCORBA::tk_unionでない場合，BadKind例外が発生します。

CORBA::TypeCode_ptr discriminator_type() const;
このメソッドは，unionを表すTypeCodeのディスクリミネータ型を返します。このオブジェクトの種類が，CORBA::tk_unionでない場合，BadKind例外が発生します。

CORBA::Boolean equal(
CORBA::TypeCode_ptr tc) const;
このメソッドは，指定されたTypeCodeとこのオブジェクトを比較します。すべての面で一致する場合，TRUEが返されます。そうでない場合は，FALSEが返されます。

tc
このオブジェクトと比較されるオブジェクト

const char* id() const;
このメソッドは，このオブジェクトによって表される型のリポジトリIDを返します。その型がリポジトリIDを持たない場合，BadKind例外が発生します。リポジトリIDを持つ型を次に示します。

CORBA::tk_alias
CORBA::tk_enum
CORBA::tk_except
CORBA::tk_objref
CORBA::tk_struct
CORBA::tk_union

CORBA::TCKind kind() const;
このメソッドは，オブジェクトの種類を返します。

CORBA::ULong length() const;
このメソッドは，このオブジェクトによって表される文字列，シーケンス，配列の長さを返します。オブジェクトの種類がCORBA::tk_string，CORBA::tk_sequence，またはCORBA::tk_arrayのどれでもない場合，BadKind例外が発生します。

CORBA::ULong member_count() const;
このメソッドは，このオブジェクトによって表される型のメンバカウントを返します。その型がメンバを持たない場合，BadKind例外が発生します。メンバを持つ型を次に示します。

CORBA::tk_enum
CORBA::tk_except
CORBA::tk_struct
CORBA::tk_union

CORBA::Any_ptr member_label(
CORBA::ULong index) const;
このメソッドは，unionのTypeCodeオブジェクトから，指定されたインデックスとともにメンバのラベルを返します。このオブジェクトの種類がCORBA::tk_unionでない場合，BadKind例外が発生します。また，インデックスが不当な場合，Bounds例外が発生します。

index
型が返されるunionメンバのラベル。インデックスは0から始まります。

const char *member_name(
CORBA::ULong index) const;
このメソッドは，このオブジェクトによって表される型から，指定されたインデックスとともにメンバの名前を返します。その型がメンバを持たない場合，BadKind例外が発生します。また，インデックスが不当な場合，Bounds例外が発生します。メンバを持つ型を次に示します。

CORBA::tk_enum
CORBA::tk_except
CORBA::tk_struct
CORBA::tk_union

index
名前が返されるメンバのインデックス。インデックスは0から始まります。

CORBA::TypeCode_ptr member_type(
CORBA::ULong index) const;
このメソッドは，このオブジェクトによって表される型から，指定されたインデックスとともにメンバの型を返します。その型に型を持つメンバがない場合，BadKind例外が発生します。また，インデックスが不当な場合，Bounds例外が発生します。メンバを持つ型を次に示します。

CORBA::tk_except
CORBA::tk_union

index
型が返されるメンバのインデックス。インデックスは0から始まります。

const char *name() const;
このメソッドは，このオブジェクトによって表される型の名前を返します。その型が名前を持たない場合，BadKind例外が発生します。名前を持つ型を次に示します。

CORBA::tk_alias
CORBA::tk_enum
CORBA::tk_except
CORBA::tk_objref
CORBA::tk_struct
CORBA::tk_union

static CORBA::TypeCode_ptr _duplicate(
CORBA::TypeCode_ptr obj);
この静的メソッドは，指定されたTypeCodeを複製します。

obj
複製されるオブジェクト

static CORBA::TypeCode_ptr _nil();
この静的メソッドは，初期化に使用できるNULL TypeCodeポインタを返します。

static void _release(
CORBA::TypeCode_ptr obj);
この静的メソッドは，指定されたオブジェクトのリファレンスカウントを減らします。そのカウントが0になると，オブジェクトによって管理されていたすべてのメモリが解放され，そのオブジェクトが削除されます。

obj
解放されるオブジェクト

CORBA::Boolean equivalent(
CORBA::TypeCode_ptr tc) const;
equivalentオペレーションは，ORBが，IDLに格納された値の型等価を決定するときに使用します。

tc
このオブジェクトと比較されるオブジェクト

CORBA::TypeCode_ptr get_compact_typecode() const;
get_compact_codeオペレーションは，すべての任意の指定名フィールドとメンバ名フィールドを削除します。ただし，エイリアスのタイプコードは変更しません。

virtual CORBA::Visibility member_visibility(
CORBA::ULong index) const;
このメソッドは，インデックスで識別されるvaluetypeメンバのVisibilityを返します。

index
visibilityのインデックス。インデックスは0から始まります。

注

member_visibilityオペレーションは，valuebox（またはボックス化されたvalue）ではなく，valuetypeのTypeCodeにだけ呼び出されます。

virtual CORBA::ValueModifier type_modifier() const;
type_modifierオペレーションは，ボックス化されていないvaluetypeのTypeCodeにだけ呼び出されます。このメソッドは，ターゲットTypeCodeが表すvaluetypeに適用されるValueModifierを返します。

virtual CORBA::TypeCode_ptr concrete_base_type();
concrete_base_typeオペレーションは，ボックス化されていないvaluetypeのTypeCodeにだけ呼び出されます。ターゲットTypeCodeが表す値がconcreteベースのvaluetypeを持つ場合，このメソッドはconcreteベースのTypeCodeを返します。それ以外の場合，nil TypeCodeリファレンスを返します。

24.　インタフェースリポジトリインタフェースとクラス（C++）

この章では，C++言語でインタフェースリポジトリにアクセスするのに使用できるインタフェース，およびクラスについて説明します。インタフェースリポジトリは，モジュール，モジュールに含まれるインタフェース，オペレーション，属性，および定数についての情報を保持します。

＜この章の構成＞

24.1　AliasDef

24.2　ArrayDef

24.3　AttributeDef

24.4　AttributeDescription

24.5　AttributeMode

24.6　ConstantDef

24.7　ConstantDescription

24.8　Contained

24.9　Container

24.10　DefinitionKind

24.11　Description

24.12　EnumDef

24.13　ExceptionDef

24.14　ExceptionDescription

24.15　FixedDef

24.16　FullInterfaceDescription

24.17　FullValueDescription

24.18　IDLType

24.19　InterfaceDef

24.20　InterfaceDescription

24.21　IRObject

24.22　ModuleDef

24.23　ModuleDescription

24.24　NativeDef

24.25　OperationDef

24.26　OperationDescription

24.27　OperationMode

24.28　ParameterDescription

24.29　ParameterMode

24.30　PrimitiveDef

24.31　PrimitiveKind

24.32　Repository

24.33　SequenceDef

24.34　StringDef

24.35　StructDef

24.36　StructMember

24.37　TypedefDef

24.38　TypeDescription

24.39　UnionDef

24.40　UnionMember

24.41　ValueBoxDef

24.42　ValueDef

24.43　ValueDescription

24.44　WstringDef

24.1　AliasDef

class CORBA::AliasDef : public virtual CORBA::TypedefDef,
                        public virtual CORBA::Object

このクラスは，TypedefDefクラスからの派生であり，インタフェースリポジトリに格納されているtypedefのエイリアスを表します。このクラスは，エイリアスが生成された元のtypedefのIDLTypeを設定，および取得するメソッドを提供します。

TypedefDefクラスの詳細については「24.37　TypedefDef」を，IDLTypeクラスの詳細については「24.18　IDLType」を参照してください。

＜この節の構成＞

24.1.1　AliasDefのメソッド

24.1.1　AliasDefのメソッド

CORBA::IDLType original_type_def();
このメソッドは，エイリアスであるこのオブジェクトが生成された元のtypedefのIDLTypeを返します。

void original_type_def(
CORBA::IDLType_ptr val);
このメソッドは，エイリアスであるこのオブジェクトが生成された元のtypedefのIDLTypeを設定します。

val
このエイリアスのIDLTypeを設定します。

24.2　ArrayDef

class CORBA::ArrayDef : public virtual CORBA::IDLType,
                        public virtual CORBA::Object

このクラスは，IDLTypeからの派生であり，インタフェースリポジトリに格納されている配列を表します。このクラスは，配列の要素の型および配列の長さを，設定および取得するメソッドを提供します。

＜この節の構成＞

24.2.1　ArrayDefのメソッド

24.2.1　ArrayDefのメソッド

CORBA::TypeCode element_type();
このメソッドは，配列の要素のTypeCodeを返します。

CORBA::IDLType_ptr element_type_def();
このメソッドは，配列に格納されている要素のIDLTypeを返します。

void element_type_def(
CORBA::IDLType_ptr element_type_def);
このメソッドは，配列に格納されている要素のIDLTypeを設定します。

element_type_def
配列内の要素のIDLType

CORBA::ULong length();
このメソッドは，配列の要素数を返します。

void length(
CORBA::ULong length);
このメソッドは，配列の要素数を設定します。

length
配列の要素数

24.3　AttributeDef

class CORBA::AttributeDef : public virtual CORBA::Contained,
                            public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されるインタフェース属性を表します。このクラスは，属性のモードであるtypedefの設定，および取得の際に使用するメソッドを提供します。また，属性の型を取得するメソッドも提供しています。

＜この節の構成＞

24.3.1　AttributeDefのメソッド

24.3.1　AttributeDefのメソッド

CORBA::AttributeMode mode();
このメソッドは，属性のモードを返します。戻り値は，CORBA::AttributeMode ATTR_READONLY（read-only属性の場合），またはCORBA::AttributeMode ATTR_NORMAL（read-write属性の場合）のどちらかです。「24.5　AttributeMode」を参照してください。

void mode(
CORBA::AttributeMode _val);
このメソッドは，属性のモードを設定します。

_val
設定するモード

CORBA::TypeCode_ptr type();
このメソッドは，属性の型を表すTypeCodeを返します。

CORBA::IDLType_ptr type_def();
このメソッドは，このオブジェクトのIDLTypeを返します。

void type_def(
CORBA::IDLType_ptr type_def);
このメソッドは，このオブジェクトのIDLTypeを設定します。

type_def
このオブジェクトのIDLType

24.4　AttributeDescription

struct CORBA::AttributeDescription

AttributeDescription構造体は，インタフェースリポジトリに格納されている属性の情報を提供します。

＜この節の構成＞

24.4.1　AttributeDescriptionのメンバ

24.4.1　AttributeDescriptionのメンバ

CORBA::Identifier_var name
属性の名前です。

CORBA::RepositoryId_var id
属性のリポジトリIDです。

CORBA::RepositoryId_var defined_in
この属性が定義されるインタフェースのリポジトリIDです。

CORBA::String_var version
属性のバージョンです。

CORBA::TypeCode_var type
属性のIDL型です。

CORBA::AttributeMode mode
属性のモードです。

24.5　AttributeMode

enum CORBA::AttributeMode

この列挙体は，属性のモードがread-only（読み取り専用）またはread-write（標準）のどちらであるかを表すために使用します。

＜この節の構成＞

24.5.1　AttributeModeの値

24.5.1　AttributeModeの値

AttributeModeの値を次の表に示します。

表24-1　AttributeModeの値（C++）

定数 | 説明
ATTR_NORMAL | read-write（標準）属性
ATTR_READONLY | read-only属性

24.6　ConstantDef

class CORBA::ConstantDef : public virtual CORBA::Contained,
                           public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されている定数定義を表します。このクラスは，定数の型，値，typedefを，設定および取得するメソッドを提供します。

＜この節の構成＞

24.6.1　ConstantDefのメソッド

24.6.1　ConstantDefのメソッド

CORBA::TypeCode_ptr type();
このメソッドは，オブジェクトの型を表すTypeCodeを返します。

CORBA::IDLType_ptr type_def();
このメソッドは，このオブジェクトのIDLTypeを返します。

void type_def(
CORBA::IDLType_ptr type_def);
このメソッドは，定数のIDLTypeを設定します。

type_def
この定数のIDLType

CORBA::Any *value();
このメソッドは，このオブジェクトの値を表すAnyオブジェクトを指すポインタを返します。

void value(
CORBA::Any& _val);
このメソッドは，この定数の値を設定します。

_val
このオブジェクトの値を表すAnyオブジェクト

24.7　ConstantDescription

struct CORBA::ConstantDescription

ConstantDescription構造体は，インタフェースリポジトリに格納されている定数の情報を提供します。

＜この節の構成＞

24.7.1　ConstantDescriptionのメンバ

24.7.1　ConstantDescriptionのメンバ

CORBA::Identifier_var name
定数の名前です。

CORBA::RepositoryId_var id
定数のリポジトリIDです。

CORBA::RepositoryId_var defined_in
定数が定義されたモジュールまたはインタフェースの名前です。

CORBA::String_var version
定数のバージョンです。

CORBA::TypeCode_var type
定数のIDL型です。

CORBA::Any value
この定数の値です。

24.8　Contained

class CORBA::Contained : public virtual CORBA::IRObject,
                         public virtual CORBA::Object

Containedクラスは，それ自体がほかのインタフェースリポジトリオブジェクトに含まれている，すべてのインタフェースリポジトリオブジェクトを派生させるために使用します。このクラスは，次のメソッドを提供します。

オブジェクトの名前とバージョンを設定および取得するメソッド

このオブジェクトを含むContainerを判別するメソッド

オブジェクトの絶対名，リポジトリ，および記述を取得するメソッド

Container間でオブジェクトを移動させるメソッド

＜この節の構成＞

24.8.1　インクルードファイル

24.8.2　Containedのメソッド

24.8.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface Contained: IRObject {
   attribute RepositoryId id;
   attribute Identifier name;
   attribute String_var version;

   readonly attribute Container defined_in;
   readonly attribute ScopedName absolute_name;
   readonly attribute Repository containing_Repository;

   struct Description {
      DefinitionKind kind;
      any value;
   };
   Description describe();
   void move(
      in Container new_Container,
      in Identifier new_name,
      in String_var new_version
   );
};

24.8.2　Containedのメソッド

char *absolute_name();
このメソッドは，Repository内でこのオブジェクトを一意に識別できるようにするための絶対名を返します。オブジェクトの生成時に設定されるdefined_in属性がRepositoryを参照する場合，その絶対名には，単に"::"という文字列をオブジェクト名の先頭に付けます。

CORBA::Repository_ptr containing_repository();
このオブジェクトを格納しているリポジトリを指すポインタを返します。

CORBA::Container_ptr defined_in();
このオブジェクトが定義されているContainerを指すポインタを返します。

Description* describe();
オブジェクトの記述を返します。Description構造体の詳細については，「24.11　Description」を参照してください。

char *id();
このオブジェクトのリポジトリIDを返します。

void id(
const char *id);
このオブジェクトを一意に識別するリポジトリIDを設定します。

id
このオブジェクトのリポジトリID

char *name();
このメソッドは，Containerのスコープ内で一意に識別するオブジェクトの名前を返します。

void name(
const char * name);
このメソッドは，含まれるオブジェクトの名前を設定します。

name
オブジェクトの名前

CORBA::String_var version();
このメソッドは，同一の名前を持つほかのオブジェクトと見分けられるようにオブジェクトのバージョンを返します。

void version(
CORBA::String_var& val);
このメソッドは，このオブジェクトのバージョンを設定します。

val
オブジェクトのバージョン

void move(
CORBA::Container_ptr new_container,
const char *new_name,
CORBA::String_var& new_version);
このメソッドは，このオブジェクトを現在のContainerからnew_containerに移動します。

new_container
このオブジェクトの移動先のContainer

new_name
オブジェクトの新しい名前

new_version
オブジェクトの新しいバージョン仕様

24.9　Container

class CORBA::Container : public virtual CORBA::IRObject,
                         public virtual CORBA::Object

Containerクラスは，インタフェースリポジトリで包含階層を作成するために使用します。Containerオブジェクトは，Containedクラスから派生したオブジェクト定義を保持します。また，Repositoryクラスを除いた，Containerクラスから派生したすべてのオブジェクト定義は，Containedクラスを継承します。

Containerは，orbtypes.hで定義されるIDL型の型を生成するメソッドを提供します。このとき，InterfaceDef，ModuleDef，およびConstantDefクラスは対象としますが，ValueMemberDefクラスは対象外です。生成された各定義のdefined_in属性は，このオブジェクトを示すように初期化されています。

＜この節の構成＞

24.9.1　インクルードファイル

24.9.2　Containerのメソッド

24.9.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface Container: IRObject {
   Contained lookup(in ScopedName search_name);
   ContainedSeq contents(
       in DefinitionKind limit_type,
       in boolean exclude_inherited
   );
   ContainedSeq lookup_name(
       in Identifier search_name,
       in long levels_to_search,
       in CORBA::DefinitionKind limit_type,
       in boolean exclude_inherited
   );
   struct Description {
       Contained Contained_object;
       DefinitionKind kind;
       any value;
   };
   typedef sequence<Description> DescriptionSeq;
   DescriptionSeq describe_contents(
       in DefinitionKind limit_type,
       in boolean exclude_inherited,
       in long max_returned_objs
   );
};

24.9.2　Containerのメソッド

CORBA::ContainedSeq * contents(
CORBA::DefinitionKind limit_type,
CORBA::Boolean exclude_inherited);
このメソッドは，直接Containerに含まれる，またはContainerへ継承される包含オブジェクト定義のリストを返します。このメソッドを使ってRepositoryでのオブジェクト定義の階層を操作できます。Repositoryのモジュール群に含まれるすべてのオブジェクト定義が返され，次にそれら各モジュールに含まれるすべてのオブジェクト定義が返されます。

limit_type
返されるインタフェースオブジェクト型。dk_allを指定すると，すべての型のオブジェクトが返されます。

exclude_inherited
TRUEを設定した場合，継承されたオブジェクトは返されません。

CORBA::AliasDef_ptr create_alias(
const char * id,
const char *name,
const CORBA::String_var& version,
CORBA::IDLType_ptr original_type);
このメソッドは，指定された属性でAliasDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
エイリアスのID

name
エイリアスの名前

version
エイリアスのバージョン

original_type
エイリアスであるこのオブジェクトが生成された元のオブジェクトの型

CORBA::ConstantDef_ptr create_constant(
const char * id,
const char *name,
const CORBA::String_var& version,
CORBA::IDLType_ptr type,
const CORBA::Any& value);
このメソッドは，指定された属性でConstantDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
定数のID

name
定数の名前

version
定数のバージョン

type
定数の値（次のパラメタで指定する）の型

value
定数の値

CORBA::EnumDef_ptr create_enum(
const char * id,
const char *name,
const CORBA::String_var& version,
const CORBA::EnumMemberSeq& members);
このメソッドは，指定された属性でEnumDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
列挙体のID

name
列挙体の名前

version
列挙体のバージョン

members
列挙体のフィールドのリスト

CORBA::ExceptionDef_ptr create_exception(
const char * id,
const char *name,
const CORBA::String_var& version,
const CORBA::StructMemberSeq& members);
このメソッドは，指定された属性でExceptionDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
例外のID

name
例外の名前

version
例外のバージョン

members
構造体のフィールドのシーケンス

CORBA::InterfaceDef_ptr create_interface(
const char * id,
const char *name,
const CORBA::String_var& version,
const CORBA::InterfaceDefSeq& base_interfaces);
このメソッドは，指定された属性でInterfaceDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
インタフェースのID

name
インタフェースの名前

version
インタフェースのバージョン

base_interfaces
このインタフェースが継承したすべてのインタフェースのリスト

CORBA::ModuleDef_ptr create_module(
const char * id,
const char *name,
const CORBA::String_var& version);
このメソッドは，指定された属性でModuleDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
モジュールのID

name
モジュールの名前

version
モジュールのバージョン

CORBA::StructDef_ptr create_struct(
const char * id,
const char *name,
const CORBA::String_var& version,
const CORBA::StructMemberSeq& members);
このメソッドは，指定された属性でStructDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
構造体のID

name
構造体の名前

version
構造体のバージョン

members
構造体フィールドのシーケンス

CORBA::UnionDef_ptr create_union(
const char * id,
const char *name,
const CORBA::String_var& version,
CORBA::IDLType_ptr discriminator_type,
const CORBA::UnionMemberSeq& members);
このメソッドは，指定された属性でUnionDefオブジェクトをこのContainer内に生成し，新しく生成されたそのオブジェクトを指すポインタを返します。

id
unionのID

name
unionの名前

version
unionのバージョン

discriminator_type
unionの識別値の型

members
unionの各フィールドのシーケンス

CORBA::Container::DescriptionSeq * describe_contents(
CORBA::DefinitionKind limit_type,
CORBA::Boolean exclude_inherited,
CORBA::Long max_returned_objs);
このメソッドは，このcontainerに直接含まれているか，またはこのcontainerに継承されているすべての定義に関する記述を返します。

limit_type
記述が返されるインタフェースオブジェクトの型。dk_allを指定すると，すべての型のオブジェクトの記述が返されます。

exclude_inherited
trueを設定した場合，継承されたオブジェクトの記述は返されません。

max_returned_objs
返される記述の最大数。このパラメタに-1を設定すると，すべてのオブジェクトが返されます。

CORBA::Contained_ptr lookup(
const char *search_name);
このメソッドは，指定された範囲名で，このContainerと相対的な定義を探します。先頭が"::"で始まる絶対範囲名を指定すれば，囲みリポジトリ内の定義を探せます。オブジェクトが見つからない場合，NULL値が返されます

search_name
オブジェクトのインタフェース名

CORBA::ContainedSeq * lookup_name(
const char *search_name,
CORBA::Long levels_to_search,
CORBA::DefinitionKind limit_type,
CORBA::Boolean exclude_inherited);
このメソッドは，ある特定のオブジェクト内でオブジェクトを名前で探します。検索対象の階層内のレベル数，オブジェクトの型，継承されたオブジェクトを返すかどうか，などで検索を制限できます。

search_name
含まれているオブジェクトの名前

levels_to_search
検索対象の階層内のレベル数。このパラメタに-1を設定すると，すべてのレベルが検索対象となります。このパラメタに1を設定すると，このオブジェクトだけを検索します。

limit_type
返されるインタフェースオブジェクトの型。dk_allを指定すると，すべての型のオブジェクトが返されます。

exclude_inherited
trueを設定した場合，継承されたオブジェクトは返されません。

CORBA::ValueDef_ptr create_value(
const char * id,
const char *name,
const char version,
CORBA::boolean is_custom,
CORBA::boolean is_abstract,
const CORBA::ValueDef_ptr _base_value,
CORBA::boolean is_truncatable,
const CORBA::ValueDefSeq& abstract_base_values,
const CORBA::InterfaceDefSeq& supported _interfaces,
const CORBA::InitializerSeq& initializers);
このメソッドは，指定された属性でContainer内にValueDefオブジェクトを生成し，生成されたオブジェクトを指すポインタを返します。

id
構造体のリポジトリID

name
構造体の名前

version
構造体のバージョン

is_custom
trueを設定した場合，custom型のvaluetypeを生成します。

is_abstract
trueを設定した場合，abstract型のvaluetypeを生成します。

_base_value
サポートされているべース値のリスト

is_truncatable
trueを設定した場合，切り捨てができるvaluetypeを生成します。

abstract_base_values
サポートされているabstract型のべース値のリスト

supported _interfaces
サポートされているインタフェースのリスト

initializers
このvaluetypeがサポートするイニシャライザのリスト

CORBA::ValueBoxDef_ptr create_value_box(
const char* id,
const char* name,
const char* version,
CORBA::IDLType_ptr original_type);
このメソッドは，指定された属性でContainer内にValueBoxDefオブジェクトを生成し，生成されたオブジェクトを指すポインタを返します。

id
構造体のリポジトリID

name
構造体の名前

version
構造体のバージョン

original_type
エイリアスである，このオブジェクトの元のオブジェクトのIDL型

24.10　DefinitionKind

enum CORBA::DefinitionKind

DefinitionKind列挙体の定数は，インタフェースリポジトリオブジェクトとして指定できる型を定義します。

＜この節の構成＞

24.10.1　DefinitionKindの列挙値

24.10.1　DefinitionKindの列挙値

DefinitionKindの定数値を次の表に示します。

表24-2　DefinitionKindの定数値（C++）

定数 | 意味
dk_all | すべての指定できる型（リポジトリ検索メソッドで使用）
dk_none | すべての型を除外（リポジトリ検索メソッドで使用）
dk_Alias | エイリアス
dk_Array | 配列
dk_Attribute | 属性
dk_Constant | 定数
dk_Enum | Enum（列挙体）
dk_Exception | 例外
dk_Fixed | Fixed
dk_Interface | インタフェース
dk_Module | module
dk_Native | Native
dk_Operation | インタフェースオペレーション
dk_Primitive | 基本型（int，longなど）
dk_Repository | リポジトリ
dk_Sequence | シーケンス
dk_String | 文字列
dk_Struct | 構造体
dk_Typedef | TypeDef
dk_Union | union
dk_Value | ValueType
dk_ValueBox | ValueBox
dk_ValueMember | ValueMember
dk_Wstring | Unicode文字列

24.11　Description

struct CORBA::Container::Description

この構造体は，Containedクラスから派生したインタフェースリポジトリ内の項目の一般的な記述を提供します。

＜この節の構成＞

24.11.1　Descriptionのメンバ

24.11.1　Descriptionのメンバ

CORBA::Contained_var contained_object
この構造体にオブジェクトが含まれます。

CORBA::DefinitionKind kind
オブジェクトの種類です。

CORBA::Any value
オブジェクトの値です。

24.12　EnumDef

class CORBA::EnumDef : public virtual CORBA::TypedefDef,
                       public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されている列挙体を記述します。このクラスは，列挙体のメンバリストを設定および取得するメソッドを提供します。

＜この節の構成＞

24.12.1　EnumDefのメソッド

24.12.1　EnumDefのメソッド

CORBA::EnumMemberSeq *members();
このメソッドは，列挙体のメンバリストを返します。

void members(
CORBA::EnumMemberSeq members) ;
このメソッドは，列挙体のメンバリストを設定します。

members
メンバのリスト

24.13　ExceptionDef

class CORBA::ExceptionDef : public virtual CORBA::Contained,
                            public virtual CORBA::Container,
                            public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されている例外を記述します。このクラスは，例外のメンバのリストを設定および取得するメソッドを提供します。また，例外のTypeCodeを取得するメソッドも提供します。

＜この節の構成＞

24.13.1　ExceptionDefのメソッド

24.13.1　ExceptionDefのメソッド

CORBA::StructMemberSeq *members() ;
このメソッドは，例外のメンバのリストを返します。

void members(
CORBA::StructMemberSeq& members) ;
このメソッドは，例外のメンバのリストを設定します。

members
メンバのリスト

CORBA::TypeCode_ptr type() ;
このメソッドは，例外の型を表すTypeCodeを返します。

24.14　ExceptionDescription

struct CORBA::ExceptionDescription

この構造体は，インタフェースリポジトリに格納されている例外の情報を記述します。

＜この節の構成＞

24.14.1　ExceptionDescriptionのメンバ

24.14.1　ExceptionDescriptionのメンバ

CORBA::String_var defined_in
例外が定義されたモジュールまたはインタフェースのリポジトリIDです。

CORBA::String_var id
例外のリポジトリIDです。

CORBA::String_var name
例外の名前です。

CORBA::TypeCode_var type
例外のIDL型です。

CORBA::String_var version
例外のバージョンです。

24.15　FixedDef

class CORBA::FixedDef public virtual CORBA::IDLType,
                      public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されているfixed型を記述するために使用します。

＜この節の構成＞

24.15.1　FixedDefのメソッド

24.15.1　FixedDefのメソッド

CORBA::UShort digits();
このメソッドは，fixed型のけた数を設定します。

void digits(
CORBA::UShort _digits);
このメソッドは，fixed型の属性を設定します。

CORBA::Short scale();
このメソッドは，fixed型のスケールを設定します。

void scale(
CORBA::Short _scale);
このメソッドは，fixed型の属性を設定します。

24.16　FullInterfaceDescription

struct CORBA::FullInterfaceDescription

FullInterfaceDescription構造体は，インタフェースリポジトリに格納されている定数を記述します。

＜この節の構成＞

24.16.1　FullInterfaceDescriptionのメンバ

24.16.1　FullInterfaceDescriptionのメンバ

CORBA::String_var Name
インタフェースの名前です。

CORBA::String_var id
インタフェースのリポジトリIDです。

CORBA::String_var defined_in
インタフェースが定義されたmoduleまたはインタフェースの名前です。

CORBA::String_var version
インタフェースのバージョンです。

CORBA::OpDescriptionSeq operations
このインタフェースがサポートするオペレーションのリストです。

CORBA::AttrDescriptionSeq attributes
このインタフェースに含まれる属性のリストです。

CORBA::RepositoryIdSeq base_interfaces
このインタフェースが継承するインタフェースのリストです。

CORBA::RepositoryIdSeq derived_interfaces
このインタフェースから派生したインタフェースです。

CORBA::TypeCode_var type
インタフェースのTypeCodeです。

CORBA::Boolean is_abstract
このインタフェースがabstract型かどうかを表します。

24.17　FullValueDescription

struct CORBA::FullValueDescription

この構造体は，インタフェースリポジトリに格納されている完全な値定義を表すために使用します。

＜この節の構成＞

24.17.1　FullValueDescriptionの変数

24.17.1　FullValueDescriptionの変数

CORBA::String_var name
valuetypeの名前を表します。

CORBA::String_var id
valuetypeのリポジトリIDを表します。

CORBA::Boolean is_abstract
この変数がtrueの場合，abstract型のvaluetypeを指定します。

CORBA::Boolean is_custom
この変数がtrueの場合，valuetypeに対してcustom型のマーシャリングを指定します。

CORBA::String_var defined_in
valuetypeが定義されているモジュールのリポジトリIDを表します。

CORBA::String_var version
valuetypeのバージョンを表します。

CORBA::OpDescriptionSeq operations
valuetypeが提供するオペレーションの一覧を表します。

CORBA::AttrDescriptionSeq attributes
valuetypeのメンバ属性の，valuetypeの一覧を表します。

CORBA::ValueMemberSeq members
値定義の配列を表します。

CORBA::InitializerSeq initializers
イニシャライザの配列を表します。

CORBA::RepositoryIdSeq supported_interfaces;
サポートされるインタフェースの一覧を表します。

CORBA::RepositoryIdSeq abstract_base_values;
このvaluetypeの継承しているすべての抽象value型の一覧を表します。

CORBA::Boolean is_truncatable;
この変数がtrueの場合，値をベースのvaluetypeに安全に切り捨てることができます。

CORBA::String_var base_values;
このvaluetypeが継承しているvaluetypeを説明します。

CORBA::TypeCode_var type
valuetypeのIDL TypeCodeを表します。

24.18　IDLType

class CORBA::IDLType : public virtual CORBA::IRObject,
                       public virtual CORBA::Object

IDLTypeクラスは，IDL型を表しているすべてのインタフェースリポジトリ定義によって，継承されている抽象インタフェースを提供します。このクラスは，オブジェクトの型を識別する，オブジェクトのTypeCodeを返すためのメソッドを提供します。IDLTypeは個々の特有なものですが，TypeCodeは個々の特有なものではありません。

＜この節の構成＞

24.18.1　インクルードファイル

24.18.2　IDLTypeのメソッド

24.18.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface IDLType:IRObject {
   readonly attribute TypeCode type;
};

24.18.2　IDLTypeのメソッド

CORBA::Typecode_ptr type();
このメソッドは，現在のIRObjectのTypeCodeを返します。

24.19　InterfaceDef

class CORBA::InterfaceDef : public virtual CORBA::Container,
                            public virtual CORBA::Contained,
                            public virtual CORBA::IDLType,
                            public virtual CORBA::Object

InterfaceDefクラスは，インタフェースリポジトリに格納されているORBオブジェクトのインタフェースを定義するために使用します。

詳細については，「24.8　Contained」，「24.9　Container」，「24.18　IDLType」を参照してください。

＜この節の構成＞

24.19.1　インクルードファイル

24.19.2　InterfaceDefのメソッド

24.19.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface InterfaceDef: Container, Contained, IDLType {
typedef sequence<RepositoryId> RepositoryIdSeq;
typedef sequence<OperationDescription> OpDescriptionSeq;
typedef sequence<AttributeDescription> AttrDescriptionSeq;
   attribute InterfaceDefSeq base_interfaces;
   attribute boolean is_abstract;
   readonly attribute InterfaceDefSeq
   derived_interfaces
   boolean is_a(in RepositoryId interface_id);
   struct FullInterfaceDescription {
Identifier name;
   RepositoryId id;
   RepositoryId defined_in;
   String_var version;
   OpDescriptionSeq operations;
   AttrDescriptionSeq attributes;
   RepositoryIdSeq base_interfaces;
       RepositoryIdSeq derived_interfaces;
   TypeCode type;
       boolean is_abstract;
   };

   FullInterfaceDescription describe_interface();

       AttributeDef create_attribute(
           in RepositoryId id,
           in Identifier name,
           in String_var version,
           in IDLType type,
           in CORBA::AttributeMode mode
       );
       OperationDef create_operation(
           in RepositoryId id,
           in Identifier name,
           in String_var version,
           in IDLType result,
           in OperationMode mode,
           in ParDescriptionSeq params,
           in ExceptionDefSeq exceptions,
           in ContextIdSeq contexts
       );
       struct InterfaceDescription {
           Identifier name;
           RepositoryId id;
           RepositoryId defined_in;
           String_var version;
           RepositoryIdSeq base_interfaces;
           boolean is_abstract;
       };
   };

24.19.2　InterfaceDefのメソッド

CORBA::InterfaceDefSeq *base_interfaces();
このメソッドは，このクラスが継承したインタフェースのリストを返します。

void base_interfaces(
const CORBA::InterfaceDefSeq& val);
このメソッドは，このクラスが継承したインタフェースのリストを設定します。

val
このインタフェースが継承したインタフェースのリスト

CORBA::AttributeDef_ptr create_attribute(
const char * id,
const char * name,
const CORBA::String_var& version,
CORBA::IDLType_ptr type,
CORBA::AttributeMode mode);
このメソッドは，このオブジェクトに含まれている，新しく生成されたAttributeDefを指すポインタを返します。id，name，version，type，およびmodeが指定された値に設定されます。

id
使用するインタフェースID

name
使用するインタフェース名

version
使用するインタフェースのバージョン

type
使用する型

mode
インタフェースモード。指定できる値については，「24.5　AttributeMode」を参照してください。

CORBA::OperationDef_ptr create_operation(
const char *id,
const char *name,
CORBA::String_var& version,
CORBA::IDLType_ptr result,
CORBA::OperationMode mode,
const CORBA::ParDescriptionSeq& params,
const CORBA::ExceptionDefSeq& exceptions,
const CORBA::ContextIdSeq& contexts);
このメソッドは，指定されたパラメタを使って，このオブジェクトによって含まれる新規のOperationDefを生成します。その新しく生成されたOperationDefのdefined_in属性は，このInterfaceDefを識別できるように設定します。

id
オペレーションのインタフェースID

name
オペレーションの名前

version
オペレーションのバージョン

result
オペレーションによって返されるIDL型

mode
オペレーションのモード（一方向モードまたは標準モード）

params
オペレーションに渡すパラメタのリスト

exceptions
オペレーションによって発生した例外のリスト

contexts
コンテキストのリストは，コンテキスト内の値の名前であり，リクエストとともに渡されます。

CORBA::InterfaceDef::FullInterfaceDescription
*describe_interface();
このメソッドは，このオブジェクトのインタフェースを記述するFullInterfaceDescriptionを返します。

CORBA::Boolean is_a(
const char * interface_id);
このインタフェースが，指定されたインタフェースと同一であるか，そのインタフェースから直接的または間接的に継承されたものである場合，このメソッドはtrueを返します。

interface_id
このインタフェースと比較してチェックされるインタフェースのID

24.20　InterfaceDescription

struct CORBA::InterfaceDescription

この構造体は，インタフェースリポジトリに格納されているインタフェースを記述します。

＜この節の構成＞

24.20.1　InterfaceDescriptionのメンバ

24.20.1　InterfaceDescriptionのメンバ

CORBA::String_var name
インタフェースの名前です。

CORBA::String_var id
インタフェースのリポジトリIDです。

CORBA::String_var defined_in
インタフェースが定義されたリポジトリIDの名前です。

CORBA::String_var version
インタフェースのバージョンです。

CORBA::RepositoryIdSeq base_interfaces
インタフェースのベースインタフェースのリストです。

CORBA::Boolean is_abstract
このインタフェースがabstract型かどうかを表します。
インタフェースがabstract型の場合，そのインタフェースを表すオブジェクトは実体化できません。

24.21　IRObject

class CORBA::IRObject : public virtual CORBA::Object

IRObjectクラスは，インタフェースリポジトリオブジェクトの最も一般的なインタフェースを提供します。このクラスから，Containerクラス，IDLType，Containedクラス，およびその他のクラスが派生します。

＜この節の構成＞

24.21.1　インクルードファイル

24.21.2　IRObjectのメソッド

24.21.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface IRObject {
   readonly attribute DefinitionKind def_kind;
   void destroy();
};

24.21.2　IRObjectのメソッド

CORBA::DefinitionKind def_kind();
このメソッドは，このインタフェースリポジトリオブジェクトの型を返します。指定できる型については，「24.10　DefinitionKind」を参照してください。

void destroy();
このメソッドは，インタフェースリポジトリから，このオブジェクトを削除します。オブジェクトがContainerである場合，その内容のすべてを削除します。オブジェクトがほかのオブジェクトによって含まれている場合でも，そのオブジェクトは削除されます。Repositoryオブジェクト，またはPrimitiveDefオブジェクトに対してdestroyメソッドが呼び出されると，Exception (CORBA::BAD_PARAM)が返されます。Repositoryクラスの詳細については，「24.32　Repository」を参照してください。

24.22　ModuleDef

class CORBA::ModuleDef : public virtual CORBA::Container,
                         public virtual CORBA::Contained,
                         public virtual CORBA::Object

このクラスは，インタフェースリポジトリ内のIDLモジュールを表すために使用します。

24.23　ModuleDescription

struct CORBA::ModuleDescription

ModuleDescription構造体は，インタフェースリポジトリに格納されているmoduleを記述します。

＜この節の構成＞

24.23.1　ModuleDescriptionのメンバ

24.23.1　ModuleDescriptionのメンバ

CORBA::String_var name
moduleの名前です。

CORBA::String_var id
moduleのリポジトリIDです。

CORBA::String_var defined_in
moduleが定義されたリポジトリIDの名前です。

CORBA::String_var version
moduleのバージョンです。

24.24　NativeDef

class CORBA::NativeDef : public virtual CORBA::TypedefDef,
                         public virtual CORBA::Object

このクラスは，インタフェースリポジトリが格納するネイティブ定義を表すために使用します。

24.25　OperationDef

class CORBA::OperationDef : public virtual CORBA::Contained,
                            public virtual CORBA::Object

OperationDefクラスは，インタフェースリポジトリに格納されているインタフェースオペレーションの情報を含んでいます。このクラスは，Containedクラスから派生します。このクラスを継承したdescribeメソッドは，オペレーションについての詳細な情報を提供するOperationDescription構造体を返します。Containedクラスについては，「24.8　Contained」を参照してください。

＜この節の構成＞

24.25.1　インクルードファイル

24.25.2　OperationDefのメソッド

24.25.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface OperationDef: Contained {
   typedef sequence<ParameterDescription> ParDescriptionSeq;
   typedef Identifier ContextIdentifier;
   typedef sequence<ContextIdentifier> ContextIdSeq;
   typedef sequence<ExceptionDef> ExceptionDefSeq;
   typedef sequence<ExceptionDescription> ExcDescriptionSeq;
   readonly attribute TypeCode result;
   attribute IDLType result_def;
   attribute ParDescriptionSeq params;
   attribute CORBA::OperationMode mode;
   attribute ContextIdSeq contexts;
   attribute ExceptionDefSeq exceptions;
readonly attribute OperationKind bind;
};
struct OperationDescription {
   Identifier name;
   RepositoryId id;
   RepositoryId defined_in;
   String_var version;
   TypeCode result;
   OperationMode mode;
   ContextIdSeq contexts;
   ParDescriptionSeq parameters;
   ExcDescriptionSeq exceptions;
};

24.25.2　OperationDefのメソッド

CORBA::ContextIdSeq * contexts();
このメソッドは，オペレーションに適用されるコンテキスト識別子のリストを返します。

void context(
const CORBA::ContextIdSeq& val);
このメソッドは，オペレーションに適用されるコンテキスト識別子のリストを設定します。

val
コンテキスト識別子のリスト

CORBA::ExceptionDefSeq * exceptions();
このメソッドは，このオペレーションによって発生する可能性のある例外型のリストを返します。

void exceptions(
const CORBA::ExceptionDefSeq& val);
このメソッドは，このオペレーションによって発生する可能性のある例外型のリストを設定します。

val
このオペレーションによって発生する可能性のある例外のリスト

CORBA::OperationMode mode();
このメソッドは，このOperationDefが示すオペレーションのモードを返します。モードは，標準または一方向のどちらかです。標準モードのオペレーションは，同期的であり，クライアントアプリケーションに値を返します。一方向オペレーションでは応答を待ちません。また，オブジェクトインプリメンテーションからクライアントへの応答は送信されません。

void mode(
CORBA::OperationMode val);
このメソッドは，オペレーションのモードを設定します。

val
このオペレーションの指定モード。OP_ONEWAYまたはOP_NORMALのどちらかです。詳細については，「24.27　OperationMode」を参照してください。

CORBA::ParDescriptionSeq * params();
このメソッドは，このOperationDefに対するパラメタを記述するParameterDescription構造体のリストを指すポインタを返します。

void params(
const CORBA::ParDescriptionSeq& val);
このメソッドは，このOperationDefのParameterDescription構造体のリストを設定します。リストする構造体の順序は，オペレーションのIDL定義で定義された順序と同一の必要があります。

val
ParameterDescription構造体のリスト

CORBA::TypeCode_ptr result();
このメソッドは，このオペレーションによって返された値の型を表すTypeCodeを指すポインタを返します。TypeCodeはread-only属性を持ちます。

CORBA::IDLType_ptr result_def();
このメソッドは，このOperationDefによって返されたIDL型の定義を指すポインタを返します。

void result_def(
CORBA::IDLType_ptr val);
このメソッドは，このOperationDefによって返された型の定義を設定します。

val
使用する型定義を指すポインタ

24.26　OperationDescription

struct CORBA::OperationDescription

OperationDescription構造体は，インタフェースリポジトリに格納されているオペレーションの情報を記述します。

＜この節の構成＞

24.26.1　OperationDescriptionのメンバ

24.26.1　OperationDescriptionのメンバ

CORBA::String_var name
オペレーションの名前です。

CORBA::String_var id
オペレーションのリポジトリIDです。

CORBA::String_var defined_in
このオペレーションが定義されたインタフェース，またはvaluetypeのリポジトリIDです。

CORBA::String_var version
オペレーションのバージョンです。

CORBA::TypeCode_var result
オペレーションの結果です。

CORBA::OperationMode mode
オペレーションのモードです。

CORBA::ContextIdSeq contexts
オペレーションに対応するコンテキストリストです。

CORBA::ParameterDescriptionSeq parameters
オペレーションのパラメタです。

CORBA::ExceptionDescriptionSeq exceptions
オペレーションによって発生する可能性のある例外です。

24.27　OperationMode

enum CORBA::OperationMode

この列挙体は，オペレーションのモードを表す値を定義するために使用します。モードは，標準モードまたは一方向モードのどちらかです。標準オペレーション要求では，リクエストの結果を含む応答がオブジェクトインプリメンテーションによってクライアントへ送信されます。一方向オペレーション要求では，クライアントアプリケーションは応答を受信しません。

＜この節の構成＞

24.27.1　OperationModeの値

24.27.1　OperationModeの値

OperationModeの値を次の表に示します。

表24-3　OperationModeの値（C++）

定数 | 意味
OP_NORMAL | 標準モード（標準オペレーション要求）
OP_ONEWAY | 一方向モード（一方向オペレーション要求）

24.28　ParameterDescription

struct CORBA::ParameterDescription

ParameterDescription構造体は，インタフェースリポジトリに格納されているオペレーションのパラメタを記述します。

＜この節の構成＞

24.28.1　ParameterDescriptionのメンバ

24.28.1　ParameterDescriptionのメンバ

CORBA::String_var name
パラメタの名前です。

CORBA::TypeCode_var type
パラメタの型です。

CORBA::IDLType_var type_def
パラメタのIDL型です。

CORBA::ParameterMode mode
パラメタのモードです。

24.29　ParameterMode

enum CORBA::ParameterMode

オペレーションで使用できるパラメタのモードを表す値を定義します。

＜この節の構成＞

24.29.1　ParameterModeの値

24.29.1　ParameterModeの値

ParameterModeの値を次の表に示します。

表24-4　ParameterModeの値（C++）

定数 | 意味
PARAM_IN | クライアントからサーバへの入力に使用するパラメタ
PARAM_OUT | サーバからクライアントへの結果の出力に使用するパラメタ
PARAM_INOUT | クライアントからの入力，またはサーバからの出力の両方に使用できるパラメタ

24.30　PrimitiveDef

class CORBA::PrimitiveDef : public virtual CORBA::IDLType,
                            public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されている基本型（int，longなど）を記述するために使用します。このクラスは，基本型の種類を取得するメソッドを提供します。

＜この節の構成＞

24.30.1　PrimitiveDefのメソッド

24.30.1　PrimitiveDefのメソッド

CORBA::PrimitiveKind kind();
このメソッドは，このオブジェクトが表す基本型の種類を表します。

24.31　PrimitiveKind

enum CORBA::PrimitiveKind

PrimitiveKind列挙体は，インタフェースリポジトリに格納できるオブジェクトの基本型を定義する定数を含んでいます。

＜この節の構成＞

24.31.1　PrimitiveKindの定数

24.31.1　PrimitiveKindの定数

PrimitiveKindの定数値を次の表に示します。

表24-5　PrimitiveKindの定数値（C++）

定数 | 意味
pk_any | Any
pk_boolean | boolean
pk_char | 文字
pk_double | double
pk_float | float
pk_long | long
pk_longdouble | long double
pk_longlong | long long
pk_null | NULL値
pk_objref | オブジェクトリファレンス
pk_octet | オクテット
pk_Principal | Principal
pk_short | short
pk_string | 文字列
pk_TypeCode | TypeCode
pk_ulong | unsigned long
pk_ulonglong | unsigned long long
pk_ushort | unsigned short
pk_void | void
pk_wchar | Unicode文字
pk_wstring | Unicode文字列

24.32　Repository

class CORBA::Repository : public virtual CORBA::Container,
                          public virtual CORBA::Object

Repositoryクラスは，インタフェースリポジトリへのアクセスを提供します。このクラスはContainerクラスから派生します。Containerクラスの詳細については，「24.9　Container」を参照してください。

このクラスを使用するには，ORB::resolve_initial_references("InterfaceRepository")で取得したオブジェクトをナロウして使用してください。

＜この節の構成＞

24.32.1　インクルードファイル

24.32.2　Repositoryのメソッド

24.32.1　インクルードファイル

このクラスを使用するときは，corba.hファイルをインクルードしてください。

interface Repository: Container {
   Contained lookup_id(in RepositoryId search_id);
   PrimitiveDef get_primitive(in CORBA::PrimitiveKind kind);
   StringDef create_string(in unsigned long bound);
   WStringDef create_wstring(in unsigned long bound);
   SequenceDef create_sequence(
       in unsigned long bound,
       in IDLType element_type
   );
   ArrayDef create_array(
       in unsigned long length,
       in IDLType element_type
   );
   FixedDef create_fixed(
      in unsigned short digits,
      in short scale
   );
};

24.32.2　Repositoryのメソッド

CORBA::ArrayDef_ptr create_array(
CORBA::ULong length,
CORBA::IDLType_ptr element_type);
このメソッドは，新規のArrayDefを生成し，そのオブジェクトを指すポインタを返します。

length
配列要素の最大数。この値には0より大きい数を設定します。

element_type
配列に格納されている要素のIDLType

CORBA::SequenceDef_ptr create_sequence(
CORBA::ULong bound,
CORBA::IDLType_ptr element_type);
このメソッドは，新規のSequenceDefオブジェクトを生成し，そのオブジェクトを指すポインタを返します。

bound
シーケンス内の項目の最大数。この値には0より大きい数を設定します。

element_type
シーケンスに格納されている項目のIDLTypeを指すポインタ

CORBA::StringDef_ptr create_string(
CORBA::Ulong bound);
このメソッドは，新規のStringDefオブジェクトを生成し，そのオブジェクトを指すポインタを返します。

bound
文字列の最大長。この値には0より大きい数を設定します。

CORBA::WstringDef_ptr create_wstring(
CORBA::Ulong bound);
このメソッドは，新規のWstringDefオブジェクトを生成し，そのオブジェクトを指すポインタを返します。

bound
文字列の最大長。この値には0より大きい数を設定します。

CORBA::PrimitiveDef_ptr get_primitive(
CORBA::PrimitiveKind kind);
このメソッドは，PrimitiveKindのリファレンスを返します。

kind
返されるリファレンス

CORBA::Contained_ptr lookup_id(
const char * search_id);
このメソッドは，指定された検索対象のIDと一致するオブジェクトをインタフェースリポジトリ内で検索します。一致するオブジェクトが見つからない場合，NULL値が返されます。

search_id
検索対象となる識別子

CORBA::FixedDef_ptr create_fixed (
CORBA::UShort digits, CORBA::Short scale);
このメソッドは，fix型のけた数とスケールを設定します。

digits
fix型のけた数

scale
fix型のスケール

24.33　SequenceDef

class CORBA::SequenceDef : public virtual CORBA::IDLType,
                           public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されているシーケンスを表すために使用します。このクラスは，シーケンスのバウンドまたは要素型を設定したり取得したりするメソッドを提供します。

＜この節の構成＞

24.33.1　SequenceDefのメソッド

24.33.1　SequenceDefのメソッド

CORBA::ULong bound();
このメソッドは，シーケンスのバウンドを返します。

void bound(
CORBA::ULong bound);
このメソッドは，シーケンスのバウンドを設定します。

bound
シーケンスのバウンド

CORBA::TypeCode_ptr element_type();
このメソッドは，このシーケンスの要素のTypeCodeを返します。

CORBA::IDLType_ptr element_type_def();
このメソッドは，このシーケンスに格納されている要素のIDL型を返します。

void element_type_def(
CORBA::IDLType_ptr element_type_def);
このメソッドは，このシーケンスに格納されている要素のIDL型を設定します。

element_type_def
要素を設定するIDL型

24.34　StringDef

class CORBA::StringDef : public virtual CORBA::IDLType,
                         public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されているStringを記述するために使用します。このクラスは，文字列のバウンドを設定および取得するメソッドを提供します。

＜この節の構成＞

24.34.1　StringDefのメソッド

24.34.1　StringDefのメソッド

CORBA::ULong bound() ;
このメソッドは，Stringのバウンドを返します。

void bound(
CORBA::ULong bound) ;
このメソッドは，Stringのバウンドを設定します。

bound
新しく設定するStringオブジェクトのバウンド

24.35　StructDef

class CORBA::StructDef : public virtual CORBA::TypedefDef,
                         public virtual CORBA::Container,
                         public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されている構造体のメンバ一覧を設定および取得するためのメソッドを提供します。

＜この節の構成＞

24.35.1　StructDefのメソッド

24.35.1　StructDefのメソッド

CORBA::StructMemberSeq *members() ;
このメソッドは，構造体のメンバのリストを返します。

void members(
CORBA::StructMemberSeq& members) ;
このメソッドは，構造体のメンバのリストを設定します。

members
メンバのリスト

24.36　StructMember

struct CORBA::StructMember

この構造体は，structのメンバを定義するために使用します。この構造体は，定義内の名前と型を変数として使用します。

＜この節の構成＞

24.36.1　StructMemberのメンバ

24.36.1　StructMemberのメンバ

CORBA::String_var name
型の名前です。

CORBA::TypeCode_var type
型のIDL型です。

CORBA::IDLType_var type_def
IDL型のIDL型定義です。

24.37　TypedefDef

class CORBA::TypedefDef : public virtual CORBA::Contained,
                          public virtual CORBA::IDLType,
                          public virtual CORBA::Object

この抽象ベースクラスは，インタフェースリポジトリに格納されているユーザ定義構造体を表します。このクラスを継承するすべてのインタフェースを次に示します。

AliasDef
「24.1　AliasDef」を参照してください。

EnumDef
「24.12　EnumDef」を参照してください。

ExceptionDef
「24.13　ExceptionDef」を参照してください。

StructDef
「24.35　StructDef」を参照してください。

UnionDef
「24.39　UnionDef」を参照してください。

WstringDef
「24.44　WstringDef」を参照してください。

24.38　TypeDescription

struct CORBA::TypeDescription

TypeDescription構造体は，インタフェースリポジトリに格納されているオペレーションの型を記述した情報を含んでいます。

＜この節の構成＞

24.38.1　TypeDescriptionのメンバ

24.38.1　TypeDescriptionのメンバ

CORBA::String_var name
型の名前です。

CORBA::String_var id
型のリポジトリIDです。

CORBA::String_var defined_in
この型が定義されたモジュールまたはインタフェースの名前です。

CORBA::String_var version
型のバージョンです。

CORBA::TypeCode_var type
型のIDL型です。

24.39　UnionDef

class CORBA::UnionDef : public virtual CORBA::TypedefDef,
                        public virtual CORBA::Container,
                        public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されているunionを表すために使用します。このクラスは，unionのメンバのリスト，またはディスクリミネータ型を，設定および取得するメソッドを提供します。

＜この節の構成＞

24.39.1　UnionDefのメソッド

24.39.1　UnionDefのメソッド

CORBA::TypeCode_ptr discriminator_type() ;
このメソッドは，unionのディスクリミネータのTypeCodeを返します。

CORBA::IDLType_ptr discriminator_type_def() ;
このメソッドは，unionのディスクリミネータのIDL型を返します。

void discriminator_type_def(
CORBA::IDLType_ptr discriminator_type_def) ;
このメソッドは，unionのディスクリミネータのIDL型を設定します。

discriminator_type_def
メンバのリスト

CORBA::UnionMemberSeq *members() ;
このメソッドは，unionのメンバのリストを返します。

void members(
CORBA::UnionMemberSeq& members);
このメソッドは，unionのメンバのリストを設定します。

members
メンバのリスト

24.40　UnionMember

struct CORBA::UnionMember

UnionMember構造体は，インタフェースリポジトリに格納されているunionの情報を含みます。

＜この節の構成＞

24.40.1　UnionMemberのメンバ

24.40.1　UnionMemberのメンバ

CORBA::String_var name
unionの名前です。

CORBA::Any label
unionのラベルです。

CORBA::TypeCode_var type
unionのTypeCodeです。

CORBA::IDLType_var type_def
unionのIDL型です。

24.41　ValueBoxDef

class CORBA::ValueBoxDef public virtual CORBA::Contained,
                         public virtual CORBA::IDLType,
                         public virtual CORBA::Object

ValueBoxDefクラスは，任意のIDL型の公開メンバを一つ格納する簡易なvaluetypeとして使用します。このクラスは，次のvaluetypeを簡略化したものです。

public valuetype <IDLType> value;

この宣言はボックス型の<IDLType>とほとんど同じですが，ValueBoxDefクラスは簡易なValueTypeDefインタフェースとは異なります。

＜この節の構成＞

24.41.1　ValueBoxDefのメソッド

24.41.1　ValueBoxDefのメソッド

CORBA::IDLType_ptr original_type_def();
このメソッドは，ボックス化されている型を識別します。

void original_type_def(
CORBA::IDLType_ptr original_type_def);
このメソッドは，ボックス化する型を設定します。

24.42　ValueDef

class CORBA::ValueDef public virtual CORBA::Container,
                      public virtual CORBA::Contained,
                      public virtual CORBA::IDLType,
                      public virtual CORBA::Object

このインタフェースは，constructというIDL値を記述します。このインタフェースが格納できるのは，定数，型定義，例外，オペレーション，および属性です。このインタフェースは，クラス型とよく似ていて，インタフェースリポジトリに格納されている値定義を表します。

＜この節の構成＞

24.42.1　ValueDefのメソッド

24.42.1　ValueDefのメソッド

CORBA::InterfaceDefSeq supported_interfaces( );
このメソッドは，このvaluetypeがサポートするインタフェースの一覧を返します。

void supported_interfaces(
const CORBA::interfaceDefSeq& supported_interfaces);
このメソッドは，サポートするインタフェースを設定します。

CORBA::InitializerSeq* initializers( );
このメソッドは，イニシャライザの一覧を返します。

void initializers(
const CORBA::InitializerSeq& initializers);
このメソッドは，イニシャライザを設定します。

CORBA::ValueDef_ptr base_value( );
このメソッドは，この値の継承元valuetypeを返します。

void base_value(
CORBA::ValueDef_ptr base_value);
このメソッドは，valuetypeを設定します。

CORBA::ValueDefSeq& abstract_base_values( );
このメソッドは，この値が継承するabstract型valuetypeの一覧を返します。

void abstract_base_values(
const CORBA::ValueDefSeq& abstract_base_values);
このメソッドは，abstract型valuetypeのベース値を定義します。

CORBA::Boolean is_abstract( );
値がabstract型valuetypeの場合，このメソッドはtrueを返します。

void is_abstract(
CORBA::Boolean is_abstract);
このメソッドは，valuetypeをabstract型valuetypeに設定します。

CORBA::Boolean is_custom( );
値がcustom型のマーシャリングを使用する場合，このメソッドはtrueを返します。

void is_custom(
CORBA::Boolean is_custom);
このメソッドは，値に対してcustom型のマーシャリングを設定します。

CORBA::Boolean is_truncatable( ):
値をベース値から安全に切り捨てられる場合，このメソッドはtrueを返します。

void is_truncatable(
CORBA::Boolean is_truncatable);
このメソッドは，この値にtruncatable属性を設定します。

CORBA::Boolean is_a(
const char* value_id);
このメソッドの呼び出しに使用した値が，value_idパラメタで定義したインタフェースまたは値と同一であるか，直接的または間接的に継承されたものである場合，このメソッドはtrueを返し，そうでない場合はfalseを返します。

CORBA::ValueDef _ptr FullValueDescription* describe_value();
このメソッドは，値に対応するFullValueDescriptionオブジェクトを，オペレーションと属性を含めて返します。

CORBA::ValueMemberDef_ptr create_value_member(
const char* id,
const char* name,
const char*version,
CORBA::IDLType_ptr type_def,
CORBA::Short access);
このメソッドは，このメソッドの呼び出し対象のValueDefオブジェクトが格納する，新しいValueMemberDefオブジェクトを返します。

id
型のリポジトリID

name
型の名前

version
オブジェクトのバージョン

type_def
IDL型の値

access
アクセス値

CORBA::AttributeDef_ptr create_attribute(
const char* id,
const char* name,
const char* version,
CORBA::IDLType_ptr type,
CORBA::AttributeMode mode);
このメソッドは，このvaluetypeに新規属性定義を生成し，その定義に対応する新規AttributeDefオブジェクトを返します。

id
型のリポジトリID

name
型の名前

version
オブジェクトのバージョン

type
IDL型の値

mode
オブジェクトのモード

CORBA::OperationDef_ptr create_operation(
const char* id,
const char* name,
const char* version,
CORBA::IDLType_ptr result,
CORBA::OpeartionMode mode,
const CORBA::ParDescriptionSeq& params,
const CORBA::ExceptionDefSeq& exceptions,
const CORBA::ContextIdSeq& contexts);
このメソッドは，このvaluetypeの新規オペレーションを生成し，対応するOperationDefオブジェクトを返します。

id
型のリポジトリID

name
型の名前

version
オブジェクトのバージョン

result
オペレーションのIDL型

mode
オブジェクトのモード

params
オペレーションのパラメタの一覧

exceptions
オペレーションの例外の一覧

contexts
オペレーションのコンテキストの一覧

24.43　ValueDescription

struct CORBA::ValueDescription

この構造体は，インタフェースリポジトリが格納するvaluetypeの定義を表すために使用します。

＜この節の構成＞

24.43.1　ValueDescriptionの変数

24.43.1　ValueDescriptionの変数

CORBA::String_var name
型の名前を表します。

CORBA::String_var id
型のリポジトリIDを表します。

CORBA::Boolean is_abstract
trueを設定した場合，値はabstract型valuetypeです。

CORBA::Boolean is_custom
trueを設定した場合，valuetypeにcustom型マーシャリングが実行されます。

CORBA::String_var defined_in
型が定義されているモジュールのリポジトリIDを表します。

CORBA::String_var version
型のバージョンを表します。

CORBA::RepositoryIdSeq& supported_interfaces
valuetypeがサポートするインタフェースの一覧を表します。

CORBA::RepositoryIdSeq& abstract_base_values
型の継承するabstract型valuetypeの一覧を表します。

CORBA::Boolean is_truncatable
この変数がtrueの場合，valuetypeは安全に切り捨てられ，ベース値にできます。

CORBA::String_var base_value
この値が継承するvaluetypeを表します。

24.44　WstringDef

class CORBA::WstringDef : public virtual CORBA::IDLType,
                         public virtual CORBA::Object

このクラスは，インタフェースリポジトリに格納されているUnicode文字列を記述するために使用します。このクラスは，文字列のバウンドを設定および取得するメソッドを提供します。

＜この節の構成＞

24.44.1　WstringDefのメソッド

24.44.1　WstringDefのメソッド

CORBA::ULong bound() ;
このメソッドは，Wstringのバウンドを返します。

void bound(
CORBA::ULong bound);
このメソッドは，Wstringのバウンドを設定します。

bound
新しく設定するWstringオブジェクトのバウンド

25.　活性化インタフェースとクラス（C++）

この章では，C++言語のオブジェクトインプリメンテーションの活性化で使用されるインタフェースおよびクラスについて説明します。

＜この章の構成＞

25.1　CreationImplDef

25.2　ImplementationDef

25.3　ImplementationStatus

25.4　OAD

25.5　ObjectStatus

25.6　ObjectStatusList

25.7　StringSequence

25.1　CreationImplDef

struct extension::CreationImplDef

CreationImplDefは，ある特定のオブジェクトインプリメンテーション用の属性の集合を提供するIDL構造体です。これらの属性の値の問い合わせと，設定メソッドは，このインタフェースで提供します。該当する属性は，_args，_env，id（リファレンスデータ用），object_name，_path_name，_policy，およびrepository_idです。

オブジェクト活性化デーモンは，この構造体を使用してオブジェクトインプリメンテーションを一覧表示，登録，および登録解除します。コマンドラインパラメタはoadutilを使用したときに指定され，この構造体で定義した属性の設定に使用します。

＜この節の構成＞

25.1.1　インクルードファイル

25.1.2　C++のサンプル

25.1.3　環境変数

25.1.4　CreationImplDefのメンバ

25.1.1　インクルードファイル

この構造体を使用するときは，oad_c.hhファイルをインクルードしてください。

25.1.2　C++のサンプル

次のサンプルでは，OADの環境に適切なReentrantServer引数とLD_LIBRARY_PATH環境変数を設定して，factory_r（ローカルディレクトリ内にある）というVisiBrokerのC++アプリケーションを活性化しています。

なお，このサンプルはSolarisの場合です。HP-UXの場合はSHLIB_PATH環境変数，AIXの場合はLIBPATH環境変数を設定してください。

path_name = "/home/developer/Project1/factory_r"
args = ["ReentrantServer"]
env = ["LD_LIBRARY_PATH=/usr/ucblib:/usr/local/VisiCpp/lib"]

これは，OADが次のコマンドを生成していることになります。

"/home/developer/Project1/factory_r ReentrantServer ¥
   -Dvbroker.orb.oadUID=<unique_id> ¥
   -Dvbroker.orb.activationIOR=<oad's ior>"

vbroker.orb.oadUIDおよびvbroker.orb.activationIORプロパティは，OADが自動的に付加します。

また，次に示す環境変数が，OADの環境から，生成されたサーバの環境に伝えられます。

25.1.3　環境変数

次の環境変数が，OADの環境から，生成されたサーバの環境に伝えられるか，またはOADによって明示的に渡されます。ただし，環境変数がシェル内に設定されていない場合は，oadutilコマンドの-eオプションを使用して設定する必要があります。

PATH

CLASSPATH

OSAGENT_PORT

OSAGENT_ADDR

VBROKER_ADM（または下位互換性のためのORBELINE）

LD_LIBRARY_PATH，SHLIB_PATHまたはLIBPATH（CreationImplDef内に設定）

そのほかの環境変数はすべて，CreationImplDefのenv属性を使って登録する必要があります。例えば，C++インプリメンテーションを生成する場合，生成された実行対象に共用ライブラリが必要なときは，CreationImplDef環境にLD_LIBRARY_PATH（Solarisの場合），SHLIB_PATH（HP-UXの場合），またはLIBPATH（AIXの場合）を明示的に登録する必要があります。

生成されたC++アプリケーションでは，登録は次のコマンドにマッピングします。

exec-path { args1 ... argsN } -OAoad_uid=<unique_id>¥
   -OAactivateIOR=<oad's ior>

生成された環境には，インプリメンテーション定義から指定したすべての環境変数が含まれ，また，起動時にOAD自身の環境から取ったPATH，CLASSPATH，OSAGENT_PORT，およびOSAGENT_ADDRの定義も含まれます。どのOAパラメタの場合も，OADが追加したものはBOA_initの中に取られ，クライアントプログラムからは見えません。詳細については，「34.　コマンドラインオプション（C++）」を参照してください。

25.1.4　CreationImplDefのメンバ

extension::Policy activation_policy;
サーバの活性化ポリシーを設定します。
活性化ポリシーには，SHARED_SERVER，UNSHARED_SERVERがあります。

CORBA::StringSequence args;
サーバに渡すコマンドライン引数を設定します。
最初の引数には必ず実行形式ファイル名を指定してください。

CORBA::StringSequence env;
サーバに渡す環境設定を設定します。
env属性の設定の詳細については，「25.1.3　環境変数」を参照してください。

CORBA::OctetSequence id;
インプリメンテーションのリファレンスデータ識別子を設定します。

CORBA::String_var object_name;
このメソッドは，インプリメンテーションのオブジェクト名を設定します。

CORBA::String_var path_name;
実行形式ファイルのパス名を指定する文字列を設定します。

CORBA::String_var repository_id;
インプリメンテーションのリポジトリIDを指定する文字列を設定します。

25.2　ImplementationDef

class extension::ImplementationDef

ImplementationDefは，ImplementationDefsの型であるActivationImplDefとCreationImplDef用の空のベースクラスです。ImplementationDefが使用できるのは，ActivationImplDefメソッド，またはCreationImplDefメソッド内のシグニチャの中だけです。

＜この節の構成＞

25.2.1　インクルードファイル

25.2.1　インクルードファイル

このクラスを使用するときは，oad_c.hhファイルをインクルードしてください。

25.3　ImplementationStatus

struct Activation::ImplementationStatus

ImplementationStatusは，OADに登録されているサーバのために活性化状態を監視します。

module Activation
{
   ...
   struct ImplementationStatus {
     extension::CreationImplDef impl;
     ObjectStatusList status;
   };
   ...
};

＜この節の構成＞

25.3.1　インクルードファイル

25.3.2　ImplementationStatusのメンバ

25.3.1　インクルードファイル

この構造体を使用するときは，oad_c.hhファイルをインクルードしてください。

25.3.2　ImplementationStatusのメンバ

CreationImplDef impl;
オブジェクトインプリメンテーションのCreationImplDefです。

ObjectStatusList status;
サーバが提供する各オブジェクトのステータス情報のリストを表します。ObjectStatusListクラスの詳細については，「25.6　ObjectStatusList」を参照してください。

25.4　OAD

class Activation::OAD : public virtual CORBA::Object

OADクラスは，OADへのアクセスを提供します。管理ツールは，オブジェクトのリスティング，登録，再登録をするときにOADクラスを使用します。OADのプログラム的管理のためにクライアントコードで使用することもできます。

コードサンプル25-1　OAD IDL

module Activation {
   interface OAD {
     extension::CreationImplDef create_CreationImplDef();

     Object reg_implementation(
           in extension::CreationImplDef impl)
         raises(DuplicateEntry, InvalidPath);

     extension::CreationImplDef get_implementation(
           in CORBA::RepositoryId repId,
           in CORBA::RepositoryId repId,
           in string object_name)
         raises(NotRegistered);

     void change_implementation(
           in extension::CreationImplDef old_info,
           in extension::CreationImplDef new_info)
         raises(NotRegistered, InvalidPath, IsActive);

     attribute boolean destroy_on_unregister;

     void unreg_implementation(
           in CORBA::RepositoryId repId,
           in string object_name)
         raises(NotRegistered);

     void unreg_interface(in CORBA::RepositoryId repId)
         raises(NotRegistered);

     void unregister_all();

     ImplementationStatus get_status(
           in CORBA::RepositoryId repId,
           in string object_name)
         raises(NotRegistered);

     ImplStatusList get_status_interface(
           in CORBA::RepositoryId repId)
         raises(NotRegistered);

     ImplStatusList get_status_all();

     Object lookup_interface(
           in CORBA::RepositoryId repId,
           in long timeout)
         raises(NotRegistered, FailedToExecute,
                NotResponding, Busy);

     Object lookup_implementation(
           in CORBA::RepositoryId repId,
           in string object_name, in long timeout)
         raises(NotRegistered, FailedToExecute,
                NotResponding, Busy);

     extension::CreationImplDef boa_active_obj(
           in Object obj, in string repository_id,
           in long unique_id)
         raises(NotRegistered);

     void boa_deactive_obj(in Object obj,
           in string repository_id,
           in long unique_id)
         raises(NotRegistered);

   string generated_command(
            in extension::CreationImplDef impl);

   string generated_environment(
            in extension::CreationImplDef impl);

   };
};

＜この節の構成＞

25.4.1　インクルードファイル

25.4.2　OADのメソッド

25.4.1　インクルードファイル

このクラスを使用するときは，oad_c.hhファイルをインクルードしてください。

25.4.2　OADのメソッド

void change_implementation(
CORBA::CreationImplDef old_info,
CORBA::CreationImplDef new_info);
このメソッドは，オブジェクトのインプリメンテーションを動的に変更します。このメソッドを使って，登録の活性化ポリシー，パス名，引数設定，環境設定を変更できます。

old_info
変更したい情報

new_info
old_infoと差し替えたい情報

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

IsActive

オブジェクトインプリメンテーションは現在実行中です。オブジェクトを非活性化してから，その情報を変更してください。

注

現在活性状態のインプリメンテーションの情報は変更できません。このメソッドでオブジェクトのインプリメンテーション名やオブジェクト名を変更するときは，必ずこの注意を守ってください。そうすることで，クライアントアプリケーションがオブジェクトを古い名前で検索することを防げます。

CreationImplDef_ptr create_CreationImplDef();
このメソッドは，CreationImplDefオブジェクトのインスタンスを返し，その後，属性を設定できます。詳細については，「25.1　CreationImplDef」を参照してください。

void destroy_on_unregister(
CORBA::Boolean val);
このメソッドは，OADのdestroy_on_unregister属性を設定します。

val
TRUEを設定すると，活性状態のインプリメンテーションが登録解除時にすべてシャットダウンされます。TRUEを設定しない場合は，登録解除時にシャットダウンされません。

CORBA::Boolean destroy_on_unregister();
このメソッドは，インプリメンテーションのdestroy_on_unregister属性の設定を返します。この属性にTRUEが設定されていると，活性状態のインプリメンテーションが，登録解除時にすべてシャットダウンされます。

CORBA::CreationImplDef_ptr get_implementation(
const char *repId，
const char *object_name);
このメソッドは，指定されたリポジトリIDとオブジェクト名に対して登録されたインプリメンテーションに関する情報を検索します。

repId
リポジトリID

object_name
オブジェクト名

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

ImplementationStatus *get_status(
const char *repId，
const char *object_name);
このメソッドは，指定されたリポジトリIDとオブジェクト名に対して登録されたインプリメンテーションに関するステータス情報を検索します。

repId
リポジトリID

object_name
オブジェクト名

ImplStatusList *get_status_all();
このメソッドは，すべてのインプリメンテーションに関するステータス情報を含むImplStatusListを返します。

ImplStatusList *get_status_interface(
const char *repId);
このメソッドは，指定されたリポジトリIDに対して登録されたインプリメンテーションに関するステータス情報を取得します。

repId
リポジトリID

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

CORBA::Object reg_implementation(
CORBA::CreationImplDef_ptr impl);
このメソッドは，インプリメンテーションをOADとBorland Enterprise Server VisiBrokerディレクトリサービスに登録します。

impl
CreationImplDefのインスタンス

このメソッドでは次の例外が発生します。

DuplicateEntry

指定したオブジェクトは重複エントリです。未登録オブジェクトを指定してください。

void unreg_implementation(
const char *repId,const char *object_name);
このメソッドは，リポジトリIDとオブジェクト名でインプリメンテーションを登録解除します。destroy_on_unregister属性にtrueが設定してあると，このメソッドは，指定されたリポジトリIDとオブジェクト名を現在実装しているプロセスをすべて終了させます。

repId
リポジトリID

object_name
オブジェクト名

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

void unreg_interface(
const char *repId);
このメソッドは，リポジトリIDに対応するすべてのインプリメンテーションを登録解除します。destroy_on_unregister属性がtrueに設定してあると，このメソッドは，指定されたリポジトリIDが現在実装されているプロセスを，すべて終了させます。

repId
リポジトリID

このメソッドでは次の例外が発生します。

NotRegistered

指定したオブジェクトは未登録です。登録済みオブジェクトを指定してください。

void unregister_all();
このメソッドは，すべてのインプリメンテーションを登録解除します。destroy_on_unregister属性にtrueを設定していないかぎり，活性状態のすべてのインプリメンテーションが実行を続けます。

25.5　ObjectStatus

struct Activation::ObjectStatus

この構造体は，OADに登録されているオブジェクトインプリメンテーションによって提供される，特定のオブジェクトについての情報を表すために使います。この構造体は，ObjectStatusListクラスによって返されます。ObjectStatusListクラスについては，「25.6　ObjectStatusList」を参照してください。

module Activation
{
   ...
   struct ObjectStatus {
       long      unique_id;
       State     activation_state;
       Object    objRef;
   };
   ...
};

＜この節の構成＞

25.5.1　インクルードファイル

25.5.2　ObjectStatusのメンバ

25.5.1　インクルードファイル

この構造体を使用するときは，oad_c.hhをインクルードしてください。

25.5.2　ObjectStatusのメンバ

CORBA::Long unique_id;
オブジェクト特有の識別子です。

State activation_state;
オブジェクトの現在の活性状態です。次のどれかの値となります。

ACTIVE

INACTIVE

WAITING_FOR_ACTIVATION

CORBA::Object objRef;
構造体で表される状態のオブジェクト

25.6　ObjectStatusList

class Activation::ObjectStatusList

このクラスは，ObjectStatus構造体のリストを実装し，サーバが提供するオブジェクトの情報を表すために使用します。

「25.5　ObjectStatus」も参照してください。

＜この節の構成＞

25.6.1　インクルードファイル

25.6.2　ObjectStatusListのメソッド

25.6.1　インクルードファイル

このクラスを使用するときは，oad_c.hhをインクルードしてください。

25.6.2　ObjectStatusListのメソッド

void length(
CORBA::ULong len);
リストの長さを設定します。

len
リストの長さ

CORBA::ULong length() const;
リストの長さを返します。

CORBA::ULong maximum() const;
リストの最大長を返します。

ObjectStatus& operator[ ](
CORBA::ULong index);
指定されたインデックスを持つObjectStatus構造体をリストから返します。

index
返されるリスト項目のインデックス。このインデックスは0から始まります。

25.7　StringSequence

class CORBA::StringSequence

StringSequenceクラスは，CreationImplDefオブジェクトに対応する引数，または環境変数のリストを含みます。CreationImplDefオブジェクトについては，「25.1　CreationImplDef」を参照してください。

＜この節の構成＞

25.7.1　インクルードファイル

25.7.2　StringSequenceのメソッド

25.7.3　StringSequenceに関連するメソッド

25.7.1　インクルードファイル

このクラスを使用するときは，corba.hをインクルードしてください。

25.7.2　StringSequenceのメソッド

CORBA::StringSequence(
CORBA::ULong max = 0);
このメソッドは，指定された長さで，StringSequenceオブジェクトを生成します。

max
リスト内の引数の最大長。デフォルト長は0です。

CORBA::StringSequence(
CORBA::ULong max,
CORBA::ULong length,
char **data,
CORBA::Boolean release = 0);
このメソッドは，指定されたパラメタで，StringSequenceオブジェクトを生成します。

max
シーケンスの引数の最大数

length
シーケンスの長さ

data
シーケンスを構成する文字列

release
1を設定した場合，このオブジェクトがデストラクトされた際にリストに対応するすべてのメモリが解放されます。

~CORBA::StringSequence();
このメソッドは，このオブジェクトをデストラクトします。

25.7.3　StringSequenceに関連するメソッド

static char **allocbuf(
CORBA::ULong nelems);
このメソッドは，指定されたリスト要素の数に合わせてメモリを割り当てます。

nelems
リスト内の要素数

CORBA::ULong compare(
const CORBA::StringSequence& seq1,
const CORBA::StringSequence& seq2);
このメソッドは，二つのStringSequenceオブジェクトを比較し，それらが同一である場合，0を返します。そうでない場合は0以外の数字を返します。

seq1
比較する最初のオブジェクト

seq2
比較する2番目のオブジェクト

static void freebuf(
char **data);
このメソッドは，指定されたポインタに対応するメモリを解放します。

data
解放されるリストメモリ

static void freebuf_elems(
char **data, CORBA::ULong nelems);
このメソッドは，指定されたリスト要素の数に合わせてメモリを解放します。また，シーケンスが使用したメモリ，およびStringSequenceが保持する文字列を解放します。

注

StringSequenceに格納される文字列が，プログラムのほかから参照されている場合，その文字列が使用したメモリは解放しません。ただし，複数の文字列の配列であるStringSequenceは，削除され，メモリを解放します。

data
解放されるリストメモリ

nelems
要素の数

CORBA::ULong hash(
CORBA::StringSequence& seq);
このメソッドは，指定されたオブジェクトのハッシュ値を返します。

seq
ハッシュ値が返されるStringSequence

CORBA::ULong length() const;
このメソッドは，シーケンス内の要素数を返します。

void length(
CORBA::ULong len);
このメソッドは，シーケンス内の要素数を設定します。

len
新しい長さ

CORBA::ULong maximum() const;
このメソッドは，リスト内の引数の数を返します。

CORBA::StringSequence& operator=(
const CORBA::StringSequence& seq);
この演算子は，代入によるStringSequenceのコピーを可能にします。

seq
コピーするオブジェクト

char *operator[ ](
CORBA::ULong index);
この演算子は，インデックスを使ってStringSequence内の引数へのアクセスを可能にします。

index
任意の文字列シーケンスの0から始まるインデックス

static void _release(
CORBA::StringSequence* ptr);
このメソッドは，指定されたStringSequenceオブジェクトを解放します。

ptr
解放するStringSequenceオブジェクト

26.　ネーミングサービスインタフェースとクラス（C++）

この章では，C++言語でプログラミングする場合に，Borland Enterprise Server VisiBrokerのネーミングサービスで使用するインタフェースとクラスについて説明します。

＜この章の構成＞

26.1　NamingContext

26.2　NamingContextExt

26.3　BindingとBindingList

26.4　BindingIterator

26.5　NamingContextFactory

26.6　ExtendedNamingContextFactory

26.1　NamingContext

class NamingContext : public virtual CORBA::Object

このオブジェクトを使用して，VisiBroker ORBオブジェクト，またはほかのNamingContextオブジェクトにバインドされるネームを登録したり，操作したりします。クライアントアプリケーションは，このインタフェースを使用して，コンテキスト内のネームをresolveまたはlistによって処理します。オブジェクトインプリメンテーションは，このオブジェクトを使用して，オブジェクトインプリメンテーション，またはNamingContextオブジェクトをネームにバインドします。NamingContextのIDL仕様をIDLサンプル26-1に示します。

IDLサンプル26-1　NamingContextインタフェースのIDL仕様

module CosNaming {
   interface NamingContext {
       void bind(in Name n, in Object obj)
           raises(NotFound, CannotProceed, InvalidName,
                  AlreadyBound);
       void rebind(in Name n, in Object obj)
           raises(NotFound, CannotProceed, InvalidName);
       void bind_context(in Name n, in NamingContext nc)
           raises(NotFound, CannotProceed, InvalidName,
                  AlreadyBound);
       void rebind_context(in Name n, in NamingContext nc)
           raises(NotFound, CannotProceed, InvalidName);
       Object resolve(in Name n)
           raises(NotFound, CannotProceed, InvalidName);
       void unbind(in Name n)
           raises(NotFound, CannotProceed, InvalidName);
       NamingContext new_context( );
       NamingContext bind_new_context(in Name n)
           raises(NotFound, CannotProceed, InvalidName,
                  AlreadyBound);
       void destroy( )
           raises(NotEmpty);
       void list(in unsigned long how_many,
           out BindingList bl,
           out BindingIterator bi);
   };
};

＜この節の構成＞

26.1.1　NamingContextのメソッド

26.1.1　NamingContextのメソッド

virtual void bind(
const Name& _n, CORBA::Object_ptr _obj) ;
このメソッドは，指定されたnameを指定されたObjectにバインドします。このとき，最初のNameComponentに対応づけられたコンテキストを解決し，その後，次に示すNameを使用して新しいコンテキストにオブジェクトをバインドします。

Name[NameComponent₂ ,...,NameComponent(n-1) ,NameComponentn ]

解決とバインドのこの再帰的なプロセスは，NameComponent(n-1)に関連づけられたコンテキストが解決され，ネームとオブジェクトとの実際のバインドが格納されるまで続きます。パラメタnがシンプルネームである場合には，objは，このNamingContext内のnにバインドされます。

_n
オブジェクトに指定するネームで初期化されるName構造体

_obj
ネーミングされるオブジェクト

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

AlreadyBound

bindオペレーション，またはbind_contextオペレーションのNameは，NamingContext内の別のオブジェクトにすでにバインドされています。

virtual void rebind(
const Name& _n, CORBA::Object_ptr _obj) ;
このメソッドは，AlreadyBound例外が発行されないという点を除いて，bindメソッドと同じです。指定されたNameがすでに別のオブジェクトにバインドされている場合には，このバインドは，新しいバインドで置き換えられます。

_n
オブジェクトに指定するネームで初期化されるName構造体

_obj
ネーミングされるオブジェクト

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual void bind_context(
const Name& _n, NamingContext_ptr _nc);
このメソッドは，指定されたNameが，任意のVisiBroker ORBオブジェクトではなく，NamingContextに対応づけられるという点を除いて，bindメソッドと同じです。

_n
希望するネーミングコンテキスト名で初期化されるName構造体。シーケンス内の最初の(n-1)個のNameComponent構造体は，NamingContextを解決する必要があります。

_nc
バインドされるNamingContextオブジェクト

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

AlreadyBound

bindオペレーション，またはbind_contextオペレーションのNameは，NamingContext内の別のオブジェクトにすでにバインドされています。

virtual void rebind_context(
const Name& _n, NamingContext_ptr _nc);
このメソッドは，AlreadyBound例外が発行されないという点を除いて，bind_contextメソッドと同じです。指定されたNameがすでに別のネーミングコンテキストにバインドされている場合には，このバインドは，新しいバインドで置き換えられます。

_n
オブジェクトに指定するネームで初期化されるName構造体

_nc
リバインドされるNamingContextオブジェクト

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual CORBA::Object _ptr resolve(
const Name& _n);
このメソッドは，指定されたNameを解決し，オブジェクトリファレンスを返します。パラメタnがシンプルネームである場合には，このNamingContextで解決されます。
nがコンプレックスネームである場合には，最初のNameComponentに関連づけられたコンテキストを使用して解決されます。その後，新しいコンテキストを使用して次に示すNameを解決します。

Name[NameComponent₂ ,...,NameComponent(n-1) ,NameComponentn ]

この再帰的なプロセスは，n番目のNameComponentに関連づけられたオブジェクトが返されるまで続きます。

_n
対象となるオブジェクトのネームで初期化されるName構造体

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual void unbind(
const Name& _n);
このメソッドは，bindメソッドの逆で，指定されたNameに対応しているバインドを削除します。

_n
バインドの解除をしたいネームのName構造体

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual NamingContext_ptr new_context();
このメソッドは，新しいネーミングコンテキストを作成します。新しく作成されたコンテキストは，このオブジェクトと同じサーバ内で実装されます。新しいコンテキストは，初期状態ではどのNameにもバインドされていません。

virtual NamingContext_ptr bind_new_context(
const Name& _n);
このメソッドは，新しいコンテキストを作成し，そのコンテキスト内で指定されたNameにバインドします。

_n
新しく作成されたNamingContextオブジェクトに対して指定されたネームで初期化されるName構造体

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたネーミングコンテキストからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

AlreadyBound

bindオペレーション，またはbind_contextオペレーションのNameは，NamingContext内の別のオブジェクトにすでにバインドされています。

virtual void destroy();
このメソッドは，現在のネーミングコンテキストを非活性化します。このオブジェクトでオペレーションを呼び出そうとすると，CORBA::OBJECT_NOT_EXISTランタイム例外が発生します。
このメソッドを使用する前に，unbindメソッドを使用して，NamingContextオブジェクトに対応してバインドされているすべてのNameオブジェクトをバインド解除しておく必要があります。空でないNamingContextオブジェクトを破棄しようとすると，NotEmpty例外が発生します。

virtual void list(
CORBA::ULong _how_many,
BindingList_out _bl,
BindingIterator_out _bi);
このメソッドは，現在のコンテキストに含まれているすべてのバインドを返します。how_manyパラメタで指定した数までのNameが，BindingListによって返されます。残りのバインドは，BindingIteratorによって返されます。返されたBindingListとBindingIteratorを使用すると，ネームのリストを参照できます。BindingListの詳細については，「26.3　BindingとBindingList」を参照してください。

_how_many
返されるNameの最大数

_bl
呼び出しプログラムに返されるNameのリスト。リストのネームの数はhow_manyの値を超えません。

_bi
残りのNameを参照するためのイタレータ

26.2　NamingContextExt

class NamingContextExt :
                      public virtual NamingContext,
                      public virtual CORBA::Object

このクラスは，NamingContextインタフェースを継承したもので，文字列化した名前とURLを使用するときに必要なオペレーションを提供します。

IDLサンプル26-2　NamingContextExtインタフェースのIDL仕様

module CosNaming {
   interface NamingContextExt{
       typedef string StringName;
       typedef string Address;
       typedef string URLString;

       StringName to_string(in Name n)
           raises(InvalidName);
       Name to_name(in StringName sn)
           raises(InvalidName);

       exception InvalidAddress {};

       URLString to_url(in Address addr, in StringName sn)
           raises(InvalidAddress, InvalidName);
       Object resolve_str(in StringName n)
           raises(NotFound, CannotProceed,
                  InvalidName);
   };
};

＜この節の構成＞

26.2.1　NamingContextExtのメソッド

26.2.1　NamingContextExtのメソッド

virtual char* to_string(
const Name& _n);
このオペレーションは，指定したNameの文字列化表現を返します。

_n
対象となるオブジェクトの名前で初期化されるName構造体

このメソッドでは，次の例外が発生します。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual Name* to_name(
const char* _sn);
このオペレーションは，指定した文字列化された名前のNameオブジェクトを返します。

_sn
オブジェクトの文字列化された名前

このメソッドでは，次の例外が発生します。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual char* to_url(
const char* _addr, const char* _sn);
このオペレーションは，_addrに指定したURLコンポーネントと，_snに指定した文字列化名から，完全なURL文字列を返します。

_addr
「myhost.inprise.com:800」の形式のURLコンポーネント。このパラメタの指定を省略すると，自ホストを仮定します。

_sn
文字列化したオブジェクト名

このメソッドでは，次の例外が発生します。

InvalidAddress

addrパラメタに指定したアドレスが不正です。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

virtual CORBA::Object _ptr resolve_str(
const char* _n);
このオペレーションは，指定した文字列名のNameオブジェクトを返します。

_n
文字列化したオブジェクト名

このメソッドでは，次の例外が発生します。

NotFound

Nameまたはそのコンポーネントの一つが見つかりません。

CannotProceed

シーケンスのNameComponentオブジェクトの一つが解決されていません。クライアントは，返されたNamingContextからオペレーションを継続できます。

InvalidName

指定されたNameにはネームコンポーネントがありません。またはIDフィールドに空文字列を指定したネームコンポーネントがあります。

26.3　BindingとBindingList

struct Binding
   class BindingList : private VISResource

Binding構造体，BindingListクラス，およびBindingIteratorクラスは，NamingContextオブジェクトの中に「名前とオブジェクトのバインド」を定義するために使用します。Binding構造体は，名前とオブジェクトのペアを一組カプセル化します。binding_nameフィールドはNameを表し，binding_typeフィールドはVisiBroker ORBオブジェクトとNamingContextオブジェクトのどちらにNameをバインドするかを表します。

BindingListは，NamingContextオブジェクトに含まれるBinding構造体のシーケンスです。BindingListを使用するプログラムの例については，サンプルとして提供されているexamples/vbe/ins/pluggable_adapterディレクトリを参照してください。

IDLサンプル26-3　Binding構造体のIDL仕様

module CosNaming {
   enum BindingType {
       nobject,
       ncontext
   }
   struct Binding {
       Name binding_name;
       BindingType binding_type;
   };
   typedef sequence<Binding>BindingList;
};

26.4　BindingIterator

class BindingIterator : public virtual CORBA::Object

このオブジェクトは，クライアントアプリケーションが，NamingContextのlistメソッドによって返されるこのオブジェクトを使用して，オブジェクトとネームのバインドを，数を指定しないで反復的に参照するために使用します。詳細については，「26.1.1　NamingContextのメソッド」の「virtual void list(CORBA::ULong _how_many, BindingList_out _bl, BindingIterator_out _bi)」を参照してください。BindingIteratorを使用するプログラムの例については，サンプルとして提供されているexamples/vbe/ins/pluggable_adapterディレクトリを参照してください。

IDLサンプル26-4　Binding構造体のIDL仕様

module CosNaming {
   interface BindingIterator {
       boolean next_one(out Binding b);
       boolean next_n(in unsigned long how_many,
                      out BindingList b);
       void destroy( );
   };
};

＜この節の構成＞

26.4.1　BindingIteratorのメソッド

26.4.1　BindingIteratorのメソッド

virtual CORBA::Boolean next_one(
Binding_out b_);
このメソッドは，リストから次のBindingを返します。リストに次のBindingがない場合にはCORBA::FALSEが返ります。それ以外の場合にはCORBA::TRUEが返ります。

b_
リストの次のBindingオブジェクト

virtual CORBA::Boolean next_n(
CORBA::ULong _how_many, BindingList_out _b);
このメソッドは，リストから要求されたBindingオブジェクトの数を含むBindingListを返します。リストに次のBindingがない場合には，返されるバインドの数が，要求された数よりも少ない場合があります。リストに次のBindingがない場合にはCORBA::FALSEが返ります。それ以外の場合にはCORBA::TRUEが返ります。

_how_many
要求されるBindingオブジェクトの最大数

_b
要求されたBindingオブジェクト数以下のオブジェクトが登録されたBindingList

virtual void destroy();
このメソッドは，オブジェクトを破棄し，オブジェクトに対応するメモリを解放します。このメソッドの呼び出しに失敗すると，メモリの使用量が増大します。

26.5　NamingContextFactory

class NamingContextFactory :
                      public virtual CORBA::Object

このクラスは，最初のNamingContextを実体化します。クライアントは，このオブジェクトにバインドし，create_contextメソッドを使用して最初のコンテキストを作成できます。最初のコンテキストを作成したら，new_contextメソッドを使用して，ほかのコンテキストを作成できます。new_contextメソッドについては，「26.1.1　NamingContextのメソッド」の「virtual NamingContext_ptr new_context();」を参照してください。

ネーミングサービスが起動するときに，このネーミングコンテキストファクトリのインスタンスが作成されます。詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ネーミングコンテキストファクトリ」の記述およびサンプルとして提供されているexamples/vbe/ins/cluster_failoverディレクトリを参照してください。

一つのルートコンテキストを自動的に作成するNamingContextFactoryの作成方法については，「26.6　ExtendedNamingContextFactory」を参照してください。

IDLサンプル26-5　NamingContextFactoryのIDL仕様

module CosNaming {
   interface NamingContextFactory {
       NamingContext create_context( );
       oneway void shutdown( );
   };
};

＜この節の構成＞

26.5.1　NamingContextFactoryのメソッド

26.5.1　NamingContextFactoryのメソッド

virtual CosNaming::NamingContextExt_ptr create_context();
このメソッドによって，クライアントはネーミングコンテキストを作成します。ネーミングコンテキストにはルートコンテキストが指定されていません。そのため，NamingContextFactoryを実体化しただけではネーミングコンテキストは作成されません。

virtual ClusterManager_ptr get_cluster_manager();
このメソッドは，クラスタを返します。

virtual NamingContextList* list_all_roots(
const char* _password);
このメソッドは，ルートコンテキストの一覧を返します。

virtual void remove_stale_contexts (
const char* _password);
このメソッドは，クラスタの存在期間中に，クライアントがクラスタからメンバを削除できるようにします。

virtual void shutdown();
このメソッドによって，クライアントは安全にネーミングサービスを終了できます。サービスを同じログファイルで再開した場合，ファクトリは，前回終了した状態です。

26.6　ExtendedNamingContextFactory

class ExtendedNamingContextFactory :
                      public virtual NamingContextFactory,
                      public virtual CORBA::Object

このクラスは，NamingContextFactoryインタフェースを拡張し，拡張ネーミングサービスの起動時にファクトリ内でデフォルトルートを作成できるようにします。詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ネーミングサービスの使用」の記述を参照してください。

IDLサンプル26-6　ExtendedNamingContextFactoryのIDL仕様

module CosNaming {
   interface ExtendedNamingContextFactory
                         :NamingContextFactory{
       NamingContext root_context( );
   };
};

＜この節の構成＞

26.6.1　ExtendedNamingContextFactoryのメソッド

26.6.1　ExtendedNamingContextFactoryのメソッド

virtual CosNaming::NamingContextExt_ptr root_context();
このメソッドは，該当するオブジェクトが実体化したときに，自動的に生成されたルートネーミングコンテキストを返します。

27.　ポータブルインタセプタインタフェースとクラス（C++）

この章では，OMG標準規格で定義されたポータブルインタセプタのインタフェースとクラスの，Borland Enterprise Server VisiBrokerでのインプリメンテーションについて，C++言語でのインタフェースを説明します。これらのインタフェースとクラスの詳細については，「OMG Final Adopted仕様」を参照してください。また，この章で説明するインタフェースを使用する前に，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ポータブルインタセプタの使用」の記述を参照してください。

＜この章の構成＞

27.1　概要

27.2　ClientRequestInfo

27.3　ClientRequestInterceptor

27.4　Codec

27.5　CodecFactory

27.6　Current

27.7　Encoding

27.8　ExceptionList

27.9　ForwardRequest

27.10　Interceptor

27.11　IORInfo

27.12　IORInfoExt

27.13　IORInterceptor

27.14　ORBInitializer

27.15　ORBInitInfo

27.16　Parameter

27.17　ParameterList

27.18　PolicyFactory

27.19　RequestInfo

27.20　ServerRequestInfo

27.21　ServerRequestInterceptor

27.1　概要

VisiBroker ORBは，拡張機能をプラグインするためのインタセプタであるAPIを提供します。例えば，トランザクションとセキュリティのサポートなどが拡張機能の一例です。インタセプタは，VisiBroker ORBの内部にフックされています。これによって，VisiBroker ORBサービスは，VisiBroker ORBの通常の実行の流れを受け取れます。Borland Enterprise Server VisiBrokerがサポートしているインタセプタには，次の2種類があります。

ポータブルインタセプタ
OMGが標準化したインタセプタです。これによって，異なるベンダのORB間で使用できる，ポータブルなインタセプタのコードを記述できます。

VisiBroker 4.xのインタセプタ
VisiBroker 4.xで定義された，Borland Enterprise Server VisiBroker独自のインタセプタです。

VisiBroker 4.xインタセプタの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「VisiBroker 4.xインタセプタの使用」の記述を参照してください。また，「28.　VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（C++）」を参照してください。

ポータブルインタセプタには，次の2種類があります。

リクエストインタセプタ
リクエストインタセプタを使用すると，VisiBroker ORBサービスはクライアントとサーバの間でコンテキスト情報の受け渡しができるようになります。リクエストインタセプタには，クライアントリクエストインタセプタとサーバリクエストインタセプタの2種類があります。

IORインタセプタ
IORインタセプタを使用すると，VisiBroker ORBサービスは，サーバまたはオブジェクトのORBサービス関連の機能を定義するIORに情報を登録できるようになります。例えば，SSLなどのセキュリティサービスは，自身のタグ付きコンポーネントをIORに登録できるようになります。これによって，そのコンポーネントを認識するクライアントは，そのコンポーネントの情報に基づいて，サーバとの間にコネクションを確立できます。

ポータブルインタセプタの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ポータブルインタセプタの使用」の記述を参照してください。

27.2　ClientRequestInfo

class PortableInterceptor::ClientRequestInfo :
                      public virtual RequestInfo,
                      public CORBA::LocalObject

このクラスは，RequestInfoから派生したクラスで，クライアント側のインタセプトポイントに渡されます。ClientRequestInfoのメソッドは，一部のインタセプトポイントでは有効ではありません。

次の表に，属性またはメソッドの有効性を示します。無効の属性またはメソッドにアクセスすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

表27-1　ClientRequestInfoの有効性（C++）

| send_request | send_poll | receive_reply | receive_exception | receive_other
request_id | ○ | ○ | ○ | ○ | ○
operation | ○ | ○ | ○ | ○ | ○
arguments | ○※1 | × | ○ | × | ×
exceptions | ○ | × | ○ | ○ | ○
contexts | ○ | × | ○ | ○ | ○
operation_context | ○ | × | ○ | ○ | ○
result | × | × | ○ | × | ×
response_expected | ○ | ○ | ○ | ○ | ○
sync_scope | ○ | × | ○ | ○ | ○
reply_status | × | × | ○ | ○ | ○
forward_reference | × | × | × | × | ○※2
get_slot | ○ | ○ | ○ | ○ | ○
get_request_service_context | ○ | × | ○ | ○ | ○
get_reply_service_context | × | × | ○ | ○ | ○
target | ○ | ○ | ○ | ○ | ○
effective_target | ○ | ○ | ○ | ○ | ○
effective_profile | ○ | ○ | ○ | ○ | ○
received_exception | × | × | × | ○ | ×
received_exception_id | × | × | × | ○ | ×
get_effective_component | ○ | × | ○ | ○ | ○
get_effective_components | ○ | × | ○ | ○ | ○
get_request_policy | ○ | × | ○ | ○ | ○
add_request_service_context | ○ | × | × | × | ×

（凡例）

○：有効，×：無効

注※1

ClientRequestInfoがsend_request()に渡される場合，in，inout，またはoutの各引数のリストにエントリがありますが，使用できるのはinout引数とout引数だけです。

注※2

reply_status()がLOCATION_FORWARDを返さない場合，この属性にアクセスすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

＜この節の構成＞

27.2.1　インクルードファイル

27.2.2　ClientRequestInfoのメソッド

27.2.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.2.2　ClientRequestInfoのメソッド

virtual CORBA::Object_ptr target() = 0;
このメソッドは，クライアントがオペレーションを実行するために呼び出したオブジェクトを返します。effective_target()メソッドも参照してください。

virtual CORBA::Object_ptr effective_target () = 0;
このメソッドは，実際のオペレーション呼び出し元オブジェクトを返します。reply_status()がLOCATION_FORWARDを返す場合，後続のリクエストに対してtargetが返す内容は変わりませんが，effective_targetは，フォワードされたIORを返します。

virtual IOP::TaggedProfile* effective_profile() = 0;
このメソッドは，IOP::TaggedProfileの形式でプロファイルを返します。返されたプロファイルは，リクエストの送信に使用されます。このオペレーションのオブジェクトにロケーションフォワードが発生し，そのオブジェクトのプロファイルが変更された場合，このプロファイルが探索結果のプロファイルとなります。

virtual CORBA::Any* received_exception() = 0;
このメソッドは，クライアントに返される例外を格納するデータをCORBA::Anyの形式で返します。
CORBA::Anyに挿入できないユーザ例外の場合，例えば，未知の例外やバインディングでTypeCodeが提供されない場合などは，この属性は，標準マイナーコード1のUNKNOWNシステム例外を格納するCORBA::Anyとなります。ただし，この例外のRepositoryIdは，received_exception_id属性に使用できます。

virtual char* received_exception_id() = 0;
このメソッドは，クライアントに返されるreceived_exceptionのIDを返します。

virtual IOP::TaggedComponent* get_effective_component(
CORBA::ULong _id) = 0;
このメソッドは，リクエストに対して選択されたプロファイルに指定されたIDを持つIOP::TaggedComponentを返します。
指定されたIDのコンポーネントが複数ある場合に，どのコンポーネントを返すかは定義されていません。指定されたIDのコンポーネントが複数ある場合は，このメソッドの代わりにget_effective_components()が呼び出されます。指定されたIDのコンポーネントがない場合は，標準マイナーコード28のBAD_PARAM例外が発生します。

_id
返されるコンポーネントのID

virtual IOP::TaggedComponentSeq* get_effective_components(
CORBA::ULong _id) = 0;
このメソッドは，リクエストに対して選択されたプロファイルに指定されたIDを持つタグ付きコンポーネントをすべて返します。IOP::TaggedComponentSeqの形式で返されます。指定されたIDのコンポーネントがない場合は，標準マイナーコード28のBAD_PARAM例外が発生します。

_id
返されるコンポーネントのID

virtual CORBA::Policy_ptr get_request_policy(
CORBA::ULong _type) = 0;
このメソッドは，オペレーションに対して有効な所定のポリシーを返します。指定した型にORBが対応していない，または指定した型のポリシーオブジェクトがこのオブジェクトに対応づけられていないために，ポリシーの型が無効となる場合は，標準マイナーコード2のINV_POLICY例外が発生します。

_type
返されるポリシーを指定するポリシーの型

virtual void add_request_service_context(
const IOP::ServiceContext& _service_context,
CORBA::Boolean _replace) = 0;
このメソッドを使用すると，インタセプタで一つ以上のサービスコンテキストをリクエストに登録できます。サービスコンテキストの順序の宣言はありません。登録された順序でサービスコンテキストが表示される場合も，されない場合もあります。

_service_context
リクエストに登録するIOP::ServiceContext

_replace
指定したIDのサービスコンテキストがすでに存在する場合のメソッドの動作。falseの場合は，標準マイナーコード15のBAD_INV_ORDER例外が発生します。trueの場合は，既存のコンテキストが新しいコンテキストに置き換えられます。

27.3　ClientRequestInterceptor

class PortableInterceptor::ClientRequestInterceptor :
                      public virtual Interceptor,
                      public virtual CORBA::LocalObject

このクラスは，ユーザ定義クライアント側インタセプタを継承するときに使用します。ClientRequestInterceptorインスタンスは，VisiBroker ORBに登録されます。詳細については，「27.14　ORBInitializer」を参照してください。

＜この節の構成＞

27.3.1　インクルードファイル

27.3.2　ClientRequestInterceptorのメソッド

27.3.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.3.2　ClientRequestInterceptorのメソッド

virtual void send_request(
ClientRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，リクエストがサーバに送信される前に，リクエスト情報の照会とサーバコンテキストの修正が，インタセプタでできます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのsend_request()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのインタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプトでこの例外が発生した場合，ほかのインタセプタのsend_requestメソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_other()インタセプトポイントが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するClientRequestInfoインスタンス

virtual void send_poll(
ClientRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，時間非依存呼び出し（TII）によるポーリングget replyシーケンス中に，インタセプタで情報を照会できます。
ただし，VisiBroker ORBはTIIに対応していないため，このsend_poll()インタセプトポイントが呼び出されることはありません。

_ri
インタセプタが使用するClientRequestInfoインスタンス

virtual void receive_reply(
ClientRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，サーバから応答が返されてから，制御がクライアントに戻るまでの間に，インタセプタで応答の情報を照会できます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_reply()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_exception()インタセプトポイントが呼び出されます。

_ri
インタセプタが使用するClientRequestInfoインスタンス

virtual void receive_exception(
ClientRequestInfo_ptr _ri) = 0;
このインタセプトポイントは例外が発生したときに呼び出されます。これによって，例外の情報がクライアントに通知される前にインタセプタで例外の情報を照会できます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合は，フロースタックから取り出された一連のインタセプタが，receive_exception()呼び出し時に受け取る例外が変更されます。クライアントに通知される例外は，インタセプタが通知する最後の例外です。ほかのインタセプタが例外を変更しなければ，元の例外が通知されます。
また，このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタでこの例外が発生した場合，ほかのインタセプタのreceive_exception()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_other()インタセプトポイントが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するClientRequestInfoインスタンス

virtual void receive_other(
ClientRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，リクエストの結果が，正常な応答でも例外でもない場合に使用できる情報をインタセプタで照会できます。それは，リクエストがリトライになる場合（例えば，LOCATION_FORWARD状態でGIOP Replyを受信した場合）や，非同期呼び出し時にリクエストの直後に応答が返されないで，制御がクライアントに戻って終了インタセプトポイントが呼び出される場合などです。
リクエストがリトライになる場合は，適用されているポリシーによって，リトライ指示直後に新しいリクエストが発行されるときと発行されないときがあります。新しいリクエストが発行されるときは，このリクエストが新しいリクエストである間は，インタセプタに関して，元のリクエストとリトライとの間に相関性があります。制御がクライアントに戻らないため，リクエストをスコープとするPortableInterceptor::Currentは，元のリクエストの場合もリトライリクエストの場合も同一です。詳細については，「27.6　Current」を参照してください。このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_other()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのreceive_exception()インタセプトポイントが呼び出されます。
また，このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタでこの例外が発生した場合，ForwardRequest例外が提供する新しい情報で一連のインタセプタのreceive_other()メソッドが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するClientRequestInfoインスタンス

27.4　Codec

class IOP::Codec

ORBサービスが使用するIORコンポーネントとサービスコンテキストデータの形式は，IDLデータ型を持つCDRカプセル化エンコーディングインスタンスとして定義される場合があります。Codecは，IDLデータ型とCDRカプセル化表現との間でコンポーネントを受け渡すための機能を持っています。

CodecはCodecFactoryから取得します。CodecFactoryは，ORB::resolve_initial_references("CodecFactory")の呼び出しで取得できます。

＜この節の構成＞

27.4.1　インクルードファイル

27.4.2　Codecのメンバ

27.4.3　Codecのメソッド

27.4.1　インクルードファイル

このクラスを使用するときは，IOP_c.hhファイルをインクルードしてください。

27.4.2　Codecのメンバ

class Codec::InvalidTypeForEncoding : public CORBA::UserException
この例外は，エンコーディングに不正な型が指定されている場合に，encode()またはencode_value()が出力します。

class Codec::FormatMismatch : public CORBA::UserException
この例外は，オクテットシーケンスのデータをCORBA::Anyにデコードできない場合に，decode()またはdecode_value()が出力します。

class Codec::TypeMismatch : public CORBA::UserException
この例外は，指定したTypeCodeとオクテットシーケンスが適合しない場合に，decode_value()が出力します。

27.4.3　Codecのメソッド

virtual CORBA::OctetSequence* encode(
const CORBA::Any& _data) = 0;
このメソッドは，このCodecに適用されているエンコーディング形式に基づいて，CORBA::Anyの形式で指定したデータをオクテットシーケンスに変換します。このオクテットシーケンスには，TypeCodeと型のデータの両方が格納されます。このオペレーションでは，InvalidTypeForEncoding例外が発生する場合があります。

_data
オクテットシーケンスに変換する，CORBA::Any形式のデータ

virtual CORBA::Any* decode(
const CORBA::OctetSequence& _data) = 0;
このメソッドは，このCodecに適用されているエンコーディング形式に基づいて，指定したオクテットシーケンスをCORBA::Anyオブジェクトにデコードします。
オクテットシーケンスをCORBA::Anyにデコードできない場合，このメソッドは，FormatMismatch例外を出力します。

_data
CORBA::Anyに変換する，オクテットシーケンス形式のデータ

virtual CORBA::OctetSequence* encode_value(
const CORBA::Any& _data) = 0;
このメソッドは，このCodecに適用されているエンコーディング形式に基づいて，指定したCORBA::Anyオブジェクトをオクテットシーケンスに変換します。CORBA::Anyのデータだけをエンコードします。TypeCodeのデータはエンコードしません。
このオペレーションでは，InvalidTypeForEncoding例外が発生する場合があります。

_data
エンコード済みCORBA::Anyのデータを格納するオクテットシーケンス

virtual CORBA::Any* decode_value(
const CORBA::OctetSequence& _data,
CORBA::TypeCode_ptr _tc) = 0;
このメソッドは，指定したTypeCodeと，このCodecに適用されているエンコーディング形式に基づいて，指定したオクテットシーケンスをCORBA::Anyにデコードします。
オクテットシーケンスをCORBA::Anyにデコードできない場合，このメソッドは，FormatMismatch例外を出力します。

_data
CORBA::Anyにデコードする，オクテットシーケンス形式のデータ

_tc
データのデコードに使用するTypeCode

27.5　CodecFactory

class IOP::CodecFactory

このクラスは，Codecを取得するときに使用します。CodecFactoryは，ORB::resolve_initial_references("CodecFactory")の呼び出しで取得できます。

＜この節の構成＞

27.5.1　インクルードファイル

27.5.2　CodecFactoryのメンバ

27.5.3　CodecFactoryのメソッド

27.5.1　インクルードファイル

このクラスを使用するときは，IOP_c.hhファイルをインクルードしてください。

27.5.2　CodecFactoryのメンバ

class CodecFactory::UnknownEncoding : public CORBA::UserException
この例外は，CodecFactoryでCodecを生成できない場合に発生します。「27.5.3　CodecFactoryのメソッド」のcreate_codec()メソッドを参照してください。

27.5.3　CodecFactoryのメソッド

virtual Codec_ptr create_codec(
const Encoding& _enc) = 0;
このメソッドは，指定したエンコーディング形式のCodecを生成します。
指定したエンコーディング形式のCodecをファクトリが生成できない場合は，UnknownEncoding例外を出力します。

_enc
Codecの生成に使用するエンコーディング形式

27.6　Current

class PortableInterceptor::Current:
                      public virtual CORBA::Current,
                      public virtual CORBA::LocalObject

Currentクラスは，単なるスロットテーブルです。このテーブルのスロットは，スロットのコンテキストと，リクエストまたは応答のサービスコンテキストとの間で，各サービスがコンテキストデータを受け渡すために使用されます。

Currentを使用する各サービスは，初期化時に確保したスロットを，リクエストと応答の処理中に使用します。「27.15.3　ORBInitInfoのメソッド」のallocate_slot_id()メソッドを参照してください。

Currentは，ORB::resolve_initial_references("PICurrent")の呼び出しで取得されます。

RequestInfoオブジェクトのget_slot()メソッドを使用すると，インタセプトポイントの内側から，スレッドスコープからリクエストスコープへ移動したCurrentのデータを使用できます。

＜この節の構成＞

27.6.1　インクルードファイル

27.6.2　Currentのメソッド

27.6.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.6.2　Currentのメソッド

virtual CORBA::Any* get_slot(
CORBA::ULong _id);
このメソッドを使用すると，サービスは，PICurrentに設定したスロットデータをCORBA::Any形式で取得できます。
設定されていないスロットを指定した場合は，tk_nullのTCKind値を持つタイプコードを格納するCORBA::Anyを返します。
割り当てられていないスロットに対してget_slot()を呼び出すと，InvalidSlot例外が発生します。
ORBイニシャライザの内側からget_slot()を呼び出すと，マイナーコード14のBAD_INV_ORDER例外が発生します。ORBイニシャライザについては，「27.14　ORBInitializer」を参照してください。

_id
データを取り出すスロットのSlotId

virtual void set_slot(
CORBA::ULong _id, const CORBA::Any& _data);
サービスは，このメソッドを使用して，スロットにデータをCORBA::Anyオブジェクトの形式で設定します。
スロットにすでにデータが設定されている場合，既存データは上書きされます。
割り当てられていないスロットに対してset_slot()を呼び出すと，InvalidSlot例外が発生します。
ORBイニシャライザの内側からset_slot()を呼び出すと，マイナーコード14のBAD_INV_ORDER例外が発生します。ORBイニシャライザについては，「27.14　ORBInitializer」を参照してください。

_id
データを設定するスロットのSlotId

_data
指定したスロットに設定する，CORBA::Anyオブジェクト形式のデータ

27.7　Encoding

struct IOP::Encoding

この構造体は，Codecのエンコーディング形式を定義します。CDRカプセル化エンコーディングなどのエンコード形式，メジャーバージョン，およびマイナーバージョンを定義します。

次のエンコード形式に対応しています。

ENCODING_CDR_ENCAPSバージョン1.0

ENCODING_CDR_ENCAPSバージョン1.1

ENCODING_CDR_ENCAPSバージョン1.2

GIOPの将来のバージョンすべてに対応するENCODING_CDR_ENCAPS

＜この節の構成＞

27.7.1　インクルードファイル

27.7.2　Encodingのメンバ

27.7.1　インクルードファイル

この構造体を使用するときは，IOP_c.hhファイルをインクルードしてください。

27.7.2　Encodingのメンバ

CORBA::Short format;
このメンバは，Codecのエンコーディング形式を保持します。

CORBA::Octet major_version;
このメンバは，Codecのメジャーバージョン番号を保持します。

CORBA::Octet minor_version;
このメンバは，Codecのマイナーバージョン番号を保持します。

27.8　ExceptionList

class Dynamic::ExceptionList

このクラスは，RequestInfoクラスのexceptions()メソッドが返す例外情報を保持するために使用する，CORBA::TypeCode型の可変長配列のインプリメンテーションです。ExceptionListの長さは，実行時に使用できます。

詳細については，「27.19.2　RequestInfoのメソッド」のexceptions()メソッドを参照してください。

＜この節の構成＞

27.8.1　インクルードファイル

27.8.1　インクルードファイル

このクラスを使用するときは，Dynamic_c.hhファイルをインクルードしてください。

27.9　ForwardRequest

class PortableInterceptor::ForwardRequest : public CORBA::UserException

インタセプタは，ForwardRequest例外を使用して，新規オブジェクトを指定し，リクエストのリトライをORBに指示できます。インタセプタからのForwardRequest例外をORBが受信した場合だけ，リトライが指示されます。それ以外の場合にForwardRequest例外が発生すると，その例外は，ユーザ例外と同様にORBを介して渡されます。

インタセプタの呼び出しに対してインタセプタからForwardRequest例外が出力された場合，そのインタセプトポイントに，ほかのインタセプタは呼び出されません。フロースタックに蓄積されたインタセプタに対応する終了インタセプトポイント（クライアントのreceive_other，またはサーバのsend_other()）が呼び出されます。receive_other()およびsend_other()の中では，reply_status()はLOCATION_FORWARDを返します。

＜この節の構成＞

27.9.1　インクルードファイル

27.9.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.10　Interceptor

class PortableInterceptor::Interceptor : public virtual CORBA::LocalObject

Interceptorは，すべてのインタセプタの派生元となるベースクラスです。

＜この節の構成＞

27.10.1　インクルードファイル

27.10.2　Interceptorのメソッド

27.10.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.10.2　Interceptorのメソッド

virtual char* name() = 0;
このメソッドは，インタセプタの名前を返します。個々のインタセプタには，インタセプタを並べ替えるための名前を付けられます。インタセプタ型ごとに，指定した名前を持つ唯一のインタセプタをVisiBroker ORBに登録できます。空文字列を名前に設定することで，インタセプタを匿名にすることもできます。
VisiBroker ORBには，幾つでも匿名のインタセプタを登録できます。

virtual void destroy() = 0;
このメソッドは，ORB::destroy()の実行中に呼び出されます。アプリケーションによってORB::destroy()が呼び出されると，VisiBroker ORBは次のように処理します。

処理中のリクエストがすべて完了するまで待ちます。

Interceptor::destroy()メソッドをインタセプタごとに呼び出します。

VisiBroker ORBのデストラクトを完了します。

デストラクト中のVisiBroker ORBに実装されているオブジェクトのオブジェクトリファレンスに，Interceptor::destroy()の中からメソッド呼び出しをした場合の動作は保証できません。ただし，デストラクト中ではないVisiBroker ORBに，実装されているオブジェクトのメソッド呼び出しはできます。つまり，デストラクト中のVisiBroker ORBは，クライアントとしては使用できますが，サーバとしては使用できません。

27.11　IORInfo

class PortableInterceptor::IORInfo : public virtual CORBA::LocalObject

IORInfoクラスによって，サーバ側のORBサービスはコンポーネントを追加したり，IOR構築中に適用可能なポリシーへアクセスしたりできるようになります。

ORBは，このクラスのORBのインプリメンテーションのインスタンスをIORInterceptor::establish_components()にパラメタとして渡します。

次の表に，IORInterceptorに定義されたメソッドの，IORInfoでの属性またはメソッドの有効性を示します。IORInfoの属性またはメソッドに不当な呼び出しをすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

表27-2　IORInfoの有効性（C++）

| establish_components | components_established
get_effective_policy | ○ | ○
add_ior_component | ○ | ×
add_ior_component_to_profile | ○ | ×
manager_id | ○ | ○
state | ○ | ○
adapter_template | × | ○
current_factory | × | ○

（凡例）

○：有効，×：無効

＜この節の構成＞

27.11.1　インクルードファイル

27.11.2　IORInfoのメソッド

27.11.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.11.2　IORInfoのメソッド

virtual CORBA::Policy_ptr get_effective_policy(
CORBA::ULong _type) = 0;
ORBサービスのインプリメンテーションでは，get_effective_policy()メソッドを呼び出すことで，特定の型のどのサーバ側ポリシーが構築中のIORに適用されているかを調べられます。構築中のIORが，POAを使用して実装されたオブジェクトのIORである場合，そのPOAを生成したPortableServer::POA::create_POA()呼び出しで渡されたPolicyオブジェクトはすべて，get_effective_policyでアクセスできます。
指定した型のポリシーをORBが認識していない場合，このメソッドは標準マイナーコード3のINV_POLICY例外を出力します。

_type
取得するポリシーの型を指定したCORBA::PolicyType

virtual void add_ior_component(
const IOP::TaggedComponent& _a_component) = 0;
このメソッドは，IOR構築時にインクルードされるタグ付きコンポーネントのセットにメンバを追加するときに，establish_components()から呼び出されます。すべてのプロファイルにコンポーネントのセットがインクルードされます。
同じコンポーネントIDのコンポーネントを複数存在させることもできます。

_a_component
追加するIOP::TaggedComponent

virtual void add_ior_component_to_profile(
const IOP::TaggedComponent&_a_component,
CORBA::ULong _profile_id) = 0;
このメソッドは，IOR構築時にインクルードされるタグ付きコンポーネントのセットにメンバを追加するときに，establish_components()から呼び出されます。指定したプロファイルにコンポーネントのセットがインクルードされます。
指定したプロファイルIDが既存のプロファイルを定義していない場合，およびプロファイルにコンポーネントを追加できない場合，標準マイナーコード27のBAD_PARAM例外が発生します。

_a_component
追加するIOP::TaggedComponent

_profile_id
コンポーネントを追加するプロファイルのIOP::ProfileId

virtual CORBA::Long manager_id() = 0;
このメソッドは，アダプタのマネージャへの不透明なハンドルを提供する属性を返します。このメソッドは，同じアダプタマネージャに管理されているアダプタの状態変更を通知するために使用します。

virtual CORBA::Short state() = 0;
このメソッドは，アダプタの現在の状態を返します。状態として，HOLDING，ACTIVE，DISCARDING，INACTIVE，またはNON_EXISTENTのどれかを返します。

virtual ObjectReferenceTemplate_ptr adapter_template() = 0;
IORインタセプタが呼び出されたときは常に，このメソッドがオブジェクトリファレンスのテンプレートを取得するための属性を返します。オブジェクトリファレンスのテンプレートを直接作成する方法は標準では提供されません。adapter_template()が返す値は，add_component()とadd_component_to_profile()のIORインタセプタ呼び出しのために作成されるテンプレート，およびアダプタポリシーです。adapter_template()が返す値は，オブジェクトアダプタが存続している間は変更されません。

virtual ObjectReferenceFactory_ptr current_factory() = 0;
このメソッドが返す属性を使用して，アダプタがオブジェクトリファレンスを作成するときに使用するファクトリにアクセスできます。current_factory()が返す初期値はadapter_template属性と同じ値ですが，current_factoryにほかのファクトリを設定することで変更できます。オブジェクトアダプタが作成するオブジェクトリファレンスは，すべてcurrent_factoryのmake_object()メソッドを呼び出して作成する必要があります。

virtual void current_factory(
ObjectReferenceFactory_ptr _current_factory) = 0;
このメソッドでは，current_factory属性を設定します。アダプタが使用するcurrent_factory属性の値を設定できるのは，components_establishedメソッドの呼び出し時だけです。

_current_factory
設定対象のcurrent_factoryオブジェクト

27.12　IORInfoExt

class PortableInterceptorExt::IORInfoExt:
                             public virtual PortableInterceptor::IORInfo,
                             public virtual CORBA::LocalObject

このクラスでは，Borland Enterprise Server VisiBrokerのポータブルインタセプタを拡張して，POAをスコープとするサーバリクエストインタセプタをインストールします。IORInfoExtクラスは，IORInfoインタフェースから継承します。IORInfoExtクラスは，POAをスコープとするサーバリクエストインタセプタに対応するための拡張メソッドを提供します。

＜この節の構成＞

27.12.1　インクルードファイル

27.12.2　IORInfoExtのメソッド

27.12.1　インクルードファイル

このクラスを使用するときは，PortableInterceptorExt_c.hhファイルをインクルードしてください。

27.12.2　IORInfoExtのメソッド

virtual void add_server_request_interceptor(
ServerRequestInterceptor_ptr _interceptor) = 0;
このメソッドは，POAをスコープとするサーバ側リクエストインタセプタをサーバに追加するときに使用します。

_interceptor
追加するServerRequestInterceptor

virtual char* full_poa_name();
このメソッドは，POAのフルネームを返します。

27.13　IORInterceptor

class PortableInterceptor::IORInterceptor : public virtual Interceptor,
                                           public virtual CORBA::LocalObject

ポータブルORBサービスインプリメンテーションでは，クライアントのORBサービスインプリメンテーションが正しく機能するように，必要に応じてサーバまたはオブジェクトのORBサービスに関連する機能の定義情報をオブジェクトリファレンスに追加する必要があります。それは，IORInterceptorクラスとIORInfoクラスが提供しています。IORインタセプタは，IORにあるプロファイルにタグ付きコンポーネントを設定するために使用します。

＜この節の構成＞

27.13.1　インクルードファイル

27.13.2　IORInterceptorのメソッド

27.13.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.13.2　IORInterceptorのメソッド

virtual void establish_components(
IORInfo_ptr _info) = 0;
サーバ側ORBは，特定のオブジェクトリファレンスの一つ以上のプロファイルにインクルードするコンポーネントの一覧を生成するときに，登録済みIORInterceptorインスタンスすべてのestablish_components()メソッドを呼び出します。このメソッドは，オブジェクトリファレンスごとに呼び出す必要はありません。POAの場合は，POA::create_POA()呼び出し時に毎回呼び出されます。ほかのアダプタの場合は，通常，アダプタの初期化時に呼び出されます。
この段階では，アダプタテンプレートは使用できません。それは，アダプタテンプレートに必要な情報（コンポーネント）がまだ作成されていないためです。

_info
適用可能なポリシーを照会し，生成されたIORにインクルードするコンポーネントを追加するときに，ORBサービスが使用するIORInfoインスタンス

27.14　ORBInitializer

class PortableInterceptor::ORBInitializer : public virtual CORBA::LocalObject

ORBInitializerクラスをインプリメントするORBInitializerオブジェクトを登録すると，対応するインタセプタが登録されます。ORBは，初期化時に登録済みORBInitializerをすべて呼び出し，それぞれにORBInitInfoオブジェクトを渡します。このORBInitInfoオブジェクトは，ORBInitializerのインタセプタの登録に使用されます。

＜この節の構成＞

27.14.1　インクルードファイル

27.14.2　ORBInitializerのメソッド

27.14.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.14.2　ORBInitializerのメソッド

virtual void pre_init(
ORBInitInfo_ptr _info) = 0;
このメソッドは，ORBの初期化中に呼び出されます。インタセプタによって登録された初期サービスが，ほかのインタセプタに使用される場合は，事前にORBInitInfo::register_initial_reference()呼び出しで，その初期サービスが登録されます。

_info
インタセプタを登録するための初期化属性とメソッド

virtual void post_init(
ORBInitInfo_ptr _info) = 0;
このメソッドは，ORBの初期化中に呼び出されます。サービスが初期化の一部として初期リファレンスを解決する必要がある場合は，サービスは，この段階ですべての初期リファレンスを使用できるとみなします。
post_init()メソッド呼び出しは，ORBの初期化の最後の処理ではありません。post_init()のあとに，登録済みインタセプタの一覧をORBにアタッチするのが最後の処理です。したがって，post_init()呼び出し中は，ORBにはインタセプタが含まれていません。ORBを介する呼び出しがpost_init()の内部で実行された場合，その呼び出しに対するリクエストインタセプタは呼び出されません。
同様に，IORを作成するメソッドが実行された場合も，IORインタセプタは呼び出されません。

_info
インタセプタを登録するための初期化属性とメソッド

27.15　ORBInitInfo

class PortableInterceptor::ORBInitInfo : public virtual CORBA::LocalObject

このクラスは，インタセプタを登録するために，ORBInitializerオブジェクトに渡されます。

＜この節の構成＞

27.15.1　インクルードファイル

27.15.2　ORBInitInfoのメンバ

27.15.3　ORBInitInfoのメソッド

27.15.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.15.2　ORBInitInfoのメンバ

class DuplicateName : public CORBA::UserException;
インタセプタ型ごとに，指定した名前を持つ唯一のインタセプタをORBに登録できます。既存のインタセプタと同じ名前でインタセプタを登録しようとすると，DuplicateName例外が発生します。
空文字列を名前に設定することで，インタセプタを匿名にすることもできます。ORBには，幾つでも匿名のインタセプタを登録できます。このため，匿名のインタセプタを登録する場合は，DuplicateName例外は発生しません。

class InvalidName : public CORBA::UserException
この例外は，register_initial_reference()とresolve_initial_references()で発生します。
register_initial_reference()でInvalidName例外が発生するのは次の場合です。

このメソッドが空文字列IDで呼び出された場合

このメソッドがすでに登録されているIDで呼び出された場合（OMG定義済みの既定の名前で呼び出された場合も含みます）

resolve_initial_references()では，解決する名前が不正な場合にInvalidName例外が発生します。

27.15.3　ORBInitInfoのメソッド

virtual CORBA::StringSequence* arguments() = 0;
このメソッドは，ORB_init()に渡された引数を返します。この引数には，ORBの引数が含まれる場合も，含まれない場合もあります。

virtual char* orb_id() = 0;
このメソッドは，初期化中のORBのIDを返します。

virtual IOP::CodecFactory_ptr codec_factory() = 0;
このメソッドは，IOP::CodecFactoryを返します。通常，CodecFactoryは，ORB::resolve_initial_references("CodecFactory")を呼び出して取得しますが，その時点では，ORBはまだ使用できません。しかし，サービスコンテキスト処理時などに，インタセプタがCodecを必要とするため，Codecを取得する手段がORBの初期化時に必要となります。

virtual void register_initial_reference(
const char* _id, CORBA::Object_ptr _obj) = 0;
例えば，このメソッドがID「Y」とオブジェクト「YY」で呼び出されたあとに，register_initial_referenceメソッドが再び呼び出されると，オブジェクト「YY」が返されます。
このメソッドの機能は，ORB::register_initial_reference()と同一です。このメソッドは，ORBが完全に初期化されていないためにまだ使用できない場合に，インタセプタの登録の一部として初期リファレンスが必要となるときに使用します。なお，このメソッドとORB::register_initial_reference()との違いは，ORBのメソッドのバージョンはPIDL（CORBA::ORB::ObjectIdとCORBA::ORB::InvalidName）を使用し，インタフェースのバージョンは，インタフェースに定義されたIDLを使用する点です。構文に違いはありません。
このメソッドが空文字列IDで呼び出された場合，またはこのメソッドがすでに登録されているIDで呼び出された場合（OMG定義済みの既定の名前で呼び出された場合も含みます）は，register_initial_reference()でInvalidName例外が発生します。

_id
初期リファレンスを認識するためのID

_obj
初期リファレンス

virtual CORBA::Object_ptr resolve_initial_references(
const char* _id) = 0;
このメソッドは，post_init()呼び出し時にだけ有効です。このメソッドの機能はORB::resolve_initial_references()と同一です。このメソッドは，ORBが完全に初期化されていないためにまだ使用できないときに，インタセプタの登録の一部として初期リファレンスが必要となる場合に使用します。

_id
初期リファレンスを認識するためのID

解決する名前が不正な場合，resolve_initial_references()ではInvalidName例外が発生します。

virtual void add_client_request_interceptor(
ClientRequestInterceptor_ptr _interceptor) = 0;
このメソッドは，クライアント側リクエストインタセプタの一覧に項目を追加するときに使用します。同じ名前のクライアント側リクエストインタセプタがすでに存在している場合は，DuplicateName例外が発生します。

_interceptor
追加するClientRequestInterceptor

virtual void add_server_request_interceptor(
ServerRequestInterceptor_ptr _interceptor) = 0;
このメソッドは，サーバ側リクエストインタセプタの一覧に項目を追加するときに使用します。同じ名前のサーバ側リクエストインタセプタがすでに存在している場合は，DuplicateName例外が発生します。

_interceptor
追加するServerRequestInterceptor

virtual void add_ior_interceptor(
IORInterceptor_ptr _interceptor) = 0;
このメソッドは，IORインタセプタの一覧に項目を追加するときに使用します。同じ名前のIORインタセプタがすでに存在している場合は，DuplicateName例外が発生します。

_interceptor
追加するIORInterceptor

virtual CORBA::ULong allocate_slot_id() = 0;
このメソッドは，割り当て済みスロットのインデックスを返します。
サービスは，allocate_slot_idを呼び出してPortableInterceptor::Currentのスロットを割り当てます。

注

スロットIDの割り当ては，ORBイニシャライザの内部でできますが，スロット自体は初期化できません。ORBイニシャライザの内部でCurrentのset_slot()またはget_slot()を呼び出すと，マイナーコード14のBAD_INV_ORDER例外が発生します。詳細については，「27.6　Current」を参照してください。

virtual void register_policy_factory(
CORBA::ULong _type, PolicyFactory_ptr _policy_factory) = 0;
このメソッドは，指定したPolicyTypeのPolicyFactoryを登録します。
指定したPolicyTypeのPolicyFactoryがすでに登録されている場合は，標準マイナーコード16のBAD_INV_ORDER例外が発生します。

_type
指定したPolicyFactoryのCORBA::PolicyType

_policy_factory
指定したCORBA::PolicyTypeのファクトリ

27.16　Parameter

struct Dynamic::Parameter

この構造体は，パラメタ情報を保持します。また，ParameterListに使用される要素です。詳細については，「27.17　ParameterList」を参照してください。

＜この節の構成＞

27.16.1　インクルードファイル

27.16.2　Parameterのメンバ

27.16.1　インクルードファイル

この構造体を使用するときは，Dynamic_c.hhファイルをインクルードしてください。

27.16.2　Parameterのメンバ

CORBA::Any argument;
このメンバは，CORBA::Any形式でパラメタデータを格納します。

CORBA::ParameterMode mode;
このメンバは，パラメタのモードを指定します。PARAM_IN，PARAM_OUT，またはPARAM_INOUTのどれかのenum値がこのメンバの値となります。

27.17　ParameterList

class Dynamic::ParameterList

このクラスは，RequestInfoクラスのarguments()メソッドが返すパラメタ情報の受け渡しで使用する，Parameter型の可変長配列のインプリメンテーションです。ParameterListの長さは，実行時に使用できます。

詳細については，「27.19.2　RequestInfoのメソッド」のarguments()メソッドを参照してください。

＜この節の構成＞

27.17.1　インクルードファイル

27.17.1　インクルードファイル

このクラスを使用するときは，Dynamic_c.hhファイルをインクルードしてください。

27.18　PolicyFactory

class PortableInterface::PolicyFactory : public virtual CORBA::LocalObject

ポータブルORBサービスインプリメンテーションは，ORB初期化時に，PolicyFactoryクラスのインスタンスを登録します。これは，CORBA::ORB::create_policy()を使用してポリシーの型を構成できるようにするためです。POAは，この方法でORBInitInfoに登録されたポリシーを保存するために必要です。詳細については，「27.15.3　ORBInitInfoのメソッド」のregister_policy_factory()メソッドを参照してください。

＜この節の構成＞

27.18.1　インクルードファイル

27.18.2　PolicyFactoryのメソッド

27.18.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.18.2　PolicyFactoryのメソッド

virtual CORBA::Policy_ptr create_policy(
CORBA::ULong _type, const CORBA::Any& _value) = 0;
登録済みPolicyFactoryのPolicyTypeにCORBA::ORB::create_policy()が呼び出されると，ORBは，登録済みPolicyFactoryインスタンスのcreate_policy()を呼び出します。create_policy()メソッドは，次に，指定したCORBA::Anyに対応する値を持つCORBA::Policyから派生したインタフェースのインスタンスを返します。失敗した場合は，CORBA::ORB::create_policy()で示す例外が発生します。

_type
作成するポリシーの型を指定しているCORBA::PolicyType

_value
CORBA::Policyを構成するためのデータを格納しているCORBA::Any

27.19　RequestInfo

class PortableInterceptor::RequestInfo : public virtual CORBA::LocalObject

このクラスは，ClientRequestInfoとServerRequestInfoの派生元となるベースクラスです。各インタセプトポイントに与えられるオブジェクトを通じて，インタセプタはリクエスト情報にアクセスできます。クライアント側とサーバ側のインタセプトポイントでは扱う情報が異なるため，情報オブジェクトは二つあります。ClientRequestInfoはクライアント側インタセプトポイントに渡され，ServerRequestInfoは，サーバ側インタセプトポイントに渡されます。しかし，両方に共通する情報があるため，どちらも共通インタフェースのRequestInfoを継承しています。

＜この節の構成＞

27.19.1　インクルードファイル

27.19.2　RequestInfoのメソッド

27.19.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.19.2　RequestInfoのメソッド

virtual CORBA::ULong request_id() = 0;
このメソッドは，アクティブなリクエストまたは応答シーケンスを一意に識別するIDを返します。リクエストまたは応答シーケンスが解決された場合は，IDが再使用されることもあります。

注

このIDはGIOPのrequest_idとは異なります。GIOPがトランスポート機能として使用されている場合，このIDとGIOPのrequest_idは必ずしも一致するとは限りません。また，これらが一致している必要はありません。

virtual char* operation() = 0;
このメソッドは，呼び出されているオペレーションの名前を返します。

virtual Dynamic::ParameterList* arguments() = 0;
このメソッドは，呼び出されているオペレーションの引数を格納する，Dynamic::ParameterListを返します。引数がない場合，この属性は長さが0のシーケンスとなります。

virtual Dynamic::ExceptionList* exceptions() = 0;
このメソッドは，オペレーション呼び出しで発生するユーザ例外のTypeCodeを定義するDynamic::ExceptionListを返します。ユーザ例外がない場合，この属性は長さが0のシーケンスとなります。

virtual CORBA::StringSequence* contexts() = 0;
このメソッドは，オペレーション呼び出しで渡される可能性のあるコンテキストを定義するCORBA::StringSequenceを返します。コンテキストがない場合，この属性は長さが0のシーケンスとなります。

virtual CORBA::StringSequence* operation_context() = 0;
このメソッドは，リクエストで送信されるコンテキストを定義するCORBA::StringSequenceを返します。

virtual CORBA::Any* result() = 0;
このメソッドは，オペレーション呼び出しの結果をCORBA::Any形式で返します。オペレーションのリターン型がvoidの場合，この属性は，TCKind値がtk_voidまたは値なしのタイプコードを格納するCORBA::Anyとなります。

virtual CORBA::Boolean response_expected() = 0;
このメソッドは，応答が期待されているかどうかを示すブール値を返します。
クライアントでは，response_expectedがfalseの場合，応答が返らないため，receive_reply()を呼び出せません。例外が発生した場合以外は，receive_other()を呼び出します。例外が発生した場合は，receive_exception()を呼び出します。

virtual CORBA::Short sync_scope() = 0;
このメソッドは，Messaging仕様で定義されている属性を返します。この属性は，response_expectedがfalseのときだけ有効です。response_expectedがtrueの場合，sync_scope()の値は不定です。この属性は，クライアントに制御が戻る前のリクエストの進捗状況を表します。この属性の値を次に示します。

Messaging::SYNC_NONE

Messaging::SYNC_WITH_TRANSPORT

Messaging::SYNC_WITH_SERVER

Messaging::SYNC_WITH_TARGET

サーバでは，すべてのスコープで，ターゲットオペレーション呼び出しの戻り値から応答が生成されますが，その応答はクライアントには返されません。クライアントに返されなくても応答は生成されているので，通常のサーバ側インタセプトポイント，つまり，receive_request_service_contexts()，receive_request()，send_reply()，またはsend_exception()に従います。
SYNC_WITH_SERVERとSYNC_WITH_TARGETに関しては，ターゲットオペレーションが呼び出される前に，サーバは空の応答をクライアントに返却します。サーバ側インタセプタはこの応答を受け取りません。

virtual CORBA::Short reply_status() = 0;
このメソッドは，オペレーションの呼び出し結果の状態を表す属性を返します。この属性の値を次に示します。

PortableInterceptor::SUCCESSFUL = 0

PortableInterceptor::SYSTEM_EXCEPTION = 1

PortableInterceptor::USER_EXCEPTION = 2

PortableInterceptor::LOCATION_FORWARD = 3

PortableInterceptor::TRANSPORT_RETRY = 4

クライアント側では，この属性の値は次のようになります。

インタセプトポイントreceive_replyの中では，この属性の値はSUCCESSFULだけです。

インタセプトポイントreceive_exceptionの中では，この属性の値はSYSTEM_EXCEPTIONまたはUSER_EXCEPTIONです。

インタセプトポイントreceive_otherの中では，この属性の値はSUCCESSFUL，LOCATION_FORWARD，またはTRANSPORT_RETRYのどれかです。SUCCESSFULは，非同期リクエストが正常にリターンしたことを意味します。LOCATION_FORWARDは，LOCATION_FORWARD状態が応答で返却されたことを意味します。TRANSPORT_RETRYは，トランスポート機能がリトライを指示したことを意味します。例えば，NEEDS_ADDRESSING_MODE状態のGIOP応答が該当します。

サーバ側では，この属性の値は次のようになります。

インタセプトポイントsend_replyの中では，この属性の値はSUCCESSFULだけです。

インタセプトポイントsend_exceptionの中では，この属性の値はSYSTEM_EXCEPTIONまたはUSER_EXCEPTIONです。

インタセプトポイントsend_otherの中では，この属性の値はSUCCESSFULまたはLOCATION_FORWARDです。SUCCESSFULは，非同期リクエストが正常にリターンしたことを意味します。LOCATION_FORWARDは，LOCATION_FORWARD状態が応答で返却されたことを意味します。

virtual CORBA::Object_ptr forward_reference() = 0;
reply_status()がLOCATION_FORWARDを返す場合，このメソッドは，リクエストフォワード先オブジェクトを返します。フォワードされるリクエストが実際に発生するかどうかはわかりません。

virtual CORBA::Any* get_slot(
CORBA::ULong _id) = 0;
このメソッドは，リクエストのスコープにあるCurrentの指定スロットからデータをCORBA::Any形式で返します。
指定したスロットが設定されていない場合，TCKind値がtk_nullのタイプコードを格納するCORBA::Anyが返されます。
IDが割り当てられていないスロットを表す場合は，InvalidSlot例外が発生します。
スロットとPortableInterceptor::Currentの詳細については，「27.6　Current」を参照してください。

_id
取得するスロットのSlotId

virtual IOP::ServiceContext* get_request_service_context(
CORBA::ULong _id) = 0;
このメソッドは，リクエストに対応づけられたサービスコンテキストのうち，指定したIDのサービスコンテキストのコピーを返します。
リクエストのサービスコンテキストに，指定したIDのエントリが含まれていない場合は，標準マイナーコード26のBAD_PARAM例外が発生します。

_id
取得するスロットのIOP::ServiceContext

virtual IOP::ServiceContext* get_reply_service_context(
CORBA::ULong _id) = 0;
このメソッドは，応答に対応づけられたサービスコンテキストのうち，指定したIDのサービスコンテキストのコピーを返します。
応答のサービスコンテキストに，指定したIDのエントリが含まれていない場合は，標準マイナーコード26のBAD_PARAM例外が発生します。

_id
取得するスロットのIOP::ServiceContext

27.20　ServerRequestInfo

class PortableInterceptor::ServerRequestInfo :
                      public virtual RequestInfo,
                      public virtual CORBA::LocalObject

このクラスはRequestInfoから派生したクラスで，サーバ側インタセプトポイントに渡されます。ServerRequestInfoのメソッドは，一部のインタセプトポイントでは有効ではありません。

次の表に，属性またはメソッドの有効性を示します。無効の属性またはメソッドにアクセスすると，標準マイナーコード14のBAD_INV_ORDER例外が発生します。

表27-3　ServerRequestInfoの有効性（C++）

| receive_request_service_contexts | receive_request | send_reply | send_exception | send_other
request_id | ○ | ○ | ○ | ○ | ○
operation | ○ | ○ | ○ | ○ | ○
arguments | × | ○※1 | ○ | × | ×
exceptions | × | ○ | ○ | ○ | ○
contexts | × | ○ | ○ | ○ | ○
operation_context | × | ○ | ○ | × | ×
result | × | × | ○ | × | ×
response_expected | ○ | ○ | ○ | ○ | ○
sync_scope | ○ | ○ | ○ | ○ | ○
reply_status | × | × | ○ | ○ | ○
forward_reference | × | × | × | × | ○※2
get_slot | ○ | ○ | ○ | ○ | ○
get_request_service_context | ○ | ○ | ○ | ○ | ○
get_reply_service_context | × | × | ○ | ○ | ○
sending_exception | × | × | × | ○ | ×
object_id | × | ○ | ○ | ○※3 | ○※3
adapter_id | × | ○ | ○ | ○※3 | ○※3
target_most_derived_interface | × | ○ | ×※4 | ×※4 | ×※4
get_server_policy | ○ | ○ | ○ | ○ | ○
set_slot | ○ | ○ | ○ | ○ | ○
target_is_a | × | ○ | ×※4 | ×※4 | ×※4
add_reply_service_context | ○ | ○ | ○ | ○ | ○

注※1

ServerRequestInfoがreceive_request()に渡される場合，in，inout，またはoutの各引数のリストにエントリがありますが，使用できるのはin引数とinout引数だけです。

注※2

reply_status()がLOCATION_FORWARDを返さない場合，この属性にアクセスすると標準マイナーコード14のBAD_INV_ORDER例外が発生します。

注※3

Servant Locatorでロケーションのフォワードや，例外が発生した場合，この属性またはメソッドは，当該インタセプトポイントで使用できないことがあります。使用できない場合は，標準マイナーコード1のNO_RESOURCES例外が発生します。

注※4

このメソッドは，当該インタセプトポイントで使用できません。

それは，必要な情報を取得するためにはターゲットオブジェクトのサーバントにアクセスする必要がありますが，この時点でORBはこのサーバントを使用できないためです。例えば，ServantLocatorを使用するPOAがオブジェクトのアダプタである場合，ORBは，ServantLocator::postinvoke()を呼び出したあとでインタセプトポイントを呼び出します。

＜この節の構成＞

27.20.1　インクルードファイル

27.20.2　ServerRequestInfoのメソッド

27.20.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.20.2　ServerRequestInfoのメソッド

virtual CORBA::Any* sending_exception() = 0;
このメソッドは，クライアントに返される例外を格納するデータをCORBA::Anyの形式で返します。
CORBA::Anyに挿入できないユーザ例外の場合，例えば，未知の例外やバインディングでTypeCodeが提供されない場合などは，この属性は，標準マイナーコード1のUNKNOWNシステム例外を格納するCORBA::Anyとなります。

virtual CORBA::OctetSequence* object_id() = 0;
このメソッドは，オペレーション呼び出しのターゲットを表す不透明なobject_idをCORBA::OctetSequenceの形式で返します。

virtual CORBA::OctetSequence* adapter_id() = 0;
このメソッドは，オブジェクトアダプタの不透明な識別子をCORBA::OctetSequenceの形式で返します。

virtual char* target_most_derived_interface() = 0;
このメソッドは，サーバントの派生したインタフェースのRepositoryIDを返します。

virtual CORBA::Policy_ptr get_server_policy(
CORBA::ULong _type) = 0;
このメソッドは，オペレーションに対して有効なポリシーのうち，指定したポリシー型を持つポリシーを返します。register_policy_factoryで登録された型を持つポリシーだけが，CORBA::Policyオブジェクトとして返されます。
指定した型のポリシーがregister_policy_factoryで登録されていない場合は，標準マイナーコード3のINV_POLICY例外が発生します。詳細については，「27.15.3　ORBInitInfoのメソッド」のregister_policy_factory()メソッドを参照してください。

_type
取得するポリシーを指定するCORBA::PolicyType

virtual void set_slot(
CORBA::ULong _id, const CORBA::Any& _data) = 0;
このメソッドを使用すると，インタセプタでリクエストのスコープ内のPortableInterceptor::Currentのスロットにデータを設定できます。スロットにすでにデータが設定されている場合，既存データは上書きされます。割り当てられていないスロットを表すIDを指定した場合は，InvalidSlot例外が発生します。スロットとPortableInterceptor::Currentの詳細については，「27.6　Current」を参照してください。

_id
スロットのSlotId

_data
指定したスロットに設定する，CORBA::Anyオブジェクト形式のデータ

virtual CORBA::Boolean target_is_a(
const char* _id) = 0;
このメソッドは，指定したRepositoryIdがサーバントの場合はtrueを返し，そうでない場合はfalseを返します。

_id
サーバントがこのCORBA::RepositoryIdであるかどうかを呼び出し元が調べます。

virtual void add_reply_service_context(
const IOP::ServiceContext&_service_context,
CORBA::Boolean _replace) = 0;
このメソッドを使用すると，インタセプタでサービスコンテキストを応答に登録できます。
サービスコンテキストの順序の宣言はありません。登録された順序でサービスコンテキストが表示される場合も，されない場合もあります。

_service_context
応答に登録するIOP::ServiceContext

_replace
指定したIDのサービスコンテキストがすでに存在する場合のメソッドの動作。falseの場合は，標準マイナーコード15のBAD_INV_ORDER例外が発生します。trueの場合は，既存のコンテキストが新しいコンテキストに置き換えられます。

27.21　ServerRequestInterceptor

class PortableInterceptor::ServerRequestInterceptor :
                      public virtual Interceptor,
                      public virtual CORBA::LocalObject

このクラスは，ユーザ定義サーバ側インタセプタを継承するときに使用します。ServerRequestInterceptorインスタンスは，VisiBroker ORBに登録されます。詳細については，「27.14　ORBInitializer」を参照してください。

＜この節の構成＞

27.21.1　インクルードファイル

27.21.2　ServerRequestInterceptorのメソッド

27.21.1　インクルードファイル

このクラスを使用するときは，PortableInterceptor_c.hhファイルをインクルードしてください。

27.21.2　ServerRequestInterceptorのメソッド

virtual void receive_request_service_contexts(
ServerRequestInfo_ptr _ri) = 0;
このインタセプトポイントでは，インタセプタは受信したリクエストからサービスコンテキスト情報を取得し，PortableInterceptor::Currentのスロットに転送する必要があります。
このインタセプトポイントは，サーバントマネージャよりも先に呼び出されます。オペレーションのパラメタはまだこの時点では使用できません。このインタセプトポイントは，ターゲットオペレーションの呼び出しと同じスレッドで実行される場合も，実行されない場合もあります。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_request_service_contexts()インタセプトポイントは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_exception()インタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプトでこの例外が発生した場合，ほかのインタセプタのreceive_request_service_contexts()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_otherインタセプトポイントが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するServerRequestInfoインスタンス

virtual void receive_request(
ServerRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，メソッドのパラメタを含むすべての情報が使用できる状態になったあとで，リクエスト情報をインタセプタで照会できます。このインタセプトポイントは，ターゲットオペレーションの呼び出しと同じスレッドで実行されます。
DSIモデルでは，ユーザコードがarguments()を呼び出したときに最初にパラメタが使用できるようになるため，arguments()の内側からreceive_request()が呼び出されます。DSIモデルでは，arguments()を呼び出さないようにすることもできます。
ターゲットオペレーションはarguments()より先にset_exception()を呼び出すことがあります。ORBは，arguments()とset_exception()のどちらが呼び出されても，receive_request()は1回だけ呼び出されることを保障します。
set_exception()でreceive_request()が呼び出された場合，arguments()のリクエストは，標準マイナーコード1のNO_RESOURCES例外となります。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのreceive_request()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_exception()インタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプトでこの例外が発生した場合，ほかのインタセプタのreceive_request()メソッドは呼び出されません。フロースタックからインタセプタが取り出され，そのインタセプタのsend_otherインタセプトポイントが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するServerRequestInfoインスタンス

virtual void send_reply(
ServerRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，ターゲットオペレーションが呼び出されてから応答がクライアントに返されるまでの間に，インタセプタで応答情報の照会と応答サービスコンテキストの修正ができます。このインタセプトポイントは，ターゲットオペレーションと同じスレッドで実行されます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのsend_reply()インタセプトポイントは呼び出されません。フロースタックにあるインタセプタのsend_exception()インタセプトポイントが呼び出されます。

_ri
インタセプタが使用するServerRequestInfoインスタンス

virtual void send_exception(
ServerRequestInfo_ptr _ri) = 0;
このインタセプトポイントは，例外が発生したときに呼び出されます。このインタセプトポイントを使用すると，例外がクライアントに通知される前にインタセプタでリクエスト情報の照会と応答サーバコンテキストの修正ができます。このインタセプトポイントは，ターゲットオペレーションと同じスレッドで実行されます。このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合は，フロースタックから取り出された一連のインタセプタがsend_exception()呼び出し時に受け取る例外が変更されます。クライアントに通知される例外は，インタセプタが通知する最後の例外です。ほかのインタセプタが例外を変更しなければ，元の例外が通知されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタがこの例外を出力した場合，ほかのインタセプタのsend_exception()インタセプトポイントは呼び出されません。フロースタックにあるインタセプタのsend_otherインタセプトポイントが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するServerRequestInfoインスタンス

virtual void send_other(
ServerRequestInfo_ptr _ri) = 0;
このインタセプトポイントを使用すると，リクエストの結果が正常な応答でも例外でもない場合に使用できる情報をインタセプタで照会できます。例えば，リクエストがリトライになる場合（例えば，LOCATION_FORWARD状態でGIOP Replyを受信した場合）などです。このインタセプトポイントは，ターゲットオペレーションと同じスレッドで実行されます。
このインタセプトポイントでは，システム例外が発生する場合があります。システム例外が発生した場合，ほかのインタセプタのsend_other()メソッドは呼び出されません。フロースタックにあるインタセプタのsend_exception()インタセプトポイントが呼び出されます。
このインタセプトポイントでは，ForwardRequest例外を発生させることができます。インタセプタがこの例外を出力した場合，ForwardRequest例外が提供する新しい情報で一連のインタセプタのsend_other()メソッドが呼び出されます。ForwardRequest例外については，「27.9　ForwardRequest」を参照してください。

_ri
インタセプタが使用するServerRequestInfoインスタンス

28.　VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（C++）

この章では，VisiBroker 4.xインタセプタとオブジェクトラッパーに対して使用するインタフェースとクラスについて，C++言語でのインタフェースを説明します。VisiBroker 4.xインタセプタおよびオブジェクトラッパーの生成方法と使用方法については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「VisiBroker 4.xインタセプタの使用」，「オブジェクトラッパーの使用」，および「イベントリスナー」の記述を参照してください。

＜この章の構成＞

28.1　概要

28.2　インタセプタマネージャ

28.3　IORテンプレート

28.4　InterceptorManager

28.5　InterceptorManagerControl

28.6　BindInterceptor

28.7　BindInterceptorManager

28.8　ClientRequestInterceptor

28.9　ClientRequestInterceptorManager

28.10　POALifeCycleInterceptor

28.11　POALifeCycleInterceptorManager

28.12　ActiveObjectLifeCycleInterceptor

28.13　ActiveObjectLifeCycleInterceptorManager

28.14　ForwardRequestException

28.15　ServerRequestInterceptor

28.16　ServerRequestInterceptorManager

28.17　IORCreationInterceptor

28.18　IORCreationInterceptorManager

28.19　ExtendedClosure

28.20　VISClosure

28.21　VISClosureData

28.22　ChainUntypedObjectWrapperFactory

28.23　UntypedObjectWrapper

28.24　UntypedObjectWrapperFactory

28.25　EventQueueManager

28.26　ConnEventListeners

28.27　ConnInfo

28.1　概要

VisiBroker 4.xインタセプタは，VisiBroker 4.xに定義され，インプリメントされているインタセプタです。ポータブルインタセプタと同様に，Borland Enterprise Server VisiBrokerのORBサービスにORBの実行フローを受け取る機能を提供します。VisiBroker 4.xインタセプタには次の4種類があります。

クライアントインタセプタ
システムレベルのインタセプタです。トランザクションやセキュリティなどのORBサービスのフックを提供し，クライアントのORBに処理させるために使用できます。

サーバインタセプタ
システムレベルのインタセプタです。トランザクションやセキュリティなどのORBサービスのフックをサーバのORBに処理させるために使用できます。

オブジェクトラッパー
ユーザレベルのインタセプタです。簡易なトレースとデータキャッシュができるような，スタブとスケルトンの呼び出しをインタセプトするための簡易な機構を提供します。

イベントキュー
イベントキュー機能について説明します。サーバが対象とするイベントタイプに基づいてリスナーをイベントキューに登録できるので，サーバが必要なときにこのイベントを処理できます。

VisiBroker 4.xインタセプタ，およびオブジェクトラッパーの使用方法の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「VisiBroker 4.xインタセプタの使用」，「オブジェクトラッパーの使用」，「イベントキュー」，および「イベントリスナー」の記述を参照してください。

28.2　インタセプタマネージャ

インタセプタのインストールと管理は，インタセプタマネージャで実行します。InterceptorManagerインタフェースは，すべてのグローバルインタセプタを管理するためのグローバルインタセプタマネージャです。

InterceptorManagerは各インタセプタに対応します。InterceptorManagerは特定の種類のインタセプタのリスト，またはチェーンを保持します。これらのインタセプタは同じスコープを持ち，同時に起動する必要があります。そのため，POALifeCycleInterceptorやBindInterceptorのようなグローバルインタセプタは，グローバルInterceptorManagerを持ちますが，スコープ付きのインタセプタは，POAおよびオブジェクトごとのインタセプタも，各スコープのInterceptorManagerを持ちます。各スコープは，グローバル，POA，およびオブジェクトのどの場合も複数のインタセプタ型を保持できます。InterceptorManagerControlから，特定のインタセプタに対する正しい種類のマネージャを取得します。

グローバルインタセプタには，ローカライズされたインタセプタをインストールするために，拡張インタセプタマネージャが渡されることがあります。例えば，各POAのインタセプタはPOALifeCycleInterceptorManagerを使用します。

グローバルインタセプタマネージャのインスタンスであるInterceptorManagerは，ORB::resolve_initial_referencesを呼び出して，文字列InterceptorManagerを引数として渡すことで，取得できます。この値は，POALifeCycleInterceptorやBindInterceptorのようなグローバルインタセプタのインストールのために，ORBが管理モードのとき，つまりORBの初期化中にだけ使用できます。

POALifeCycleInterceptorManagerは各POAのマネージャで，POALifeCycleInterceptorのcreate呼び出し中にだけ使用できます。POALifeCycleInterceptorは，生成用の呼び出し時に，ほかのすべてのサーバ側インタセプタをセットアップできます。BindInterceptorManagerは各オブジェクトのマネージャで，BindInterceptorのbind_succeeded呼び出し時にだけ使用できます。BindInterceptorは呼び出し中にClientRequestInterceptorを設定できます。

28.3　IORテンプレート

POALifeCycleInterceptor::create()の呼び出し中に，インタセプタに加えて，IORテンプレートを直接POAInterceptorManagerインタフェースで修正できます。IORテンプレートは完全なIOR値ですが，type_idが未設定で，GIOP::ProfileBodyValueのオブジェクトキーはすべて不完全なものです。IORCreationInterceptorの呼び出し前に，POAはtype_idを設定してテンプレートのオブジェクトキーを記述します。

28.4　InterceptorManager

class interceptor::InterceptorManager :
                      public virtual VISPseudoInterface

ほかのすべてのインタセプタマネージャは，このクラスから継承します。インタセプタマネージャは，インタセプタのインストールと削除を管理するために使用するクラスです。

28.5　InterceptorManagerControl

class interceptor::InterceptorManagerControl :
                      public virtual CORBA::PseudoObject

このクラスは，関連のあるインタセプタマネージャを一括管理するために使用します。このクラスは使用できるすべてのマネージャを保持し，各マネージャは管理対象のインタセプタの型に対応する文字列で識別されます。スコープごとに一つのInterceptorManagerControlがあります。

＜この節の構成＞

28.5.1　インクルードファイル

28.5.2　InterceptorManagerControlのメソッド

28.5.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.5.2　InterceptorManagerControlのメソッド

virtual InterceptorManager_ptr get_manager(
const char *name);
このメソッドは，InterceptorManagerのインスタンスを返します。InterceptorManagerは，マネージャを識別する文字列を返します。

name
インタセプタの名前

28.6　BindInterceptor

class interceptor::BindInterceptor : public virtual VISPseudoInterface

このクラスは，クライアント側のバインドイベントとリバインドイベント時に呼び出されます。ユーザはこのクラスを派生させてユーザ処理を実装させてください。

バインドインタセプタは，バインドの前後にクライアント側で呼び出すグローバルインタセプタです。

バインド中にCORBA例外が発生した場合は，チェーンに登録されている残りのインタセプタは呼び出さないで，チェーンから削除します。bind_succeededまたはbind_failed中に発生したCORBA例外は無視されます。

＜この節の構成＞

28.6.1　インクルードファイル

28.6.2　BindInterceptorのメソッド

28.6.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.6.2　BindInterceptorのメソッド

virtual IOP::IORValue_ptr bind(
IOP::IORValue_ptr ior,
CORBA::Object_ptr obj,
CORBA::Boolean rebind,
VISClosure& closure);
このメソッドは，すべてのORBバインドオペレーション中に呼び出されます。
新規IORを使用してバインドオペレーションを継続する場合，新規IORを返します。それ以外の場合はnullを返し，元のIORを使用してバインドを続行します。渡されたパラメタと同じIORを返すことは不正なので，バインド時に例外が発生します。

ior
クライアントがバインドしているサーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト。このオブジェクトはこの時点では適切に初期化されていないので，オブジェクトのオペレーションはしないでください。しかし，このオブジェクトをデータ構造体に保存してバインド完了後に使用できます。

rebind
サーバのリバインドを試行します。QoSによっては，bind()が失敗したあとにリバインドが試行されることがあります。

closure
バインドオペレーション用の新しいclosureオブジェクト。closureは，bind_failed，bind_succeeded，またはexception_occurredに対応した呼び出しで使用します。

virtual IOP::IORValue_ptr bind_failed(
IOP::IORValue_ptr ior,
CORBA::Object_ptr obj,
VISClosure& closure);
このメソッドは，バインドオペレーションが失敗したときに呼び出されます。
このIORに対してリバインドを試行する場合，新規IORを返します。それ以外の場合はnullを返し，リバインドは試行されません。

ior
バインドオペレーションが失敗したサーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト

closure
bindメソッドでデータを格納した場合，格納データを取得できます。

virtual void bind_succeeded(
IOP::IORValue_ptr ior,
CORBA::Object_ptr obj,
CORBA::Long profileIndex,
InterceptorManagerControl_ptr interceptorControl,
VISClosure& closure);
このメソッドは，バインドオペレーションが成功すると呼び出されます。

ior
バインドオペレーションが成功したサーバオブジェクトのIOR

obj
サーバにバインドしているクライアントオブジェクト

profileIndex
コネクションプロトコルを識別します。

interceptorControl
このマネージャがマネージャ種別一覧を提供します。

closure
bindメソッドでデータを格納した場合，格納データを取得できます。

void exception_occurred(
IOP::IORValue_ptr ior,
CORBA::Object_ptr obj,
CORBA::Environment_ptr env,
VISClosure& closure)
このメソッドは，bindで例外が発生すると呼び出されます。

ior
バインドオペレーションが成功したサーバオブジェクトのIOR

target
サーバにバインドしているクライアントオブジェクト

env
発生した例外の情報

closure
bindメソッドでデータを格納した場合，格納データを取得できます。

28.7　BindInterceptorManager

class interceptor::BindInterceptorManager :
                      public virtual InterceptorManager,
                      public virtual VISPseudoInterface

このクラスは，すべてのグローバルバインドインタセプタを管理します。パブリックメソッドを一つ持ち，インタセプタを登録するために使います。

BindInterceptorManagerは必ずORB_init()で使用してください。orbが初期化されたあとは，BindInterceptorManagerは無効です。そのため，VISInitから継承するローダクラスのORB_init()の中でだけ使用してください。

ORB_init()内でORBを使用してresolve_initial_references("VisiBrokerInterceptorControl")を実行してInterceptorControlManagerを取得後，識別文字列Bindを指定したInterceptorManagerControl::get_manager()を使って，InterceptorManagerControlからBindInterceptorManagerを取得します。

＜この節の構成＞

28.7.1　インクルードファイル

28.7.2　BindInterceptorManagerのメソッド

28.7.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.7.2　BindInterceptorManagerのメソッド

void add(
BindInterceptor_ptr interceptor);
このメソッドを使用して，バインド時に起動するインタセプタのリストに，BindInterceptorを追加します。

interceptor
追加するインタセプタ

28.8　ClientRequestInterceptor

class interceptor::ClientRequestInterceptor :
                      public virtual VISPseudoInterface

このクラスは，ユーザ独自のクライアントインタセプタを派生させるために使用します。

クライアントリクエストインタセプタは，バインドインタセプタのBindInterceptor::bind_succeeded呼び出し中にClientRequestInterceptorManagerを使用してインストールできます。また，コネクションが確立されている間はアクティブ状態を維持します。ユーザが派生したクラスに定義しているメソッドは，オペレーション要求の準備時，送信時，返信メッセージの受信時，または例外発生時にORBによって呼び出されます。

＜この節の構成＞

28.8.1　インクルードファイル

28.8.2　ClientRequestInterceptorのメソッド

28.8.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.8.2　ClientRequestInterceptorのメソッド

virtual void preinvoke_premarshal(
CORBA::Object_ptr target,
const char* operation,
IOP::ServiceContextList& service_contexts,
VisClosure& closure);
このメソッドは，リクエストごとに，それらがマーシャリングされる前にORBに呼び出されます。このインタセプタで例外が発生した場合は，即時にリクエストは終了させられます。インタセプタのチェーンでは，処理済みのインタセプタだけがチェーンに残ります。その例外を起こしたリクエストは送信されないで，exception_occurred()がインタセプタのチェーン全体に対して呼び出されます。

target
サーバへのバインドを試みたクライアントオブジェクト

operation
呼び出すオペレーションの名前を識別します。

service_contexts
ORBが割り当てたサービス。このサービスはOMGに登録されているタグで識別されます。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

virtual void preinvoke_postmarshal(
CORBA::Object_ptr target,
CORBA::MarshalOutBuffer& payload,
VISClosure& closure);
このメソッドは，リクエストごとに，リクエストのマーシャリングが済んでから送信されるまでの間に呼び出されます。このメソッドで例外が発生した場合は，残りのチェーンは呼び出されません。また，該当するリクエストはサーバに送信されません。その後，exception_occurred()はインタセプタのチェーン全体に呼び出されます。

target
サーバへのバインドを試みたクライアントオブジェクト

payload
マーシャリング済みバッファ

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

virtual void postinvoke(
CORBA::Object_ptr target,
const IOP::ServiceContextList& service_contexts,
CORBA::MarshalInBuffer& payload,
CORBA::Environment_ptr env,
VISClosure& closure);
リクエストが正常に，または例外を発生させて完了したあと，このメソッドが呼び出されます。このメソッドはServantLocatorの起動後に呼び出されます。チェーン内のインタセプタで例外が発生すると，そのインタセプタはexception_occurred()を呼び出し，チェーン内の残りのインタセプタはpostinvoke()ではなくexception_occurred()を呼び出します。

target
サーバへのバインドを試みたクライアントオブジェクト

service_contexts
ORBが割り当てたサービスを識別します。このサービスはOMGに規定されているものです。

payload
マーシャリング済みバッファ

env
発生した例外についての情報を格納します。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

virtual void exception_occurred(
CORBA::Object_ptr target,
CORBA::Environment_ptr env,
VISClosure& closure);
このメソッドは，呼び出し前に例外が発生した場合にORBが呼び出します。呼び出し後に発生した例外はすべて，postinvokeメソッドのEnvironmentパラメタに収集されます。

target
サーバへのバインドを試みたクライアントオブジェクト

env
発生した例外についての情報を格納します。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。その場合，このデータをほかのインタセプタメソッドがあとで取得できます。

28.9　ClientRequestInterceptorManager

class interceptor::ClientRequestInterceptorManager :
                      public virtual InterceptorManager,
                      public virtual VISPseudoInterface

このクラスは，カレントオブジェクトのClientRequestInterceptorのチェーンを保持します。ClientRequestInterceptorは，BindInterceptor::bind_succeeded()メソッドの引数として渡されるInterceptorManagerControlを使用してInterceptorManagerControl::get_manager("ClientRequest")を呼び出すことによって返却されます。

＜この節の構成＞

28.9.1　インクルードファイル

28.9.2　ClientRequestInterceptorManagerのメソッド

28.9.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.9.2　ClientRequestInterceptorManagerのメソッド

virtual void add (
ClientRequestInterceptor_ptr interceptor);
このメソッドを呼び出してClientRequestInterceptorを，ローカルチェーンに追加します。

interceptor
追加するインタセプタ

virtual void remove (
ClientRequestInterceptor_ptr interceptor);
このメソッドは，ClientRequestInterceptorManagerを削除します。

interceptor
追加するインタセプタ

28.10　POALifeCycleInterceptor

class PortableServerExt::POALifeCycleInterceptor :
                      public virtual VISPseudoInterface

このクラスは，POAが生成またはデストラクトされるたびに呼び出されるグローバルインタセプタです。ほかのサーバ側インタセプタはすべてグローバルインタセプタとして，または特定のPOAに対してインストールできます。POALifeCycleInterceptorは，POALifeCycleInterceptorManagerクラスを使用してインストールします。POALifeCycleInterceptorManagerクラスについては，「28.11　POALifeCycleInterceptorManager」を参照してください。POALifeCycleInterceptorは，POAの生成時またはデストラクト時に呼び出されます。

＜この節の構成＞

28.10.1　インクルードファイル

28.10.2　POALifeCycleInterceptorのメソッド

28.10.1　インクルードファイル

このクラスを使用するときは，PortableServerExt_c.hhファイルをインクルードしてください。

28.10.2　POALifeCycleInterceptorのメソッド

virtual void create(
PortableServer::POA_ptr poa,
CORBA::PolicyList& policies,
IOP::IORValue*& iorTemplate,
interceptor::InterceptorManagerControl_ptr poaAdmin);
このメソッドは，新規POAがcreate_POAの呼び出しによって明示的に生成されたとき，またはAdapterActivatorによって生成されたときに，呼び出されます。AdapterActivatorの場合，インタセプタは，unknown_adapterメソッドがAdapterActivatorから正常にリターンしたあとにだけ呼び出されます。createメソッドは，最近生成されたPOAのリファレンス，またはそのPOAインスタンスのPOAInterceptorManagerのリファレンスとして呼び出されます。

poa
生成されたカレントPOAに対応するID

policies
生成されたPOAのポリシー

iorTemplate
IORテンプレートは，type_idが未設定の完全IOR値で，すべてのGIOP::ProfileBodyValueのオブジェクトキーが不完全になります。

poaAdmin
生成されたPOAの制御。詳細については，「28.5　InterceptorManagerControl」を参照してください。

virtual void destroy(
PortableServer::POA_ptr poa);
このメソッドは，そのすべてのオブジェクトがエーテライズされている場合に，POAのデストラクト前に呼び出されます。このメソッドは，createが同じ名前のPOAに対して再び呼び出される前に，destroyがすべてのインタセプタに対して必ず呼び出されるようにします。destroyオペレーションにシステム例外が発生してもそのシステム例外は無視され，残りのインタセプタは引き続き呼び出されます。

poa
デストラクトされるPOA

28.11　POALifeCycleInterceptorManager

class PortableServerExt::POALifeCycleInterceptorManager :
                    public virtual interceptor::InterceptorManager,
                    public virtual VISPseudoInterface

このクラスは，すべてのPOALifeCycleグローバルインタセプタを管理します。ORBで定義されたPOALifeCycleInterceptorManagerにはインスタンスが一つあります。また，このクラスのスコープはグローバルスコープか，またはORBごとのスコープです。このクラスは，VISInitから継承するローダクラスのORB_init()時にだけアクティブです。

ORB_init()内でORBを使用してresolve_initial_references("VisiBrokerInterceptorControl")を実行してInterceptorControlManagerを取得後，InterceptorManagerControl::get.manager("POALifeCycle")を使用してInterceptorManagerControlからPOALifeCycleInterceptorManagerを取得します。

＜この節の構成＞

28.11.1　インクルードファイル

28.11.2　POALifeCycleInterceptorManagerのメソッド

28.11.1　インクルードファイル

このクラスを使用するときは，PortableServerExt_c.hhファイルをインクルードしてください。

28.11.2　POALifeCycleInterceptorManagerのメソッド

virtual void add(
POALifeCycleInterceptor_ptr interceptor);
このメソッドを呼び出して，POALifeCycleInterceptorのグローバルチェーンに，POALifeCycleInterceptorを追加します。

interceptor
追加するインタセプタ

28.12　ActiveObjectLifeCycleInterceptor

class PortableServerExt::ActiveObjectLifeCycleInterceptor :
                      public virtual VISPseudoInterface

このクラスは，オブジェクトをアクティブオブジェクトマップに追加するときと，アクティブオブジェクトマップからオブジェクトを削除するときに呼び出されます。POAにRETAINポリシーがあるときだけ使用できます。また，このクラスは，POA生成時にPOALifeCycleInterceptorがPOAごとにActiveObjectLifeCycleInterceptorManagerを使用してインストールできるインタセプタです。

＜この節の構成＞

28.12.1　インクルードファイル

28.12.2　ActiveObjectLifeCycleInterceptorのメソッド

28.12.1　インクルードファイル

このクラスを使用するときは，PortableServerExt_c.hhファイルをインクルードしてください。

28.12.2　ActiveObjectLifeCycleInterceptorのメソッド

virtual void create(
const PortableServer::ObjectId& oid,
PortableServer::ServantBase* servant,
PortableServer::POA_ptr adapter);
このメソッドは，直接APIまたはServantActivatorを使用して実行した（明示的または暗黙的な）呼び出しによってオブジェクトがアクティブオブジェクトマップに追加されたあとに呼び出されます。オブジェクトリファレンスと新規アクティブオブジェクトのPOAはパラメタとして渡されます。

oid
活性化しているサーバントのオブジェクトID

servant
対応するサーバント

adapter
生成中，またはデストラクト中のPOA

virtual void destroy(
const PortableServer::ObjectId& oid,
PortableServer::ServantBase* servant,
PortableServer::POA_ptr adapter);
このメソッドは，オブジェクトが非活性化されエーテライズされたあとに呼び出されます。該当するオブジェクトのオブジェクトリファレンスとPOAはパラメタとして渡されます。

oid
非活性化されたオブジェクトのオブジェクトID

servant
対応するサーバント

adapter
生成中，またはデストラクト中のPOA

28.13　ActiveObjectLifeCycleInterceptorManager

class PortableServerExt::ActiveObjectLifeCycleInterceptorManager :
                    public virtual interceptor::InterceptorManager,
                    public virtual VISPseudoInterface

このクラスは，カレントオブジェクトのActiveObjectLifeCycleInterceptorのチェーンを保持します。各POAにはActiveObjectLifeCycleInterceptorManagerが一つずつあります。ActiveObjectLifeCycleInterceptorは，POALifeCycleInterceptor::create()メソッドの引数として渡されるInterceptorManagerControlを使用してInterceptorManagerControl::get_manager("ActiveObjectLifeCycle")を呼び出すことによって返却されます。

＜この節の構成＞

28.13.1　インクルードファイル

28.13.2　ActiveObjectLifeCycleInterceptorManagerのメソッド

28.13.1　インクルードファイル

このクラスを使用するときは，PortableServer_c.hhファイルをインクルードしてください。

28.13.2　ActiveObjectLifeCycleInterceptorManagerのメソッド

virtual void add(
ActiveObjectLifeCycleInterceptor
interceptor_ptr interceptor);
このメソッドを呼び出してActiveObjectLifeCycleInterceptorをチェーンに追加します。

interceptor
追加するインタセプタ

28.14　ForwardRequestException

class interceptor::ForwardRequestException :
                      public CORBA::UserException

この例外はServerRequestInterceptorのpreinvokeメソッドで発生させることができます。preinvokeメソッドはこの例外を発生させて，リクエストをほかのオブジェクトに転送できます。

＜この節の構成＞

28.14.1　ForwardRequestExceptionの変数

28.14.1　ForwardRequestExceptionの変数

CORBA::Boolean is_permanent
ロケーションの転送が恒久的であるかどうかを指定します。

CORBA::Object_var forward_reference
リクエストの転送先のオブジェクトのリファレンスを提供します。

28.15　ServerRequestInterceptor

class interceptor::ServerRequestInterceptor :
                      public virtual VISPseudoInterface

このクラスは，POALifeCycleInterceptorがPOA生成時にServerInterceptorManagerを使用してインストールできる，POAスコープのインタセプタです。このクラスを使用して，アクセス制御，サービスコンテキストの検査と挿入，およびリクエストの応答状況の変更ができます。

＜この節の構成＞

28.15.1　インクルードファイル

28.15.2　ServerRequestInterceptorのメソッド

28.15.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.15.2　ServerRequestInterceptorのメソッド

virtual void preinvoke(
CORBA::Object_ptr _target,
const char* operation,
const IOP::ServiceContextList& service_contexts,
CORBA::MarshalInBuffer& payload,
VISClosure& closure);
リクエストがアンマーシャルされる前に，ORBがこのメソッドを呼び出します。このインタセプタで例外が発生した場合，リクエストはすぐに終了させられます。このメソッドは，Servant Locatorの呼び出し前に呼び出されるため，このメソッドの実行中は，サーバントを利用できないことがあります。

_target
サーバにバインドされているクライアントオブジェクト

operation
呼び出すオペレーションの名前を識別します。

service_contexts
ORBが割り当てたサービスをすべて識別します。このサービスはOMGに規定されているものです。

payload
マーシャリング済みバッファ

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

virtual void postinvoke_premarshal(
CORBA::Object_ptr target,
IOP::ServiceContextList& ServiceContextList,
CORBA::Environment_ptr env,
VISClosure& closure);
このメソッドは，リクエストがサーバントに送信されてから，応答がマーシャリングされるまでの間に呼び出されます。ここで発生した例外には，チェーンを中断することによって対処します。この場合，リクエストはサーバに送信されないで，exception_occurred()がチェーンのすべてのインタセプタに対して呼び出されます。

target
サーバにバインドされているクライアントオブジェクト

ServiceContextList
ORBが割り当てたサービスを識別します。このサービスはOMGに規定されているものです。

env
発生した例外の情報を格納します。

closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

virtual void postinvoke_postmarshal(
CORBA::Object_ptr _target,
CORBA::MarshalOutBuffer& _payload,
VISClosure& _closure);
このメソッドは，応答がマーシャリングされてから，クライアントに送信されるまでの間に呼び出されます。ここで発生した例外は無視されます。チェーン全体が呼び出されるように保証されます。

_target
アプリケーションがバインドしようとしたオブジェクト

_payload
マーシャリング済みバッファ

_closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

virtual void exception_occurred(
CORBA::Object_ptr _target,
CORBA::Environment_ptr _env,
VISClosure& _closure);
インタセプタの一つで例外が発生したあとに，チェーンに残っているすべてのインタセプタに対してexception_occurredインタセプタが呼び出されると，ORBはこのメソッドを呼び出します。この呼び出し中に発生した例外によって，該当する環境の既存の例外が置き換えられます。

_target
サーバにバインドされているクライアントオブジェクト

_env
発生した例外の情報を格納します。

_closure
あるインタセプタメソッドが保存したデータを格納する場合があります。このデータは，ほかのインタセプタメソッドがあとで取得できます。

28.16　ServerRequestInterceptorManager

class interceptor::ServerRequestInterceptorManager :
                      public virtual InterceptorManager,
                      public virtual VISPseudoInterface

このクラスは，カレントオブジェクトのServerRequestInterceptorのチェーンを保持します。各POAにはServerRequestInterceptorManagerが一つずつあります。

ServerRequestInterceptorは，POALifeCycleInterceptor::create()メソッドの引数として渡されるInterceptorManagerControlを使用してInterceptorManagerControl::get_manager("ServerRequest")を呼び出すことによって返却されます。

＜この節の構成＞

28.16.1　インクルードファイル

28.16.2　ServerRequestInterceptorManagerのメソッド

28.16.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルをインクルードしてください。

28.16.2　ServerRequestInterceptorManagerのメソッド

virtual void add(
ServerRequestInterceptor_ptr interceptor);
このメソッドを呼び出して，ServerRequestInterceptorをチェーンに追加します。

interceptor
追加するインタセプタ

28.17　IORCreationInterceptor

class PortableServerExt::IORCreationInterceptor :
                      public virtual VISPseudoInterface

このクラスは，POA生成時にPOALifeCycleInterceptorがPOAごとにIORCreationInterceptorManagerを使用してインストールできるインタセプタです。このインタセプタを使用して，拡張プロファイルや拡張コンポーネントを追加することによって，IORを修正できます。このクラスは通常，トランザクションやファイアウォールなどのサービスをサポートするために使用します。

このインタセプタは，開発時に名前とアイデンティティがわからないPOAの，ある特定のクラスのIORテンプレートを変更するために使用します。トランザクションやファイアウォールのサービスがこれに該当します。

注

POAが生成したIORを変更するには，そのPOAのIORテンプレートだけを変更してください。変更内容は，新規生成されたIORにだけ適用され，既存のIORには適用されません。IORを根本的に変更することはお勧めしません。

＜この節の構成＞

28.17.1　インクルードファイル

28.17.2　IORCreationInterceptorのメソッド

28.17.1　インクルードファイル

このクラスを使用するときは，PortableServerExt_c.hhファイルをインクルードしてください。

28.17.2　IORCreationInterceptorのメソッド

virtual void create(
PortableServer::POA poa, IOP::IORValue*& ior);
このメソッドは，POAがオブジェクトリファレンスを生成する必要がある場合にいつでも呼び出せます。このメソッドは，POAとリファレンス用のIORValueを引数として取得します。インタセプタは，拡張プロファイルや拡張コンポーネントを追加したり，既存のプロファイルやコンポーネントに変更を加えることによって，IORValueを修正できます。

poa
生成対象のPOAに対応するID

ior
クライアントがバインドしているサーバのIOR

28.18　IORCreationInterceptorManager

class PortableServerExt::IORCreationInterceptorManager :
                      public virtual interceptor::InterceptorManager,
                      public virtual VISPseudoInterface

このクラスは，カレントオブジェクトのIORCreationInterceptorのチェーンを保持します。各POAにはIORCreationInterceptorManagerが一つずつあります。IORCreationInterceptorは，POALifeCycleInterceptor::create()メソッドの引数として渡されるInterceptorManagerControlを使用してInterceptorManagerControl::get_manager("IORCreation")を呼び出すことによって返却されます。

＜この節の構成＞

28.18.1　インクルードファイル

28.18.2　IORCreationInterceptorManagerのメソッド

28.18.1　インクルードファイル

このクラスを使用するときは，PortableServerExt_c.hhファイルをインクルードしてください。

28.18.2　IORCreationInterceptorManagerのメソッド

virtual void add(
IORCreationInterceptor_ptr _interceptor);
このメソッドを呼び出して，IORCreationInterceptorをローカルチェーンに追加できます。

interceptor
追加するインタセプタ

28.19　ExtendedClosure

class ExtendedClosure : public VISClosure {
public:
  interceptor::RequestInfo reqInfo;
  CORBA::MarshalInBuffer_ptr payload;
};

このクラスはVISClosureの派生クラスであり，read-only属性のRequestInfoを格納しています。

IDLサンプル28-1　RequestInfo

struct RequestInfo {
  CORBA::Boolean response_expected;
  CORBA::ULong request_id;
};

ServerRequestInterceptorに渡されたClosureオブジェクトをキャストし，ClientRequestInterceptorをそのサブクラスであるExtendedClosureにキャストできます。ExtendedClosureを使用してRequestInfoを抽出し，また，そのRequestInfoからrequest_idとresponse_expectedを抽出できます。request_idは，リクエストに割り当てられた一意の識別子です。response_expectedフラグは，リクエストが一方向呼び出しであるかどうかを識別します。

CORBA::Boolean response_expected =
           ((ExtendedClosure)
                         closure).reqInfo.response_expected;
CORBA::ULong request_id =
           ((ExtendedClosure)closure).reqInfo.request_id;

詳細については，examples/interceptor/client_serverにある例を参照してください。

28.20　VISClosure

class VISClosure

このクラスは，異なるインタセプタメソッドの呼び出し間で共有できるようにデータを格納するために使用します。格納データはアンタイプドデータで，オペレーション要求，またはバインドリクエストや探索リクエストに関連する状態情報を表します。このデータはVISClosureDataクラスとともに使用します。

＜この節の構成＞

28.20.1　インクルードファイル

28.20.2　VISClosureのメンバ

28.20.1　インクルードファイル

このクラスを使用するときは，vclosure.hファイルをインクルードしてください。

28.20.2　VISClosureのメンバ

CORBA::ULong id
複数のVISClosureオブジェクトを使用する場合，このデータメンバを使用して該当するオブジェクトを一意に識別できます。

void *data
このデータメンバは，インタセプタメソッドが格納したりアクセスしたりできるアンタイプドデータを指します。

VISClosureData *managedData
このデータメンバは，実データを表すVISClosureDataクラスを指します。管理データをこの型にキャストできます。

28.21　VISClosureData

class VISClosureData

このクラスは，異なるインタセプタメソッド間で共有できる管理データを表すベースクラスです。

28.22　ChainUntypedObjectWrapperFactory

class VISObjectWrapper::ChainUntypedObjectWrapperFactory :
                      public UntypedObjectWrapperFactory

クライアントまたはサーバのアプリケーションが，UntypedObjectWrapperFactoryオブジェクトを追加または削除するために，このクラスを使用します。UntypedObjectWrapperFactoryは，クライアントアプリケーションがバインドするオブジェクトごとに，またはサーバアプリケーションが生成するオブジェクトインプリメンテーションごとにUntypedObjectWrapperを生成するために使用します。オブジェクトラッパーの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクトラッパーの使用」の記述を参照してください。

＜この節の構成＞

28.22.1　インクルードファイル

28.22.2　ChainUntypedObjectWrapperFactoryのメソッド

28.22.1　インクルードファイル

このクラスを使用するときは，vobjwrap.hファイルをインクルードしてください。

28.22.2　ChainUntypedObjectWrapperFactoryのメソッド

void add(
UntypedObjectWrapperFactory_ptr factory,Location loc);
このメソッドは，指定したアンタイプドオブジェクトラッパーファクトリを，クライアントアプリケーション，サーバアプリケーション，またはクライアントとサーバの機能を持つアプリケーションに追加します。
アプリケーションがクライアント，およびサーバのアプリケーションとして動作している場合，つまりクライアントとサーバの機能を持つアプリケーションである場合は，アンタイプドオブジェクトラッパーファクトリをインストールできます。このため，バインドしたオブジェクト，およびオブジェクトインプリメンテーションが受信したオペレーション要求の呼び出しに対してオブジェクトラッパーのメソッドが呼び出せます。つまり，これらのメソッドはアプリケーションのクライアント部分とサーバ部分の両方で呼び出せます。

注

クライアント側では，オブジェクトをバインドする前にアンタイプドオブジェクトラッパーファクトリをインストールしておいてください。サーバ側では，インプリメンテーションオブジェクトの呼び出しを受信する前にアンタイプドオブジェクトラッパーファクトリをインストールしておいてください。

factory
登録するファクトリを指すポインタ

loc
追加するファクトリの位置。次のどれかの値になります。
VISObjectWrapper::Client
VISObjectWrapper::Server
VISObjectWrapper::Both

void remove(
UntypedObjectWrapperFactory_ptr factory, Location loc);
このメソッドは，指定したアンタイプドオブジェクトラッパーファクトリを指定した位置から削除します。
アプリケーションがクライアントとサーバの両方で動作している場合は，オブジェクトラッパーファクトリを，クライアント側オブジェクト，サーバ側オブジェクト，またはその両方から削除できます。

注

オブジェクトラッパーファクトリをクライアントから削除しても，すでにクライアントからバインドされている同じクラスのオブジェクトには影響しません。しかし，削除したあとにバインドしたオブジェクトには影響します。オブジェクトラッパーファクトリをサーバから削除しても，すでにリクエストにサービスされているオブジェクトインプリメンテーションには影響しません。しかし，削除したあとに生成したオブジェクトインプリメンテーションには影響します。

factory
登録するファクトリを指すポインタ

loc
削除されるファクトリの位置。次のどれかの値になります。
VISObjectWrapper::Client
VISObjectWrapper::Server
VISObjectWrapper::Both

static CORBA::ULong count(
Location loc);
この静的メソッドは，指定位置にインストールされたアンタイプドオブジェクトラッパーファクトリの数を返します。

loc
ファクトリの位置。次のどれかの値になります。
VISObjectWrapper::Client
VISObjectWrapper::Server
VISObjectWrapper::Both

static ChainUntypedObjectWrapperFactory* instance(
CORBA::Boolean doCreate=1);
このメソッドは，プロセスでユニークなChainUntypedObjectWrapperFactoryのインスタンスを返却します。

doCreate

1を指定した場合，ChainUntypedObjectWrapperFactoryのインスタンスが存在しないとき，新しくインスタンスを作成して返却します。
0を指定した場合，ChainUntypedObjectWrapperFactoryのインスタンスが存在しないとき，NULLリファレンスを返却します。
デフォルトは1です。

28.23　UntypedObjectWrapper

class VISObjectWrapper::UntypedObjectWrapper :
                      public virtual VISResource

このクラスは，アンタイプドオブジェクトラッパーをクライアントアプリケーション，サーバアプリケーション，または同一プロセスにあるアプリケーションに派生させ，実装するために使用します。このクラスを使用して，アンタイプドオブジェクトラッパーを派生させる場合，クライアントアプリケーションがオペレーション要求を発行する前，またはサーバ側のオブジェクトインプリメンテーションがそのオペレーション要求を処理する前に，呼び出されるpre_methodメソッドを，定義します。また，サーバ側のオブジェクトインプリメンテーションがオペレーション要求を処理したあと，またはクライアントアプリケーションが応答を受信したあとに，呼び出されるpost_methodメソッドも定義します。

また，アンタイプドオブジェクトラッパーを生成するファクトリクラスも派生させてください。詳細については，「28.24　UntypedObjectWrapperFactory」を参照してください。

オブジェクトラッパーの使用方法の詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「オブジェクトラッパーの使用」の記述を参照してください。

＜この節の構成＞

28.23.1　インクルードファイル

28.23.2　UntypedObjectWrapperのメソッド

28.23.1　インクルードファイル

このクラスを使用するときは，vobjwrap.hファイルをインクルードしてください。

28.23.2　UntypedObjectWrapperのメソッド

virtual void pre_method(
const char* operation,
CORBA::Object_ptr target,
VISClosure& closure);
このメソッドは，クライアント側でオペレーション要求が送信される前，またはサーバ側のオブジェクトインプリメンテーションがそのオペレーション要求を処理する前に呼び出されるメソッドです。

operation
リクエストされているオペレーションの名前

target
リクエストのターゲットオブジェクト

closure
オブジェクトラッパーメソッド間のデータ受け渡しに使用できるclosureオブジェクト

virtual void post_method(
const char* operation,
CORBA::Object_ptr target,
CORBA::Environment& env,
VISClosure& closure);
このメソッドは，サーバ側のオブジェクトインプリメンテーションがオペレーション要求を処理したあと，またはクライアント側のスタブが応答メッセージを処理する前に呼び出されるメソッドです。

operation
リクエストされているオペレーションの名前

target
リクエストのターゲットオブジェクト

env
オペレーション要求の処理中に発生した可能性のある例外を反映するときに使用されるEnvironmentオブジェクト

closure
オブジェクトラッパーメソッド間のデータ受け渡しに使用できるclosureオブジェクト

28.24　UntypedObjectWrapperFactory

class VISObjectWrapper::UntypedObjectWrapperFactory

このクラスは，ユーザのアンタイプドオブジェクトラッパーファクトリを派生させるときに使用します。

新規オブジェクトのバインド時，またはオブジェクトインプリメンテーションがリクエストにサービスするときは，ユーザのファクトリを使用して，アプリケーション用のユーザのアンタイプドオブジェクトラッパーのインスタンスを生成します。

＜この節の構成＞

28.24.1　インクルードファイル

28.24.2　UntypedObjectWrapperFactoryのコンストラクタ

28.24.3　UntypedObjectWrapperFactoryのメソッド

28.24.1　インクルードファイル

このクラスを使用するときは，vobjwrap.hファイルをインクルードしてください。

28.24.2　UntypedObjectWrapperFactoryのコンストラクタ

UntypedObjectWrapperFactory(
Location loc, CORBA::Boolean doAdd=1);
指定された位置にアンタイプドオブジェクトラッパーファクトリを生成し，デフォルトではそれをChainUntypedObjectWrapperFactoryに登録します。アプリケーションがクライアントアプリケーションとサーバアプリケーションの両方として動作している場合は，アンタイプドオブジェクトラッパーファクトリをインストールして，バインドしたオブジェクト，およびオブジェクトインプリメンテーションが受信したオペレーション要求の，両方の呼び出しに対してオブジェクトラッパーのメソッドが呼び出せます。
デフォルトパラメタを使わない場合，doAddを実行しないことを指定できます。ただし，アンタイプドオブジェクトラッパーを生成するには，ChainUntypedObjectWrapper::addを呼び出す必要があります。

loc
追加するファクトリの位置。次の値のどれかになります。
VISObjectWrapper::Client
VISObjectWrapper::Server
VISObjectWrapper::Both

doAdd
ファクトリを登録するかどうかを指定するフラグ

28.24.3　UntypedObjectWrapperFactoryのメソッド

virtual UntypedObjectWrapper_ptr create(
CORBA::Object_ptr target,Location loc);
このメソッドは，ユーザ任意の型でUntypedObjectWrapperのインスタンスを生成するときに呼び出します。このメソッドを実装すると，バインドされたオブジェクトまたはオブジェクトインプリメンテーションの型を検査し，そのオブジェクトラッパーの生成が必要かどうかを判定します。locパラメタを使用して，createリクエストを呼び出し，クライアントオブジェクト，またはサーバインプリメンテーションを，ラッピングするかどうかを指定してください。

target
アンタイプドオブジェクトラッパーを生成中のクライアントアプリケーションが，バインドしているオブジェクト。このメソッドがサーバ側で呼び出された場合，このパラメタは生成されるオブジェクトインプリメンテーションを表します。

loc
追加するファクトリの位置

28.25　EventQueueManager

class EventQueue::EventQueueManager :
                      public virtual InterceptorManager,
                      public virtual VISPseudoInterface

このクラスは，カレントオブジェクトのEventQueueManagerのチェーンを保持します。EventQueueManagerは，必ずORB_init()で使用してください。ORBが初期化されたあとは，無効になります。

VISInitから継承するローダクラスのORB_init()の中で使用してください。ORB_init()内でORBを使用してresolve_initial_references("VisiBrokerInterceptorControl")を呼び出してInterceptorControlManagerを取得後，InterceptorManagerControl::get_manager("EventQueueManager")を呼び出すことによって返却されます。

＜この節の構成＞

28.25.1　インクルードファイル

28.25.2　EventQueueManagerのメソッド

28.25.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルおよびEventQueue_c.hhファイルをインクルードしてください。

28.25.2　EventQueueManagerのメソッド

void register_listener(
EventListener_ptr _listener,EventType _type);
このオペレーションは，指定のイベントタイプのイベントリスナーの登録用に用意されています。

void unregister_listener(
EventListener_ptr _listener,EventType _type);
このオペレーションは，事前に登録された指定のタイプのリスナーを削除します。

EventListeners* get_listeners(
EventType _type);
このオペレーションは，指定のタイプの登録済みイベントリスナーのリストを返します。

28.26　ConnEventListeners

class EventQueue::ConnEventListeners :public virtual EventListener,
                      public virtual VISPseudoInterface

＜この節の構成＞

28.26.1　インクルードファイル

28.26.2　ConnEventListenersのメソッド

28.26.1　インクルードファイル

このクラスを使用するときは，interceptor_c.hhファイルおよびEventQueue_c.hhファイルをインクルードしてください。

28.26.2　ConnEventListenersのメソッド

void conn_established(
const ConnInfo& _info)
このオペレーションはVisiBroker ORBによってコールバックされ，コネクション設定イベントをプッシュします。VisiBroker ORBはin ConnInfo infoパラメタにクライアントコネクション情報を与えて，この値をコールバックオペレーションに渡します。

void conn_closed(
const ConnInfo& _info)
このオペレーションはVisiBroker ORBによってコールバックされ，コネクションクローズイベントをプッシュします。VisiBroker ORBはin ConnInfo infoパラメタにクライアントコネクション情報を与えて，この値をコールバックオペレーションに渡します。
サーバ側アプリケーションは，リスナーにプッシュされているイベントの処理と同様に，ConnEventListenersインタフェースのインプリメンテーションにも責任があります。

28.27　ConnInfo

struct ConnInfo

＜この節の構成＞

28.27.1　インクルードファイル

28.27.2　ConnInfoのメンバ

28.27.1　インクルードファイル

この構造体を使用するときは，interceptor_c.hhファイルおよびEventQueue_c.hhファイルをインクルードしてください。

28.27.2　ConnInfoのメンバ

CORBA::String_var ipaddress;
"xxx.xxx.xxx.xxx"のフォーマットで通信相手のIPアドレスを格納します。

CORBA::Long port;
通信相手のポート番号を格納します。

CORBA::Long connID;
このクライアントコネクションのサーバごとの一意の識別子を格納します。

29.　QoSインタフェースとクラス（C++）

この章では，Borland Enterprise Server VisiBrokerのC++言語でのQoSインタフェースとクラスについて説明します。

ポリシーの生成の詳細については，「22.11　PortableServer::POA」を参照してください。

＜この章の構成＞

29.1　概要

29.2　CORBA::PolicyManager

29.3　CORBA::PolicyCurrent

29.4　CORBA::Object

29.5　Messaging::RebindPolicy

29.6　QoSExt::DeferBindPolicy

29.7　QoSExt::ExclusiveConnectionPolicy

29.8　QoSExt::RelativeConnectionTimeoutPolicy

29.9　Messaging::RelativeRequestTimeoutPolicy

29.10　Messaging::RelativeRoundtripTimeoutPolicy

29.11　Messaging::SyncScopePolicy

29.12　QoS例外

29.1　概要

QoS（Quality of Service）APIのBorland Enterprise Server VisiBrokerでのインプリメンテーションについて説明します。QoS APIによって，ポリシーを使用して，ユーザのクライアントアプリケーションとサーバとの間のコネクションを定義したり管理したりできます。ポリシーの作成方法については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「QoSインタフェース」の記述を参照してください。

QoSは，VisiBroker ORBレベルのポリシー，スレッドレベルのポリシー，およびオブジェクトレベルのポリシーを管理するために，それぞれ次のクラスを提供しています。

VisiBroker ORBレベルのポリシー
VisiBroker ORBレベルのポリシーは，ローカルのPolicyManagerによって適用できます。PolicyManagerによって，ポリシーを設定したり，現在のポリシーのオーバーライドを参照できます。システムデフォルトをオーバーライドするVisiBroker ORBレベルでのポリシーです。

スレッドレベルのポリシー
スレッドレベルのポリシーは，PolicyCurrentによって適用できます。PolicyCurrentは，スレッドレベルでのポリシーのオーバーライドを参照したり設定したりするための各種オペレーションを格納しています。システムデフォルトとVisiBroker ORBレベルで設定した値をオーバーライドするスレッドレベルでのポリシーです。

オブジェクトレベルのポリシー
オブジェクトレベルのポリシーは，継承元ObjectインタフェースのQoSオペレーションにアクセスすることによって適用できます。システムデフォルト，VisiBroker ORBレベル，およびスレッドレベルで設定した値をオーバーライドするオブジェクトレベルでのポリシーです。

29.2　CORBA::PolicyManager

class CORBA::PolicyManager

このクラスは，VisiBroker ORBレベルでのポリシーオーバーライドの設定とアクセスのために使用します。VisiBroker ORBレベルで定義されているポリシーは，システムデフォルトをオーバーライドします。マネージャスレッドに属しているインスタンスは，resolve_initial_references("ORBPolicyManager")を使用してCORBA::PolicyManagerにナロウイングすることでアクセスできます。

＜この節の構成＞

29.2.1　IDLの定義

29.2.2　CORBA::PolicyManagerのメソッド

29.2.1　IDLの定義

module CORBA {
     interface PolicyManager {
     PolicyList get_policy_overrides(in PolicyTypeSeq ts);
     void set_policy_overrides(in PolicyList policies,
                                        in SetOverrideType set_add)
        raises (InvalidPolicies);
  };
};

29.2.2　CORBA::PolicyManagerのメソッド

CORBA::PolicyList *get_policy_overrides(
const CORBA::PolicyTypeSeq& ts);
このメソッドは，要求されたPolicy型のポリシーを含むリストを返します。空シーケンスを指定した場合，つまりリストの長さが0の場合，該当するスコープのポリシーをすべて返します。要求されたPolicy型がターゲットPolicyManagerに設定されていない場合，空シーケンスを返します。

void set_policy_overrides(
const CORBA::PolicyList& policies,
CORBA::SetOverrideType set_add);
このメソッドは，要求されたポリシーオーバーライドのリストを使用して現在の一連のポリシーを更新します。PolicyManagerからオーバーライドをすべて削除するには，ポリシーに空シーケンス，および処理モードにSET_OVERRIDEを指定してset_policy_overridesを呼び出してください。
このオペレーションを使用してオーバーライドできるポリシーは，クライアント側でのオペレーションの呼び出しに関係するポリシーだけです。それ以外のポリシーをオーバーライドしようとすると，CORBA::NO_PERMISSION例外が発生します。このメソッドの呼び出しが原因で，ターゲットPolicyManagerの一連のオーバーライドポリシーに矛盾が生じる場合は，ポリシーの変更も追加もされないで，InvalidPolicies例外が発生します。ほかのPolicyManagerに設定されたポリシーとの互換性はチェックされません。

policies
Policyオブジェクトのリファレンスのシーケンス

set_add
ポリシーを，PolicyManagerにすでに存在するほかのオーバーライドに追加（ADD_OVERRIDE）するか，またはオーバーライドがないPolicyManagerに追加（SET_OVERRIDE）するかを示します。

29.3　CORBA::PolicyCurrent

class CORBA::PolicyCurrent : public CORBA::Current,
                            public CORBA::PolicyManager

このクラスは，スレッドレベルでオーバーライドされたポリシーへのアクセスを提供するものです。このクラスは，QoS値を問い合わせてスレッドに適用するためのオペレーションを使用して定義されます。スレッドレベルで定義されたポリシーは，任意のシステムデフォルト値，またはVisiBroker ORBレベルで設定された値をオーバーライドできます。ただし，オブジェクトレベルの値はオーバーライドできません。カレントスレッドに属するインスタンスにアクセスするには，resolve_initial_references("PolicyCurrent")を使って，CORBA::PolicyCurrentにナロウしてください。

＜この節の構成＞

29.3.1　IDLの定義

29.3.1　IDLの定義

#pragma prefix "omg.org"
module CORBA {
   interface PolicyCurrent : PolicyManager, Current {
   };
};

29.4　CORBA::Object

class CORBA::Object

Borland Enterprise Server VisiBrokerのQoS APIのインプリメンテーションは，オブジェクト，スレッド，およびVisiBroker ORBに，ポリシーを割り当てられるようにします。オブジェクトに割り当てられたポリシーは，ほかのポリシーをすべてオーバーライドします。

＜この節の構成＞

29.4.1　IDLの定義

29.4.2　CORBA::Objectのメソッド

29.4.1　IDLの定義

#pragma prefix "omg.org"
module CORBA {
  interface Object {
     Policy get_client_policy(in PolicyType type);
     Policy get_policy(in PolicyType type);
     PolicyList get_policy_overrides(in PolicyTypeSeq types);
     Object set_policy_overrides(in PolicyList policies,
                                        in SetOverrideType set_add)
        raises (InvalidPolicies);
     boolean validate_connection(out PolicyList
                   inconsistent_policies);
  };
};

29.4.2　CORBA::Objectのメソッド

CORBA::Policy_ptr get_client_policy(
CORBA::PolicyType type);
このメソッドは，オブジェクトリファレンスの有効なオーバーライドポリシーを返します。まず，Objectスコープに指定したPolicyTypeのオーバーライドがあるかどうかをチェックし，次にCurrentスコープ，最後にVisiBroker ORBスコープをチェックすると取得できます。要求されたPolicyTypeのオーバーライドがない場合，そのPolicyTypeのシステム依存のデフォルト値が使用されます。デフォルトのポリシー値は指定されていないので，ポータブルアプリケーションは，VisiBroker ORBスコープで必要なデフォルトを設定してください。

CORBA::Policy_ptr get_policy(
CORBA::PolicyType type);
このメソッドは，オブジェクトリファレンスの有効ポリシーを返します。有効ポリシーは，リクエストの発行時に使用するポリシーです。まず，get_client_policyが返すPolicyTypeの有効オーバーライドを取得します。次に，IOR指定のポリシーと有効オーバーライドを比較します。有効ポリシーは，有効オーバーライドとIOR指定のポリシーが許容する値の共通部分です。共通部分が空の場合は，INV_POLICYシステム例外が発生します。空でない場合は，共通部分に正しく入っているポリシーを有効ポリシーとして返します。IORにポリシー値の指定がない場合は，正しい任意の値を使用できます。有効なポリシーを確実に返すには，get_policyメソッドを呼び出す前に，オブジェクトリファレンスに対して_non_existentメソッド，またはvalidate_connectionメソッドを呼び出してください。オブジェクトリファレンスをバインドする前にget_policyを呼び出すと，実装に依存した有効なポリシーが返されます。この状況では，仕様に準拠したインプリメンテーションは次のどれかの動作をする可能性があります。

CORBA::BAD_INV_ORDER例外を発生する

バインドの実行後に変更される可能性のあるPolicyTypeの値を返す

バインドを試みてから有効ポリシーを返す

RebindPolicyの値がTRANSPARENTである場合は，透過的なリバインドによって，有効ポリシーは呼び出しごとに変わる可能性があります。

注

Borland Enterprise Server VisiBrokerインプリメンテーションでは，このメソッドはオブジェクト，スレッド，およびVisiBroker ORBに割り当てられたポリシーを取得します。

CORBA::PolicyList *get_policy_overrides(
const CORBA::PolicyTypeSeq& ts);
このメソッドは，要求されたPolicy型のポリシーを含むリストを返します。空シーケンスを指定した場合，つまりリストの長さが0の場合，該当するスコープのポリシーをすべて返します。要求されたPolicy型がターゲットPolicyManagerに設定されていない場合，空シーケンスを返します。

CORBA::Object_ptr set_policy_overrides(
const PolicyList& _policies, CORBA::SetOverrideType _set_add);
このメソッドは，指定されたポリシーのリストを反映したCORBA::Objectの複製を返します。

policies
Policyオブジェクトのリファレンスのシーケンス

set_add
ポリシーを，Objectにすでに存在するほかのオーバーライドに追加（ADD_OVERRIDE）するか，またはオーバーライドがないObjectに追加（SET_OVERRIDE）するかを示します。

CORBA::Boolean validate_connection(
CORBA::PolicyList& inconsistent_policies);
オブジェクトの現在の有効ポリシーで呼び出せる場合，このメソッドはTRUEを返します。オブジェクトリファレンスがバインド済みでない場合，オペレーションの一環としてバインディングをします。オブジェクトリファレンスがバインド済みの場合でも，現在のポリシーオーバーライドが変更されていたり，バインディングが無効になっている場合は，RebindPolicyオーバーライドの設定に関係なくリバインドされます。現在の有効RebindPolicyが暗黙的リバインドを許可していない場合，そのようなリバインドを強制的にできるのはvalidate_connectionオペレーションだけです。バインドやリバインドを試みると，VisiBroker ORBによってGIOPのLocateRequests処理がされます。
現在の有効ポリシーで呼び出すとINV_POLICYシステム例外が発生する場合，このメソッドはFALSEを返します。現在の有効ポリシーに不具合がある場合，不具合を生じさせるポリシーを，outパラメタのinconsistent_policiesに格納します。この返されたポリシーのリストは，すべての原因を網羅しているわけではありません。ポリシーのオーバーライドに関係ない原因によってバインディングが失敗した場合は，その原因に応じたシステム例外が発生します。

29.5　Messaging::RebindPolicy

class Messaging::RebindPolicy : public virtual CORBA::Policy,
                               public virtual CORBA::Object

Borland Enterprise Server VisiBrokerのRebindPolicyのインプリメンテーションは，orbos/98-05-05 Messaging Specificationに完全に準拠したインプリメンテーションです。また，Borland Enterprise Server VisiBrokerでは，オブジェクト障害後，osagentを使用したほかのオブジェクトの呼び出しをサポートするために拡張しています。

VisiBroker ORBのRebindPolicyは，GIOPのロケーションフォワードメッセージ，およびオブジェクト障害を，VisiBroker ORBがどのように処理するかを決定します。VisiBroker ORBは，CORBA::Objectインスタンスにある有効ポリシーを参照して，オブジェクト障害後，osagentを使用したほかのオブジェクトの呼び出しやリバインドを処理します。

CORBA::Policyから派生したOMGインプリメンテーションは，ターゲットサーバに正常にバインドされた場合，VisiBroker ORBが透過的にリバインドをするかどうかを決定します。この継承インプリメンテーションは，ターゲットオブジェクト，スレッド，またはVisiBroker ORBに正常にバインドされた場合，VisiBroker ORBが透過的にオブジェクト障害後，osagentを使用したほかのオブジェクトの呼び出しをするかどうかを決定します。

＜この節の構成＞

29.5.1　IDLの定義

29.5.2　ポリシーの値

29.5.1　IDLの定義

#pragma prefix "omg.org"
module Messaging {
  typedef short RebindMode;
  const CORBA::PolicyType REBIND_POLICY_TYPE = 23;
  interface RebindPolicy CORBA::Policy {
     readonly attribute RebindMode rebind_mode;
  };
};

29.5.2　ポリシーの値

ポリシーは，正常にバインドされたあとにだけ使用できます。

リバインドポリシーとして設定できるOMGポリシー値を次に示します。

TRANSPARENT
このポリシーは，リモートリクエスト実行時に，オブジェクトの転送と必要な再接続をVisiBroker ORBが暗黙的に行うことを許可します。これは，最も制限を加えない値です。

NO_REBIND
このポリシーは，リモートリクエスト実行時に，クローズしたコネクションの再開をVisiBroker ORBが暗黙的に行うことを許可します。ただし，クライアント側の有効QoSポリシーに変更を加えるような，透過的なオブジェクトの転送は許可しません。

NO_RECONNECT
このポリシーは，オブジェクト転送とクローズしたコネクションの再開を，VisiBroker ORBが暗黙的に行うことを禁止します。これは，最も制限を加える値です。

リバインドポリシーとして設定できる，Borland Enterprise Server VisiBroker固有の値を次に示します。

VB_TRANSPARENT
このポリシーは，TRANSPARENT動作を継承します。これはデフォルトポリシーです。
このポリシーを設定した場合，サーバオブジェクトのダウンが原因でリモート呼び出しが失敗すると，VisiBroker ORBはosagentを使用してほかのサーバとの再接続を試みます。VisiBroker ORBは通信障害をマスクし，呼び出し元のクライアントで例外を発生させません。

VB_NOTIFY_REBIND
このポリシーは，VB_TRANSPARENTとほぼ同様の動作をしますが，通信障害を検知した場合に例外を発生させます。再度呼び出しをすると，このポリシーは，ほかのオブジェクトとの透過的な再接続を試みます。

VB_NO_REBIND
このポリシーは，オブジェクト障害後，osagentを使用してほかのオブジェクトを呼び出すことを有効にしません。また，オブジェクトの転送も許可しません。クライアントVisiBroker ORBが，同じサーバに対してクローズしたコネクションを再開することだけを許可します。

29.6　QoSExt::DeferBindPolicy

class QoSExt::DeferBindPolicy : public virtual CORBA::Policy,
                                 public virtual CORBA::Object

DeferBindPolicyは，リモートオブジェクトが最初に生成されたときに，VisiBroker ORBがオブジェクトに接続する契機を決定します。

FALSEが設定された場合は，bind()の発行時，またはリクエストが呼び出されたときに接続します。TRUEが設定された場合は，bind()の発行時には接続しないで，最初にリクエストが呼び出されたときまで接続を延期します。

デフォルトはFALSEです。

＜この節の構成＞

29.6.1　IDLの定義

29.6.1　IDLの定義

#pragma prefix "inprise.com"
module QoSExt {
  const CORBA::PolicyType DEFER_BIND_POLICY_TYPE = 0x56495305;
  interface DeferBindPolicy :CORBA::Policy {
     readonly attribute boolean value;
  };
};

29.7　QoSExt::ExclusiveConnectionPolicy

class QoSExt::ExclusiveConnectionPolicy : public virtual CORBA::Policy,
                                         public virtual CORBA::Object

ExclusiveConnectionPolicyは，指定したサーバオブジェクトとの排他接続（共有でない接続）を確立するための，VisiBroker固有のポリシーです。このポリシーは，trueまたはfalseのブール値を持ちます。trueが設定された場合は，サーバオブジェクトへの排他接続をオープンします。falseが設定された場合で既存のコネクションを再使用できるときは，既存のコネクションを再使用します。既存のコネクションを再使用できないときは，新しいコネクションをオープンします。デフォルトはfalseです。

このポリシーは，VisiBroker 3.xのCORBA::Object::_clone()と同じ動作をします。

このポリシーが有効になるのは次のような場合です。

_bind()前にORBまたはPolicyCurrentに対してPolicyを設定している場合

string_to_objectで作成したObjectを呼び出す前に，ORBまたはPolicyCurrentに対してPolicyを設定している場合

string_to_objectや_bindで作成したObjectに対してPolicyを設定し，Policyを設定されたObjectに対してリクエストを行う場合

注

このポリシーは，プロセス内通信には適用されません。

＜この節の構成＞

29.7.1　IDLの定義

29.7.1　IDLの定義

module QoSExt {
 const CORBA::PolicyType EXCLUSIVE_CONNECTION_POLICY_TYPE = 0x56495320;
 interface ExclusiveConnectionPolicy :CORBA::Policy {
   /** Returns the current setting of */
   /** the ExclusiveConnectionPolicy  */
   readonly attribute boolean value;
 };
};

29.8　QoSExt::RelativeConnectionTimeoutPolicy

class QoSExt::RelativeConnectionTimeoutPolicy :
                      public virtual CORBA::Policy,
                      public virtual CORBA::Object

RelativeConnectionTimeoutPolicyには，利用できるサーバのオブジェクトへの接続タイムアウト値を指定します。

値は100ナノ秒単位で指定します（1秒の場合10000000と指定）。

このタイムアウト値が示す時間を過ぎても接続できないときは，接続を中止します。タイムアウト値はVisiBroker ORBが接続しようとするすべてのサーバに適用されます。したがって，複数のコネクションを試みた場合，タイムアウト値は設定値の倍数となります。

このポリシーの領域は，CORBA::ULongLongで表されます。

デフォルトは0で，OSのデフォルトタイムアウト値が設定されます。

注

このポリシーは，プロセス内通信には適用されません。

＜この節の構成＞

29.8.1　IDLの定義

29.8.1　IDLの定義

module QoSExt {
  const CORBA::PolicyType RELATIVE_CONN_TIMEOUT_POLICY_TYPE
                                              = 0x56495304;
  interface RelativeConnectionTimeoutPolicy : CORBA::Policy {
     readonly attribute TimeBase::TimeT relative_expiry;
  };
};

29.9　Messaging::RelativeRequestTimeoutPolicy

class Messaging::RelativeRequestTimeoutPolicy :
                      public virtual CORBA::Policy,
                      public virtual CORBA::Object

RelativeRequestTimeoutPolicyには，クライアントがリクエストを送信完了待ちする最大時間を指定します。

値は100ナノ秒単位で指定します（1秒の場合10000000と指定）。

リクエストがタイムアウトした場合，CORBA::COMM_FAILURE, CORBA::TRANSIENT, またはCORBA::TIMEOUT例外が発生し，サーバへのコネクションは破棄される場合があります。

このポリシーの領域は，CORBA::ULongLongで表されます。

デフォルトは0で，クライアントはシステムおよびネットワークが許す限り，リクエストの送信が完了するのを待ち続けることを意味します。

注

このポリシーはプロセス内通信には適用されません。

「29.10　Messaging::RelativeRoundtripTimeoutPolicy」の注も参照してください。

＜この節の構成＞

29.9.1　IDLの定義

29.9.1　IDLの定義

module Messaging {
   const CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE = 31;
   interface RelativeRequestTimeoutPolicy : CORBA::Policy {
       readonly attribute TimeBase::TimeT relative_expiry;
   };
};

29.10　Messaging::RelativeRoundtripTimeoutPolicy

class Messaging::RelativeRoundtripTimeoutPolicy :
                      public virtual CORBA::Policy,
                      public virtual CORBA::Object

RelativeRoundtripTimeoutPolicyには，クライアントがリクエストの送信および受信の完了を待機する最大時間を指定します。

値は100ナノ秒単位で指定します（1秒の場合10000000と指定）。

リクエストがタイムアウトした場合，CORBA::COMM_FAILURE, CORBA::TRANSIENT，またはCORBA::TIMEOUT例外が発生し，サーバへのコネクションは破棄される場合があります。

このポリシーの領域は，CORBA::ULongLongで表されます。

デフォルトは0で，クライアントはシステムおよびネットワークが許す限り，リクエストの送信および受信の完了を待ち続けることを意味します。

注

このポリシーはプロセス内通信には適用されません。

RelativeRequestTimeoutPolicy　＜　RelativeRoundtripTimeoutPolicyの関係でタイムアウト値を指定した場合，リクエストの要求完了待機にはRelativeRequestTimeoutPolicyが使用され，リクエストの受信完了待機には（RelativeRoundtripTimeoutPolicy－リクエストの要求完了まで待機した時間）が使用されます。ただし，RelativeRequestTimeoutPolicyに0を指定するか，または値を指定しなかった場合，リクエストの要求完了待機にはRelativeRoundtripTimeoutPolicyが使用され，リクエストの受信完了待機には（RelativeRoundtripTimeoutPolicy－リクエストの要求完了まで待機した時間）が使用されます。

RelativeRequestTimeoutPolicy　≧　RelativeRoundtripTimeoutPolicyの関係でタイムアウト値を指定した場合，リクエストの要求完了待機にはRelativeRoundtripTimeoutPolicyが使用され，リクエストの受信完了待機には（RelativeRoundtripTimeoutPolicy－リクエストの要求完了まで待機した時間）が使用されます。ただし，RelativeRoundtripTimeoutPolicyに0を指定するか，または値を指定しなかった場合，リクエストの要求完了待機にはRelativeRequestTimeoutPolicyが使用され，システムおよびネットワークが許す限り，リクエストの受信完了を待機し続けます。
この動作は，今後のバージョンで変更になる可能性がありますので，RelativeRequestTimeoutPolicy　＜　RelativeRoundtripTimeoutPolicyの関係でタイムアウト値を指定することをお勧めします。

＜この節の構成＞

29.10.1　IDLの定義

29.10.1　IDLの定義

module Messaging {
   const CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32;
   interface RelativeRoundtripTimeoutPolicy : CORBA::Policy {
       readonly attribute TimeBase::TimeT relative_expiry;
   };
};

29.11　Messaging::SyncScopePolicy

class Messaging::SyncScopePolicy: public virtual CORBA::Policy,

public virtual CORBA::Object

SyncScopePolicyは，ターゲットに関するリクエストの同期レベルを定義します。

SyncScope型の値は，一方向オペレーションの動作を制御するために，SyncScopePolicyとともに使用されます。

SyncScopePolicyのデフォルトは，SYNC_WITH_TRANSPORTです。

アプリケーションは，VisiBroker ORBインプリメンテーションのポータビリティを確保するために，明示的にVisiBroker ORBレベルのSyncScopePolicyを設定する必要があります。

SyncScopePolicyのインスタンスが作成される場合，Messaging::SyncScope型の値はCORBA::ORB::create_policyに渡されます。

注

このポリシーはクライアント側の変更だけ適用できます。

＜この節の構成＞

29.11.1　IDLの定義

29.11.2　SyncScopeポリシーの値

29.11.1　IDLの定義

module Messaging {
   const CORBA::PolicyType SYNC_SCOPE_POLICY_TYPE = 24;
   interface SyncScopePolicy : CORBA::Policy {
       readonly attribute SyncScope synchronization;
   };
};

29.11.2　SyncScopeポリシーの値

SyncScopeポリシーの値と動作を次の表に示します。

表29-1　SyncScopeのポリシー値（C++）

ポリシー値
説明

SYNC_NONE
VisiBroker ORBは，リクエストメッセージをトランスポートプロトコルに渡す前に（例えば，メソッド呼び出しから），クライアントに制御を返します。クライアントは，動作を抑止しないことが保障されます。サーバから応答はないため，このレベルの同期ではロケーションフォワードは実行されません。

SYNC_WITH_SERVER
サーバ側VisiBroker ORBは，対象インプリメンテーションを呼び出す前に応答を送信します。NO_EXCEPTIONの応答が送信された場合，必要なロケーションフォワードがすでに発生しています。この応答受信時に，クライアント側VisiBroker ORBは，制御をクライアントアプリケーションに返します。クライアントは，ロケーションフォワードがすべて完了するまで動作を抑止します。POAを使用しているサーバの場合，応答は，ServantManagerが呼び出されてから対象サーバントにリクエストが渡されるまでの間に送信されます。

SYNC_WITH_TARGET
CORBA 2.2の，同期型非一方向オペレーションと同等です。サーバ側VisiBroker ORBは，オペレーション呼び出し先でオペレーションが完了したあとに，応答メッセージの送信だけを実行します。LOCATION_FORWARDの応答は，オペレーション呼び出し前に送信済みです。SYSTEM_EXCEPTIONの応答は，例外の構文に従った任意の時間に送信できる状態となります。一方向と定義されている場合でも，実際は，オペレーションは同期オペレーションと同様に動作します。この形式の同期では，対象オペレーションがリクエストを解釈し，そのリクエストに従って実行したことをクライアントが認識していることが保障されます。CORBA 2.2と同様，この最高レベルの同期では，OTSだけを使用できます。これより低いレベルの同期で呼び出されたオペレーションでは，対象はクライアントのカレントトランザクションに入れません。

SYNC_WITH_TRANSPORT
VisiBroker ORBは，リクエストメッセージをトランスポートプロトコルに渡したあとに，クライアントに制御を返します。
サーバから応答はないため，このレベルの同期ではロケーションフォワードは実行されません。

29.12　QoS例外

QoSで発生する例外について，次の表に示します。

表29-2　QoSで発生する例外（C++）

例外 | 説明
CORBA::INV_POLICY | ポリシーオーバーライド間に互換性がない場合に発生します。
CORBA::REBIND | RebindPolicyにNO_REBIND，NO_RECONNECT，またはVB_NOTIFY_REBINDを設定し，バインドされたオブジェクトリファレンスの呼び出しがオブジェクトフォワードメッセージまたはロケーションフォワードメッセージとなった場合に発生します。
CORBA::PolicyError | 指定したポリシーがサポートされていない場合に発生します。

30.　IOPおよびIIOPのインタフェースとクラス（C++）

この章では，General Inter-ORB Protocolの主なインタフェース，およびCORBAの仕様で定義された，その他の構造体のBorland Enterprise Server VisiBrokerでのインプリメンテーションについて，C++言語でのインタフェースを説明します。

＜この章の構成＞

30.1　GIOP::MessageHeader

30.2　GIOP::CancelRequestHeader

30.3　GIOP::LocateReplyHeader

30.4　GIOP::LocateRequestHeader

30.5　GIOP::ReplyHeader

30.6　GIOP::RequestHeader

30.7　IIOP::ProfileBody

30.8　IOP::IOR

30.9　IOP::TaggedProfile

30.1　GIOP::MessageHeader

struct MessageHeader

この構造体は，GIOPメッセージの情報を表すために使用します。

＜この節の構成＞

30.1.1　MessageHeaderのメンバ

30.1.1　MessageHeaderのメンバ

CORBA::Char magic[4]
この文字列は常に"GIOP"を格納します。

Version GIOP_version
使用されているプロトコルのバージョンを示します。この構造体は，次に示すように，メジャーバージョン番号およびマイナーバージョン番号が格納されます。メジャーバージョンは1，マイナーバージョンは2を設定します。ただし，VisiBroker 3.xなどの古いバージョンを使用している場合は，マイナーバージョンは0を設定します。

struct Version {
     CORBA::Octet major;
     CORBA::Octet minor;
};

CORBA::Boolean byte_order
TRUEを設定すると，メッセージにリトルエンディアンのバイトオーダが使用されます。FALSEを設定すると，メッセージにビッグエンディアンのバイトオーダが使用されます。

CORBA::Octet message_type
ヘッダに続くメッセージの型を示します。次のどれかの値を持ちます。

enum MsgType {
     Request,
     Reply,
     CancelRequest,
     LocateRequest,
     LocateReply,
     CloseConnection,
     MessageError,
     Fragment
   };

CORBA::ULong message_size
ヘッダに続くメッセージの長さを示します。

30.2　GIOP::CancelRequestHeader

struct CancelRequestHeader

この構造体は，キャンセルするリクエストのメッセージヘッダの情報を表すために使用します。

＜この節の構成＞

30.2.1　CancelRequestHeaderのメンバ

30.2.1　CancelRequestHeaderのメンバ

CORBA::ULong request_id
このデータメンバは，キャンセルされるリクエスト識別子を表します。

30.3　GIOP::LocateReplyHeader

struct LocateReplyHeader

この構造体は，ロケートリクエストメッセージへの応答として送信されるメッセージを表すために使用します。locate_statusにOBJECT_FORWARDを設定すると，このヘッダのあとに拡張データが続きます。

＜この節の構成＞

30.3.1　LocateReplyHeaderのメンバ

30.3.1　LocateReplyHeaderのメンバ

CORBA::ULong request_id
元のリクエストのリクエスト識別子です。

LocateStatusType locate_status
ロケートリクエストの性質を表します。次の値のどれかとなります。

UNKNOWN_OBJECT
リクエストされたオブジェクトが見つからなかったことを示します。このメッセージに対応するデータはほかにありません。

OBJECT_HERE
オブジェクトがこのサーバによって実装されることを示します。このメッセージに対応するデータはほかにありません。

OBJECT_FORWARD
応答に含まれるオブジェクトリファレンス（IOR）が，ロケートリクエストメッセージに指定されたオブジェクトへのリクエストのターゲットとして使用できることを示します。オブジェクトはほかのサーバによって実装され，そのサーバのIORがヘッダのあとに続きます。

OBJECT_FORWARD_PERM
応答に含まれるオブジェクトリファレンス（IOR）が，ロケートリクエストメッセージに指定された，オブジェクトへのリクエストのターゲットとして使用できることを示します。

LOC_SYSTEM_EXCEPTION
マーシャリング済みのGIOP::System ExceptionReplyBodyが例外に格納されていることを示します。

LOC_NEEDS_ADDRESSING_MODE
ロケートリクエストを再送するときに，リクエストされたアドレッシングモードを使用することを示します。

30.4　GIOP::LocateRequestHeader

struct LocateRequestHeader

この構造体は，オブジェクトを探索するためのリクエストを含むメッセージを表します。

＜この節の構成＞

30.4.1　LocateRequestHeaderのメンバ

30.4.1　LocateRequestHeaderのメンバ

CORBA::ULong request_id
このメッセージのリクエスト識別子を表し，複数のアウトスタンディングメッセージを識別するために使用します。

GIOP::TargetAddress target
探索対象のオブジェクトを表します。ターゲットとなるのはオブジェクトキー，プロファイル，およびIORの三つから構成されるunionです。

30.5　GIOP::ReplyHeader

struct ReplyHeader

この構造体は，リクエストメッセージへの応答として，クライアントに送信される応答メッセージの応答ヘッダを表します。

＜この節の構成＞

30.5.1　インクルードファイル

30.5.2　ReplyHeaderのメンバ

30.5.1　インクルードファイル

この構造体を使用するときは，giop_c.hhファイルをインクルードしてください。このファイルは，インストール/インクルードディレクトリのcorba.hにすでにインクルードされています。

30.5.2　ReplyHeaderのメンバ

CORBA::ULong request_id
この応答が対応しているリクエストメッセージと同一のrequest_idを設定します。

ReplyStatusType reply_status
応答の状態を示します。次のenum値のどれかを設定します。

NO_EXCEPTION

USER_EXCEPTION

SYSTEM_EXCEPTION

LOCATION_FORWARD

LOCATION_FORWARD_PERM

NEEDS_ADDRESSING_MODE

IOP::ServiceContextList service_info
サーバからクライアントに渡せるサービスコンテキスト情報のリスト

30.6　GIOP::RequestHeader

struct RequestHeader

この構造体は，オブジェクトインプリメンテーションに送信されるリクエストメッセージのリクエストヘッダを表します。

＜この節の構成＞

30.6.1　インクルードファイル

30.6.2　RequestHeaderのメンバ

30.6.1　インクルードファイル

この構造体を使用するときは，giop_c.hhファイルをインクルードしてください。このファイルは，インストール/インクルードディレクトリのcorba.hにすでにインクルードされています。

30.6.2　RequestHeaderのメンバ

CORBA::ULong request_id
応答メッセージと特定のリクエストメッセージを対応づけるために使用する一意の識別子です。

CORBA::Boolean response_expected
リクエストが応答を受信することがない一方向オペレーションである場合，このメンバはFALSEに設定されます。オペレーション要求およびその他のリクエストが応答を受信する場合は，このメンバはTRUEに設定されます。

GIOP::TargetAddress _target
リクエストのターゲットであるオブジェクトです。ターゲットとなるのはオブジェクトキー，プロファイル，およびIORのunionです。オブジェクトキーはベンダ固有のフォーマットで格納され，IORが生成された際に生成されます。

CORBA::String_var operation
ターゲットオブジェクトに対してリクエストされているオペレーションを識別します。このメンバが管理型であるという以外は，operatorメンバとまったく同じです。

const char *operation
ターゲットオブジェクトに対してリクエストされているオペレーションを識別します。このメンバが管理型ではないという以外は，operメンバとまったく同じです。

IOP::ServiceContextList service_context
クライアントからサーバに渡せるサービスコンテキスト情報のリストです。

30.7　IIOP::ProfileBody

struct ProfileBody

この構造体は，オブジェクトによってサポートされているプロトコルの情報を格納します。

module IIOP {
   . . .
   struct ProfileBody {
     Version iiop_version;
     string host;
     unsigned short port;
     sequence<octet> object_key;
     sequence<IOP::TaggedComponent> components;
   };
};

＜この節の構成＞

30.7.1　ProfileBodyのメンバ

30.7.1　ProfileBodyのメンバ

Version iiop_version
サポートされているIIOPのバージョンです。

CORBA::String_var host
オブジェクトのホストになるサーバを実行中のホスト名です。

CORBA::UShort port
オブジェクトへのコネクションを確立するために使用するポート番号です。

CORBA::OctetSequence object_key
オブジェクトキーはベンダ固有のフォーマットで格納され，IORが生成された際に生成されます。

IIOP::MultiComponentProfile components
サポートしているプロトコルに関する情報を格納するTaggedComponentのシーケンスです。

30.8　IOP::IOR

struct IOR

この構造体は，IORを表し，オブジェクトリファレンスの情報を提供するために使用します。クライアントアプリケーションはORB::object_to_stringメソッドを呼び出して文字列化IORを生成できます。詳細については，「22.9.2　CORBA::ORBのメソッド」を参照してください。

＜この節の構成＞

30.8.1　インクルードファイル

30.8.2　IORのメンバ

30.8.1　インクルードファイル

この構造体を使用するときは，giop_c.hhファイルをインクルードしてください。

30.8.2　IORのメンバ

CORBA::String_var type_id
このデータメンバは，このIORが表すオブジェクトリファレンスの型を記述します。

TaggedProfileSeq profiles
このデータメンバは，一つ以上のTaggedProfile構造体のシーケンスを表します。その構造体は，サポートされているプロトコルについての情報を格納します。

30.9　IOP::TaggedProfile

struct TaggedProfile

この構造体は，IORによってサポートされている，特定のプロトコルを表します。

＜この節の構成＞

30.9.1　TaggedProfileのメンバ

30.9.1　TaggedProfileのメンバ

ProfileID tag
このデータメンバは，プロファイルデータの内容を表します。次の値のどれかになります。

TAG_INTERNET_IOP
プロトコルがIIOPであることを示します。

TAG_MULTIPLE_COMPONENTS
プロファイルデータがそのプロトコルで使用できるVisiBroker ORBサービスのリストを含んでいることを示します。

TAG_VB_LOCATOR
IORは，osagentが本当のIORを受信するまで使用される暫定の擬似オブジェクトであることを示します。

TAG_VSGN_LIOP
プロトコルがローカルIPCメカニズムに適用されているIOPであることを示します。

CORBA::OctetSequence profile_data
このデータメンバは，IORに対するオペレーションを起動するために必要なすべてのプロトコル情報をカプセル化します。

31.　マーシャルバッファインタフェースとクラス（C++）

この章では，C++言語でオペレーション要求または応答メッセージを生成するときに，データをバッファにマーシャリングするために使用するバッファクラスについて説明します。また，受信したオペレーション要求または応答メッセージからデータを抽出するために使用するバッファクラスについても説明します。

＜この章の構成＞

31.1　CORBA::MarshalInBuffer

31.2　CORBA::MarshalOutBuffer

31.1　CORBA::MarshalInBuffer

class CORBA::MarshalInBuffer : public VISistream

このクラスは，バッファからIDL型の読み込みができるようにするストリームバッファを表し，実装するインタセプタメソッドによって使用されます。インタセプタインタフェースの詳細については，「27.　ポータブルインタセプタインタフェースとクラス（C++）」を参照してください。

CORBA::MarshalInBufferクラスは，応答メッセージに対応するデータを抽出するために，クライアント側で使用します。サーバ側では，オペレーション要求に対応するデータを抽出するために使います。このクラスは，バッファからさまざまな型のデータを取り出すメソッドを数多く提供しています。

このクラスは，CORBA::MarshalInBufferポインタをテストおよび操作する静的メソッドを提供します。また，包含オブジェクトを自動的に管理するオブジェクトラッパーを提供する，CORBA::MarshalInBuffer_varクラスも提供します。

クラスの説明で使用する用語について次に記載します。

開始オフセットとは，確保されたバッファの先頭アドレスからマーシャルバッファが管理する領域が始まるアドレスまでのバイト数を示す値です。

シークポジションとは，バッファ内の現在の操作位置です。

＜この節の構成＞

31.1.1　インクルードファイル

31.1.2　CORBA::MarshalInBufferのコンストラクタとデストラクタ

31.1.3　CORBA::MarshalInBufferのメソッド

31.1.4　CORBA::MarshalInBufferの演算子

31.1.1　インクルードファイル

このクラスを使用するときは，mbuf.hファイルをインクルードしてください。このファイルはcorba.hにインクルード済みです。別途mbuf.hファイルをインクルードする必要はありません。

31.1.2　CORBA::MarshalInBufferのコンストラクタとデストラクタ

CORBA::MarshalInBuffer(
char *read_buffer,
CORBA::ULong length,
CORBA::Boolean release_flag=0,
CORBA::ULong start_offset =0,
CORBA::Boolean byte_order = CORBA::ByteOrder);
これはデフォルトのコンストラクタです。

read_buffer
マーシャリングされたデータが実際に書き込まれたバッファ

length
read_bufferに書き込まれた最大バイト数

release_flag
trueを設定すると，このオブジェクトがデストラクトされた際に，read_bufferに対応するメモリが解放されます。デフォルト値はfalseです。

start_offset
read_bufferからデータを読み込む際の開始オフセットを設定します。
デフォルト値は0です。

byte_order
リトルエンディアンバイトオーダが使用されていることを示す場合は，trueを設定し，ビッグエンディアンバイトオーダが使用されていることを示す場合はfalseを設定します。

virtual ~CORBA::MarshalInBuffer();
これは，デフォルトのデストラクタです。release_flagにtrueを設定した場合，このオブジェクトに対応するバッファメモリが解放されます。オブジェクトを生成するときにrelease_flagを設定するか，またはrelease_flagメソッドを呼び出すことによって，release_flagを設定できます。release_flagメソッドについては，「31.1.3　CORBA::MarshalInBufferのメソッド」の「void release_flag(CORBA::Boolean val);」を参照してください。

31.1.3　CORBA::MarshalInBufferのメソッド

char *buffer() const;
このオブジェクトに対応するバッファを指すポインタを返します。

void byte_order(
CORBA::Boolean val) const;
このメッセージバッファのバイトオーダを設定します。

val
リトルエンディアンバイトオーダが使用されていることを示す場合は，trueを設定し，ビッグエンディアンバイトオーダが使用されていることを示す場合はfalseを設定します。

CORBA::Boolean byte_order() const;
バッファのバイトオーダにリトルエンディアンバイトオーダを使用している場合はtrueが返され，ビッグエンディアンバイトオーダを使用している場合はfalseが返されます。

CORBA::ULong curoff() const;
このオブジェクトに対応するバッファ内のシークポジションを返します。

virtual VISistream& get(char& data);
virtual VISistream& get(unsigned char& data);
これらのメソッドを使用して，シークポジションから一つの文字を引数dataに読み込み，一文字分だけシークポジションを進めます。このメソッドは，このオブジェクト自身を返します。

data
読み込んだデータが書き込まれる変数

virtual VISistream& get(
<data_type> data, unsigned size);
このメソッドを使用して，シークポジションからデータのシーケンスを引数dataが指す領域に読み込み，次のデータの先頭位置までシークポジションを進めます。次に示すそれぞれのターゲットデータ型に対して別々のメソッドが提供されています。このメソッドは，このオブジェクト自身を返します。

data
読み込んだデータが書き込まれる領域。サポートされるターゲットデータ型を次に示します。
char*，unsigned char*，short*，unsigned short*，int*，unsigned int*，long*，unsigned long*，float*，double*，long double*，VISLongLong*，VISULongLong*，wchar_t*

size
読み込むデータ型の数

virtual VISistream& getCString(
char* data, unsigned maxlen);
このメソッドを使用して，シークポジションから文字列を引数dataが指す領域に読み込み，次のデータの先頭位置までシークポジションを進めます。
このメソッドは，このオブジェクト自身を返します。

data
読み込んだ文字列が書き込まれる領域

maxlen
読み込む最大文字数

virtual const CORBA::WChar *getWString(
CORBA::ULong& len);
このメソッドは，シークポジションからwstringのデータを指すポインタを返し，次のデータの先頭位置までシークポジションを進めます。VisiBrokerでは，ワイド文字のサイズを2バイトとして扱います。

len
読み込んだワイド文字列の文字数が設定されます。設定される値はGIOPのバージョンによって異なります。
GIOP1.2の場合，読み込んだワイド文字列のバイト数が設定されます。
GIOP1.1/1.0の場合，ワイド文字列の長さ+1が設定されます。

virtual int is_available(
unsigned long size);
指定されたsizeが，このオブジェクトに対応するバッファのサイズ以下である場合，1を返します。それ以外の場合，0を返します。

size
このバッファから読み取る必要のあるバイト数

virtual CORBA::ULong length() const;
現在のバッファ長を返します。

virtual void new_encapsulation() const;
バッファ内の開始オフセットを0にリセットします。

void release_flag(
CORBA::Boolean val);
このオブジェクトがデストラクトされた際の，バッファメモリの自動解放を有効または無効にします。

val
valにtrueを設定すると，このオブジェクトがデストラクトされた際に，このオブジェクトのバッファメモリが解放されます。valにfalseを設定すると，このオブジェクトがデストラクトされた際にバッファは解放されません。

CORBA::Boolean release_flag() const;
オブジェクトのバッファメモリの自動解放が有効である場合，trueを返します。そうでない場合は，falseを返します。

void reset();
開始オフセット，およびシークポジションを0にリセットします。

void rewind();
開始オフセットはコンストラクタで設定した値にリセットされ，シークポジションは0にリセットされます。

CORBA::ULong seekpos(
CORBA::ULong pos);
posの値で，シークポジションを任意に設定できます。posで指定された値がバッファサイズより大きい場合，CORBA::BAD_PARAM例外が発生します。

static CORBA::MarshalInBuffer *_duplicate(
CORBA::MarshalInBuffer_ptr ptr);
ptrが指すこのオブジェクトの複製ポインタを返し，このオブジェクトのリファレンスカウントを増やします。

static CORBA::MarshalInBuffer *_nil();
CORBA::MarshalInBuffer型のNULLポインタを返します。

static void _release(
CORBA::MarshalInBuffer_ptr ptr);
ptrが指すオブジェクトのリファレンスカウントを減らします。リファレンスカウントが0になると，そのオブジェクトはデストラクトされます。構築された際にオブジェクトのrelease_flagにtrueを設定した場合，オブジェクトに対応するバッファが解放されます。

31.1.4　CORBA::MarshalInBufferの演算子

virtual VISistream& operator>>(<data_type> data);
このストリーム演算子を使用して，引数に指定されたdata_type型のデータをシークポジションから引数dataに読み込み，次のデータの先頭位置までシークポジションを進めます。
このメソッドは，このオブジェクト自身を返します。

data
読み込んだデータが書き込まれる領域。サポートされるソースデータ型は次のとおりです。
char*&，char&，unsigned char&，short&，unsigned short&，int&，unsigned int&，long&，unsigned long&，float&，double&，long double&，wchar_t*&，wchar_t&

31.2　CORBA::MarshalOutBuffer

class CORBA::MarshalOutBuffer : public VISostream

このクラスは，バッファからのIDL型を書き込めるようにするストリームバッファを表し，実装するインタセプタメソッドによって使用されます。インタセプタインタフェースの詳細については，「27.　ポータブルインタセプタインタフェースとクラス（C++）」を参照してください。

このクラスは，オペレーション要求に対応するデータをマーシャリングするために，クライアント側で使用します。サーバ側では，応答メッセージに対応するデータをマーシャリングするために使用します。このクラスは，バッファへさまざまな型のデータを追加したり，バッファに書き込まれたデータを取り出したりするメソッドを数多く提供しています。

このクラスは，CORBA::MarshalOutBufferポインタをテストおよび操作する静的メソッドを提供します。また，包含オブジェクトを自動的に管理するオブジェクトラッパーを提供する，CORBA::MarshalOutBuffer_varクラスも提供します。

クラスの説明で使用する用語について次に記載します。

開始オフセットとは，確保されたバッファの先頭アドレスからマーシャルバッファが管理する領域が始まるアドレスまでのバイト数を示す値です。

シークポジションとは，バッファ内の現在の操作位置です。

＜この節の構成＞

31.2.1　インクルードファイル

31.2.2　CORBA::MarshalOutBufferのコンストラクタとデストラクタ

31.2.3　CORBA::MarshalOutBufferのメソッド

31.2.4　CORBA::MarshalOutBufferの演算子

31.2.1　インクルードファイル

このクラスを使用するときは，mbuf.hファイルをインクルードしてください。このファイルはcorba.hにインクルード済みです。別途mbuf.hファイルをインクルードする必要はありません。

31.2.2　CORBA::MarshalOutBufferのコンストラクタとデストラクタ

CORBA::MarshalOutBuffer(
CORBA::ULong initial_size = 255,
CORBA::Boolean release_flag = 0,
CORBA::ULong start_offset=0);
initial_sizeに指定されたサイズのMarshalOutBufferを生成します。MarshalOutBufferには，putオペレーション時に自分自身のサイズを変更する機能があります。書き込まれたすべての内容を保持するスペースがバッファに不足している場合，バッファのサイズが倍になります。

initial_size
このオブジェクトに対応するバッファの初期サイズ。デフォルトサイズは，255バイトです。

release_flag
trueを設定すると，このオブジェクトがデストラクトされた場合にバッファに対応するメモリが解放されます。デフォルト値はfalseです。

start_offset
バッファにデータを書き込む際の開始オフセットを設定します。
デフォルト値は0です。

CORBA::MarshalOutBuffer(
char *buffer,
CORBA::ULong len,
CORBA::Boolean release_flag=0,
CORBA::ULong start_offset=0);
指定されたバッファ，バッファ長，解放フラグ値で，オブジェクトを生成します。

buffer
マーシャリングされたデータが実際に書き込まれるバッファ

len
bufferに書き込むことができる最大バイト数

release_flag
trueを設定すると，このオブジェクトがデストラクトされた場合にbufferに対応するメモリが解放されます。デフォルト値はfalseです。

start_offset
bufferからデータを追加する際の開始オフセットを設定します。
デフォルト値は0です。

virtual ~CORBA::MarshalOutBuffer();
これはデフォルトのデストラクタです。release_flagにtrueを設定した場合，このオブジェクトに対応するバッファメモリが解放されます。オブジェクトを生成するときにrelease_flagを設定するか，またはrelease_flagメソッドを呼び出すことによってrelease_flagを設定できます。release_flagメソッドについては，「31.2.3　CORBA::MarshalOutBufferのメソッド」の「void release_flag(CORBA::Boolean val);」を参照してください。

31.2.3　CORBA::MarshalOutBufferのメソッド

char *buffer() const;
このオブジェクトに対応するバッファを指すポインタを返します。

CORBA::ULong curoff() const;
このオブジェクトに対応するバッファ内のシークポジションを返します。

virtual CORBA::ULong length() const;
現在のバッファ長を返します。

virtual void new_encapsulation() const;
バッファ内の開始オフセットを0にリセットします。

virtual VISostream& put(
char data);
シークポジションに一つの文字を書き込み，一文字分だけシークポジションを進めます。
このメソッドは，このオブジェクト自身を返します。

data
シークポジションに書き込むデータ

virtual VISostream& put(
const <data_type> data, unsigned size);
このメソッドを使用して，シークポジションにデータのシーケンスを書き込み，次のデータの先頭位置までシークポジションを進めます。
このメソッドは，このオブジェクト自身を返します。

data
シークポジションに書き込むデータ。サポートされるソースデータ型を次に示します。
char*，unsigned char*，short*，unsigned short*，int*，unsigned int*，long*，unsigned long*，float*，double*，long double*，VISLongLong*，VISULongLong*，wchar_t*

size
書き込むデータ型の数

virtual VISostream& putCString(
const char* data);
このメソッドを使って，シークポジションに文字列を書き込み，書き込んだサイズ分だけシークポジションを進めます。
このメソッドは，このオブジェクト自身を返します。

data
書き込む文字列

void release_flag(
CORBA::Boolean val);
このオブジェクトがデストラクトされた際の，バッファメモリの自動解放を有効または無効にします。

val
valにtrueを設定すると，このオブジェクトがデストラクトされた際に，このオブジェクトのバッファメモリが解放されます。valにfalseを設定すると，このオブジェクトがデストラクトされた際に，バッファは解放されません。

CORBA::Boolean release_flag() const;
このオブジェクトがデストラクトされたとき，バッファメモリが自動的に解放される場合は，trueを返します。そうでない場合は，falseを返します。

void reset();
開始オフセット，およびシークポジションを0にリセットします。

void rewind();
開始オフセットはコンストラクタで設定した値にリセットされ，シークポジションは0にリセットします。

CORBA::ULong seekpos(
CORBA::ULong pos);
posの値で，シークポジションを任意に設定できます。posで指定された値がバッファサイズより大きい場合，CORBA::BAD_PARAM例外が発生します。

static CORBA::MarshalOutBuffer *_duplicate(
CORBA::MarshalOutBuffer_ptr ptr);
ptrが指すこのオブジェクトの複製ポインタを返し，このオブジェクトのリファレンスカウントを増やします。

static CORBA::MarshalOutBuffer *_nil();
CORBA::MarshalOutBuffer型のNULLポインタを返します。

static void _release(
CORBA::MarshalOutBuffer_ptr ptr);
ptrが指すオブジェクトのリファレンスカウントを減らします。リファレンスカウントが0になると，そのオブジェクトはデストラクトされます。構築された際にオブジェクトのrelease_flagにtrueを設定した場合，オブジェクトに対応するバッファが解放されます。

31.2.4　CORBA::MarshalOutBufferの演算子

virtual VISostream& operator<<(<data_type> data);
このストリーム演算子を使用して，引数に指定されたdata_type型のdataをシークポジションに書き込み，次のデータの先頭位置までシークポジションを進めます。
このメソッドは，このオブジェクト自身を返します。

data
バッファに書き込まれるデータ。サポートされるデータ型は次のとおりです。
const char*，char，unsigned char，short，unsigned short，int，unsigned int，long，unsigned long，float，double，long double，VISLongLong，VISULongLong，const wchar_t *，wchar_t

32.　ロケーションサービスインタフェースとクラス（C++）

この章では，スマートエージェントが管理するネットワーク上にあるオブジェクトインスタンスの検索に使用できる，C++言語のインタフェースについて説明します。ロケーションサービスの詳細については，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ロケーションサービスの使用」の記述を参照してください。

＜この章の構成＞

32.1　Agent

32.2　Desc

32.3　Fail

32.4　TriggerDesc

32.5　TriggerHandler

32.6　<type>Seq

32.7　<type>SeqSeq

32.1　Agent

class Agent : public CORBA::Object

このクラスで提供されるメソッドを使って，特定のオブジェクトのすべてのインスタンスを，スマートエージェントのネットワーク上で検索できます。このクラスで提供されるメソッドは，次に示す二つのカテゴリに分けられます。このオブジェクトを取得するためには，ORB::resolve_initial_references("LocationService")で求めたオブジェクトをObjLocation::Agentでナロウしてください。

オブジェクトのデータについてスマートエージェントに問い合わせるメソッド

トリガーを扱うメソッド

クライアントアプリケーションは，インタフェースリポジトリIDだけ，またはインタフェースリポジトリIDとインスタンス名の両方に基づいてオブジェクト情報を得ることができます。

トリガーを使って，一つ以上のオブジェクトインスタンスが使用できるかどうかなどの，状況の変化をクライアントアプリケーションに通知できます。

ロケーションサービスを使用するアプリケーションのコマンドラインオプションについては，「34.2　ロケーションサービスオプション」を参照してください。

＜この節の構成＞

32.1.1　IDLの定義

32.1.2　インクルードファイル

32.1.3　Agentのメソッド

32.1.1　IDLの定義

module ObjLocation {
 interface Agent {
   HostnameSeq all_agent_locations()
        raises (Fail);
   RepositoryIdSeq all_repository_ids()
        raises (Fail);
   ObjSeqSeq all_available()
        raises (Fail);
   ObjSeq all_instances (in string repository_id)
        raises (Fail);
   ObjSeq all_replica (in string repository_id, in string instance_name)
        raises (Fail);
   DescSeqSeq all_available_descs()
        raises (Fail);
   DescSeq all_instances_descs (in string repository_id)
        raises (Fail);
   DescSeq all_replica_descs (in string repository_id,
        in string instance_name)
        raises (Fail);
     void reg_trigger(in TriggerDesc desc,
        in TriggerHandler handler)
        raises (Fail);
     void unreg_trigger(in TriggerDesc desc,
        in TriggerHandler handler)
        raises (Fail);
   attribute boolean willRefreshOADs;
};
};

32.1.2　インクルードファイル

このクラスを使用するときは，locate_c.hhファイルをインクルードしてください。

32.1.3　Agentのメソッド

ObjLocation::HostnameSeq_ptr all_agent_locations();
現在osagentプロセスが実行されているホストを表すホスト名のシーケンスを返します。「32.6　<type>Seq」も参照してください。
このメソッドでは，次の例外が発生します。

Fail

FailReason値は次のとおりです。

・NO_AGENT_AVAILABLE

・NO_SUCH_TRIGGER

・AGENT_ERROR

Failクラスの詳細については，「32.3　Fail」を参照してください。

ObjLocation::ObjSeq_ptr all_available();
ネットワーク上のスマートエージェントに現在登録されているすべてのオブジェクトの，オブジェクトリファレンスのシーケンスを返します。「32.6　<type>Seq」も参照してください。
このメソッドでは，次の例外が発生します。

Fail

FailReason値は次のとおりです。

・NO_AGENT_AVAILABLE

・NO_SUCH_TRIGGER

・AGENT_ERROR

Failクラスの詳細については，「32.3　Fail」を参照してください。

ObjLocation::DescSeqSeq_ptr all_available_descs();
ネットワーク上のスマートエージェントに現在登録されているすべてのオブジェクトの記述を返します。返される記述情報はリポジトリIDによって編成されます。「32.7　<type>SeqSeq」も参照してください。
このメソッドでは，次の例外が発生します。

Fail

FailReason値は次のとおりです。

・NO_AGENT_AVAILABLE

・NO_SUCH_TRIGGER

・AGENT_ERROR

Failクラスの詳細については，「32.3　Fail」を参照してください。

ObjLocation::ObjSeq_ptr all_instances(
const char *repository_id);
指定されたrepository_idを持つすべてのインスタンスのオブジェクトリファレンスのシーケンスを返します。「32.6　<type>Seq」も参照してください。
引数の意味を次に示します。

repository_id
取得するオブジェクトリファレンスのリポジトリID

このメソッドでは，次の例外が発生します。

Fail

NO_SUCH_TRIGGER以外のFailReason値。Failクラスの詳細については，「32.3　Fail」を参照してください。

ObjLocation::DescSeq_ptr all_instances_descs(
const char *repository_id);
指定されたrepository_idを持つすべてのオブジェクトインスタンスの記述情報を返します。「32.6　<type>Seq」も参照してください。
引数の意味を次に示します。

repository_id
取得するオブジェクト記述のリポジトリID

このメソッドでは，次の例外が発生します。

Fail

NO_SUCH_TRIGGER以外のFailReason値。Failクラスの詳細については，「32.3　Fail」を参照してください。

ObjLocation::ObjSeq_ptr all_replica(
const char *repository_id,
const char *instance_name);
指定されたrepository_idとinstance_nameを持つオブジェクトのオブジェクトリファレンスのシーケンスを返します。「32.6　<type>Seq」も参照してください。
引数の意味を次に示します。

repository_id
検索するオブジェクトリファレンスのリポジトリID

instance_name
返されるオブジェクトリファレンスのインスタンス名

このメソッドでは，次の例外が発生します。

Fail

NO_SUCH_TRIGGER以外のFailReason値。Failクラスの詳細については，「32.3　Fail」を参照してください。

ObjLocation::DescSeq_ptr all_replica_descs(
const char *repository_id,
const char *instance_name);
指定されたrepository_idとinstance_nameを持つすべてのオブジェクトインスタンスの記述情報のシーケンスを返します。「32.6　<type>Seq」も参照してください。
引数の意味を次に示します。

repository_id
取得するオブジェクト記述のリポジトリID

instance_name
取得するオブジェクト記述のインスタンス名

このメソッドでは，次の例外が発生します。

Fail

NO_SUCH_TRIGGER以外のFailReason値。Failクラスの詳細については，「32.3　Fail」を参照してください。

CORBA::StringSequence* all_repository_ids();
このメソッドは，任意のosagentによって認識されているインタフェースをすべて取得します。
このメソッドでは，次の例外が発生します。

Fail

リポジトリIDが不正です。

void reg_trigger(
const ObjLocation::TriggerDesc& desc,
ObjLocation::TriggerHandler_ptr hdlr);
descで指定されている記述情報と一致するオブジェクトインスタンスのトリガーハンドラhdlrを登録します。

注

トリガーの記述に合うオブジェクトが使用できるようになるたびに，TriggerHandlerが呼び出されます。オブジェクトの最初のインスタンスを使用できるようにするには，最初の通知を受信したあとに，unreg_triggerメソッドを使ってトリガーを削除してください。

引数の意味を次に示します。

desc
次の情報を組み合わせたオブジェクトインスタンス記述情報
・リポジトリID
・インスタンス名
・ホスト名
情報を提供して，監視するオブジェクトインスタンスのナロウイングおよびワイドニングができます。

hdlr
登録されるトリガーハンドラオブジェクト

このメソッドでは，次の例外が発生します。

Fail

NO_SUCH_TRIGGER以外のFailReason値。Failクラスの詳細については，「32.3　Fail」を参照してください。

void unreg_trigger(
const ObjLocation::TriggerDesc& desc,
ObjLocation::TriggerHandler_ptr hdlr);
descで指定されている記述情報と一致する，オブジェクトインスタンスのトリガーハンドラhdlrを，登録解除します。
引数の意味を次に示します。

desc
オブジェクト記述情報

hdlr
登録解除されるトリガーハンドラオブジェクト

このメソッドでは，次の例外が発生します。

Fail

NO_SUCH_TRIGGER以外のFailReason値。Failクラスの詳細については，「32.3　Fail」を参照してください。

CORBA::Boolean willRefreshOADs();
このクラスが提供するメソッドが呼び出されるたびに，OAD（オブジェクト活性化デーモン）群が更新される場合は，TRUEを返します。そうでない場合は，FALSEを返します。それぞれの呼び出しでキャッシュがリフレッシュされないと，次のようになります。

すべてのオブジェクトが報告されていますが，それらの記述子のactivableフラグが不当な場合があります。

前回のOADキャッシュのリフレッシュ後に起動された，OADに登録されているオブジェクトの存在を検証しようとすると，それらのオブジェクトがOADによって活性化されてしまいます。

void willRefreshOADs(
CORBA::Boolean val);
このクラスは，OAD群を保持します。このクラスによって提供されるメソッドは，そのOAD群に含まれるOADの自動リフレッシュを有効または無効にします。
引数の意味を次に示します。

val
TRUEの場合，このクラスで提供されているメソッドが呼び出されるたびに，OAD群がリフレッシュされます。

32.2　Desc

struct Desc

この構造体は，オブジェクトの特性を記述するために使用する情報を格納します。この章で説明する，ロケーションサービスメソッドの幾つかに，この構造体を引数として渡します。幾つかのロケーションサービスメソッドによってDesc構造体，またはそのシーケンスが返されます。

「32.6　<type>Seq」も参照してください。

＜この節の構成＞

32.2.1　IDLの定義

32.2.2　Descのメンバ

32.2.1　IDLの定義

module ObjLocation {
 struct Desc {
   Object ref;
   IIOP::ProfileBody iiop_locator;
   string repository_id;
   string instance_name;
   boolean activable;
   string agent_hostname;
 };
. . .
};

32.2.2　Descのメンバ

CORBA::Object_var ref
記述されるオブジェクトのリファレンスです。

IIOP::ProfileBody iiop_locator
オブジェクトのプロファイルデータを表します。詳細については，「30.7　IIOP::ProfileBody」を参照してください。

CORBA::String_var repository_id
オブジェクトのリポジトリIDです。

CORBA::String_var instance_name
オブジェクトのインスタンス名です。

CORBA::Boolean activable
このオブジェクトが，オブジェクト活性化デーモンに登録されていることを示す場合はTRUEを設定します。オブジェクトが手動で起動され，osagentに登録されていることを示す場合はFALSEを設定します。

CORBA::String_var agent_hostname
このオブジェクトが登録されているスマートエージェントを実行しているホストの名前です。

32.3　Fail

class Fail : public CORBA::UserException

さまざまなエラーを示すために，Agentクラスはこの例外クラスを発生させます。FailReasonというデータメンバは，障害の性質を示します。

＜この節の構成＞

32.3.1　Failのメンバ

32.3.1　Failのメンバ

FailReason reason
このメンバは，障害の性質を示す次の値のどれかを設定します。

enum FailReason {
   NO_AGENT_AVAILABLE,
   INVALID_REPOSITORY_ID,
   INVALID_OBJECT_NAME,
   NO_SUCH_TRIGGER,
   AGENT_ERROR
};

32.4　TriggerDesc

struct TriggerDesc

この構造体は，TriggerHandlerを登録する一つ以上のオブジェクトの特性を記述するために使用する情報を格納します。TriggerHandlerについては，「32.5　TriggerHandler」を参照してください。広範囲のオブジェクトを監視するには，host_nameメンバ，およびinstance_nameメンバにNULLを設定します。指定する情報が多いほど，対象オブジェクトを限定できます。

＜この節の構成＞

32.4.1　IDLの定義

32.4.2　TriggerDescのメンバ

32.4.1　IDLの定義

module ObjLocation {
   . . .
        struct TriggerDesc {
           string repository_id;
           string instance_name;
           string host_name;
};
. . .
};

32.4.2　TriggerDescのメンバ

CORBA::String_var repository_id
TriggerHandlerによって監視されるオブジェクトのリポジトリIDです。すべてのリポジトリIDを含めるには，NULLを設定します。

CORBA::String_var instance_name
このメンバは，TriggerHandlerによって監視されるオブジェクトのインスタンス名を表します。すべてのインスタンス名を含めるには，NULLを設定します。

CORBA::String_var host_name;
このメンバは，TriggerHandlerによって監視されるオブジェクトのホスト名を表します。ネットワーク上のすべてのホストを含めるには，NULLを設定します。

32.5　TriggerHandler

class TriggerHandler : public virtual CORBA::Object

オブジェクトが使用できるたびに，または使用できなくなるたびに呼び出す，独自のコールバックオブジェクトを派生させるために，このベースクラスを使用します。対象とするオブジェクトの基準を指定します。Agentクラスのreg_triggerメソッドを使用して，TriggerHandlerオブジェクトを登録します。reg_triggerメソッドについては，「32.1.3　Agentのメソッド」の「void reg_trigger(const ObjLocation::TriggerDesc& desc, ObjLocation::TriggerHandler_ptr hdlr);」を参照してください。

impl_is_readyメソッドとimpl_is_downメソッドのインプリメンテーションを提供する必要があります。

＜この節の構成＞

32.5.1　IDLの定義

32.5.2　インクルードファイル

32.5.3　TriggerHandlerのメソッド

32.5.1　IDLの定義

interface TriggerHandler {
   void impl_is_ready(in Desc desc);
   void impl_is_down(in Desc desc);
};

32.5.2　インクルードファイル

このクラスを使用するときは，locate_c.hhファイルをインクルードしてください。

32.5.3　TriggerHandlerのメソッド

virtual void impl_is_ready(
const Desc& desc);
このメソッドは，descで指定された基準に一致するオブジェクトインスタンスがアクセスできるようになった場合に，ロケーションサービスによって呼び出されます。

desc
オブジェクト記述情報

virtual void impl_is_down(
const Desc& desc);
このメソッドは，descで指定された基準に一致するオブジェクトインスタンスがアクセスできなくなった場合に，ロケーションサービスによって呼び出されます。

desc
オブジェクト記述情報

32.6　<type>Seq

これは，ロケーションサービスによって使用される，次に示すシーケンスクラスについて記述した，汎用クラスです。

DescSeq
Desc構造体のシーケンス

HostnameSeq
ホスト名のシーケンス

ObjSeq
オブジェクトリファレンスのシーケンス

RepositoryIdSeq
リポジトリIDのシーケンス

各クラスは，<type>のある特定のシーケンスを表しています。ロケーションサービスは，これらのクラスのどれかにマッピングされたシーケンスの形で，クライアントアプリケーションに情報のリストを返します。

C++配列の場合と同様に，各クラスはシーケンス内の項目をインデックス付けする演算子を提供しています。その配列の長さを取得するメソッド，および配列の長さを設定するメソッドも提供しています。

コードサンプル32-1に，Agent::all_agent_locationsメソッドから返されたHostnameSeqをインデックス付けする正しい方法を示します。

コードサンプル32-1　HostnameSeq_varクラスのインデックス付け

. . .
ObjLocation::HostnameSeq_var hostnames(
 myAgent->all_agent_locations());

for (CORBA::ULong i=0; i < hostnames->length(); i++) {
 cout << "Agent host #" << i+1 << ": " << hostnames[i] << endl;
}
. . .

「32.7　<type>SeqSeq」も参照してください。

＜この節の構成＞

32.6.1　<type>Seqのメソッド

32.6.1　<type>Seqのメソッド

<type>& operator[ ](
CORBA::ULong index) const;
このメソッドは，indexで識別されているシーケンス内の要素のリファレンスを返します。

注

インデックスに対してはCORBA::ULong型を使用しなければなりません。int型を使用すると予想できない結果が起こります。

引数の意味を次に示します。

index
要素が返されるメンバのインデックス。インデックスは0から始まります。

このメソッドでは，次の例外が発生します。

CORBA::BAD_PARAM

指定したインデックスが，0より小さいか，またはシーケンスのサイズを超えています。

CORBA::ULong length() const;
シーケンス内の要素数を返します。

void length(
CORBA::ULong len);
シーケンスの最大長をlenに含まれる値に設定します。
引数の意味を次に示します。

len
シーケンスの新しい長さ

32.7　<type>SeqSeq

これは，ロケーションサービスによって使用される，次に示すクラスについて記述した，汎用クラスです。

DescSeqSeq
DescSeqオブジェクトのシーケンス

ObjSeqSeq
ObjSeqオブジェクトのシーケンス

各クラスは，<type>Seqのある特定のシーケンスを表しています。幾つかのロケーションサービスメソッドは，それらのクラスのどれかにマッピングされたシーケンスの形で，クライアントアプリケーションに情報のリストを返します。

C++配列の場合と同様に，各クラスはシーケンス内の項目をインデックス付けするための演算子を提供しています。その配列の長さを取得するメソッドおよび配列の長さの設定をするメソッドも提供しています。

「32.6　<type>Seq」も参照してください。

＜この節の構成＞

32.7.1　<type>SeqSeqのメソッド

32.7.1　<type>SeqSeqのメソッド

<type>Seq& operator[ ](
CORBA::ULong index) const;
このメソッドは，indexで識別されているシーケンス内の要素のリファレンスを返します。このリファレンスは，一次元シーケンスのリファレンスです。一次元シーケンスについては，「32.6　<type>Seq」を参照してください。

注

インデックスに対してはCORBA::ULong型を使用しなければなりません。int型を使用すると予想できない結果が起こります。

引数の意味を次に示します。

index
要素が返されるメンバのインデックス。インデックスは0から始まります。

このメソッドでは，次の例外が発生します。

CORBA::BAD_PARAM

指定したインデックスが，0より小さいか，またはシーケンスのサイズを超えています。

CORBA::ULong length() const;
シーケンス内の要素数を返します。

void length(
CORBA::ULong len);
シーケンスの最大長をlenに含まれる値に設定します。
引数の意味を次に示します。

len
シーケンスの新しい長さ

33.　初期化インタフェースとクラス（C++）

この章では，インタセプタなどのVisiBroker ORBサービスを，静的に初期化するために提供されている，C++言語のインタフェースとクラスについて説明します。

＜この章の構成＞

33.1　VISInit

33.1　VISInit

class VISInit

この抽象ベースクラスは，VisiBroker ORBの初期化後，サービスクラスを静的に初期化します。VISInitからサービスクラスを派生させ，そのクラスを静的に宣言することで，そのサービスクラスインスタンスを正しく初期化できます。

アプリケーションがCORBA::ORB_initメソッドを呼び出した際，VisiBroker ORBはVISInit::ORB_initおよびVISInit::ORB_initializedを呼び出します。これらのメソッドのインプリメンテーションを提供することによって，ユーザ独自のサービスに必要な初期化を追加できます。

＜この節の構成＞

33.1.1　インクルードファイル

33.1.2　VISInitのメソッド

33.1.1　インクルードファイル

このクラスを使用するときは，vinit.hファイルをインクルードしてください。

33.1.2　VISInitのメソッド

VISInit();
これはデフォルトのコンストラクタです。

VISInit(
CORBA::Long init_priority);
このコンストラクタは，指定した優先度でVISInitから派生したオブジェクトを生成します。優先度の指定によって，このオブジェクトをほかのVISInit派生オブジェクトより先に初期化したり，あとに初期化したりできます。
ユーザ定義クラスより先に初期化する必要のあるBorland Enterprise Server VisiBroker内部クラスの優先度には，負の値が使用されています。現在，Borland Enterprise Server VisiBroker内部クラスの優先度に使用されている値のうちで最も小さい値は-10です。

注

ユーザ定義クラスをBorland Enterprise Server VisiBroker内部クラスより先に初期化したい場合は，優先度に-10より小さい値を設定する必要があります。ただし，その時点ではVisiBrokerは初期化されていないため，VisiBrokerの機能は使用できません。

デフォルトコンストラクタを使用した場合の優先度は0です。

init_priority
このオブジェクトの初期化優先度。負の値を指定すると優先度が高くなり，正の値を指定すると優先度が低くなります。

virtual void ORB_init(
int& argc, char * const *argv, CORBA::ORB_ptr orb);
このメソッドは，VisiBroker ORBが初期化された際に呼び出されます。使用するクライアント側インタセプタファクトリの初期化に応じて，実装する必要があります。

argc
引数のカウント

argv
引数ポインタの配列

orb
初期化されるVisiBroker ORB

virtual void ORB_initialized(
CORBA::ORB_ptr orb);
このメソッドは，VisiBroker ORBが初期化されたあとに呼び出されます。使用するクライアント側インタセプタファクトリの初期化に応じて，実装する必要があります。

orb
初期化されたVisiBroker ORB

virtual void ORB_shutdown()
このメソッドは，VisiBroker ORBがシャットダウンされる際に呼び出されます。

34.　コマンドラインオプション（C++）

この章では，C++言語でプログラミングするときに，オブジェクトリクエストブローカー（ORB）およびロケーションサービスで設定するオプションについて説明します。

＜この章の構成＞

34.1　ORB_init()メソッド

34.2　ロケーションサービスオプション

34.1　ORB_init()メソッド

クライアントプログラムは，使用するスマートエージェントのIPアドレスや，ポート番号などのオプションを設定する際に，ORB_init()メソッドを使用します。これらのパラメタは，クライアントプログラムのプロセスが起動された際に，引数としてそのプロセスに渡されます。

prompt> client -ORBagentAddr 199.99.129.33 -ORBagentPort 19000

ORB_init()メソッドの定義およびこのメソッドが受け入れる引数について，コードサンプル34-1に示します。ORB_init()に渡されたargcとargvパラメタは，クライアントプログラムのメインルーチンに渡された引数と同じものです。ORB_init()メソッドが認識できない引数は無視されます。

コードサンプル34-1　ORB_init()メソッド定義

class CORBA {
   ...
   static ORB_ptr ORB_init(int& argc, char *const *argv,
                            const char *orb_id = (char *)NULL);
   ...
};

このメソッドを呼び出すと，認識されたVisiBroker ORB引数はすべて元のパラメタリストから削除されます。これは，クライアントプログラムが要求するほかの引数処理を妨げないためです。

＜この節の構成＞

34.1.1　ORBオプション

34.1.1　ORBオプション

一つのオプションを除いて，その他すべてのORBオプションは型・値ペアの形式になっています。ORB_init()オプションについて，次の表に示します。

表34-1　クライアントプログラムが使用するORB_initオプション（C++）

オプション
説明

-ORBagent <0|1>
VisiBrokerの_bind()時に，スマートエージェントがサーバを探索するかどうかを指定します。
0を設定した場合，探索しません。
1を設定した場合，探索します。
デフォルトは1です。

-ORBagentAddr
<hostname|ip_address>
このクライアントが使用するスマートエージェントを実行しているホストのホスト名またはIPアドレスを指定します。
hostnameを設定した場合，ホスト名を指定します。
ip_addressを設定した場合，IPアドレスを指定します。
このオプションの指定を省略した場合や，自ホストまたはagentaddrファイルで指定したホストからスマートエージェントを探索できない場合は，ブロードキャストメッセージでスマートエージェントを見つけます。

-ORBagentPort <port_number>
スマートエージェントのポート番号を指定します。複数のVisiBroker ORBドメインが必要な場合に有用です。
指定を省略した場合，14000番で動作します。

-ORBconnectionMax <#>
コネクションの最大数を指定します。
指定を省略した場合，無制限にコネクションを許可します。

-ORBconnectionMaxIdle <#>
コネクションが非アクティブな状態の最大監視時間を秒単位で指定します。最大監視時間を経過してもコネクションが非アクティブなままの場合，VisiBrokerがコネクションを終了します。
このオプションはインターネットアプリケーションで設定します。
0を設定した場合，監視しません。
デフォルトは0です。

-ORBDefaultInitRef
デフォルトの初期リファレンスを指定します。

-ORBInitRef
初期リファレンスを指定します。

-ORBir_ior <ior_string>
Object::_get_interface()メソッドがオブジェクトインプリメンテーションで呼び出されるとき，アクセスされるインタフェースリポジトリのIORを指定します。

-ORBir_name <ir_name>
Object::_get_interface()メソッドがオブジェクトインプリメンテーションで呼び出されるとき，アクセスされるインタフェースリポジトリの名前を指定します。

-ORBnullstring <0|1>
1を設定した場合，VisiBroker ORBがC++ NULL文字をストリームします。NULL文字列は長さが0の文字列としてマーシャルされます。これは，長さが1の文字列としてマーシャルされる空の文字列（""）とは異なり，単独の文字（"¥0"）です。
0を設定した場合，NULL文字列をマーシャルしたときは，CORBA::BAD_PARAMとなります。NULL文字列をアンマーシャルしたときは，CORBA::MARSHALとなります。
デフォルトは0です。

-ORBrcvbufsize <buffer_size>
応答を受信するために使用するTCPバッファのサイズをバイト単位で指定します。指定値は，性能やベンチマークの結果に著しく影響します。
指定を省略した場合，デフォルト値が設定されます。
デフォルトはOSよって異なるため，各OSのマニュアルを参照してください。

-ORBsendbufsize <buffer_size>
クライアント要求を送信するために使用するTCPバッファのサイズをバイト単位で指定します。指定値は，性能やベンチマークの結果に著しく影響します。
指定を省略した場合，デフォルト値が設定されます。
デフォルトはOSよって異なるため，各OSのマニュアルを参照してください。

（Windows）
-ORBshmsize <size>
共用メモリ内の送信セグメントおよび受信セグメントのサイズをバイト単位でを指定します。クライアントプログラムやオブジェクトインプリメンテーションが共用メモリを介して通信する場合，このオプションを使うと，パフォーマンスが向上します。ただし，このオプションをサポートしているのはWindowsだけです。

-ORBtcpNoDelay <0|1>
ソケットが要求を送信する契機を指定します。指定値は，性能やベンチマークの結果に著しく影響します。
1を設定した場合，すべてのソケットが即時に要求を送信します。
0を設定した場合，ソケットはバッファが満杯になった時点で要求を一括して送信します。
デフォルトは0です。

34.2　ロケーションサービスオプション

VisiBroker 4.xでは，コマンドラインオプションのLOCdebug，LOCtimeout，およびLOCverifyをサポートしていません。これらのオプションの代わりに使用できるプロパティとデフォルトの詳細については，「35.4　ロケーションサービスプロパティ」を参照してください。

35.　Borland Enterprise Server VisiBrokerプロパティ（C++）

この章では，C++言語でプログラミングする場合に，Borland Enterprise Server VisiBrokerで設定できるプロパティについて説明します。

これらのパラメタは，プロセスが起動された際に引数としてプロセスに渡せます。

＜この章の構成＞

35.1　プロパティの設定方法

35.2　osagent（スマートエージェント）プロパティ

35.3　ORBプロパティ

35.4　ロケーションサービスプロパティ

35.5　OADプロパティ

35.6　インタフェースリポジトリリゾルバのプロパティ

35.7　ネーミングサービスプロパティ

35.8　TypeCodeのプロパティ

35.9　クライアント側IIOPのコネクションプロパティ

35.10　サーバ側エンジンプロパティ

35.11　サーバ側スレッドセッションコネクションのプロパティ

35.12　サーバ側スレッドプールコネクションのプロパティ

35.13　双方向通信をサポートするプロパティ

35.1　プロパティの設定方法

prompt> client -Dvbroker.agent.port=14000

ORB_init()メソッドの定義およびこのメソッドが受け入れる引数について，コードサンプル35-1に示します。ORB_init()に渡されたargcとargvパラメタは，クライアントプログラムのメインルーチンに渡された引数と同じものです。

ORB_init()メソッドが認識できない引数は無視されます。

コードサンプル35-1　ORB_init()メソッド定義

class CORBA {
   ...
   static ORB_ptr ORB_init(int& argc, char *const *argv,
                           const char *orb_id = (char *)NULL);
   ...
};

このメソッドを呼び出すと，認識されたVisiBroker ORB引数はすべて元のパラメタリストから削除されます。これは，クライアントプログラムが要求するほかの引数処理を妨げないためです。

35.2　osagent（スマートエージェント）プロパティ

osagent（スマートエージェント）のプロパティを次の表に示します。

表35-1　osagent（スマートエージェント）プロパティ（C++）

プロパティ
デフォルト
旧プロパティ
説明

vbroker.agent.addr
null
-ORBagentAddr
osagentが動作しているホストのIPアドレスまたはホスト名を，VisiBrokerアプリケーションに指定します。デフォルトのnullに設定すると，VisiBrokerアプリケーションはOSAGENT_ADDR環境変数の値を使用します。
OSAGENT_ADDR環境変数が未設定のときは，osagentがローカルホストで動作していると仮定します。
このプロパティはosagentには指定できません。

vbroker.agent.addrFile
null
該当しません。
agentaddrファイルを指定します。agentaddrファイルについては，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「agentaddrファイルによるホストの指定」または「ポイントツーポイント通信の使用」を参照してください。
このプロパティはosagentとアプリケーションのどちらでも指定する事ができます。

vbroker.agent.clientHandlerPort
0
該当しません。
osagentがクライアントアプリケーションと通信するために使用するポートを指定します。デフォルトの0に設定すると，osagentはシステムに割り当てられたポート番号を使用します。
このプロパティはアプリケーションには指定できません。
注
0以外を指定する場合，有効範囲は5001～65535の範囲の整数値です。それ以外の値を指定した場合，動作の保証はできません。

vbroker.agent.debug
false
該当しません。
trueを設定すると，システムはVisiBrokerアプリケーションとosagentとの間での通信のデバッグ情報を表示します。
このプロパティはosagentには指定できません。

vbroker.agent.enableLocator
true
-ORBagent
falseを設定すると，VisiBrokerアプリケーションはosagentと通信を行いません。
このプロパティはosagentには指定できません。

vbroker.agent.localFile
null
該当しません。
マルチホームマシン上で使用するネットワークインタフェースを指定します。これは，以前はOSAGENT_LOCAL_FILE環境変数でした。
このプロパティはosagentには指定できません。

vbroker.agent.port
14000
-ORBagentPort
ネットワーク上のORBドメインを定義するポート番号を指定します。すべてのVisiBrokerアプリケーションとosagentに同一のポート番号を設定すると，それらを連携させることができます。このプロパティはOSAGENT_PORT環境変数と同じ働きをします。
このプロパティはosagentとアプリケーションのどちらでも指定する事ができます。

35.3　ORBプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのORBのプロパティを次の表に示します。

表35-2　ORBプロパティ（C++）

プロパティ
デフォルト
旧プロパティ
説明

vbroker.orb.propStorage
null
該当しません。
プロパティ値を含むプロパティファイルを指定します。

vbroker.orb.nullstring
false
-ORBnullString
trueを設定すると，ORBによってC++のNULL文字列が送信されます。NULL文字列は，長さが0である文字列としてマーシャリングされます（これに対し，空文字列（""）は，'¥0'という単一文字を持つ長さ1の文字列としてマーシャリングされます）。このオプションにfalseを設定してNULL文字列をマーシャリングすると，CORBA::BAD_PARAMとなります。NULL文字列をアンマーシャルすると，CORBA::MARSHALとなります。

vbroker.orb.admDir
<環境変数TPDIRの設定値>/adm
該当しません。
さまざまなシステムファイルが存在する管理ディレクトリを指定します。このプロパティはVBROKER_ADM環境変数を使って設定できます。環境変数TPDIRについては，マニュアル「TPBroker　ユーザーズガイド」を参照してください。

vbroker.orb.isNTService
false
該当しません。
trueを指定すると，このプロパティはアプリケーションをWindowsのサービスとして実行できるようにして，カレントユーザがログアウトした場合でも終了しないようにします。

vbroker.orb.obv.debug
false
該当しません。
trueを指定すると，このプロパティはORBのオブジェクト値をインプリメンテーションで渡せるようにして，デバッグ情報を表示します。

vbroker.orb.dynamicLibs
null
該当しません。
ORBが明示的にロードするライブラリ（DLL）を指定できます。

vbroker.orb.input.maxBuffers
16
該当しません。
プールに保持されている入力バッファの最大数を指定します。

vbroker.orb.input.buffSize
255
該当しません。
入力バッファのサイズを指定します。

vbroker.orb.output.maxBuffers
16
該当しません。
プールに保持されている出力バッファの最大数を指定します。

vbroker.orb.output.buffSize
255
該当しません。
出力バッファのサイズを指定します。

vbroker.orb.initRef
null
該当しません。
初期リファレンスを指定します。

vbroker.orb.defaultInitRef
null
該当しません。
デフォルトの初期リファレンスを指定します。

vbroker.orb.alwaysProxy
false
該当しません。
trueを設定すると，リクエストするときに，クライアントは常にゲートキーパーを使用してサーバに接続しなければならないことを指定します。

vbroker.orb.gatekeeper.ior
null
該当しません。
指定したIORのゲートキーパーを使用して，常にクライアントアプリケーションをサーバに強制的に接続します。

vbroker.locator.ior
null
該当しません。
osagentのプロキシとして使用するゲートキーパーのIORを指定します。このプロパティを設定しない場合は，vbroker.orb.gatekeeper.iorプロパティで指定したゲートキーパーが使用されます。

vbroker.orb.proxyPassthru
false
該当しません。
アプリケーションスコープ全体にファイアウォールモード「PASSTHROUGH」を適用します。オブジェクトまたはorbごとにファイアウォールモードを選択する場合は，コードにQoSExt::ProxyModePolicyを使用します。

vbroker.orb.bids.critical
inprocess
該当しません。
vbroker.orb.bidOrderとvbroker.orb.bids.criticalに同時に優先順位が設定されている場合は，vbroker.orb.bids.criticalの設定が有効となります。vbroker.orb.bids.criticalで複数の値が設定されている場合は，vbroker.orb.bidOrderに基づいて相対的な重要度が決まります。

vbroker.orb.bidOrder
inprocess:liop:iiop:proxy:locator
該当しません。
各トランスポートの相対的な重要度を指定します。トランスポートの優先順位は，次のように割り当てられています。

inprocess

liop

iiop

proxy

locator

例えば，IORにLIOPとIIOPの両プロファイルが含まれている場合は，LIOPが優先されます。IIOPが使用されるのは，LIOPが失敗したときだけです。ただし，vbroker.orb.bidOrderとvbroker.orb.bids.criticalに同時に優先順位が設定されている場合は，vbroker.orb.bids.criticalの設定が有効となります。

vbroker.orb.cacheDSQuery
true
-ORBcacheDSQuery
trueを設定すると，VisiBrokerアプリケーションはosagentを使用した通信でリファレンスをキャッシュします。リファレンスをキャッシュした場合は，同一サーバに対する2度目以降の_bind()処理ではosagentに問い合わせをしないで，プロセス内にキャッシュしたリファレンスを使用します。

35.4　ロケーションサービスプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのロケーションサービスのプロパティを次の表に示します。

表35-3　ロケーションサービスプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.locationservice.debug | false | trueを設定すると，このプロパティはロケーションサービスがデバッグ情報を表示できるようにします。
vbroker.locationservice.verify | false | trueを設定すると，このプロパティはロケーションサービスが，osagentから送られたオブジェクトリファレンスで参照されるオブジェクトがあるかどうかをチェックできるようにします。
vbroker.locationservice.timeout | 1 | ロケーションサービスとの通信時の接続，受信，および送信のタイムアウトを指定します。

35.5　OADプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのOADのプロパティを次の表に示します。

表35-4　認定可能なOADプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.oad.spawnTimeOut | 20 | このプロパティは，OADが実行形式ファイルを生成したあと，オブジェクトからコールバックが何秒間来なければ対象オブジェクトを起動するかを指定します。
vbroker.oad.verbose | false | OADがオペレーションの詳細情報を出力できるようにします。
vbroker.oad.readOnly | false | trueを設定すると，OADインプリメンテーションの登録，登録解除，および変更ができなくなります。
vbroker.oad.iorFile | oadj.ior | OADの文字列化IORのファイル名を指定します。
vbroker.oad.quoteSpaces | false | コマンドを引用するかどうかを指定します。
vbroker.oad.killOnUnregister | false | 生成したサーバの登録を解除した場合に，それらをkillするかどうかを指定します。
vbroker.oad.verifyRegistration | false | オブジェクトの登録を確認するかどうかを指定します。

プロパティファイルにオーバーライドできないBorland Enterprise Server VisiBrokerのORBプロパティを次の表に示します。なお，このプロパティは，環境変数またはコマンドラインでオーバーライドできます。

表35-5　プロパティファイルにオーバーライドできないOADプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.oad.implName | impl_rep | インプリメンテーションリポジトリのファイル名を指定します。
vbroker.oad.implPath | null | インプリメンテーションリポジトリを格納するディレクトリを指定します。
vbroker.oad.path | null | OADのディレクトリを指定します。
vbroker.oad.systemRoot | null | ルートディレクトリを指定します。
vbroker.oad.windir | null | Windowsディレクトリを指定します。

35.6　インタフェースリポジトリリゾルバのプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのインタフェースリポジトリリゾルバのプロパティを次の表に示します。

表35-6　インタフェースリポジトリリゾルバのプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.ir.debug | false | trueを設定すると，IRリゾルバはデバッグ情報を表示できるようになります。
vbroker.ir.ior | null | vbroker.ir.nameプロパティにデフォルト値のnullが設定されている場合，VisiBroker ORBはこのプロパティを使用してIRを捜し出します。
vbroker.ir.name | null | VisiBroker ORBがIRを探すときに使用する名前を指定します。

35.7　ネーミングサービスプロパティ

ネーミングサービスプロパティについては，マニュアル「Borland Enterprise Server VisiBroker　デベロッパーズガイド」の「ネーミングサービスプロパティ」の記述を参照してください。

35.8　TypeCodeのプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのTypeCodeのプロパティを次の表に示します。

表35-7　TypeCodeのプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.typecode.debug | false | trueを設定すると，このプロパティはtypecodeコードがデバッグ情報を表示できるようにします。
vbroker.typecode.noIndirection | false | trueを設定すると，このプロパティは再帰的typecodeコードの書き込み時にインディレクションの使用を禁止します。

35.9　クライアント側IIOPのコネクションプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのクライアント側IIOPコネクションのプロパティを次の表に示します。

表35-8　クライアント側IIOPのコネクションプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.ce.iiop.ccm.connectionCacheMax | 5 | 1クライアントがキャッシュできるコネクション数の上限を指定します。コネクションはクライアントが解放したときにキャッシュされます。したがって，次回クライアントが新規コネクションを必要とするときは，クライアントは新規コネクションを生成する前に，キャッシュの中に解放したコネクションが残っていないかどうかを確認し，あればそれを使用します。
vbroker.ce.iiop.ccm.connectionMax | 0 | 1クライアントの合計コネクション数の上限を指定します。この値は，アクティブなコネクション数とキャッシュされたコネクション数の合計です。デフォルトの0を指定すると，クライアントは以前のアクティブなまたはキャッシュされたコネクションをクローズしません。
vbroker.ce.iiop.ccm.connectionMaxIdle | 0 | クライアントがキャッシュされているコネクションをクローズするかどうかを判定するための基準の時間を，秒単位で指定します。クライアントで使用するオブジェクトリファレンスを解放するときに，キャッシュされたコネクションがこの時間より長く非アクティブ状態になっていると，クライアントはそのコネクションをクローズします。デフォルトの0を指定すると，キャッシュされているコネクションをクローズしません。
vbroker.ce.iiop.ccm.type | Pool | クライアントが使用するクライアントコネクション管理の種類を指定します。デフォルト値のPoolはコネクションプールの意味です。
vbroker.ce.iiop.connection.rcvBufSize | 0 | 受信ソケットバッファのサイズを指定します。デフォルト値の0は，システムの設定値に依存します。
vbroker.ce.iiop.connection.sendBufSize | 0 | 送信ソケットバッファのサイズを指定します。デフォルト値の0は，システムの設定値に依存します。
vbroker.ce.iiop.connection.tcpNoDelay | false | trueに設定すると，ORBはサーバへの送信データをコネクションへ書き込むと同時に送信するように，TCP/IPの設定を変更します。
vbroker.ce.iiop.connection.socketLinger | 0 | VisiBrokerが使用するTCP/IPコネクションの設定をします。設定値については，各プラットフォームのsetsockopt(2)を参照してください。
vbroker.ce.iiop.connection.keepAlive | true | VisiBrokerが使用するTCP/IPコネクションの設定をします。設定値については，各プラットフォームのsetsockopt(2)を参照してください。

35.10　サーバ側エンジンプロパティ

サーバ側のサーバエンジンのプロパティを次の表に示します。

表35-9　サーバ側エンジンプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.se.default | iiop_tp | デフォルトサーバエンジンを指定します。

35.11　サーバ側スレッドセッションコネクションのプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのサーバ側スレッドセッションコネクションのプロパティを次の表に示します。

xxxはサーバエンジン，yyyはサーバコネクションマネージャです。

iiop_ts
このデフォルトサーバエンジンプロパティは，デフォルトIIOPリスナーと一緒にThreadSessionの変種で使用します。

表35-10　サーバ側スレッドセッションコネクションのプロパティ（C++）

プロパティ
デフォルト
説明

vbroker.se.xxx.host
null
該当するサーバエンジンが使用するホスト名です。デフォルト値のnullは，システムからホスト名を使用することを指定します。

vbroker.se.xxx.proxyHost
null
IOR文字列にホスト名で出力する場合にはこのプロパティにホスト名を指定してください。このプロパティの指定を省略した場合は，vbroker.se.xxx.hostの指定に従います。

vbroker.se.xxx.scms
xxx=iiop_ts，
iiop_ts
サーバコネクションマネージャ名の一覧です。

vbroker.se.xxx.scm.yyy.manager.type
Socket
サーバコネクションマネージャの種別を指定します。

vbroker.se.xxx.scm.yyy.manager.connectionMax
0
サーバが許可するコネクション数の最大値を指定します。デフォルト値の0は，コネクション数を制限しないことを表します。

vbroker.se.xxx.scm.yyy.manager.connectionMaxIdle
0
非アクティブなコネクションをクローズするかどうかをサーバが判定するためのタイムアウトを秒数で指定します。

vbroker.se.xxx.scm.yyy.listener.type
IIOP
リスナーが使用するプロトコルの種別を指定します。

vbroker.se.xxx.scm.yyy.listener.port
0
ホスト名プロパティに使用するポート番号を指定します。デフォルト値の0は，システムはポート番号を無作為に選択することを表します。

vbroker.se.xxx.scm.yyy.listener.proxyPort
0
プロキシホスト名プロパティに使用するプロキシポート番号を指定します。デフォルト値の0は，システムはポート番号を無作為に選択することを表します。

vbroker.se.xxx.scm.yyy.listener.rcvBufSize
0
受信ソケットバッファのサイズを指定します。デフォルト値の0は，システムの設定値に依存します。

vbroker.se.xxx.scm.yyy.listener.sendBufSize
0
送信ソケットバッファのサイズを指定します。デフォルト値の0は，システムの設定値に依存します。

vbroker.se.xxx.scm.yyy.listener.socketLinger
0
VisiBrokerが使用するTCP/IPコネクションの設定をします。設定値については，各プラットフォームのsetsockopt(2)を参照してください。

vbroker.se.xxx.scm.yyy.listener.keepAlive
true
VisiBrokerが使用するTCP/IPコネクションの設定をします。設定値については，各プラットフォームのsetsockopt(2)を参照してください。

vbroker.se.xxx.scm.yyy.dispatcher.type
ThreadSession
サーバコネクションマネージャに使用するスレッドディスパッチャの種別を指定します。

vbroker.se.xxx.scm.yyy.dispatcher.threadStackSize
デフォルトでは，ORBは設定しません。
スレッドスタックのサイズです。

35.12　サーバ側スレッドプールコネクションのプロパティ

C++言語に対応するBorland Enterprise Server VisiBrokerのサーバ側スレッドプールコネクションのプロパティを次の表に示します。

xxxはサーバエンジン，yyyはサーバコネクションマネージャです。

iiop_tp
このデフォルトサーバエンジンプロパティは，POAの作成時に使用されます。

表35-11　サーバ側スレッドプールコネクションのプロパティ（C++）

プロパティ
デフォルト
説明

vbroker.se.xxx.host
null
該当するサーバエンジンが使用するホスト名です。デフォルト値のnullは，システムからホスト名を使用することを指定します。

vbroker.se.xxx.proxyHost
null
IOR文字列にホスト名で出力する場合にはこのプロパティにホスト名を指定してください。このプロパティの指定を省略した場合は，vbroker.se.xxx.hostの指定に従います。

vbroker.se.xxx.scms
xxx=iiop_tp，
iiop_tp
サーバコネクションマネージャ名の一覧です。

vbroker.se.xxx.scm.yyy.manager.type
Socket
サーバコネクションマネージャの種別を指定します。

vbroker.se.xxx.scm.yyy.manager.connectionMax
0
サーバが受け付けるキャッシュコネクション数の最大値を指定します。デフォルト値の0は，コネクション数を制限しないことを表します。

vbroker.se.xxx.scm.yyy.manager.connectionMaxIdle
0
非アクティブなコネクションをクローズするかどうかをサーバが判定するためのタイムアウトを秒数で指定します。

vbroker.se.xxx.scm.yyy.manager.garbageCollectTimer
30
接続用のガーベッジコレクトタイマ（秒）です。

vbroker.se.xxx.scm.yyy.listener.type
IIOP
リスナーが使用するプロトコルの種別です。

vbroker.se.xxx.scm.yyy.listener.port
0
ホスト名プロパティに使用するポート番号です。デフォルト値の0は，システムはポート番号を無作為に選択することを表します。

vbroker.se.xxx.scm.yyy.listener.proxyPort
0
プロキシホスト名プロパティに使用するプロキシポート番号です。デフォルト値の0は，システムはポート番号を無作為に選択することを表します。

vbroker.se.xxx.scm.yyy.listener.rcvBufSize
0
受信ソケットバッファのサイズを指定します。デフォルト値の0は，システムの設定値に依存します。

vbroker.se.xxx.scm.yyy.listener.sendBufSize
0
送信ソケットバッファのサイズを指定します。デフォルト値の0は，システムの設定値に依存します。

vbroker.se.xxx.scm.yyy.listener.socketLinger
0
VisiBrokerが使用するTCP/IPコネクションの設定をします。設定値については，各プラットフォームのsetsockopt(2)を参照してください。

vbroker.se.xxx.scm.yyy.listener.keepAlive
true
VisiBrokerが使用するTCP/IPコネクションの設定をします。設定値については，各プラットフォームのsetsockopt(2)を参照してください。

vbroker.se.xxx.scm.yyy.dispatcher.type
ThreadPool
サーバコネクションマネージャに使用するスレッドディスパッチャの種別です。

vbroker.se.xxx.scm.yyy.dispatcher.threadMin
0
サーバコネクションマネージャが生成できるスレッド数の下限です。

vbroker.se.xxx.scm.yyy.dispatcher.threadMax
0
サーバコネクションマネージャが生成できるスレッド数の上限です。デフォルト値の0は，生成できるスレッド数に上限がないことを表します。

vbroker.se.xxx.scm.yyy.dispatcher.threadMaxIdle
300
アイドルなスレッドをデストラクトするまでのタイムアウトを秒数で指定します。0を指定した場合は，デフォルトの300秒となります。

vbroker.se.xxx.scm.yyy.dispatcher.threadStackSize
デフォルトでは，ORBは設定しません。
スレッドスタックのサイズです。

35.13　双方向通信をサポートするプロパティ

双方向通信をサポートしているプロパティを次の表に示します。

注

これらのプロパティが評価されるのは，SCMが生成されるときの一度だけです。SCMのexportBiDirプロパティとimportBiDirプロパティには，enableBiDirプロパティで優先順位が設定されます。つまり，これらのプロパティに矛盾する値が設定された場合は，SCM固有のプロパティが有効になります。そのため，enableBiDirプロパティをグローバルに設定して，個々のSCMで双方向性を無効にできます。

表35-12　双方向通信をサポートするプロパティ（C++）

プロパティ | デフォルト | 説明
vbroker.orb.enableBiDir | none | 双方向コネクションを選択して確立できます。クライアントにvbroker.orb.enableBiDir=clientを設定し，サーバにvbroker.orb.enableBiDir=serverを設定した場合は，ゲートキーパーのvbroker.orb.enableBiDirの値でコネクションの状態が決まります。このプロパティの値は，server，client，both，またはnoneです。
vbroker.se.<se>.scm.<scm>.manager.exportBiDir | デフォルトでは，ORBは設定しません。 | クライアント側プロパティです。trueを設定すると，指定したサーバエンジンの双方向コールバックPOAを生成できるようになります。falseを設定すると，指定したサーバエンジンの双方向コールバックPOAを生成できなくなります。
vbroker.se.<se>.scm.<scm>.manager.importBiDir | デフォルトでは，ORBは設定しません。 | サーバ側プロパティです。trueを設定すると，リクエストをクライアントに送信するために，クライアントによってすでに確立されたコネクションをサーバ側で再使用できます。falseを設定した場合は，再使用できません。

付録

＜この付録の構成＞

付録A　このマニュアルの参考情報

付録A　このマニュアルの参考情報

このマニュアルを読むに当たっての参考情報を示します。

＜この節の構成＞

付録A.1　関連マニュアル

付録A.2　このマニュアルでの表記

付録A.3　英略語

付録A.1　関連マニュアル

関連マニュアルを次に示します。必要に応じてお読みください。

なお，CORBAの仕様の詳細については，「The Common Object Request Broker: Architecture and Specification」を参照してください。

付録A.2　このマニュアルでの表記

このマニュアルでは，製品名を次のように表記しています。

表記 | 製品名
AIX | AIX 5L V5.3
AIX V6.1
AIX V7.1
Borland Enterprise Server VisiBroker | Borland(R) Enterprise Server VisiBroker(R)
HP-UX | HP-UX 11i V2
HP-UX 11i V3 (IPF)
IPF | Itanium(R) Processor Family
Java | Java(TM)
JavaVM | Java(TM) Virtual Machine
Linux | Red Hat Enterprise Linux(R) AS 4
Red Hat Enterprise Linux(R) AS 4 (IPF)
Red Hat Enterprise Linux(R) ES 4
Red Hat Enterprise Linux(R) ES 4 (IPF)
Red Hat Enterprise Linux(R) 5
Red Hat Enterprise Linux(R) 5 (IPF)
Red Hat Enterprise Linux 5.1
Red Hat Enterprise Linux 6.1
Solaris | Solaris 9
Solaris 10
VisiBroker | Borland(R) Enterprise Server VisiBroker(R)
VisiBroker 3.x | VisiBroker Version 3.0（xは0以上の整数）
VisiBroker 4.x | VisiBroker Version 4.0（xは0以上の整数）
VisiBroker 5.x | VisiBroker Version 5.0（xは0以上の整数）

AIX，HP-UX，LinuxおよびSolarisを総称してUNIXと表記しています。

このマニュアルでは，ご使用になるプラットフォームごとに説明が異なる場合，製品名称を次のように表記しています。

表記 | 意味
（UNIX） | AIX，HP-UX，LinuxおよびSolarisのUNIXプラットフォームに該当
（Windows） | Windows Server 2003，Windows XP，Windows VistaおよびWindows Server 2008のWindowsプラットフォームに該当

付録A.3　英略語

このマニュアルで使用する英略語を次に示します。

英略語 | 英字での表記
API | Application Programming Interface
BOA | Basic Object Adapter
CORBA | Common Object Request Broker Architecture
DII | Dynamic Invocation Interface
DSI | Dynamic Skeleton Interface
EJB | Enterprise Java Beans(TM)
GIOP | General Inter -ORB Protocol
GUI | Graphical User Interface
HTTP | Hyper Text Transport Protocol
IDL | Interface Definition Language
IEEE | Institute of Electrical and Electronics Engineers
IIOP | Internet Inter-ORB Protocol
IOR | Interoperable Object Reference
IP | Internet Protocol
IPC | Inter Processor Communication
IR | Interface Repository
J2EE | Java(TM) 2 Platform, Enterprise Edition
JAAS | Java(TM) Authentication and Authorization Service
JDK | Java(TM) Development Kit
JSSE | Java Secure Socket Extension
LIOP | Local Inter-ORB Protocol
NDI | Netscape Digital Identity
OAD | Object Activation Daemon
OBV | Object by Value
OMG | Object Management Group
ORB | Object Request Broker
OS | Operating System
POA | Portable Object Adapter
QoP | Quality of Protection
QoS | Quality of Service
RMI | Remote Method Invocation
SSL | Secure Socket Layer
TCP/IP | Transmission Control Protocol /Internet Protocol
TII | Time-Independent Invocation
URL | Uniform Resource Locator
VM | Virtual Machine

索引

[記号]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｈ][Ｉ][Ｊ][Ｋ][Ｌ][Ｍ][Ｎ][Ｏ][Ｐ][Ｑ][Ｒ][Ｓ][Ｔ][Ｕ][Ｖ][Ｗ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(記号)

_add_ref

_add_ref

_clone

_create_request

_create_request

_default_POA

_desc

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_duplicate

_forany

_get_client_policy

_get_interface

_get_interface

_get_policy

_get_policy_overrides

_hash

_hash

_initクラス例

_interface_name

_is_a

_is_a

_is_a

_is_bound

_is_bound

_is_equivalent

_is_equivalent

_is_local

_is_local

_is_persistent

_is_persistent

_is_remote

_is_remote

_nil

_nil

_nil

_nil

_nil

_nil

_nil

_nil

_nil

_nil

_nil

_nil

_non_existent

_non_existent

_primary_interface

_ref_count

_release

_release

_release

_release

_release

_release

_release

_release

_release

_release

_release

_release

_release

_remove_ref

_remove_ref

_repository_id

_repository_id

_request

_request

_resolve_reference

_resolve_reference

_set_policy_override

_slice型

_slice型の生成

_target

_tie

_validate_connection

_var

-ORBagent

-ORBagentAddr

-ORBagentPort

-ORBconnectionMax

-ORBconnectionMaxIdle

-ORBDefaultInitRef

-ORBInitRef

-ORBir_ior

-ORBir_name

-ORBnullstring

-ORBrcvbufsize

-ORBsendbufsize

-ORBshmsize

-ORBtcpNoDelay

<interface_name>

<type>SeqSeqのメソッド

<type>Seqのメソッド

(英字)

(Ａ)

absolute_name

absolute_name

abstract_base_values

abstract_base_values

AbstractInterfaceDef

AbstractInterfaceDefのメソッド

abstractインタフェース

access

activable

activate

activate

activate

activate_object

activate_object

activate_object_with_id

activate_object_with_id

activation_policy

activation_policy

activation_state

ActivationImplDef

ActivationImplDefのメソッド

Activator

activator_obj

Activatorのメソッド

ACTIVE

ACTIVE

ActiveObjectLifeCycleInterceptor

ActiveObjectLifeCycleInterceptor

ActiveObjectLifeCycleInterceptorManager

ActiveObjectLifeCycleInterceptorManager

ActiveObjectLifeCycleInterceptorManagerのメソッド

ActiveObjectLifeCycleInterceptorManagerのメソッド

ActiveObjectLifeCycleInterceptorのメソッド

ActiveObjectLifeCycleInterceptorのメソッド

adapter_id

adapter_id

adapter_manager_state_changed

adapter_state_changed

adapter_template

adapter_template

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add

add_client_request_interceptor

add_client_request_interceptor

add_consume

add_consume

add_in_arg

add_in_arg

add_inout_arg

add_inout_arg

add_ior_component

add_ior_component

add_ior_component_to_profile

add_ior_component_to_profile

add_ior_interceptor

add_ior_interceptor

add_item

add_item

add_item_consume

add_named_in_arg

add_named_inout_arg

add_named_out_arg

add_out_arg

add_out_arg

add_reply_service_context

add_reply_service_context

add_request_service_context

add_request_service_context

add_server_request_interceptor

add_server_request_interceptor

add_server_request_interceptor

add_server_request_interceptor

add_value

add_value

add_value_consume

addClientObjectWrapperClass

addServerObjectWrapperClass

Agent

Agent

agent_hostname

Agentのメソッド

Agentのメソッド

AliasDef

AliasDef

AliasDefのメソッド

AliasDefのメソッド

all_agent_locations

all_agent_locations

all_available

all_available_descs

all_instances

all_instances

all_instances_descs

all_instances_descs

all_replica

all_replica

all_replica_descs

all_replica_descs

all_repository_ids

all_repository_ids

allocate_slot_id

allocate_slot_id

allocbuf

Any

Any

Any型のマッピング

Anyの挿入メソッド

Anyの抽出メソッド

Anyのメソッド

Anyのメソッド

ARG_IN

ARG_INOUT

ARG_INOUTの変数

ARG_INの変数

ARG_OUT

ARG_OUTの変数

args

args

argument

argument

arguments

arguments

arguments

arguments

arguments

arguments

arguments

arguments

array

array_slice型

ArrayDef

ArrayDef

ArrayDefのメソッド

ArrayDefのメソッド

assign

assign

AttributeDef

AttributeDef

AttributeDefのメソッド

AttributeDefのメソッド

AttributeDescription

AttributeDescription

AttributeDescription

AttributeDescriptionの変数

AttributeDescriptionのメソッド

AttributeDescriptionのメンバ

AttributeMode

AttributeMode

AttributeModeの値

AttributeModeの要素

(Ｂ)

BAD_CONTEXT

BAD_INV_ORDER

BAD_OPERATION

BAD_PARAM

BAD_TYPECODE

base_interfaces

base_interfaces

base_interfaces

base_value

base_value

bind

bind

bind

bind

bind

bind

bind

bind_context

bind_context

bind_failed

bind_failed

bind_new_context

bind_new_context

bind_succeeded

bind_succeeded

Binding

Binding

BindingIterator

BindingIterator

BindingIteratorのメソッド

BindingIteratorのメソッド

BindingList

BindingList

BindInterceptor

BindInterceptor

BindInterceptorManager

BindInterceptorManager

BindInterceptorManagerのメソッド

BindInterceptorManagerのメソッド

BindInterceptorのメソッド

BindInterceptorのメソッド

boolean

Borland Enterprise Server VisiBrokerプロパティ（C++）

Borland Enterprise Server VisiBrokerプロパティ（Java）

bound

bound

bound

bound

bound

buffer

buffer

byte_order

byte_order

(Ｃ)

C++でのIDL定数の値の生成

CancelRequestHeader

CancelRequestHeaderのメンバ

ChainUntypedObjectWrapperFactory

ChainUntypedObjectWrapperFactory

ChainUntypedObjectWrapperFactoryのメソッド

ChainUntypedObjectWrapperFactoryのメソッド

change_implementation

change_implementation

char

CLASSPATH

CLASSPATH

clear

clear

ClientRequestInfo

ClientRequestInfo

ClientRequestInfoのメソッド

ClientRequestInfoのメソッド

ClientRequestInterceptor

ClientRequestInterceptor

ClientRequestInterceptor

ClientRequestInterceptor

ClientRequestInterceptorManager

ClientRequestInterceptorManager

ClientRequestInterceptorManagerのメソッド

ClientRequestInterceptorManagerのメソッド

ClientRequestInterceptorのメソッド

ClientRequestInterceptorのメソッド

ClientRequestInterceptorのメソッド

ClientRequestInterceptorのメソッド

Closure

Codec

Codec

codec_factory

codec_factory

CodecFactory

CodecFactory

CodecFactoryのメソッド

CodecFactoryのメソッド

CodecFactoryのメンバ

CodecFactoryのメンバ

Codecのメソッド

Codecのメソッド

Codecのメンバ

Codecのメンバ

CODESET_INCOMPATIBLE

com.inprise.vbroker.CORBA.Objectのメソッド

COMM_FAILURE

compare

completed

CompletionStatus

CompletionStatus

CompletionStatusのメソッド

CompletionStatusのメンバ

CompletionStatusのメンバ

component_count

components

components_established

concrete_base_type

conn_closed

conn_established

connect

connection_count

connection_max

ConnEventListeners

connID

ConnInfo

ConnInfoのメンバ

ConstantDef

ConstantDef

ConstantDefのメソッド

ConstantDefのメソッド

ConstantDescription

ConstantDescription

ConstantDescription

ConstantDescriptionの変数

ConstantDescriptionのメソッド

ConstantDescriptionのメンバ

Contained

Contained

contained_object

ContainedPackage.Description

ContainedPackage.Descriptionの変数

ContainedPackage.Descriptionのメソッド

Containedのメソッド

Containedのメソッド

Container

Container

ContainerPackage.Description

ContainerPackage.Descriptionの変数

ContainerPackage.Descriptionのメソッド

Containerのメソッド

Containerのメソッド

containing_repository

containing_repository

content_type

content_type

contents

contents

Context

Context

context_name

context_name

ContextList

ContextList

ContextListのメソッド

ContextListのメソッド

contexts

contexts

contexts

contexts

contexts

contexts

Contextのメソッド

Contextのメソッド

copy

copy

copy

CORBA

CORBA::Any

CORBA::ContextList

CORBA::ExceptionList

CORBA::INV_POLICY

CORBA::is_nil

CORBA::MarshalInBuffer

CORBA::MarshalInBufferのコンストラクタとデストラクタ

CORBA::MarshalInBufferのメソッド

CORBA::MarshalOutBuffer

CORBA::MarshalOutBufferのコンストラクタとデストラクタ

CORBA::MarshalOutBufferのメソッド

CORBA::Object

CORBA::Objectに対するVisiBrokerの拡張機能

CORBA::Objectのメソッド

CORBA::Objectのメソッド

CORBA::ORBに対するVisiBrokerの拡張機能

CORBA::ORBのメソッド

CORBA::PolicyCurrent

CORBA::PolicyError

CORBA::PolicyManager

CORBA::PolicyManagerのメソッド

CORBA::REBIND

CORBA::release

CORBA::StringSequence

CORBAのメソッド

count

count

count

count

count

count

count

count

create

create

create

create

create

create

create

create

create_abstract_interface

create_abstract_interface

create_alias

create_alias

create_alias_tc

create_alias_tc

create_any

create_array

create_array

create_array_tc

create_array_tc

create_attribute

create_attribute

create_attribute

create_attribute

create_attribute

create_child

create_child

create_codec

create_codec

create_constant

create_constant

create_context

create_context

create_context_list

create_CreationImplDef

create_CreationImplDef

create_dyn_any

create_dyn_any

create_dyn_any

create_dyn_any_from_type_code

create_dyn_any_from_type_code

create_enum

create_enum

create_enum_tc

create_enum_tc

create_environment

create_environment

create_exception

create_exception

create_exception_tc

create_exception_tc

create_fixed

create_fixed

create_id_assignment_policy

create_id_assignment_policy

create_id_uniqueness_policy

create_id_uniqueness_policy

create_implicit_activation_policy

create_implicit_activation_policy

create_input_stream

create_input_stream

create_interface

create_interface

create_interface_tc

create_interface_tc

create_lifespan_policy

create_lifespan_policy

create_list

create_list

create_module

create_module

create_named_value

create_named_value

create_native

create_operation

create_operation

create_operation

create_operation

create_operation

create_operation_list

create_operation_list

create_output_stream

create_output_stream

create_POA

create_POA

create_policy

create_policy

create_policy

create_policy

create_recursive_sequence_tc

create_recursive_sequence_tc

create_reference

create_reference

create_reference_with_id

create_reference_with_id

create_request_processing_policy

create_request_processing_policy

create_sequence

create_sequence

create_sequence_tc

create_sequence_tc

create_servant_retention_policy

create_servant_retention_policy

create_string

create_string

create_string_tc

create_string_tc

create_struct

create_struct

create_struct_tc

create_struct_tc

create_thread_policy

create_thread_policy

create_union

create_union

create_union_tc

create_union_tc

create_value

create_value

create_value_box

create_value_box

create_value_member

create_value_member

create_wstring

create_wstring

create_wstring_tc

create_wstring_tc

CreationImplDef

CreationImplDef

CreationImplDef属性から実行コマンドへの変換例

CreationImplDefのメソッド

CreationImplDefのメンバ

ctx

ctx

ctx

ctx

curoff

curoff

Current

Current

current_component

current_component

current_environment

current_factory

current_factory

current_member_kind

current_member_kind

current_member_name

current_member_name

Currentのメソッド

Currentのメソッド

(Ｄ)

data

DATA_CONVERSION

deactivate

deactivate

deactivate

deactivate_object

deactivate_object

decode

decode

decode_value

decode_value

def_kind

def_kind

default_index

default_index

DeferBindPolicy

defined_in

defined_in

defined_in属性

DefinitionKind

DefinitionKind

DefinitionKindの定数値（C++）

DefinitionKindの定数値（Java）

DefinitionKindのメソッド

DefinitionKindの列挙値

DefinitionKindの列挙値

delete_values

delete_values

Desc

Desc

describe

describe

describe_contents

describe_contents

describe_interface

describe_interface

describe_interface

describe_value

describe_value

Description

Description

Description

Descriptionのメンバ

Descのコンストラクタ

Descの変数

Descのメソッド

Descのメンバ

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy

destroy_on_unregister

destroy_on_unregister

digits

digits

discard_requests

discard_requests

DISCARDING

DISCARDING

discriminator_kind

discriminator_kind

discriminator_type

discriminator_type

discriminator_type

discriminator_type

discriminator_type_def

discriminator_type_def

DuplicateName

DuplicateName

DynamicImplementation

DynamicImplementation

DynamicImplementationのメソッド

DynamicImplementationのメソッド

DynAny

DynAny

DynAnyFactory

DynAnyFactory

DynAnyFactoryのメソッド

DynAnyFactoryのメソッド

DynAnyの挿入メソッド

DynAnyの挿入メソッド

DynAnyの抽出メソッド

DynAnyの抽出メソッド

DynAnyのメソッド

DynAnyのメソッド

DynArray

DynArray

DynArrayのメソッド

DynArrayのメソッド

DynEnum

DynEnum

DynEnumのメソッド

DynEnumのメソッド

DynSequence

DynSequence

DynSequenceのメソッド

DynSequenceのメソッド

DynStruct

DynStruct

DynStructのメソッド

DynStructのメソッド

DynUnion

DynUnion

DynUnionのメソッド

DynUnionのメソッド

(Ｅ)

effective_profile

effective_profile

effective_target

effective_target

element_type

element_type

element_type

element_type

element_type_def

element_type_def

element_type_def

element_type_def

element_type_def

encode

encode

encode_value

encode_value

Encoding

Encoding

Encodingのメンバ

Encodingのメンバ

enum

EnumDef

EnumDef

EnumDefのメソッド

EnumDefのメソッド

enumのHolderクラス

enumのJavaにマッピングされたIDL

env

env

env

env

Environment

Environment

Environmentのメソッド

Environmentのメソッド

equal

equal

equal

equal

equivalent

establish_components

establish_components

etherealize

etherealize

EventQueueManager

EventQueueManagerのメソッド

except

exception

Exception

exception

exception_occurred

exception_occurred

exception_occurred

exception_occurred

exception_occurred

exception_occurred

ExceptionDef

ExceptionDef

ExceptionDefのメソッド

ExceptionDefのメソッド

ExceptionDescription

ExceptionDescription

ExceptionDescription

ExceptionDescriptionの変数

ExceptionDescriptionのメソッド

ExceptionDescriptionのメンバ

ExceptionList

ExceptionList

ExceptionList

ExceptionListのメソッド

ExceptionListのメソッド

exceptions

exceptions

exceptions

exceptions

exceptions

exceptions

ExclusiveConnectionPolicy

exportObject

ExtendedClosure

ExtendedClosure

ExtendedNamingContextFactory

ExtendedNamingContextFactory

ExtendedNamingContextFactoryのメソッド

ExtendedNamingContextFactoryのメソッド

extract

(Ｆ)

Fail

Fail

FailReason

Failのメンバ

Fail変数

find_POA

find_POA

FixedDef

FixedDef

FixedDefのメソッド

FixedDefのメソッド

flags

flags

force_register_url

format

format

FormatMismatch

FormatMismatch

forward_reference

forward_reference

forward_reference

ForwardRequest

ForwardRequest

ForwardRequest

ForwardRequest

ForwardRequestException

ForwardRequestException

ForwardRequestExceptionの変数

ForwardRequestExceptionの変数

ForwardRequestの変数

ForwardRequestの変数

ForwardRequestのメソッド

ForwardRequestのメソッド

FREE_MEM

freebuf

freebuf_elems

from_any

from_any

from_any

from_int

full_poa_name

full_poa_name

FullInterfaceDescription

FullInterfaceDescription

FullInterfaceDescriptionのメンバ

FullValueDescription

FullValueDescription

FullValueDescription

FullValueDescriptionの変数

FullValueDescriptionの変数

FullValueDescriptionのメソッド

(Ｇ)

generated_command

generated_environment

get

get_as_string

get_as_string

get_as_ulong

get_as_ulong

get_client_policy

get_cluster_manager

get_cluster_manager

get_compact_typecode

get_default_context

get_default_context

get_discriminator

get_discriminator

get_effective_component

get_effective_component

get_effective_policy

get_effective_policy

get_elements

get_elements

get_elements

get_elements

get_elements_as_dyn_any

get_elements_as_dyn_any

get_implementation

get_implementation

get_length

get_length

get_listeners

get_manager

get_manager

get_members

get_members

get_members_as_dyn_any

get_members_as_dyn_any

get_next_response

get_next_response

get_object_id

get_object_id

get_POA

get_POA

get_policy

get_policy_overrides

get_policy_overrides

get_policy_overrides

get_primitive

get_primitive

get_primitive_tc

get_reply_service_context

get_reply_service_context

get_request_policy

get_request_policy

get_request_service_context

get_request_service_context

get_response

get_response

get_servant

get_servant

get_servant_manager

get_servant_manager

get_server_policy

get_server_policy

get_slot

get_slot

get_slot

get_slot

get_state

get_state

get_status

get_status

get_status_all

get_status_all

get_status_interface

get_status_interface

get_values

get_values

getCString

getPropertyManager

getWString

GIOP_version

(Ｈ)

has_no_active_member

has_no_active_member

hash

Helper

Helper

Helperクラス

Helperクラス

Helperのメソッド

hold_requests

hold_requests

Holder

Holder

Holder

Holderクラス

Holderクラス

Holderのメソッド

HOLDING

HOLDING

host

host_name

(Ｉ)

id

id

id

id

id

id

id

id

id_to_reference

id_to_reference

id_to_servant

id_to_servant

idl2cpp

idl2ir

idl2ir

idl2java

idl2javaコンパイラで生成されるクラス

IDL array

IDL enum

IDL sequence

IDL struct

IDLType

IDLType

IDLTypeのメソッド

IDLTypeのメソッド

IDL union

IDL unionのC++クラスへのマッピング

IDL型Any

IDL型拡張

IDL可変長シーケンス

IDL可変長シーケンスのC++クラスへのマッピング

IDLからC++言語へのマッピング

IDLからJavaへのマッピング

IDL基本型マッピング（C++）

IDLコンパイラで生成されるクラス

IDL内の可変長構造体定義

IDL内の固定長構造体定義

IDLの型定義

IDLの型定義のC++へのマッピング

IDLのトップレベル定義

IDL配列定義

IDL配列のC++配列へのマッピング

IDLモジュール

IDLモジュール定義

IIOP.ProfileBody

IIOP.ProfileBodyのコンストラクタ

IIOP.ProfileBodyの変数

iiop_locator

iiop_version

IMP_LIMIT

impl

impl_is_down

impl_is_down

impl_is_ready

impl_is_ready

ImplementationDef

ImplementationDef

ImplementationStatus

ImplementationStatus

ImplementationStatusのメンバ

INACTIVE

INACTIVE

incarnate

incarnate

init

init

INITIALIZE

initializers

initializers

InputStream

InputStreamからデータを読み出すためのメソッド

InputStreamのメソッド

insert

instance

instance_name

instance_name

Interceptor

Interceptor

InterceptorManager

InterceptorManager

InterceptorManagerControl

InterceptorManagerControl

InterceptorManagerControlのメソッド

InterceptorManagerControlのメソッド

Interceptorのメソッド

Interceptorのメソッド

interface

InterfaceDef

InterfaceDef

InterfaceDefPackage.FullInterfaceDescription

InterfaceDefPackage.FullInterfaceDescriptionの変数

InterfaceDefPackage.FullInterfaceDescriptionのメソッド

InterfaceDefのメソッド

InterfaceDefのメソッド

InterfaceDescription

InterfaceDescription

InterfaceDescription

InterfaceDescriptionの変数

InterfaceDescriptionのメソッド

InterfaceDescriptionのメンバ

interfaceのHolderクラス

INTERNAL

INTF_REPOS

INV_FLAG

INV_IDENT

INV_OBJREF

INV_POLICY

INVALID_TRANSACTION

InvalidName

InvalidName

InvalidName

InvalidTypeForEncoding

InvalidTypeForEncoding

invoke

invoke

invoke

invoke

inパラメタのマッピング

IOP.IORValue

IOP.IORValueの変数

IOP.IORValueのメソッド

IOP.ServiceContext

IOP.ServiceContextのコンストラクタ

IOP.ServiceContextの変数

IOP.TaggedProfile

IOP.TaggedProfileのコンストラクタ

IOP.TaggedProfileの変数

IOPおよびIIOPのインタフェースとクラス（C++）

IOPおよびIIOPのインタフェースとクラス（Java）

IOR

IORCreationInterceptor

IORCreationInterceptor

IORCreationInterceptorManager

IORCreationInterceptorManager

IORCreationInterceptorManagerのメソッド

IORCreationInterceptorManagerのメソッド

IORCreationInterceptorのメソッド

IORCreationInterceptorのメソッド

IORInfo

IORInfo

IORInfoExt

IORInfoExt

IORInfoExtのメソッド

IORInfoExtのメソッド

IORInfoのメソッド

IORInfoのメソッド

IORInterceptor

IORInterceptor

IORInterceptorのメソッド

IORInterceptorのメソッド

IORインタセプタ

IORインタセプタ

IORテンプレート

IORテンプレート

IORのメンバ

ipaddress

ir2idl

ir2idl

IRObject

IRObject

IRObjectのメソッド

IRObjectのメソッド

is_a

is_a

is_a

is_a

is_a

is_abstract

is_abstract

is_abstract

is_available

is_custom

is_custom

is_permanent

is_truncatable

is_truncatable

item

item

item

item

item

item

(Ｊ)

java2idl

java2iiop

Java null

Java VMの指定

Java言語の予約キーワード

JDKでのORBの定義

JDKでのORBメソッド

(Ｋ)

kind

kind

kind

kind

(Ｌ)

LD_LIBRARY_PATH

LD_LIBRARY_PATH

length

length

length

length

length

length

length

length

length

length

LIBPATH

LIBPATH

list

list

list_all_roots

list_all_roots

list_initial_services

list_initial_services

LocalInterfaceDef

locate

locate_status

LocateReplyHeader

LocateReplyHeaderのメンバ

LocateRequestHeader

LocateRequestHeaderのメンバ

Location

Locationのメンバ

lookup

lookup

lookup_id

lookup_id

lookup_implementation

lookup_interface

lookup_name

lookup_name

lookup_value_factory

(Ｍ)

magic

major_version

major_version

managedData

manager_id

manager_id

MARSHAL

matchesTemplate

maximum

maximum

member

member

member_count

member_count

member_kind

member_kind

member_label

member_label

member_name

member_name

member_name

member_name

member_type

member_type

member_visibility

members

members

members

members

members

members

members

members

message_size

message_type

MessageHeader

MessageHeaderのメンバ

Messaging.RelativeRequestTimeoutPolicy

Messaging.RelativeRoundtripTimeoutPolicy

Messaging::RebindPolicy

Messaging::RelativeRequestTimeoutPolicy

Messaging::RelativeRoundtripTimeoutPolicy

Messaging::SyncScopePolicy

minor_version

minor_version

mode

mode

mode

mode

mode

mode

ModuleDef

ModuleDef

ModuleDescription

ModuleDescription

ModuleDescription

ModuleDescriptionの変数

ModuleDescriptionのメソッド

ModuleDescriptionのメンバ

module句

move

move

(Ｎ)

name

name

name

name

name

name

name

name

NamedValue

NamedValue

NamedValueのメソッド

NamedValueのメソッド

NameValuePair

NameValuePair

NameValuePairのコンストラクタ

NameValuePairの変数

NamingContext

NamingContext

NamingContextExt

NamingContextExt

NamingContextExtのメソッド

NamingContextExtのメソッド

NamingContextFactory

NamingContextFactory

NamingContextFactoryのメソッド

NamingContextFactoryのメソッド

NamingContextのメソッド

NamingContextのメソッド

narrow

narrow

NativeDef

NativeDef

new_context

new_context

new_encapsulation

new_encapsulation

next

next

next_n

next_n

next_one

next_one

NO_IMPLEMENT

NO_MEMORY

NO_PERMISSION

NO_REBIND

NO_REBIND

NO_RECONNECT

NO_RECONNECT

NO_RESOURCES

NO_RESPONSE

NVList

NVList

NVListのメソッド

NVListのメソッド

(Ｏ)

OAD

OAD

OADのメソッド

OADのメソッド

OADプロパティ

OADプロパティ

OBJ_ADAPTER

Object

Object

Object

object_id

object_id

object_key

object_name

object_name

OBJECT_NOT_EXIST

object_to_string

object_to_string

ObjectId_to_string

ObjectStatus

ObjectStatusList

ObjectStatusListのメソッド

ObjectStatusのメンバ

ObjectWrapper

Objectの継承

Objectのメソッドの継承

objRef

octet

OMGによるORBの定義

op_name

operation

operation

operation

operation

operation

operation

operation

operation_context

operation_context

OperationDef

OperationDef

OperationDefのメソッド

OperationDefのメソッド

OperationDescription

OperationDescription

OperationDescription

OperationDescriptionの変数

OperationDescriptionのメソッド

OperationDescriptionのメンバ

OperationMode

OperationMode

OperationModeの値

Operations

Operations

Operationsクラス

operator

operator

operator

operator

ORB

ORB

ORB.init()の使用例

ORB.init( )メソッド

ORB.initオプション（Java）

ORB::create_environment

orb_id

orb_id

ORB_init

ORB_init

ORB_init()メソッド

ORB_init()メソッド定義

ORB_initialized

ORB_initオプション（C++）

ORB_shutdown

ORBagentAddr

ORBagentAddrFile

ORBagentNoFailOver

ORBagentPort

ORBalwaysProxy

ORBalwaysTunnel

ORBconnectionMax

ORBconnectionMaxIdle

ORBdebug

ORBDefaultInitRef

ORBdisableAgentCache

ORBdisableGatekeeperCallbacks

ORBdisableLocator

ORBELINE

ORBgatekeeperIOR

ORBgcTimeout

ORBInitializer

ORBInitializer

ORBInitializerのメソッド

ORBInitializerのメソッド

ORBInitInfo

ORBInitInfo

ORBInitInfoのメソッド

ORBInitInfoのメソッド

ORBInitInfoのメンバ

ORBInitRef

ORBmbufSize

ORBnullString

ORBwarn

ORBオプションの設定方法

ORBクラスのクライアント使用例

ORBの継承

ORBの初期化と終了

ORBプロパティ

ORBプロパティ

org.omg.CORBA.Objectの定義

org.omg.CORBA.Objectのメソッド

org.omg.CORBA.Objectのメソッド

original_type_def

original_type_def

original_type_def

original_type_def

OSAGENT_ADDR

OSAGENT_ADDR

OSAGENT_ADDR_FILE

OSAGENT_CLIENT_HANDLER_PORT

OSAGENT_LOCAL_FILE

OSAGENT_PORT

OSAGENT_PORT

osagent（スマートエージェント）プロパティ

osagent（スマートエージェント）プロパティ

OutputStream

OutputStreamに特定の型を書き込むためのメソッド

OutputStreamのメソッド

outパラメタおよびinoutパラメタのHolder

(Ｐ)

Package

Parameter

Parameter

ParameterDescription

ParameterDescription

ParameterDescription

ParameterDescriptionの変数

ParameterDescriptionのメソッド

ParameterDescriptionのメンバ

ParameterList

ParameterMode

ParameterMode

ParameterModeの値

Parameterのメンバ

Parameterのメンバ

params

params

params

parent

parent

PATH

PATH

path_name

path_name

perform_work

perform_work

PERSIST_STORE

POA

POA

POA

POALifeCycleInterceptor

POALifeCycleInterceptor

POALifeCycleInterceptorManager

POALifeCycleInterceptorManager

POALifeCycleInterceptorManagerのメソッド

POALifeCycleInterceptorManagerのメソッド

POALifeCycleInterceptorのメソッド

POALifeCycleInterceptorのメソッド

POATie

POATie

POATie

POATieクラス

POAクラス

POAプロパティ

POAマネージャの状態遷移

Policy

PolicyCurrent

PolicyFactory

PolicyFactory

PolicyFactoryのメソッド

PolicyFactoryのメソッド

PolicyManager

PolicyManagerのメソッド

poll_next_response

poll_next_response

poll_response

poll_response

port

port

PortableRemoteObject

PortableRemoteObjectのコンストラクタ

PortableRemoteObjectのメソッド

PortableServer

PortableServer.AdapterActivator

PortableServer.AdapterActivatorのメソッド

PortableServer.Current

PortableServer.Currentのメソッド

PortableServer.ForwardRequest

PortableServer.POA

PortableServer.POAManager

PortableServer.POAManagerPackage.State

PortableServer.POAManagerPackage.Stateのメンバ

PortableServer.POAManagerのメソッド

PortableServer.POAのメソッド

PortableServer.ServantActivator

PortableServer.ServantActivatorのメソッド

PortableServer.ServantLocator

PortableServer.ServantLocatorのメソッド

PortableServer.ServantManager

PortableServer::AdapterActivator

PortableServer::AdapterActivatorのメソッド

PortableServer::Current

PortableServer::Currentのメソッド

PortableServer::ForwardRequest

PortableServer::ForwardRequestのメソッド

PortableServer::POA

PortableServer::POAManager

PortableServer::POAManager::State

PortableServer::POAManager::Stateのメソッド

PortableServer::POAManagerのメソッド

PortableServer::POAのメソッド

PortableServer::RefCountServantBase

PortableServer::RefCountServantBaseのメソッド

PortableServer::ServantActivator

PortableServer::ServantActivatorのメソッド

PortableServer::ServantBase

PortableServer::ServantBaseのメソッド

PortableServer::ServantLocator

PortableServer::ServantLocatorのメソッド

PortableServer::ServantManager

PortableServerのメソッド

post_init

post_init

post_method

post_method

postinvoke

postinvoke

postinvoke

postinvoke

postinvoke_postmarshal

postinvoke_postmarshal

postinvoke_premarshal

postinvoke_premarshal

pre_init

pre_init

pre_method

pre_method

preinvoke

preinvoke

preinvoke

preinvoke

preinvoke_postmarshal

preinvoke_postmarshal

preinvoke_premarshal

preinvoke_premarshal

PrimitiveDef

PrimitiveDef

PrimitiveDefのメソッド

PrimitiveDefのメソッド

PrimitiveKind

PrimitiveKind

PrimitiveKindの定数値（C++）

PrimitiveKindの定数値（Java）

PrimitiveKindのメソッド

Principal

profile_data

ProfileBody

ProfileBody

ProfileBodyのメンバ

profiles

property

put

putCString

(Ｑ)

QoSExt::DeferBindPolicy

QoSExt::ExclusiveConnectionPolicy

QoSExt::RelativeConnectionTimeoutPolicy

QoSインタフェースとクラス（C++）

QoSインタフェースとクラス（Java）

QoS例外

QoS例外

(Ｒ)

read

read_value

reason

rebind

REBIND

rebind

rebind_context

rebind_context

RebindForwardPolicy

RebindPolicy

receive_exception

receive_exception

receive_other

receive_other

receive_reply

receive_reply

receive_request

receive_request

receive_request_service_contexts

receive_request_service_contexts

received_exception

received_exception

received_exception_id

received_exception_id

ref

reference_to_id

reference_to_id

reference_to_servant

reference_to_servant

reg_implementation

reg_implementation

reg_trigger

reg_trigger

register_initial_reference

register_initial_reference

register_listener

register_policy_factory

register_policy_factory

register_url

register_value_factory

RelativeConnectionTimeoutPolicy

release_flag

release_flag

remove

remove

remove

remove

remove

remove

remove

remove

remove

remove_stale_contexts

remove_stale_contexts

removeClientObjectWrapperClass

removeServerObjectWrapperClass

reply_status

reply_status

reply_status

ReplyHeader

ReplyHeaderのメンバ

Repository

Repository

repository_id

repository_id

repository_id

repository_id

Repositoryのメソッド

Repositoryのメソッド

Request

Request

request_id

request_id

RequestHeader

RequestHeaderのメンバ

RequestInfo

RequestInfo

RequestInfo

RequestInfoのメソッド

RequestInfoのメソッド

Requestのメソッド

Requestのメソッド

reset

reset

resolve

resolve

resolve_initial_references

resolve_initial_references

resolve_initial_references

resolve_str

resolve_str

Resolver

Resolverのメソッド

response_expected

response_expected

response_expected

result

result

result

result

result

result

result

result_def

result_def

return_value

return_value

rewind

rewind

rewind

rewind

RMI-IIOPプロパティ

RMIインタフェースとクラス（Java）

root_context

root_context

run

run

(Ｓ)

scale

scale

seek

seek

seekpos

seekpos

send_deferred

send_deferred

send_exception

send_exception

send_multiple_requests_deferred

send_multiple_requests_deferred

send_multiple_requests_oneway

send_multiple_requests_oneway

send_oneway

send_oneway

send_other

send_other

send_poll

send_reply

send_reply

send_request

send_request

sending_exception

sending_exception

Seq

SeqSeq

sequence

Sequence

SequenceDef

SequenceDef

SequenceDefのメソッド

SequenceDefのメソッド

sequenceのHolderクラス

servant_to_id

servant_to_id

servant_to_reference

servant_to_reference

SERVER_PER_METHOD

ServerRequest

ServerRequest

ServerRequestInfo

ServerRequestInfo

ServerRequestInfoのメソッド

ServerRequestInfoのメソッド

ServerRequestInterceptor

ServerRequestInterceptor

ServerRequestInterceptor

ServerRequestInterceptor

ServerRequestInterceptorManager

ServerRequestInterceptorManager

ServerRequestInterceptorManagerのメソッド

ServerRequestInterceptorManagerのメソッド

ServerRequestInterceptorのメソッド

ServerRequestInterceptorのメソッド

ServerRequestInterceptorのメソッド

ServerRequestInterceptorのメソッド

ServerRequestのメソッド

ServerRequestのメソッド

service_context

service_name

ServiceContext

set_as_string

set_as_string

set_as_ulong

set_as_ulong

set_discriminator

set_discriminator

set_elements

set_elements

set_elements

set_elements

set_elements_as_dyn_any

set_elements_as_dyn_any

set_exception

set_exception

set_length

set_length

set_members

set_members

set_members_as_dyn_any

set_members_as_dyn_any

set_one_value

set_one_value

set_policy_overrides

set_policy_overrides

set_policy_overrides

set_result

set_result

set_return_type

set_return_type

set_servant

set_servant

set_servant_manager

set_servant_manager

set_slot

set_slot

set_slot

set_slot

set_to_default_member

set_to_default_member

set_to_no_active_member

set_to_no_active_member

set_values

set_values

SHARED_SERVER

SHLIB_PATH

SHLIB_PATH

shutdown

shutdown

shutdown

Signatureクラス

state

state

status

string

string_alloc

string_free

string_to_object

string_to_object

string_to_ObjectId

String_varクラス

StringDef

StringDef

StringDefのメソッド

StringDefのメソッド

StringSequence

StringSequenceに関連するメソッド

StringSequenceのメソッド

struct

StructDef

StructDef

StructDefのメソッド

StructDefのメソッド

StructMember

StructMember

StructMember

StructMemberの変数

StructMemberのメソッド

StructMemberのメンバ

structのHolderクラス

structを含むIDL union

Stub

supported_interfaces

supported_interfaces

SYNC_NONE

SYNC_NONE

sync_scope

sync_scope

SYNC_WITH_SERVER

SYNC_WITH_SERVER

SYNC_WITH_TARGET

SYNC_WITH_TARGET

SYNC_WITH_TRANSPORT

SYNC_WITH_TRANSPORT

SyncScopePolicy

SyncScopeポリシーの値

SyncScopeポリシーの値

SystemException

SystemExceptionの属性

SystemExceptionのメソッド

(Ｔ)

tag

TaggedProfile

TaggedProfile

TaggedProfileのメンバ

target

target

target

target

target

target_is_a

target_is_a

target_most_derived_interface

target_most_derived_interface

TCKind

TCKind

TCKindのメソッド

the_activator

the_activator

the_name

the_name

the_parent

the_parent

the_POAManager

the_POAManager

the_policies

tieクラス

tieのメソッド

TIMOUT

to_any

to_any

to_any

to_name

to_name

to_string

to_string

to_url

to_url

toIOR

toString

toString

toStub

TPDIR

TRANSACTION_REQUIRED

TRANSACTION_ROLLEDBACK

TRANSIENT

TRANSPARENT

TRANSPARENT

TriggerDesc

TriggerDesc

TriggerDescのコンストラクタ

TriggerDescの変数

TriggerDescのメソッド

TriggerDescのメンバ

TriggerHandler

TriggerHandler

TriggerHandlerのメソッド

TriggerHandlerのメソッド

type

type

type

type

type

type

type

type

type

type

type

type

type

type_def

type_def

type_def

type_def

type_def

type_id

type_modifier

TypeCode

TypeCode

TypeCodeのコンストラクタ

TypeCodeのプロパティ

TypeCodeのメソッド

TypeCodeのメソッド

TypedefDef

TypedefDef

typedefのマッピング

typedef列のJava Helperクラスへのマッピング

TypeDescription

TypeDescription

TypeDescription

TypeDescriptionの変数

TypeDescriptionのメソッド

TypeDescriptionのメンバ

TypeMismatch

TypeMismatch

(Ｕ)

ULong id

unbind

unbind

unexportObject

Unicode文字列

union

union

union

UnionDef

UnionDef

UnionDefのメソッド

UnionDefのメソッド

UnionMember

UnionMember

UnionMember

UnionMemberの変数

UnionMemberのメソッド

UnionMemberのメンバ

unionでのメモリ管理

unionのHolderクラス

unionの管理型

unionの情報

unique_id

UNKNOWN

unknown_adapter

unknown_adapter

UnknownEncoding

UnknownEncoding

UnknownUserException

unreg_implementation

unreg_implementation

unreg_interface

unreg_interface

unreg_trigger

unreg_trigger

unregister_all

unregister_all

unregister_listener

unregister_value_factory

UNSHARED_SERVER

UntypedObjectWrapper

UntypedObjectWrapper

UntypedObjectWrapperFactory

UntypedObjectWrapperFactory

UntypedObjectWrapperFactoryのコンストラクタ

UntypedObjectWrapperFactoryのメソッド

UntypedObjectWrapperFactoryのメソッド

UntypedObjectWrapperのメソッド

UntypedObjectWrapperのメソッド

URLネーミングインタフェースとクラス（Java）

URLネーミングプロパティ

UserException

UserExceptionのコンストラクタ

(Ｖ)

validate_connection

value

value

value

value

value

value

value

value

Valuebox

ValueBoxDef

ValueBoxDef

ValueBoxDefのメソッド

ValueBoxDefのメソッド

ValueDef

ValueDef

ValueDefのメソッド

ValueDefのメソッド

ValueDescription

ValueDescription

ValueDescription

ValueDescriptionの変数

ValueDescriptionの変数

ValueDescriptionのメソッド

ValueMemberDef

ValueMemberDefのメソッド

Valuetype

varクラス

VB_NO_REBIND

VB_NO_REBIND

VB_NOTIFY_REBIND

VB_NOTIFY_REBIND

VB_TRANSPARENT

VB_TRANSPARENT

vbj

vbj

vbjc

VBROKER_ADM

VBROKER_ADM

version

version

VISClosure

VISClosureData

VISClosureのメンバ

VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（C++）

VisiBroker 4.xインタセプタおよびオブジェクトラッパーのインタフェースとクラス（Java）

VisiBroker 4.xのインタセプタ

VisiBroker 4.xのインタセプタ

VisiBroker ORBレベルのポリシー

VISInit

VISInitのメソッド

VISPropertyManager

VISPropertyManagerのメソッド

(Ｗ)

willRefreshOADs

work_pending

work_pending

write

write_value

wstring

wstring_alloc

wstring_free

WstringDef

WstringDef

WstringDefのメソッド

(ア行)

(あ)

アクセッサメソッド

アクティブ

アクティブ

アドオンサービスの詳細

暗黙的に渡される環境変数

(い)

一方向モード

一般オプション

一般オプション

インタセプタマネージャ

インタセプタマネージャ

インタフェース型定義のC++へのマッピング

インタフェーススコープ

インタフェース属性

インタフェース内にない定数

インタフェース内の定数

インタフェースのIDL typedef

インタフェースリポジトリインタフェースとクラス（C++）

インタフェースリポジトリインタフェースとクラス（Java）

インタフェースリポジトリオブジェクト

インタフェースリポジトリプロパティ

インタフェースリポジトリリゾルバのプロパティ

(え)

エイリアス

演算子

演算子

(お)

応答ヘッダ

オブジェクトリファレンスの情報

オブジェクトレベルのポリシー

オペレーションの型

オペレーションの情報

オペレーションのモード

(カ行)

(か)

型定義

型の一覧（TCKind）（C++）

活性化インタフェースとクラス（C++）

活性化インタフェースとクラス（Java）

活性化ポリシー

可変長構造体

可変長構造体でのメモリ管理

可変長構造体のC++へのマッピング

環境変数

環境変数

完了ステータス

(き)

基本Java型

基本型

基本型

基本型のHolderクラス

基本型マッピング（Java）

基本型を定義する定数

基本データ型

キャンセルされるリクエスト識別子

(く)

クライアント側IIOPのコネクションプロパティ

クライアント側コネクションプロパティ

クライアント側プロセス内コネクションプロパティ

クライアントスタブ

クラスパスの指定

(け)

継承によるサーバインプリメンテーション

(こ)

コアインタフェースとクラス（C++）

コアインタフェースとクラス（Java）

構造型

構造体

構造体

コールバックオブジェクト

固定長IDL構造体のC++へのマッピング

固定長構造体

コマンドラインオプション（C++）

コマンドラインオプション（Java）

コンパイラ

(サ行)

(さ)

サーバ側エンジンプロパティ

サーバ側エンジンプロパティ

サーバ側スレッドセッションIIOP_TSプロパティ，およびIIOP_TSコネクションプロパティ

サーバ側スレッドセッションコネクションのプロパティ

サーバ側スレッドプールIIOP_TPプロパティ，およびIIOP_TPコネクションプロパティ

サーバ側スレッドプールコネクションのプロパティ

サーバスケルトン

(し)

シーケンス

シーケンス型定義のC++へのマッピング

シーケンスでのメモリ管理

シーケンスのIDL typedef

シーケンスの管理型

システム例外

システム例外

システム例外

システム例外一覧（C++）

システム例外一覧（Java）

初期化インタフェースとクラス（C++）

初期化演算子

シンプルIDL型

シンプルJava型にマッピングされるIDL型

(す)

スタブクラス

スタブクラス

スマートエージェントのポート番号

スレッドレベルのポリシー

(せ)

整数型

生成されるインタフェースとクラス（C++）

生成されるインタフェースとクラス（Java）

静的メソッド

(そ)

双方向通信をサポートするプロパティ

双方向通信をサポートするプロパティ

属性の情報

属性のモード

その他のツール

(タ行)

(た)

待機

待機

タイプセーフ配列

(ち)

抽出演算子

抽象インタフェース

抽象インタフェースのC++マッピング

(て)

定数

定数

定数

定数定義

定数のC++コード

定数の情報

定数を含む特別なケース

デリゲーションを使用したサーバインプリメンテーション

(と)

動的インタフェースとクラス（C++）

動的インタフェースとクラス（Java）

トリガー

(ナ行)

(な)

名前

名前付き型のJava Helperクラスへのマッピング

(ね)

ネーミングサービスインタフェースとクラス（C++）

ネーミングサービスインタフェースとクラス（Java）

ネーミングサービスプロパティ

ネーミングサービスプロパティ

ネストされた型のマッピング

ネストされたスコープのJavaパッケージ名

(ハ行)

(は)

配列

配列

配列スライス

配列でのメモリ管理

配列のHolderクラス

配列の管理型

配列のマッピング

破棄

破棄

ハッシュ値

ハッシュ値

パラメタ

パラメタの受け渡し

パラメタのモード

(ひ)

非アクティブ

非アクティブ

標準IDLシステム例外

標準IDL例外のJavaクラス名

標準モード

(ふ)

複合idl typedefのマッピング

複合IDL型

複合データ型

複次元配列のIDL定義

浮動小数点型

プログラマツール（C++）

プログラマツール（Java）

プログラマツールの動作環境

プロトコルの情報

プロパティの設定方法

(ほ)

ポータビリティスケルトンインタフェース

ポータビリティスタブインタフェース

ポータブルインタセプタ

ポータブルインタセプタ

ポータブルインタセプタインタフェースとクラス（C++）

ポータブルインタセプタインタフェースとクラス（Java）

ポリシーの値

ポリシーの値

(マ行)

(ま)

マーシャルバッファインタフェースとクラス（C++）

マイナーバージョン

マッピング

マッピング

(め)

明示的に渡される環境変数

メジャーバージョン

メッセージの情報

メモリ管理

(も)

モジュール

モジュール

モジュール内にないIDL宣言

文字列

文字列

文字列を動的に割り当てる

(ヤ行)

(ゆ)

ユーザ定義型に生成されたJavaコード

ユーザ定義型のHolderクラス

ユーザ定義構造体

ユーザ定義例外

ユーザ定義例外のマッピング

ユーザ例外

ユーザ例外

(よ)

予約語

予約名

(ラ行)

(り)

リクエストインタセプタ

リクエストインタセプタ

リクエストヘッダ

リポジトリへのアクセス

(れ)

例外

例外クラス（Java）

例外の情報

例外のマッピング

列挙体

列挙体

列挙体のC++enumへのダイレクトマッピング

列挙体のIDL定義

(ろ)

ローカルインタフェース

ロケーションサービスインタフェースとクラス（C++）

ロケーションサービスインタフェースとクラス（Java）

ロケーションサービスオプション

ロケーションサービスオプション

ロケーションサービスプロパティ

ロケーションサービスプロパティ

ロケートリクエストメッセージ

■ 商標類

Borlandのブランド名および製品名はすべて，米国Borland Software Corporationの米国およびその他の国における商標または登録商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
HP-UXは，Hewlett-Packard Development Company, L.P.のオペレーティングシステムの名称です。
IBM，AIXは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
IIOPは，OMG仕様によるORB（Object Request Broker）間通信のネットワークプロトコルの名称です。
Itaniumは，アメリカ合衆国およびその他の国におけるIntel Corporationの商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
OMG，CORBA，IIOP，UML，Unified Modeling Language，MDA，Model　Driven　Architectureは，Object Management Group, Inc.の米国及びその他の国における登録商標または商標です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標もしくは商標です。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Vistaは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
その他記載の会社名，製品名は，それぞれの会社の商標もしくは登録商標です。