JavaTM 2 Platform
Standard Ed. 6

軟體套件 org.omg.CORBA

提供 OMG CORBA API 到 JavaTM 程式語言的映射,包括 ORB 類別,如果已實作該類別,則開發人員可以使用此類別作為全功能物件請求代理(Object Request Broker,ORB)。

請參見:
          描述

介面摘要
ARG_IN 向調用符號化 "input" 參數,表示從客戶端將該參數傳遞到伺服器。
ARG_INOUT 表示用於某一調用的輸入和輸出的參數,意味著將該參數從客戶端傳到伺服器,然後再從伺服器傳回客戶端。
ARG_OUT 表示調用的 "input" 參數的常數,意味著從伺服器將該參數傳遞到客戶端。
BAD_POLICY 將填充在 PolicyError 異常中的 PolicyErrorCode
BAD_POLICY_TYPE 將填充在 PolicyError 異常中的 PolicyErrorCode
BAD_POLICY_VALUE 包含指示某個策略值的值,該策略值對於 create_policy 方法(在 ORB 類別中定義)調用中的有效策略型別而言是不正確的。
CTX_RESTRICT_SCOPE 可以用作 Context.get_values 方法的第二個參數以限制搜尋範圍的標誌。
Current Current 介面派生的介面允許 ORB 和 CORBA 服務存取與它們正運行的執行執行緒關聯的資訊(上下文)。
CurrentOperations Current 的介面。
CustomMarshal 將由 ORB 而不是由使用者使用的抽象 value 型別。
DataInputStream 定義用來從輸入串流讀取基本資料型別的方法,以便解組自定義值型別。
DataOutputStream 定義用來將基本資料型別寫入輸出串流的方法,以便編組自定義值型別。
DomainManager 提供用來建立關係並將其導航到高層級域和從屬域的機制,以及用來創建和存取策略的機制。
DomainManagerOperations DomainManager 提供存取策略的方法。
DynAny 已過時。 使用新的 DynAny 替代
DynArray 已過時。 使用新的 DynArray 替代
DynEnum 已過時。 使用新的 DynEnum 替代
DynFixed 已過時。 使用新的 DynFixed 替代
DynSequence 已過時。 使用新的 DynSequence 替代
DynStruct 已過時。 使用新的 DynStruct 替代
DynUnion 已過時。 使用新的 DynUnion 替代
DynValue 已過時。 使用新的 DynValue 替代
IDLType 由所有表示 OMG IDL 型別的介面存儲資源庫(Interface Repository,IR)物件繼承的抽象介面。
IDLTypeOperations 此介面必須由所有 IDLType 物件實作。
IRObject IRObject IDL 介面表示最一般的介面,其他所有 Interface Repository 介面(甚至包括 Repository 自身)都派生自該介面。
IRObjectOperations 這是用於 IRObject 的映射的 Operations 介面。
Object CORBA 物件參考的定義。
OMGVMCID 為 OMG 保留的供應商次要程式碼 (minor code) ID。
Policy 派生自 Policy 介面的介面允許 ORB 或 CORBA 服務存取影響其操作的某些選項。
PolicyOperations 提供針對某一 Policy 物件的操作。
PRIVATE_MEMBER 定義 ValueMember 類別中私有成員的常數。
PUBLIC_MEMBER 定義 ValueMember 類別中公共成員的常數。
UNSUPPORTED_POLICY 在所請求的 Policy 被 ORB 認為是有效的,但目前不受支持時將被填充的一個 PolicyErrorCode
UNSUPPORTED_POLICY_VALUE 當所請求的 Policy 值是有效型別並且在該型別的有效範圍內,但該有效值目前不受支持時將被填充的 PolicyErrorCode
VM_ABSTRACT 定義用來表示 typecode 中的 Abstract 介面的程式碼。
VM_CUSTOM 定義用來表示型別程式碼中自定義編組值型別的程式碼。
VM_NONE 定義程式碼,用來表示一個 typecode 中值型別的值。
VM_TRUNCATABLE 定義用來表示 typecode 中可截斷值型別的程式碼。
 

類別摘要
_IDLTypeStub IDLType 的 Stub。
_PolicyStub Policy 的 Stub。
Any 充當可用 IDL 描述的任何資料或任何 IDL 基本型別的容器。
AnyHolder Any 的 Holder。
AnySeqHelper AnySeq 的 Helper。
AnySeqHolder AnySeq 的 Holder。
BooleanHolder Boolean 的 Holder。
BooleanSeqHelper BooleanSeq 的 Helper。
BooleanSeqHolder BooleanSeq 的 Holder。
ByteHolder Byte 的 Holder。
CharHolder Char 的 Holder。
CharSeqHelper CharSeq 的 Helper。
CharSeqHolder CharSeq 的 Holder。
CompletionStatus 指示某一方法拋出 SystemException 時是否已結束運行的物件。
CompletionStatusHelper CompletionStatus 的 Helper。
Context 用於在 Request 操作中指定上下文物件的物件,上下文字元串在與請求調用一起被發送之前,必須在該指定的上下文物件中進行解析。
ContextList 一個物件,它包含表示屬性名稱的 String 物件所組成的可修改列表。
CurrentHelper Current 的 Helper。
CurrentHolder Current 的 Holder。
DefinitionKind 該類別提供用來標識介面存儲資源庫 (Interface Repository) 物件型別的常數。
DefinitionKindHelper DefinitionKind 的 Helper。
DoubleHolder Double 的 Holder。
DoubleSeqHelper DoubleSeq 的 Helper。
DoubleSeqHolder DoubleSeq 的 Holder。
DynamicImplementation 已過時。 org.omg.CORBA.DynamicImplementation
Environment 用於 Request 操作的異常的容器 (holder),使異常可用於客戶端。
ExceptionList Request 操作中使用的物件,用於描述可由某一方法拋出的異常。
FieldNameHelper FieldName 的 Helper。
FixedHolder Fixed 的 Holder。
FloatHolder Float 的 Holder。
FloatSeqHelper FloatSeq 的 Helper。
FloatSeqHolder FloatSeq 的 Holder。
IdentifierHelper Identifier 的 Helper。
IDLTypeHelper IDLType 的 Helper。
IntHolder Int 的 Holder。
LocalObject 用作 Java 語言映射中的本地 IDL 介面實作的基本類別。
LongHolder Long 值的 Holder。
LongLongSeqHelper LongLongSeq 的 Helper。
LongLongSeqHolder LongLongSeq 的 Holder。
LongSeqHelper LongSeqHelper 的 Helper。
LongSeqHolder LongSeq 的 Holder。
NamedValue 在 DII 和 DSI 中用來描述參數和返回值的物件。
NameValuePair 將某一名稱與一個屬性為 IDL struct 的值關聯,並在 DynStruct API 中使用。
NameValuePairHelper NameValuePair 的 Helper。
NVList 包含 NamedValue 物件所組成的可修改列表。
ObjectHelper  
ObjectHolder Object 的 Holder。
OctetSeqHelper OctetSeq 的 Helper。
OctetSeqHolder OctetSeq 的 Holder。
ORB 為 CORBA 物件請求代理 (Object Request Broker) 特性提供 API 的類別。
ParameterMode Parameter 參數網要的列舉。
ParameterModeHelper Parameter 參數網要的列舉。
ParameterModeHolder Parameter 參數網要的列舉。
PolicyErrorCodeHelper 封裝 Policy 無效的原因。
PolicyErrorHelper 拋出 PolicyError 指示傳遞給 ORB.create_policy 操作的參數值存在問題。
PolicyErrorHolder 拋出 PolicyError 指示傳遞給 ORB.create_policy 操作的參數值存在問題。
PolicyHelper Policy 的 Helper。
PolicyHolder Policy 的 Holder。
PolicyListHelper PolicyList 的 Helper。
PolicyListHolder PolicyList 的 Holder。
PolicyTypeHelper PolicyType 的 Helper。
Principal 已過時。 已由 CORBA 2.2 取代。
PrincipalHolder 已過時。 Deprecated by CORBA 2.2.
RepositoryIdHelper RepositoryId 的 Helper。
Request 包含調用某一方法所必需的資訊的物件。
ServerRequest 捕獲對動態框架介面(Dynamic Skeleton Interface,DSI)請求的顯式狀態的物件。
ServiceDetail 表示 ORB 服務的物件:其 service_detail_type 欄位包含 ORB 服務的型別,其 service_detail 欄位包含 ORB 服務的描述。
ServiceDetailHelper  
ServiceInformation CORBA 模組中的 IDL struct,用於存儲關於 ORB 實作中可用 CORBA 服務的資訊,可使用 ORB.get_service_information 方法獲取。
ServiceInformationHelper  
ServiceInformationHolder ServiceInformation 的 Holder。
SetOverrideType 標記 SET_OVERRIDEADD_OVERRIDE 的 CORBA enum 的映射,它指示這些策略是應該替換 Object 的現有策略還是應該被添加到現有策略中。
SetOverrideTypeHelper SetOverrideType 的 Helper。
ShortHolder Short 的 Holder。
ShortSeqHelper ShortSeqHelper 的 Helper。
ShortSeqHolder ShortSeq 的 Holder。
StringHolder String 的 Holder。
StringSeqHelper String 陣列
StringSeqHolder String 陣列
StringValueHelper StringValue 的 Helper。
StructMember 描述介面存儲資源庫 (Interface Repository) 中一個 IDL struct 成員,包括該 struct 成員的名稱、該 struct 成員的型別以及表示該 struct 成員(被描述為 struct 成員物件)IDL 型別的 typedef。
StructMemberHelper StructMember 的 Helper。
TCKind IDL enum TCKind 的 Java 映射,TCKind 指定 TypeCode 物件的種類別。
TypeCode 用於有關特定 CORBA 資料型別的資訊的容器。
TypeCodeHolder TypeCode 的 Holder。
ULongLongSeqHelper ULongLongSeq 的 Helper。
ULongLongSeqHolder ULongLongSeq 的 Holder。
ULongSeqHelper ULongSeq 的 Helper。
ULongSeqHolder ULongSeq 的 Holder。
UnionMember 介面存儲資源庫 (Interface Repository) 中關於 IDL union 成員的描述。
UnionMemberHelper UnionMember 的 Helper。
UnknownUserExceptionHelper UnknownUserException 的 Helper。
UnknownUserExceptionHolder UnknownUserException 的 Holder。
UShortSeqHelper UShortSeq 的 Helper。
UShortSeqHolder UShortSeq 的 Holder。
ValueBaseHelper  
ValueBaseHolder ValueBase 的 Holder。
ValueMember 介面存儲資源庫 (Interface Repository) 中關於 value 物件成員的描述。
ValueMemberHelper ValueMember 的 Helper。
VersionSpecHelper VersionSpec 的 Helper。
VisibilityHelper Visibility 的 Helper。
WCharSeqHelper WCharSeq 的 Helper。
WCharSeqHolder WCharSeq 的 Holder。
WrongTransactionHelper WrongTransaction 的 Helper。
WrongTransactionHolder WrongTransaction 的 Holder。
WStringSeqHelper WString 陣列
WStringSeqHolder WString 陣列
WStringValueHelper org/omg/CORBA/WStringValueHelper.java 由 "3.0" 版的 IDL-to-Java 編譯器(可移植)從 orb.idl 中產生,產生時間為 1999 年 5 月 31 日 22:27:30 (GMT+00:00) 類別定義已經修改,以遵守以下 OMG 規範: 由 CORBA 2.3.1 定義的 ORB 核心 (formal/99-10-07) ptc/00-01-08 中定義的 IDL/Java 語言映射
 

異常摘要
ACTIVITY_COMPLETED ACTIVITY_COMPLETED 系統異常可以在任何存取 Activity 上下文的方法上引發。
ACTIVITY_REQUIRED ACTIVITY_REQUIRED 系統異常可以在任何需要 Activity 上下文的方法上引發。
BAD_CONTEXT 當客戶端調用某一操作,但傳遞的上下文中不包含該操作所需的上下文值時,拋出該異常。
BAD_INV_ORDER 此異常指示調用者按錯誤順序調用了操作。
BAD_OPERATION 當物件參考表示某一現有對象,但該物件並不支持調用的操作時,拋出該異常。
BAD_PARAM 當傳遞給某一調用的參數超出範圍或被認為不合法時,拋出該異常。
BAD_QOS 只要物件無法支持調用參數(具有與之關聯的服務質量語義的參數)所需的服務質量,就會引發 BAD_QOS 異常。
BAD_TYPECODE 當 ORB 遇到錯誤的型別程式碼(例如,具有無效 TCKind 值的型別程式碼)時,拋出該異常。
Bounds 當參數不在某一方法試圖存取的物件的合法範圍內時,拋出該使用者異常。
CODESET_INCOMPATIBLE 當客戶端和伺服器本機程式碼集之間不能進行有意義的通信時,拋出此異常。
COMM_FAILURE 如果某一操作正在進行時失去通信,此時客戶端已經發送了請求,但伺服器的應答尚未返回到客戶端,則引發此異常。
DATA_CONVERSION 如果 ORB 無法將已編組資料的表示形式轉換成其本機表示形式,則引發此異常,反之亦然。
FREE_MEM 當 ORB 試圖釋放動態記憶體但卻因為某些原因(例如因為堆積(heap)空間損壞或記憶體塊被鎖定)而失敗時,拋出此異常。
IMP_LIMIT 此異常指示在 OBR 運行時超過了某一項實作限制。
INITIALIZE ORB 在其初始化期間出錯(例如無法獲得網路資源或檢測配置錯誤)時,拋出此異常。
INTERNAL 此異常指示 ORB 中存在內部錯誤,例如,在 ORB 檢測到其內部資料結構被損壞時將拋出此異常。
INTF_REPOS 當 ORB 無法到達介面存儲資源庫,或者檢測到其他與介面存儲資源庫相關的錯誤時,引發此異常。
INV_FLAG 在將無效標誌傳遞給某項操作時(例如,在創建 DII 請求時),拋出此異常。
INV_IDENT 此異常指示 IDL 標識符在語法上是無效的。
INV_OBJREF 此異常指示物件參考存在內部錯誤。
INV_POLICY 當應用於特定調用的 Policy 覆寫之間不相容而導致無法進行調用時,拋出此標準異常。
INVALID_ACTIVITY 如果在不同於其處於掛起狀態時所在的上下文中恢復事務或 Activity,則在該 Activity 或 Transaction 服務的恢復方法上引發 INVALID_ACTIVITY 系統異常。
INVALID_TRANSACTION 當請求帶有無效的事務上下文時,拋出此異常。
MARSHAL 表示網路中傳來的請求或應答在結構上無效。
NO_IMPLEMENT 此異常指示,儘管被調用的操作存在(它有一個 IDL 定義),但不存在該操作的實作。
NO_MEMORY 如果 ORB 運行時出現記憶體不足,則拋出此異常。
NO_PERMISSION 當因為調用者沒有足夠的權限而導致調用失敗時,拋出此異常。
NO_RESOURCES 當 ORB 遇到一些一般資源限制時,拋出此異常。
NO_RESPONSE 如果某客戶端試圖檢索延遲同步調用的結果,但請求的回應尚不可用,則拋出此異常。
OBJ_ADAPTER 此異常通常指示管理方面的不比對,例如,某台伺服器可能試圖在實作存儲資源庫中使用已經在使用或存儲資源庫未知的名稱註冊它自身。
OBJECT_NOT_EXIST 只要在已刪除的物件上執行調用,就會引發此異常。
PERSIST_STORE 此異常指示一個持久存儲錯誤,例如,無法建立資料庫連接或者某個資料庫損壞。
PolicyError 發生策略錯誤時拋出的使用者異常。
REBIND 如果當前有效 RebindPolicy 具有 NO_REBIND 或 NO_RECONNECT 值,且對綁定的物件參考執行調用時產生狀態為 OBJECT_FORWARD 的 LocateReply 訊息或狀態為 LOCATION_FORWARD 的 Reply 訊息,則將引發 REBIND
SystemException 所有 CORBA 標準異常的根類別。
TIMEOUT 當已超過指定生存時間卻沒有做出任何交付時,引發 TIMEOUT 異常。
TRANSACTION_MODE 如果客戶端 ORB 檢測到 IOR 中的 InvocationPolicy 與選中的調用路徑(即直接或路由調用)不比對,則它將拋出 CORBA TRANSACTION_MODE 異常。
TRANSACTION_REQUIRED 此異常指示請求帶有一個 null 事務上下文,但需要的是啟動的事務。
TRANSACTION_ROLLEDBACK 當與請求處理關聯的事務已回滾或已標記為回滾時,拋出此異常。
TRANSACTION_UNAVAILABLE 當由於到事務服務 (Transaction Service) 的連接已異常終止而無法處理事務服務上下文時,由 ORB 拋出 CORBA TRANSACTION_UNAVAILABLE 異常。
TRANSIENT 當 ORB 試圖到達某一物件但失敗時,拋出此異常。
UNKNOWN 如果操作實作拋出一個非 CORBA 異常(比如特定於該實作程式語言的異常),或者某一操作引發沒有出現在該操作引發表達式中的使用者異常,則將引發此異常。
UnknownUserException 包含由伺服器返回的使用者異常的類別。
UserException CORBA IDL 定義的使用者異常的根類別。
WrongTransaction CORBA WrongTransaction 使用者定義異常。
 

軟體套件 org.omg.CORBA 的描述

提供 OMG CORBA API 到 JavaTM 程式語言的映射,包括 ORB 類別,如果已實作該類別,則開發人員可以使用此類別作為全功能物件請求代理(Object Request Broker,ORB)。

有關 Java[TM] Platform,Standard Edition 6 遵守的受支持官方 CORBA 規範部分的明確列表,請參閱 Official Specifications for CORBA support in Java[TM] SE 6

常規資訊

這一節中的資訊與編譯介面定義語言(Interface Definition Language,IDL)檔案以及使用 ORB 編寫客戶端和伺服器的使用者有關。

這一節中描述的類別和介面可分為四組:ORB 類別、異常、Helper 類別和 Holder 類別。

ORB 類別

ORB 處理(或代理)客戶端與伺服器上的方法實作之間的方法調用。因為客戶端和伺服器可能位於網路的任何地方,調用和實作可能以不同的程式語言編寫,所以 ORB 在後台做了很多工作來實作此通信。

ORB 所做的大部分工作對於使用者而言是完全透明的,CORBA 套件的主要部分由 ORB 在後台使用的類別組成。因此大部分開發人員將只直接使用此套件的一小部分。實際上,大多數開發人員僅使用 ORB 類別和一些異常中的少數方法,偶爾也使用 holder 類別中的少數方法。

ORB 方法

在應用程序進入 CORBA 環境之前,它必須先執行以下操作:

提供以下操作來初始化應用程序及獲得適當的物件參考:

當應用程序需要 CORBA 環境時,它需要一個機制來獲取 ORB 物件參考,也可能是 OA 物件參考(比如根 POA)。此機制有兩個用途。第一個用途是將應用程序初始化為 ORB 和 OA 環境。第二個用途是將 ORB 物件參考和 OA 物件參考返回給應用程序,以便在以後的 ORB 和 OA 操作中使用。

若要獲取 ORB 物件參考,應用程序應調用 ORB.init 操作。該調用的參數可能由 ORB 的標識符和 arg_list 組成,前者是物件參考所需要的,後者用於允許將特定於環境的資料傳遞給調用。

以下 ORB 方法可以存取 ORB:

使用不帶參數的 init() 方法可以實例化一個單件 ORB,它只能為創建 typecode 提供 any,在通過 idlj 在 Helper 類別中產生的程式碼中需要這些 any。

應用程序需要一個用來獲得其初始物件參考的可移植方法。根 POA、POA Current、Interface Repository 和各種 Object Service 實例都需要參考。應用程序所需的功能類似於 Naming Service 提供的那些功能。但是,OMG 不應該要求 Naming Service 可用於所有應用程序以便能夠以可移植方式初始化。因此,這一節中展示的操作提供了一個簡化的本地 Naming Service,應用程序可以使用它來獲取其操作所必須的一小組已定義物件參考。因為只期望從此機制中獲得一小組定義良好的物件,所以命名上下文可能被簡化為單一級別的名稱空間。這種簡化的結果是只定義兩個操作來獲得所需的功能。

初始參考是通過 ORB 物件介面中提供的兩個操作獲得的,該介面中提供了一些設施來列出並解析初始物件參考。這些工具套件括:

使用其中一些方法的範例見 Java IDL 入門

異常

Java IDL 中的異常類似於用 Java 程式語言編寫的 any 程式碼中的那些異常。如果定義某一方法拋出異常,則使用該方法的 any 程式碼必須有一個 try/catch 塊,並在該異常拋出時進行處理。

關於 Java IDL 異常 的文檔中有更多資訊,這些文檔解釋了系統異常和使用者定義異常之間的不同。

以下是包 org.omg.CORBA 中定義的系統異常的列表(這些異常是通過 org.omg.CORBA.SystemExceptionjava.lang.RuntimeException 中繼承的未經檢查異常):


        BAD_CONTEXT
        BAD_INV_ORDER
        BAD_OPERATION
        BAD_PARAM
        BAD_TYPECODE
        COMM_FAILURE
        DATA_CONVERSION
        FREE_MEM
        IMP_LIMIT
        INITIALIZE
        INTERNAL
        INTF_REPOS
        INVALID_TRANSACTION
        INV_FLAG
        INV_IDENT
        INV_OBJREF
        INV_POLICY
        MARSHAL
        NO_IMPLEMENT
        NO_MEMORY
        NO_PERMISSION
        NO_RESOURCES
        NO_RESPONSE
        OBJECT_NOT_EXIST
        OBJ_ADAPTER
        PERSIST_STORE
        TRANSACTION_REQUIRED
        TRANSACTION_ROLLEDBACK
        TRANSIENT
        UNKNOWN

以下是包 org.omg.CORBA 中定義的使用者定義異常的列表。


        Bounds
        UnknownUserException
        WrongTransaction 
        PolicyError

子包

CORBA 套件中的一些包用 "Package" 作為其名稱的一部分。這些包通常非常小,因為這些包要做的所有事情就是提供異常或類別,以便 CORBA 套件中的介面和類別使用。

例如,包 org.omg.CORBA.TypeCodePackage 套件含兩個由 TypeCode 類別中的方法拋出的異常。這些異常包括:

org.omg.CORBA.ORBPackage 中包含以下兩個異常:

另一個 CORBA 的子套件是 portable 套件。該套件提供了一組 ORB API,這些 API 使得某個供應商的 IDL 編譯器所產生的程式碼能夠在另一個供應商的 ORB 上運行。

Holder 類別

支持 out 和 inout 參數傳遞網要需要使用附加 holder 類別。因為 Java 程式語言不支持 out 或 inout 參數,holder 類別便作為一種可修改的傳遞參數方式出現。為了支持可移植 stub 和 skeleton,holder 類別還實作了 org.omg.CORBA.portable.Streamable 介面。

Holder 類別是通過將 "Holder" 追加到型別名稱中來命名的。型別名稱是指它在 Java 程式語言中的名稱。例如,在 Java 程式語言中名為 Account 的介面所對應的 holder 類別應該命名為 AccountHolder

Holder 類別可用於 org.omg.CORBA 套件中的所有基本 IDL 資料型別。因此,對於 LongHolderShortHolderFloatHolder 等,都已經定義了相應的類別。對於所有已命名使用者定義的 IDL 型別(typedef 定義的除外),同樣會產生一些類別。(注意,在這種情況下,使用者定義型別包括那些在 OMG 規範中定義的型別(如用於 Interface Repository 的那些型別)和其他 OMG 服務。)

每個 holder 類別都包含:

對於 Java 語言定義的型別,預設建構子將 value 欄位設置為以下預設值:

舉例來說,如果用 OMG IDL 定義的 Account 介面被映射到 Java 程式語言,則將產生以下 holder 類別:

public final class AccountHolder implements 
    org.omg.CORBA.portable.Streamable
{
  // field that holds an Account object
  public Account value = null;

  // default constructor
  public AccountHolder ()
  {
  }
  
  // creates a new AccountHolder from initialValue
  public AccountHolder (Account initialValue)
  {
    value = initialValue;
  }
  
  // reads the contents of i and assigns the contents to value
  public void _read (org.omg.CORBA.portable.InputStream i)
  {
    value = AccountHelper.read (i);
  }

  // writes value to o
  public void _write (org.omg.CORBA.portable.OutputStream o)
  {
    AccountHelper.write (o, value);
  }
 
  // returns the typecode for Account
  public org.omg.CORBA.TypeCode _type ()
  {
    return AccountHelper.type ();
  }

}

關於 Holder 類別的更多資訊,請參閱 OMG IDL to Java Language Mapping 中的第 1.4 章 Mapping for Basic Typesorg.omg.CORBA 套件中定義的 Holder 類別有:

     AnyHolder
     AnySeqHolder
     BooleanHolder
     BooleanSeqHolder
     ByteHolder
     CharHolder
     CharSeqHolder
     CurrentHolder
     DoubleHolder
     DoubleSeqHolder
     FixedHolder
     FloatHolder
     FloatSeqHolder
     IntHolder
     LongHolder
     LongLongSeqHolder
     LongSeqHolder
     ObjectHolder
     OctetSeqHolder
     ParameterModeHolder
     PolicyErrorHolder
     PolicyListHolder
     PrincipalHolder
     ServiceInformationHolder
     ShortHolder
     ShortSeqHolder
     StringHolder
     StringSeqHolder
     TypeCodeHolder
     ULongLongSeqHolder
     ULongSeqHolder
     UnknownUserExceptionHolder
     UShortSeqHolder
     ValueBaseHolder
     WCharSeqHolder
     WrongTransactionHolder
     WStringSeqHolder

Helper 類別

Helper 檔案提供了一些操作型別所需的靜態方法。這些操作包括:

用於映射的 IDL 介面或抽象介面的 helper 類別還包括收縮操作。靜態收縮方法允許將 org.omg.CORBA.Object 收縮成更具體的某種型別的物件參考。如果因為該物件參考不支持所請求的型別而導致收縮失敗,則將拋出 IDL 異常 CORBA.BAD_PARAM。引發不同的系統異常則指示存在其他種類別的錯誤。嘗試收縮 null 將總是可以成功,並返回 null 值。通常,應用程序程式人員唯一使用的 helper 方法是 narrow 方法。其他方法通常在後台使用,它們對於開發人員是透明的。

Helper 類別分為兩大類別,即用於 value 型別的 helper用於非 value 型別的 helper。因為一種類別別中的所有 helper 類別提供的都是相同的方法,所以這裡只提供每種 helper 類別的一般性解釋。

在將 OMG IDL 映射到 Java 程式語言時,為每個使用者定義的型別產生一個 "helper" 類別。產生的這個類別將具有使用者定義型別的名稱以及追加的 Helper 後綴。例如,如果介面 Account 是用 OMG IDL 定義的,則 idlj 編譯器將自動產生一個名為 AccountHelper 的類別。AccountHelper 類別將包含操作型別實例所需的靜態方法,這裡的實例指 Account 物件。

narrow 方法

當某一物件是某個方法的返回值時,該物件是以常規物件的形式返回的,它可以是 org.omg.CORBA.Object 物件或者 java.lang.Object 物件。在可以對此物件執行操作之前,必須將該物件強制轉換為其更具體的型別。例如,Account 物件將作為一般物件返回,並且必須收縮為 Account 物件,以便可以對該物件調用 Account 方法。

narrow 方法有兩種形式,一種形式帶有一個 org.omg.CORBA.Object 物件,另一種形式帶有一個 java.lang.Object 物件。根據該介面是否是抽象的來確定其 helper 類別將提供哪一種 narrow 方法。用於非抽象介面的 helper 類別將有一個帶 CORBA 物件的 narrow 方法,而用於抽象介面的 narrow 方法將帶有 Java 程式語言中的一個物件。對於至少有一個抽象基本介面的非抽象介面,helper 類別將同時提供兩種形式的 narrow 方法。

Hello World 教程使用的 narrow 方法如下所示:

        // create and initialize the ORB
        ORB orb = ORB.init(args, null);

        // get the root naming context
        org.omg.CORBA.Object objRef = 
            orb.resolve_initial_references("NameService");
        // Use NamingContextExt instead of NamingContext.This is 
        // part of latest Inter-Operable naming Service.  
        NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
 
        // resolve the Object Reference in Naming
String name = "Hello";
        helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));

基本 Helper 類別的範例

對於本例,基本 helper 類別具有每個 helper 類別都會提供的方法,如果用 OMG IDL 定義的型別映射到 Java 程式語言中的介面,則它還包含一個 narrow 方法。非 value 型別的型別將有一個為它們產生的基本 helper 類別。

例如,假設介面 Account 不是一個 value 型別的 IDL 型別也不是一個抽象介面,並且沒有抽象基本介面,則其 AccountHelper 類別將如下所示:

abstract public class AccountHelper
{
  private static String  _id = "IDL:Account:1.0";

  // inserts an Account object into an Any object
  public static void insert (org.omg.CORBA.Any a, Account that)
  {
    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
a.type (type ());
    write (out, that);
    a.read_value (out.create_input_stream (), type ());
  }

  // extracts an Account object from an Any object
  public static Account extract (org.omg.CORBA.Any a)
  {
    return read (a.create_input_stream ());
  }

  
  private static org.omg.CORBA.TypeCode __typeCode = null;
  // gets the typecode for this type
  synchronized public static org.omg.CORBA.TypeCode type ()
  {
    if (__typeCode == null)
    {
      __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (AccountHelper.id (), "Account");
    }
    return __typeCode;
  }

  // gets the repository id for this type
  public static String id ()
  {
    return _id;
  }

  // reads an Account object from an input stream
  public static Account read (org.omg.CORBA.portable.InputStream istream)
  {
    return narrow (istream.read_Object (_AccountStub.class));
  }

  // writes an Account object to an outputstream
  public static void write (org.omg.CORBA.portable.OutputStream ostream, Account value)
  {
    ostream.write_Object ((org.omg.CORBA.Object) value);
  }

  // converts (narrows) an Object to an Account object
  public static Account narrow (org.omg.CORBA.Object obj)
  {
    if (obj == null)
return null;
    else if (obj instanceof Account)
      return (Account)obj;
    else if (!obj._is_a (id ()))
      throw new org.omg.CORBA.BAD_PARAM ();
    else
    {
      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
      _AccountStub stub = new _AccountStub ();
      stub._set_delegate(delegate);
      return stub;
    }
  }

}

value 型別 Helper 類別

用於 value 型別的 helper 類別所包含的方法是為非 value 型別方法產生的方法的不同呈現。主要的不同在於 value 型別可以作為某一方法的參數值或返回值傳遞,這意味著它們必須是可序列化的。

假設 Address 是 value 型別,則 AddressHelper 類別將如下所示:

abstract public class AddressHelper
{
  private static String  _id = "IDL:Address:1.0";

  // same as for non-value type
  public static void insert (org.omg.CORBA.Any a, Address that)
  {
    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
a.type (type ());
    write (out, that);
    a.read_value (out.create_input_stream (), type ());
  }

  // same as for non-value type
  public static Address extract (org.omg.CORBA.Any a)
  {
    return read (a.create_input_stream ());
  }

  private static org.omg.CORBA.TypeCode __typeCode = null;
  private static boolean __active = false;
  
  // getting the typecode for the type
  synchronized public static org.omg.CORBA.TypeCode type ()
  {
    if (__typeCode == null)
    {
      synchronized (org.omg.CORBA.TypeCode.class)
      {
        if (__typeCode == null)
        {
          if (__active)
          {
            return org.omg.CORBA.ORB.init().create_recursive_tc ( _id );
          }
__active = true;
          org.omg.CORBA.ValueMember[] _members0 = new org.omg.CORBA.ValueMember[0];
          org.omg.CORBA.TypeCode _tcOf_members0 = null;
          __typeCode = org.omg.CORBA.ORB.init ().create_value_tc (_id, "Address", org.omg.CORBA.VM_NONE.value, null, _members0);
__active = false;
        }
      }
    }
    return __typeCode;
  }

  // same as for non-value type
  public static String id ()
  {
    return _id;
  }

  // reads a serializable instance of Address from the given input stream
  public static Address read (org.omg.CORBA.portable.InputStream istream)
  {
    return (Address)((org.omg.CORBA_2_3.portable.InputStream) istream).read_value (id ());
  }

  // writes a serializable instance of Address to the given output stream
  public static void write (org.omg.CORBA.portable.OutputStream ostream, Address value)
  {
    ((org.omg.CORBA_2_3.portable.OutputStream) ostream).write_value (value, id ());
  }


}

org.omg.CORBA 套件中定義的 Helper 類別有:


     AnySeqHelper
     BooleanSeqHelper
     CharSeqHelper
     CompletionStatusHelper
     CurrentHelper
     DefinitionKindHelper
     DoubleSeqHelper
     FieldNameHelper
     FloatSeqHelper
     IdentifierHelper
     IDLTypeHelper
     LongLongSeqHelper
     LongSeqHelper
     NameValuePairHelper
     ObjectHelper
     OctetSeqHelper
     ParameterModeHelper
     PolicyErrorCodeHelper
     PolicyErrorHelper
     PolicyHelper
     PolicyListHelper
     PolicyTypeHelper
     RepositoryIdHelper
     ServiceDetailHelper
     ServiceInformationHelper
     SetOverrideTypeHelper
     ShortSeqHelper
     StringSeqHelper
     StringValueHelper
     StructMemberHelper
     ULongLongSeqHelper
     ULongSeqHelper
     UnionMemberHelper
     UnknownUserExceptionHelper
     UShortSeqHelper
     ValueBaseHelper
     ValueMemberHelper
     VersionSpecHelper
     VisibilityHelper
     WCharSeqHelper
     WrongTransactionHelper
     WStringSeqHelper
     WStringValueHelper

其他類別

CORBA 套件中的其他類別和介面都是在後台使用的,它們可分為四組。其中三組都以某種方式用於請求,第四組與 Interface Repository 有關,單獨列為一類別。

ORB 創建的類別

第一組中包含由 ORB 創建的類別和請求操作中使用的資訊。

處理請求的類別

第二組類別用於處理請求:

用作常數的介面

第三組中包括用作常數的介面。IDL 到 Java 的映射強行將 IDL 列舉映射到 Java 類別,並將列舉值表示為該類別中的公共靜態最終欄位(如 DefinitionKind)。另一方面,IDL 介面外部定義的 IDL 常數被映射到 Java 介面(每個常數一個介面)。

這就是為什麼 org.omg.CORBA 套件中的幾個介面包含一個 value 欄位的原因,該欄位是一個 short 值。此欄位是一個用於錯誤程式碼或值修飾符之類別的常數。例如,BAD_POLICY 介面的 value 欄位可能是拋出 PolicyError 異常的原因之一。要指定此錯誤程式碼,應使用 BAD_POLICY.value

PolicyError 異常使用以下介面的 value 欄位作為其可能的錯誤程式碼。

TypeCode.type_modifier 方法返回以下某一介面的 value 欄位。這些介面名稱中的 VM 表示“值修飾符”。 以下常數由 ValueMember 物件的存取方法返回,用於指示 ValueMember 物件的可見性。 以下介面中定義了 NamedValue 物件中使用的標誌或用作方法參數的標誌:

Interface Repository 介面和類別

第四組中包含 Interface Repository 介面和類別,它們由 idlj 編譯器從 OMG IDL 介面 ir.idl 中產生。Interface Repository 的用途是標識存儲在其中的介面,以便 ORB 可以存取它們。每個模組、型別、介面、屬性、操作、參數、異常、常數等都完全由 Interface Repository API 描述。

ORB 不需要介面存儲資源庫,Java IDL 也不包含介面存儲資源庫。儘管此版本不包括介面存儲資源庫的實作,但它包含以下 IR 類別和介面,以創建 typecodes(參見 org.omg.CORBA.ORB 介面中的 create_value_tc、create_struct_tc、create_union_tc 和 create_exception_tc 方法):
&nbs


相關文檔

有關概觀、指南和教程,請參閱:

Java IDL 中沒有實作的 CORBA 特性

org.omg 子包中包含的一些 API 是為了與當前 OMG CORBA 規範保持一致而提供的,但 Sun 的 JDKTM 版本中沒有實作它們。這使得其他 JDK 被許可人可以在標準擴展和產品中提供此 API 的實作。

拋出 NO_IMPLEMENT 的特性

org.omg 子包中包含的一些 API 會因為各種原因拋出 NO_IMPLEMENT 異常。其中一些原因是:

此版本中未實作的特性和 API 的總結:


org.omg.CORBA 套件中未實作特性的詳細列表

org.omg.CORBA 套件中未實作的方法:

從以下版本開始:
JDK1.2

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only