|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個軟體套件 下一個軟體套件 | 框架 無框架 |
請參見:
描述
介面摘要 | |
---|---|
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_OVERRIDE 和 ADD_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 使用者定義異常。 |
提供 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。
這一節中描述的類別和介面可分為四組:ORB 類別、異常、Helper 類別和 Holder 類別。
ORB 處理(或代理)客戶端與伺服器上的方法實作之間的方法調用。因為客戶端和伺服器可能位於網路的任何地方,調用和實作可能以不同的程式語言編寫,所以 ORB 在後台做了很多工作來實作此通信。
ORB 所做的大部分工作對於使用者而言是完全透明的,CORBA 套件的主要部分由 ORB 在後台使用的類別組成。因此大部分開發人員將只直接使用此套件的一小部分。實際上,大多數開發人員僅使用 ORB 類別和一些異常中的少數方法,偶爾也使用 holder 類別中的少數方法。
在應用程序進入 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 異常 的文檔中有更多資訊,這些文檔解釋了系統異常和使用者定義異常之間的不同。
以下是包 org.omg.CORBA 中定義的系統異常的列表(這些異常是通過 org.omg.CORBA.SystemException 從 java.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
例如,包 org.omg.CORBA.TypeCodePackage 套件含兩個由 TypeCode 類別中的方法拋出的異常。這些異常包括:
另一個 CORBA 的子套件是 portable 套件。該套件提供了一組 ORB API,這些 API 使得某個供應商的 IDL 編譯器所產生的程式碼能夠在另一個供應商的 ORB 上運行。
支持 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 資料型別。因此,對於 LongHolder、ShortHolder、FloatHolder 等,都已經定義了相應的類別。對於所有已命名使用者定義的 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 Types。org.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 檔案提供了一些操作型別所需的靜態方法。這些操作包括:
ValueHelper
介面(如果它是使用者定義的 value 型別)
用於映射的 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));
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; } } }
假設 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
這就是為什麼 org.omg.CORBA 套件中的幾個介面包含一個 value 欄位的原因,該欄位是一個 short 值。此欄位是一個用於錯誤程式碼或值修飾符之類別的常數。例如,BAD_POLICY 介面的 value 欄位可能是拋出 PolicyError 異常的原因之一。要指定此錯誤程式碼,應使用 BAD_POLICY.value。
PolicyError 異常使用以下介面的 value 欄位作為其可能的錯誤程式碼。
ValueMember
物件的存取方法返回,用於指示 ValueMember
物件的可見性。
ORB 不需要介面存儲資源庫,Java IDL 也不包含介面存儲資源庫。儘管此版本不包括介面存儲資源庫的實作,但它包含以下 IR 類別和介面,以創建 typecodes(參見 org.omg.CORBA.ORB 介面中的 create_value_tc、create_struct_tc、create_union_tc 和 create_exception_tc 方法):
&nbs
org.omg 子包中包含的一些 API 是為了與當前 OMG CORBA 規範保持一致而提供的,但 Sun 的 JDKTM 版本中沒有實作它們。這使得其他 JDK 被許可人可以在標準擴展和產品中提供此 API 的實作。
org.omg 子包中包含的一些 API 會因為各種原因拋出 NO_IMPLEMENT 異常。其中一些原因是:
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個軟體套件 下一個軟體套件 | 框架 無框架 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。