Issue 1: Recusive Type Definitions
Issue 2: Inheritance of describe_contents()
Issue 14: IFR: union elements associated with case labels
Issue 66: Whether unions carry exact discriminant information
Issue 68: Missing info about the semantics of ORB_init and OA_init
Issue 73: Do typecodes need literal constant representations in all mappings?
Issue 76: CORBA::InterfaceDef name collision
Issue 85: Interface Repository Error Handling
Issue 86: lookup() questions
Issue 87: Exception as explicit parameter
Issue 88: Request reuse
Issue 90: Ambiguity in DII and DSI
Issue 97: Usage of standard exceptions
Issue 116: Typecodes for recursive sequences
Issue 117: Unqualified names in scopes
Issue 127: _is_a with CORBA::Object as input parameter
Issue 128: ServerRequest::op_def()
Issue 129: DSI and oneway operations
Issue 130: Unions with enum as discriminator type
Issue 132: Scope of standard exceptions
Issue 133: Repository IDs
Issue 137: Do simple/anonymous types have repository IDs?
Issue 156: Apparent error in CORBA 2.0 Interoperability
Issue 233: Pseudo-IDL identifiers differ by case only
Issue 283: Similar structure to IR::Identifier
Issue 300: Recursive sequence TypeCodes
Issue 306: Portability and the #include directive
Issue 380: Interface for managing interceptors is missing
Issue 384: CORBA2.0, 1.2.2 Paragraph 2 - comment
Issue 385: 1.2.2 Requests Paragraph last - editorial
Issue 386: 2.1 Structure of an Object Request Broker
Issue 387: 2.5 Structure of an Object Adapter
Issue 388: 3.9 Exception Declaration
Issue 389: 3.10.3 Raises Expressions
Issue 390: 3.10.3 Raises Expressions
Issue 391: 3.15.2 Object Non-Existence, Para 1, editorial
Issue 392: 4.1 Overview, Paragraph 3, editorial
Issue 393: 4.1.1 Common Data Structures, Paragraph 6, comment
Issue 394: 4.1.2 Memory usage, Para 1, editorial
Issue 395: 4.1.3 Return Status and Exceptions
Issue 396: 4.2.1 create_request Paragraph 8 - comment
Issue 397: 4.2.2 add_arg Paragraph 5-comment
Issue 398: 4.2.3 invoke
Issue 399: 4.6 Context Object Operations, Para 2 - objection
Issue 400: 4.3.1 sen3 - comment 23 - comment
Issue 401: 4.3.3 get_response
Issue 402: 4.6.2 set_on_value Paragraph 2 - objection
Issue 403: 4.6.3 set_values
Issue 404: 4.6.4 get_values Paragraph 2 - objection
Issue 405: 4.6.4 get_values Paragraph 4 - objection
Issue 406: 4.6.4 get_values Paragraph 5 - objection
Issue 407: 4.6.5 delete_values Paragraph 1 - editorial
Issue 408: 4.6.5 delete_values Paragraph 3 - objection
Issue 409: 4.6.7 delete Paragraph 4 - objection
Issue 410: 5.2 Explicit Request State: ServerRequest Pseudo Object
Issue 411: 5.3.2 Registering Dynamic Implementation Routines Para 1- comment
Issue 417: 6.3.1 Managing Interface Repositories
Issue 418: 6.4.3 Interface Objects Paragrapg 1 - editorial
Issue 419: 6.4.3 Interface Objects Paragraph 2 - editorial
Issue 420: 6.4.3 Interface Objects Paragraph 3 - comment
Issue 421: 6.5.2 IRObject Paragraph 3 - objection
Issue 422: 6.5.3 Contained Paragraph 2 - comment
Issue 423: 6.5.3 Contained - Paragraph 7 - comment
Issue 424: 6.5.3 Contained Paragraph 10 - comment
Issue 425: 6.5.4 Container Paragraph 2 - objection
Issue 426: 6.5.4 Container Paragraph 5 - comment
Issue 427: 6.5.4 Container Paragraph 6 - editorial
Issue 428: 6.5.4 Container Paragraph 8 - comment
Issue 429: 6.5.4 Container Paragraph 10 - comment
Issue 430: 6.5.4 Container Paragraph 11 - comment
Issue 431: 6.5.4 Container Paragraph 12 - comment
Issue 432: 6.5.4 Container Paragraph 15 - comment
Issue 433: 6.5.4 Container Last Paragraph - editorial
Issue 434: 6.5.6. Repository Paragraph 2 - objection
Issue 435: 6.5.6 Repository Paragraph 4 - comment
Issue 436: 6.5.6 Repository Paragraph 4 - editorial
Issue 437: 6.5.8 ConstantDef Interface Paragraph 2 - comment
Issue 438: 6.5.10 StructDef Last paragraph - comment
Issue 439: 6.5.11 UnionDef Last Paragraph - comment
Issue 440: 6.5.20 AttributeDef Paragraph 2 - comment
Issue 441: 6.5.22 InterfaceDef Paragraph 6 - comment
Issue 442: 6.5.22 InterfaceDef Paragraphs 7 and 8 - comment
Issue 443: 6.6.1 OMG IDL Format Paragraph 5 - comment
Issue 444: 6.6.4 Pragma Directives for RepositoryId Para 1 - objection
Issue 445: 6.7 TypeCodes Paragraph 3 - objection
Issue 446: 6.7.1 The TypeCode Interface All Paragraphs - objection
Issue 447: 6.7.1 The Type Code Interface Paragraph 4 - comment
Issue 448: 6.7.2 TypeCode Constants Last Paragraph - comment
Issue 449: 7.1 Converting Object References to Strings Para 3 - comment
Issue 450: 7.2.1 Determining the Object Implementation and Interface
Issue 451: 7.2.4 Equivalence Checking Operation Paragraph 3 - comment
Issue 452: 7.2.5 Probing for Object Non-Existence Paragraph 2 - comment
Issue 453: 7.4 ORB Initialization Last Paragraph - objection
Issue 454: 7.4 ORB Initialization Last Paragraph - objection
Issue 455: 8.1 Role of the Basic Object Adapter Para 1 - comment
Issue 457: CORBA::Bounds and CORBA::TypeCode::Bounds
Issue 458: IDL grammar
Issue 459: CORE spec reference
Issue 464: DII operations "get_response and get_next_response
Issue 499: Internationalization
Issue 542: Interface Repository
Issue 545: Enums and enumerators
Issue 551: Object::is_a
Issue 556: OTS 1.1 specification changes
Issue 557: WRONG_TRANSACTION
Issue 563: Object terminal missing from IDL grammar
Issue 564: Description of constant expression semantics is unclear
Issue 565: Terminology consistency
Issue 566: OMG IDL prefix pragma
Issue 567: Scope and use of prefix pragma in IDL-style repository IDs
Issue 568: inherit vs. include
Issue 569: What exactly is a request
Issue 570: "service"~~operation or interface?
Issue 571: Question about IDL grammar
Issue 588: limited-length strings
Issue 595: Section 16.7: only C++ mapping defines string_free and string_dup
Issue 596: request() should be added to IDL (section 17.13.2)
Issue 597: Sequence parameter specified is ignored
Issue 598: sec 17.7.1: IDL for interface request doesn"t match C++ mapping
Issue 604: Section 7.2: get_implementation function
Issue 607: No defined value for OBJECT_NIL
Issue 609: TCKind enum should be updated
Issue 610: create_exception() is declared outside any interface scope
Issue 611: Syntax for basic types must be updated
Issue 623: Section 7.8: editorial
Issue 624: Section 3.7.2: take new IDL type extensions into account
Issue 641: Do identifiers and keywords clash if they differ in case?
Issue 665: TypeCode equality
Issue 666: Native types with respect to typecodes, DII, DSI,Interface Reposit.
Issue 675: Section 3.3.8.16:deactivate_object() operation
Issue 719: CDR encoding of TypeCode names inconsistent with equal operation
Issue 724: Non ASCII alphabetics in IDL identifiers
Issue 725: Octet and enum constants
Issue 726: Figure 2-2 in CORBA 2.0 and CORBA 2.1
Issue 727: Bug in the 2.1.spec for IDL unions
Issue 749: Issue with ObjectId_to_string and string_to_ObjectId
Issue 751: Inclusion of standard exception
Issue 753: Inheriting exceptions in IDL
Issue 754: Minor bug in 2.1 spec
Issue 776: CORBA 2.1 IR Structdef typo
Issue 777: TypedefDef issue
Issue 778: Proposed IFR exceptions
Issue 779: Containers
Issue 780: RIDs
Issue 783: IDL types are ambiguous with inheritance
Issue 797: locally constrained
Issue 811: union typecode
Issue 812: union typecode (02)
Issue 884: Appendix B lists incorrect CORBA Components IDs
Issue 903: Ambiguity in non_existent() specification
Issue 910: #pragma processing
Issue 911: Question about typecode creation
Issue 912: Inheritance of Exceptions
Issue 913: defined_in member of ModuleDescription for top-level module
Issue 915: Trader constraint language and international characters
Issue 916: Resetting #pragma prefix?
Issue 917: Incorrect definition of "object type"
Issue 918: CORBA::Contained::describe() underspecified
Issue 991: Operation to add to CORBA::ORB pseudo-object
Issue 992: CORBA 2.2 - "native" and the interface repository
Issue 999: #pragma prefix issue
Issue 1054: Marshalling is_equivalent
Issue 1066: Fixed point constant typo in 2.2
Issue 1067: Wide character and wide string literals
Issue 1068: Fixed point constants issue
Issue 1071: Type of fixed point quotients
Issue 1074: Typo in type code section (13.3.4)
Issue 1086: How to deal with object identity
Issue 1087: IDl "module" construct - IDL files
Issue 1088: ORB_init
Issue 1091: Editorial issue, chapter 8
Issue 1094: Indentation on page 4-4
Issue 1145: Forward declarations and inheritance
Issue 1146: Semantics and standard exceptions
Issue 1153: Domain manager related specification shortcoming(s) (01)
Issue 1154: Domain Manager related specification shortcoming (02)-ConstructionPolicy
Issue 1155: Domain Manager related specification shortcomings (03)
Issue 1156: resolve_initial_references under-specified
Issue 1160: GIOP typo, section 4.2 (page 4.4) of CORBA 2.2
Issue 1164: Versioning by the back door?
Issue 1241: / in prefix pragma?
Issue 1315: Semantics of system exception completion_status
Issue 1394: Typos in IR IDL in spec (01)
Issue 1395: Typos in IR IDL in Specification (02)
Issue 1396: Typos in IR IDL in Specification (03)
Issue 1397: Typos in IR IDL in Specification (04)
Issue 1398: Typos in IR IDL in Specification (050
Issue 1422: Does the DII support the standard object operations?
Issue 1537: Typo in chapter 8
Issue 1541: Type code typos (as only one issue)
Issue 1542: Type code operations under-specified
Issue 1543: Type code parameter ordering
Issue 1545: Type codes cannot describe all unions
Issue 1585: IDL struct issue
Issue 1587: name scoping issue
Issue 1612: Description of Wide String type
Issue 1622: TypeCode comparison proposal (01)
Issue 1623: TypeCode comparison proposal (02)
Issue 1665: Lifetime of ORB and validity of ORB pointe
Issue 1667: Proposal on floating point fixes
Issue 1679: DynStruct::get_members needs exception
Issue 1688: Illegal IDL in CosTime module
Issue 1725: CosObjectIdentity::ObjectIdentifiers can"t be UUIDs?
Issue 1728: Proposed change to IDL in section 3.10.2, page 3-32 "Parameter Declaration
Issue 1729: Change to IDL for anonymous types
Issue 1753: Size of IDL char
Issue 1772: Incorrect LifeCycle IDL?
Issue 1796: Missing orb.idl
Issue 1797: Types defined in the CORBA module?
Issue 1802: Multiple paths to a recursive sequence typecode
Issue 1892: Nested scopes
Issue 1893: page 3-47: Identifiers
Issue 1928: Proposal for creating recursive TypeCodes
Issue 1944: Typo on pages 10-53, 10-55, and 10-70
Issue 1950: deactivate_object page no: 9-35
Issue 1967: New proposal for recursive TypeCode creation
Issue 1969: Handling of minor codes for standard exceptions underspecified
Issue 1970: set_servant_manager
Issue 1972: Missing equality for DynAny
Issue 1974: DynUnion::member()
Issue 1981: Which OBV initialiser to run is under-specified
Issue 1997: What does interface substitutability mean in CORBA?
Issue 2000: OMG VMCID
Issue 2007: TypeCode constants for bounded strings?
Issue 2034: Recursive IDL types
Issue 2070: InconsistentTypeCode exception in CORBA 2.3
Issue 2084: Recursive exceptions?
Issue 2119: long double problem?
Issue 2156: Exception for abstract interface inheritance
Issue 2162: void * in DII Chapter
Issue 2200: Typo in POA
Issue 2202: Scoping resolution for member names
Issue 2206: Need namespace for Policy Type
Issue 2214: create_policy specification needs to be completed
Issue 2218: WRONG_TRANSACTION
Issue 2221: Core uses both "standard" and "system" exception terminology
Issue 2223: Local operations on CORBA::Object
Issue 2230: is_a underspecified
Issue 2235: uses of recursive_tc
Issue 2252: DynValue::get_members/set_members
Issue 2254: Destruction of ORB
Issue 2258: OBV, value-reference substitution, Multiple Inheritance
Issue 2275: Sequences of recursive structs/unions
Issue 2296: Custom marshalling & AbstractBase
Issue 2303: POA threading policies
Issue 2308: POA SINGLE_THREAD_MODEL description ambiguous
Issue 2310: Missing minor code
Issue 2311: Custom Marshaling clarification
Issue 2312: Names of Data*Stream methods
Issue 2314: Supporting multiple abstract interfaces
Issue 2316: Codebases with multiple URLs
Issue 2318: Misleading text in section 3.2.5.2
Issue 2319: Clarify meaning of no IDL initializers
Issue 2320: Signature of unmarshal method is wrong
Issue 2321: Errors in figure 10-2
Issue 2322: No description for NativeDef
Issue 2323: is_a description is wrong
Issue 2325: No description for ValueBoxDef
Issue 2327: Error in ValueDef IDL
Issue 2328: Text was inserted in wrong place
Issue 2329: RMI Repository ID missing from section 10.6
Issue 2330: Error in text describing TypeCode interface
Issue 2331: Clarify text in section 15.3.7
Issue 2332: Clarifications needed in section 5.2.2
Issue 2334: Value base and the IFR
Issue 2340: Forward-Declared Interfaces
Issue 2341: Calling get_response twice?
Issue 2343: Grammar section 3.9.2 missing "float" rules, and other problems
Issue 2371: Issue - no PIDL, just language bindings
Issue 2372: Use UNICODE Character set
Issue 2377: Application Interface issue
Issue 2378: Try to define obligatory and optional parts of the CORBA specification.
Issue 2432: clarification and bug in InterfaceDef::FullInterfaceDescription
Issue 2435: Interceptors broken
Issue 2436: another problem with IDL specification section 3.9.2
Issue 2442: POA Construction Policy.
Issue 2444: Problems in Chapter 5 IDL
Issue 2446: Inheritance of value types
Issue 2447: What value type does ValueDef"s base_value() return?
Issue 2450: IR Changes in 2.3
Issue 2454: Inconsistent spellings of "policy" related identifiers:
Issue 2456: CORBA::Object::ping ?
Issue 2487: Inconsistent Definition of Flags type
Issue 2490: What use is CORBA::exception_type?
Issue 2492: Error in IRObject definition in 98-12-04
Issue 2502: Need to specify exception for abstract interface error
Issue 2507: Scope of SendingContextRunTime service context
Issue 2508: omg.org prefix not well specified
Issue 2509: Can an any with a tk_null or tk_void TypeCode be encoded with CDR?
Issue 2511: POA that has IdAssignmentPolicy=SYSTEM--portability problem
Issue 2513: POA issue, section 11.3.8.10
Issue 2521: LocateReply body alignment issue
Issue 2522: forward declaration in ptc/98-10-04
Issue 2529: RMI style repository ID hash code
Issue 2539: Incorrect IDL is section 5.5.3
Issue 2543: confusing rules for operations on Object
Issue 2547: DynAny.insert_valuetype shoud be insert_val
Issue 2548: Repository ID for Object
Issue 2549: activate_object_with_id and exceptions
Issue 2553: ORB::shutdown again
Issue 2559: deactivate_object asymmetry
Issue 2574: Clarification on IdUniquenessPolicy
Issue 2576: UNIQUE_ID and ServantActivator issue
Issue 2577: sharing valuetypes across Anys
Issue 2579: is_abstract parameter missing from create_interface() IDL
Issue 2615: The insert_dyn_any and get_dyn_any operations are barely documented
Issue 2616: DynAny::equal operator issue
Issue 2617: DynFactory or DynAnyFactory?
Issue 2674: New "opaque" data type
Issue 2791: Expected behavior of POA configured with ServantLocator receiving LocateRe
Issue 2796: The syntax for stringified IORs in section 13.6.6
Issue 2817: Null Value semantics under specified
Issue 2819: interop issue: what system exceptions may be raised on GIOP 1.0?
Issue 2822: mixing giop versions
Issue 2828:
Issue 2843: Changebars missing from POA chapter
Issue 2844: OBV interface support inconsistencies
Issue 2846: POA: false placement of paragraph
Issue 2847: ambiguity in wstrings having a Unicode escape sequence
Issue 2848: chapter 3 and recursion
Issue 2849: CORBA 2.3: minor editorial issue
Issue 2859: Wchar as discriminator in union
Issue 2861: POA exception minor codes
Issue 2883: IDL constant declarations
Issue 2892: DataInputStream specification is inefficient for Java
Issue 2896: What is the RepId of Object?
Issue 2898: Why are Standard Exceptions defined in IDL chapter?
Issue 2900: URLs interact poorly with code set selection
Issue 2901: Semantics of DynAny with alias TypeCodes
Issue 2903: Use of incomplete recursive TypeCodes underspecified
Issue 2906: DynFixed editorial issue
Issue 2907: creation of arguments to TypeCode creation ops
Issue 2908: CORBA::ORB::RequestSeq definition obsolete
Issue 2909: formal/99-08-01.txt missing pragmas
Issue 2910: CORBA 2.3 spec hasn't been updated with corrections in COM-CORBA Part B
Issue 2911: Problem with text of POAManager::deactivate()
Issue 2912: (CORBA Core) Data streams missing arrays of long double
Issue 2913: Component ids in 13.6.2.2
Issue 2944: Editorial issue for CORBA 2.3, 1.3.8.20
Issue 2945: CORBA 2.3 Editorial issue for TypeCodes & abstract_interface
Issue 2954: Exception section issue
Issue 2955: General Exception Question
Issue 2959: Minor codes for Standard System Exceptions in Chapter 5 missing
Issue 2960: Minor codes for Standard System Exceptions in Chapter 8 missing
Issue 2963: Type Code Section issue
Issue 2974: PIDL vs Local
Issue 2976: IDL and C++ relationship
Issue 2977: Preprocessing of IDL
Issue 2978: Meaningless sentence on page 3-11?
Issue 2980: Problem with the "Special scoping" rules in 3.15.3
Issue 3000: Codeset conversions and unions
Issue 3001: The algorithm for TypeCode::equivalent in 10.7.1 was not updated
Issue 3015: why was is_abstract added to structs in CORBA IR?
Issue 3018: Missing "abstract" in forward declaration
Issue 3020: Question about IDL \uxxxx escape format
Issue 3021: Section 7.6: IDL context housecleaning
Issue 3022: What is the NO_RESPONSE exception good for?
Issue 3041: Editorial glitch in DynAny::destroy, section 9.2.3.6
Issue 3048: TypeCode issue
Issue 3069: OMG IDL Syntax and Semantics issue
Issue 3072: value type substitutability
Issue 3073: create_POA and inactive state?
Issue 3095: Use of Principal in GIOP Module erroneous
Issue 3104: Non-standard system exceptions
Issue 3105: Errors in published IDL for CORBA module
Issue 3109: DynAny & abstract interfaces don't mix!
Issue 3115: Do valueboxes have factories?
Issue 3132: What is the TypeCode for ValueBase?
Issue 3134: OMG wchar <-> COM WCHAR in CORBA 2.3
Issue 3135: valuebox and DynAny
Issue 3159: null & void TCs and DynAny
Issue 3172: Bug in 11.3.7.6
Issue 3173: IDL scoping rules
Issue 3174: servant_to_id
Issue 3177: local interfaces and the DII
Issue 3181: special-casing TypeCode is unnecessary
Issue 3185: Efficient construction of Any types w/o DynamicAny
Issue 3194: Ordering issues in the DII
Issue 3196: poll_response()
Issue 3203: Inheritence table 3-10 wrong?
Issue 3205: Semantics for DynAny::equal underspecified
Issue 3219: attributes and system exceptions
Issue 3220: Does a value in a valuebox make sense?
Issue 3221: International Strings in Encapsulations
Issue 3250: Null valuetypes not supported by DynValue
Issue 3258: Can native be used in constructed IDL types?
Issue 3268: Editorial mistake in IDL chapter
Issue 3269: #pragma rules are too restrictive
Issue 3270: Minor glitch about forward declared things
Issue 3302: Definition of COMPLETED_NO needs to be clarified
Issue 3305: valuetype factory inheritence?
Issue 3319: symbolic constants for minor exception codes
Issue 3329: Scope of inherited valuetype initializers
Issue 3330: Valuetype "copying" semantics underspecified?
Issue 3337: BAD_QOS system exception
Issue 3338: response_flags in interop draft
Issue 3364: Problem with valuetype parameter copying
Issue 3402: destroy on POA
Issue 3436: POA status during destruction is unclear
Issue 3439: return type of TypeCode::fixed_scale()
Issue 3441: POA namespace and ORB ID
Issue 3443: how are valid ORBids determined
Issue 3449: POA deactivate_object description is ambiguous
Issue 3460: ORB mediation for servant managers, references for servant managers?
Issue 3525: Inheritance description incorrect
Issue 3560: ValueMemberDef section omitted from CORBA 2.3.1 spec
Issue 3564: Typo on page 7-9 of 2.3.1
Issue 3566: is_equivalent and policies
Issue 3581: Incorrect use of negative fixed scale
Issue 3582: Section 4.3.7.1 get_client_policy?
Issue 3589: Valuetypes with multiple interfaces
Issue 3607: POA servant_to_id inconsistent with servant_to_reference
Issue 3608: ORB shutdown vs destroy
Issue 3612: Some problems
Issue 3614: Policy Management in the ORB core
Issue 3618: ORB::shutdown underspecified
Issue 3621: Minor typo
Issue 3634: Typo: "Wrongpolicy"
Issue 3635: Typo: "Wrongpolicy"
Issue 3636: servant_to_id versus servant_to_reference
Issue 3685: Non-escaped keywords in published IDL
Issue 3694: Pragma version 2.3
Issue 3737: AbstractBase not declared.
Issue 3738: Missing exception for activation
Issue 3739: reference_to_servant raises ObjectNotActive, WrongAdapter, and WrongPolicy
Issue 3740: description of unknown_adapter
Issue 3743: There is inconsistency in the POA.IDL and description in section 11.3.8.19
Issue 3749: With reference to forward declarations of structs and unions.
Issue 3751: incomplete rules for forward declaration of structs/unions
Issue 3764: Nested Recursive Structs Legal in 2.3.x?
Issue 3768: IDL: Clashes with inherited identifiers
Issue 3781: Initializers and user exceptions
Issue 3799: read_fixed() and write_fixed() methods missing
Issue 3817: ORB ID accessor
Issue 3862: "omg.org" prefix missing from interceptor specification and its reference
Issue 3877: module IOP_N needs a real name
Issue 3905: Values for CORBA::ARG_IN,... not defined
Issue 3918: Should POA spec examples use string_to_ObjectId?
Issue 3919: Conflict between POA & Exceptions spec for OBJECT_NOT_EXIST
Issue 3970: Format of RMI Hashed Format repid
Issue 4003: Can a valuetype support multiple non-abstract interfaces via inheritance?
Issue 4005: DynUnion incomplete
Issue 4014: Servant deactivation callback?
Issue 4016: #pragma version issue
Issue 4031: Valuetypes supporting local interfaces are local types?
Issue 4033: POAManager::deactivate does not specify behavior for "reject"
Issue 4034: POAManager::deactivate should not mandate ORB::shutdown implementation
Issue 4035: IDL format for RepositoryId
Issue 4036: Definition of TRANSIENT minor code 1 confusing
Issue 4037: Minor code 2 description for OBJECT_NOT_EXIST not consistent w/ use
Issue 4117: ServantLocator preinvoke/ postinvoke semantics
Issue 4128: CORBA::ORB::object_to_string() raising INV_OBJREF or BAD_PARAM
Issue 4132: Legal IDL?
Issue 4135: Section 2.1.7 of CORBA 2.3 and 2.4
Issue 4152: Container::lookup() ordering requirements
Issue 4159: core issue: unchecked narrow
Issue 4165: PortableServer::ObjectId
Issue 4170: Type redefinition in derived interface
Issue 4171: Introduction of identifiers
Issue 4176: ForwardRequest from normal operations
Issue 4189: Inconsistent text for unknown system exception
Issue 4217: misleading wording in 10.5.22.2 Write Interface
Issue 4224: DynValueBox::set_boxed_value should also raise InvalidValue
Issue 4226: #include issue
Issue 4233: What is the semantics of the DataInputStream::read_*_array() operations?
Issue 4241: 3.7.4 Forward Declaration (for interfaces) doesn't mention local
Issue 4246: Definition of NamingContextExt interface in IDL of Appendix A not consisten
Issue 4261: Incorrect example for recursive definitions which can span multiple levels
Issue 4262: Clarification about include files and IDL compiler behavior
Issue 4264: Restrictions on native types
Issue 4266: Section 10.5.22.2 what happens when conditions not met
Issue 4275: Issue: Error in section 4.5.3.2 ORBInitRef
Issue 4276: Cross-reference refers to wrong section
Issue 4285: BAD_OPERATION needs minor code and completion status
Issue 4297: Missing POAManager identity
Issue 4306: Minor code
Issue 4310: Inconsistent minor code for MARSHAL
Issue 4317: SYNC_WITH_SERVER
Issue 4320: String literal definition incorrect.
Issue 4322: Ambiguity in non_existent
Issue 4331: DII create_request
Issue 4333: Typo in UML for POA
Issue 4335: get_interface() underspecified
Issue 4385: Problem with resolution to 4285 and 4306
Issue 4386: Missing TypeCode identity
Issue 4387: Wither pseudo-objects?
Issue 4388: Local interface is-a Object?
Issue 4392: CORBA 2.4.2 (01-02-01.pdf) 4.2.3.4 shutdown (relevant portion)
Issue 4395: COBRA problem using pragma prefix for modules
Issue 4441: There is no mapping for fixed types in the COM/CORBA mapping
Issue 4468: Interpretation of time field in UtcT?
Issue 4532: Nil return from resolve_initial_references()
Issue 4620: Section 11.3.8.16 - ambiguity
Issue 4623: Support for is_a for local interfaces
Issue 4654: Chapter 11, section 11.3.8.19 (WrongPolicy)"
Issue 4657: Problem with IDL Context interface
Issue 4708: DynUnion operations
Issue 4709: the IDL include directive should introduce declarations into the namespace
Issue 4713: set_length operation of the DynSequence interface
Issue 4718: IDL for ORB::resolve_initial_references
Issue 4719: Implied IDL for interfaces in modules
Issue 4722: section 7.1.1 claims to define the "NVList structure", but doesn't
Issue 4742: Syntax error in CORBA IDL
Issue 4747: New core issue: need UNKNOWN reply status
Issue 4785: Valuetype initialzers need exceptions
Issue 4803: TypeCode interface issue
Issue 1: Recusive Type Definitions (orb_revision)
Click here for this issue's archive.
Nature: uncategorized
Severity:
Summary: Summary: What does "semantically constrained" mean in section 3.8.2 under the discussion of recursive type specifications.
Resolution: closed issue, resolved
Revised Text: Replace the 2 sentences "Although it is.."template type." with "although the IDL syntax allows the generation of recursive constructed type specificationsthe only recursion permitted for constructed types is through the use of the sequence template type.
Actions taken:
May 16, 1996: Issue received
March 25, 1997: closed issue
Discussion:
Issue 2: Inheritance of describe_contents() (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Where does the OperationDef interface inherit the describe_contents() operation from.
Resolution: close issue, resolved
Revised Text:
Actions taken:
May 16, 1996: Issue received
February 26, 1998: closed issue
Discussion:
Issue 14: IFR: union elements associated with case labels (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: A union element associated with N case labels manifests in the IFR as N distinct UnionMembers. Is this intended?
Resolution: resolved, close issue
Revised Text:
Actions taken:
May 16, 1996: Received issue
February 26, 1998: closed issue
Discussion:
Issue 66: Whether unions carry exact discriminant information (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: It is uncertain whether or not the explicit value used to discriminate between various arms of a union is information which is required to be supported.
Resolution: resolved, close issue
Revised Text: Value of aunion type includes the exact value of the discriminator. Move this requirement to Chapter 1, since it is a requirement on the type model, not on IDL
Actions taken:
August 5, 1996: Received issue
March 25, 1997: Closed issue
Discussion:
Issue 68: Missing info about the semantics of ORB_init and OA_init (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The text associated with ORB_init and OA_init does not specify what is done with the argv parameter that requires it to be inout.
Resolution: Incorporate change in 2.3a and close issue.
Revised Text: Add the following paragraph immediately following the next to last paragraph
Actions taken:
August 13, 1996: Received issue
February 22, 1999: closed issue
Discussion:
Issue 73: Do typecodes need literal constant representations in all mappings? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 6.7 of the CORBA 2 spec constrains the representation of typecodes such that typecode "literals" can be placed in C include files. Is this meant?
Resolution: The offending paragraph, which is now the para 3 of section 10.7, seems to not clearly state anythi
Revised Text: Remove para 3 of section 10.7 Close in 2.3a after incorporating change.
Actions taken:
August 13, 1996: Received issue
February 22, 1999: closed issue
Discussion:
Issue 76: CORBA::InterfaceDef name collision (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: CORBA::InterfaceDef defines an operation "is_a", although there is already an "is_a" operation defined in CORBA::Object. Section 3.6 on page 3-17 says this is not allowed.
Resolution: close issue, resolved
Revised Text:
Actions taken:
August 13, 1996: Received issue
February 26, 1998: closed issue
Discussion:
Issue 85: Interface Repository Error Handling (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The IR specification specifies what operations are an error, but does not specify how this error is returned. The specification does not define any exceptions.
Resolution: Superceded by Issue 778
Revised Text: Close issue with annotation that it is now being handled in 778
Actions taken:
August 15, 1996: Received issue
February 22, 1999: closed issue
Discussion:
Issue 86: lookup() questions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Does the lookup() function also lookup in the base interfaces if used on an InterfaceDef? If so, what if it is is more than one interface? Can the search_name argument be a scoped name?
Resolution: resolved, close issue
Revised Text:
Actions taken:
August 15, 1996: Received issue
February 26, 1998: closed issue
Discussion:
Issue 87: Exception as explicit parameter (orb_revision)
Click here for this issue's archive.
Nature: Interpretation
Severity: Serious
Summary: Summary: Is it permissible to declare an exception as an explicit parameter?
Resolution: resolved, close issue
Revised Text: An exception declaration is not a type declaration, according to the grammar, so it cannot be a parameter type.This has already been entered as a C++ issue. Issue closed.
Actions taken:
August 18, 1996: Received issue
December 12, 1996: closed issue
Discussion:
Issue 88: Request reuse (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Can a Request pseudo object be invoked multiple times?
Resolution: resolved, close issue
Revised Text: Add following sentence to 4.2.3:"The behavior is undefined if the Request pseudo-object has already been used with a previous call to invoke(), send(), or send_multiple_requests." There is no way for portable application to reuse a Request Pseudo-Object
Actions taken:
August 20, 1996: Received issue
June 20, 1997: closed issue
Discussion:
Issue 90: Ambiguity in DII and DSI (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: For the DII, what value if any can be placed into the Any in the NamedValue corresponding to an OUT parameter? Must it be NULL, or is it legal to include a storage pointer? Also for DSI.
Resolution: resolved, close issue
Revised Text: Add a new para after fourth para in 4.1.1, as follows, with the word "argument" and the word "namedValue" in bold:"For out parameters, applications can set the argument member of the NamedValue structure to a value that includes either a NULL or a non-NU
Actions taken:
August 22, 1996: Received issue
June 20, 1997: closed issue
Discussion:
Issue 97: Usage of standard exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Is there a difference between standard/system exception? Can an implementation raise both? Is raising a standard exception the recommended way to handle errors while setting an attribute?
Resolution: resolved, close issue
Revised Text: A new sentence was added to the end of the first paragraph in 3.1.15 and also to the unnumbered section "Exception" in 12.3.4. Find additional sentences in the corresponding archive file.
Actions taken:
September 6, 1996: Received issue
June 20, 1997: closed issue
Discussion:
Issue 116: Typecodes for recursive sequences (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: In the interface for the create_recursive_sequence_tc ORB method, is this just a matter of creating a TypeCode with these two fields, or is there a parameter missing?
Resolution: No parameter is missing. you just create a TypeCode with TCKind set to tk_sequence and content type
Revised Text: Replace the text in section 8.7.3 that says:
Actions taken:
September 13, 1996: Received issue
February 23, 1999: closed issue
Discussion:
Issue 117: Unqualified names in scopes (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: CORBA says "Once an unqualified name is used in a scope, it cannot be redefined", but my IDL compiler allows it. Is it legal?
Resolution: no change to spec., close issue
Revised Text: No change to spec. It"s not legal for a conforming IDL compiler to permit redefinition of unqualified name after it has been used in the same scope
Actions taken:
September 23, 1996: Received issue
March 25, 1997: Closed issue
Discussion:
Issue 127: _is_a with CORBA::Object as input parameter (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: What should _is_a() return when invoking it with an input parameter designating CORBA::Object?
Resolution: closed with revised text
Revised Text: Section 7.2.4, 2nd paragraph: The is_a() shall always return TRUE when invoked with an input parameter designating a CORBA:Object ...No change to the specification
Actions taken:
September 23, 1996: Received issue
March 25, 1997: Closed issue
Discussion:
Issue 128: ServerRequest::op_def() (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: What is the purpose of the ServerRequest::op_def method? It is not described in the Chap. 5 discussion of ServerRequest or in 18.4.1.
Resolution: close issue, no change
Revised Text:
Actions taken:
September 23, 1996: Received issue
February 23, 1999: closed issue
Discussion:
Issue 129: DSI and oneway operations (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: After calling a Dynamic Invocation Routine, how can the ORB know whether to send a response back to the client (i.e., whether the operation was "oneway")?
Resolution: The ORB uses protocol information (i.e. from GIOP response_expected) to make this decision.
Revised Text: Close no change in 2.3a with explanation as above.
Actions taken:
September 23, 1996: Received issue
February 22, 1999: closed issue
Discussion:
Issue 130: Unions with enum as discriminator type (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: How is it possible in IDL to specify a union with an enum discriminator type?
Resolution: no change necessary, close issue
Revised Text: No change to spec. All conforming IDL compilers shall permit use of enum types as discriminators for union types
Actions taken:
September 23, 1996: Received issue
March 25, 1997: Closed issue
Discussion:
Issue 132: Scope of standard exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Page 3-35 doesn"t really say that the list of standard exceptions belong to the CORBA module, although 3.12 seems to clarify.
Resolution: resolved, close issue
Revised Text: Section 3.12 requires that conforming IDL compilers behave as if the standard system exceptions were defined in module CORBA. ?? issue for CORE RTF: Should IDL text in 3.15.1 be bracketed by "module CORBA {"and"}"?
Actions taken:
September 23, 1996: Received issue
March 25, 1997: Closed issue
Discussion:
Issue 133: Repository IDs (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: I would expect a lookup on IDL:/CORBA/Object:1.0 to return an InterfaceDef. It would seem more logical if Object was represented by a "default" InterfaceDef in the repository.
Resolution: resolved, close issue
Revised Text:
Actions taken:
September 23, 1996: Received issue
February 26, 1998: closed issue
Discussion:
Issue 137: Do simple/anonymous types have repository IDs? (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity:
Summary: Summary: Do simple types like "long" have specified repository IDs? ("IDL:CORBA/long:1.0") How about anonymous types, like "sequence <long, 10>"?
Resolution: clarified, close issue
Revised Text: Clarification
Actions taken:
September 26, 1996: Received issue
January 6, 1997: closed issue
Discussion:
Issue 156: Apparent error in CORBA 2.0 Interoperability (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: in 13.5.6 "The DCE ESIOP", "Location Policy Component" there is for module IOP a list of 4 "const octet statements.. The BNF appears to suggest that this is invalid.
Resolution: issue closed, no change
Revised Text:
Actions taken:
October 8, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 233: Pseudo-IDL identifiers differ by case only (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity: LOW
Summary: Summary: IDL identifiers in chapter 4 differ by case only [Ch 17 CORBA2.0] Some of the identifiers used in the IDL in Ch 4 differ only by case, which is not legal in IDL.
Resolution:
Revised Text: Reassign issue to orb_revision, because it affects the DII chapter. The defect is still present in the 2.3 draft. For example, on
page 7-5, we have:
void create_request(
// ...
out Request request, // newly created request
// ...
);
This is only pseudo-IDL, but we might as well fix it.
Actions taken:
October 14, 1996: received issue
June 13, 2000: moved to orb_revision
October 30, 2000: closed issue
Discussion:
Issue 283: Similar structure to IR::Identifier (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: There is no such type as IR::Identifier? It should really say CORBA::Identifier. Are ServiceTypeNames limited to characters allowed in IDL Identifier and also case sensitive?
Resolution: resolved in 2.2
Revised Text:
Actions taken:
October 19, 1996: received issue
February 23, 1999: moved to orb_revision
February 26, 1999: closed issue
Discussion: closed issue
Issue 300: Recursive sequence TypeCodes (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Are they a new TypeCode kind (tk_kind) or are they of the tk_sequence TypeCode kind/
Resolution: subsumed by issue 116, close issue.
Revised Text:
Actions taken:
October 29, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 306: Portability and the #include directive (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: #include has same definition that C and C++ programmers are used to.HP treats #include at global scope as merely introducing declarations. This idea needs closer examination
Resolution: close no change in 2.4
Revised Text:
Actions taken:
November 23, 1996: received issue
August 12, 1999: close dissue
Discussion:
Issue 380: Interface for managing interceptors is missing (orb_revision)
Click here for this issue's archive.
Nature: Bug
Severity: Critical
Summary: Summary: List of interceptors to be called during request and order in which interceptor will be called: Needs to be resolved by Alec Thomas but shouls also be moved to ORB RFT
Resolution: close no change
Revised Text:
Actions taken:
November 18, 1996: received issue
April 17, 1998: moved from secrev to orb_revision
August 12, 1999: closed issue
Discussion: This is now subject of an RFP that has been issued, and is beyond the scope of an RTF
Issue 384: CORBA2.0, 1.2.2 Paragraph 2 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para points to C Language Binding chapter and the DII for info on dynamic invocation of objects. It implies that DII is only available in C. Text should pobably be more clear
Resolution: resolved, close issue
Revised Text: Change the parenthesis in the second paragraph of 1.2.2 (top of page 1-3)to read:"(Refer to the Dynamic Invocation Interface chapter for descriptions of these request forms)."
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 385: 1.2.2 Requests Paragraph last - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Change "Descriptions of the values and exceptions...." to "For descriptions of the values and exceptions..."
Resolution: resolved, close issue
Revised Text: Changed
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 386: 2.1 Structure of an Object Request Broker (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Paragraph 1, editorial: Change "....up the "request." to "....up the request."
Resolution: resolved, close issue
Revised Text: Changed
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 387: 2.5 Structure of an Object Adapter (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Paragraph 2, editorial: Change " registration of implementations" to "Registration of implementations"
Resolution: resolved, close issue
Revised Text: Changed
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 388: 3.9 Exception Declaration (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para 2, editorial: Change "...(as specified by the <member> in its declaration." to "...(as specified by the <member> in its declaration)."
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 389: 3.10.3 Raises Expressions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para last, comment: We understand why standard exceptions may not be listed on a raises expression, but it would make IDL definition of interface more complete if permitted.
Resolution: resolved, close issue
Revised Text: No change to spec. Conforming IDL source files shall not include system exceptions in raises expressions. Conforming IDL compilers may accept non-conforming IDL source files.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 390: 3.10.3 Raises Expressions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: It would make iDL definition of an interface much more complete if they were permitted. X/Open would like OMG to consider permitting listing of Standard Exceptions in raises clauses.
Resolution: Duplicate of issue # 389...closed
Revised Text:
Actions taken:
November 26, 1996: received issue
December 6, 1996: closed issue, duplicate of issue 389
Discussion:
Issue 391: 3.15.2 Object Non-Existence, Para 1, editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Change "This standard system exception" to "The OBJECT_NOT_EXIST exception", to make explicit which exception is being discussed
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 392: 4.1 Overview, Paragraph 3, editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Dynamic Invocation Interface is a proper name, and should be capitalized and italicized
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 393: 4.1.1 Common Data Structures, Paragraph 6, comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The usage of len could easily lead to a situation where it was inconsistent with TypeCode through erronous usage. WOuld be great if standard System exception was available for this case.
Resolution: Close no change in 2.3a
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 394: 4.1.2 Memory usage, Para 1, editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: There is an extra space between the table reference "Table 21" and the period
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 395: 4.1.3 Return Status and Exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: X/Open recommends that the specification is being modified to require DII functions to return a Status as an unsigned long. Implementations without return value return value:non-conforming
Resolution: closed issue, resolved
Revised Text:
Actions taken:
November 26, 1996: received issue
March 1, 1999: closed issue
Discussion:
Issue 396: 4.2.1 create_request Paragraph 8 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This paragraph should be deleted, since it is not useful for an application programmer.
Resolution: issue closed, no change
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 397: 4.2.2 add_arg Paragraph 5-comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: X/Open believes there is no need to use different wording. They don"t believe that it is useful to indicate that mixing of methods might be allowed someday
Resolution: In Section 5.2.2 Para 5 Rev 2.2 remove the word "currently" from the last sentence
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 398: 4.2.3 invoke (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Paragraph 1 - editorial : The leading "c" in create_request is not boldface
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 399: 4.6 Context Object Operations, Para 2 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Spec reads " Property names are stored preserving their case, however names cannot differ simply by their case." This sentence should be deleted.
Resolution: Propose to apply resolution as above and close issue in 2.3
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 400: 4.3.1 sen3 - comment 23 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: X/Open recommends that this para is being reworded to require that applications call get_response after a send. Spec could also be modified to detect errors if response is not required
Resolution: close issue, no change
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 401: 4.3.3 get_response (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para 0 - editorial: Add a line containing ");" to the PIDL for get_response, to match the PIDL given in section 4.2.
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 402: 4.6.2 set_on_value Paragraph 2 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Text reads:"Currently, only string values are supported by the context object." Sentence should be deleted, since PIDL requires that a string be the value provided
Resolution: Propose apply resolution to rev 2.3 and close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 403: 4.6.3 set_values (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: See comment on set_value in issue # 402
Resolution: Propose apply resolution to rev 2.3 and close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 404: 4.6.4 get_values Paragraph 2 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The error to be returned must be specified.. Since a status is not required to be returned, it"s incorrect to say that error is returned. Exception is raised.
Resolution: add text to sections 5.6.4, 5.6.5 and 5.6.7 stating what exceptions are raised under what condition
Revised Text: Section 5,6,4 get_values
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 405: 4.6.4 get_values Paragraph 4 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Text indicates that "Value scope names are implementation-specific." Items not necessary for portable development of applications are unspecified,undefined.
Resolution: Remove paragraph 4. Does not add any value to the spec.
Revised Text: Incorporate change proposed above and close
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 406: 4.6.4 get_values Paragraph 5 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Text reads " If the specified scope name is not found, an exception is returned." Error to be indicated must be specified. See objection for Paragraph 2.
Resolution: See resolution of 404
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 407: 4.6.5 delete_values Paragraph 1 - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Change "value(s) values" to "value(s)
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 408: 4.6.5 delete_values Paragraph 3 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This paragraph indicates that an exception is returned. See objection for 4.6.4 get_values Paragraph 2
Resolution: see resolution of 404
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 409: 4.6.7 delete Paragraph 4 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The exception to be returned is not specified. See objection for 4.6.4 get_values Paragraph 2.
Resolution: see resolution of 404
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 410: 5.2 Explicit Request State: ServerRequest Pseudo Object (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para 4: editorial Change "..OMG IDL for operation.." to "..OMG IDL for the operation...:.
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 411: 5.3.2 Registering Dynamic Implementation Routines Para 1- comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Paragraph starts off by explaining that previous versions of CORBA weren"t complete. Not necessary to belabor this point. It"s not clear whether or not this lack has been repaired.
Resolution: This is fixed by the new DSI text from the Portability FP
Revised Text:
Actions taken:
November 26, 1996: received issue
June 20, 1997: closed issue
Discussion:
Issue 417: 6.3.1 Managing Interface Repositories (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Paragraph 1 - editorial: Change the reference to "get_interface" to the appropriate type-face
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 418: 6.4.3 Interface Objects Paragrapg 1 - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Numbered bullet list following this para is formatted poorly. Text items should be alligned and offset from the numbers in a consistent way
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 419: 6.4.3 Interface Objects Paragraph 2 - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Change "...not by modify..." to "...not by modifying..."
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 420: 6.4.3 Interface Objects Paragraph 3 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Final Para describes the types of support interfaces that might be available in some implementations. These are not interesting for portable application develpoment.
Resolution: no change necessary, issue closed
Revised Text:
Actions taken:
November 26, 1996: received issue
March 26, 1998: closed issue
Discussion:
Issue 421: 6.5.2 IRObject Paragraph 3 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Write Interface description indicates that it is error to invoke destroy on a Repository or PrimitiveDef. Should state that behavior is undefined.
Resolution: close issue, resolved
Revised Text:
Actions taken:
November 26, 1996: received issue
February 26, 1998: closed issue
Discussion:
Issue 422: 6.5.3 Contained Paragraph 2 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para indicates that IRs are not required to support simultaneous containment of multiple versions of the same named object. Required that IRs are able to handle multiple versions of objects
Resolution: resolved, close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 26, 1998: closed issue
Discussion:
Issue 423: 6.5.3 Contained - Paragraph 7 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This initial Para of the Write Interface section indicates that an error is returned if an object with specified ID attribute already exists. Error should be specified.
Resolution: Close with annotation as above.
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 424: 6.5.3 Contained Paragraph 10 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para indicates that name attribute is changed to new_name, and version attribute is changed to new_version. If name already exists and IR doesn"t support versioning=error. What error?
Resolution: Subsumed by 778 . Closed with that annotation
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 425: 6.5.4 Container Paragraph 2 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: It"s not clear what lookup operation returns when it is successful. We can tell from the IDL, but it should be explicitly defined. We think it returns object reference to scoped name.
Resolution: no change required, close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 26, 1998: closed issue
Discussion:
Issue 426: 6.5.4 Container Paragraph 5 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para descibes exclude_inherited argumentto the content operation. Format is poor, it"s not clear what the default setting for this argument might be (if any).
Resolution: no change required, close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 26, 1998: closed issue
Discussion:
Issue 427: 6.5.4 Container Paragraph 6 - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para starts the description of the arguments for the lookup_name operation. It should stand out more instead of being intended in such a way that it looks like part of previous item"s description.
Resolution: changed, close issue
Revised Text: Changed. make layout conform to other sections, and fix confusing indentation
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
February 26, 1998: closed issue
Discussion: closed issue
Issue 428: 6.5.4 Container Paragraph 8 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: What other values of levels_to_search are legal? What happens if values other than those described are used?Is an exception raised? If so, what exception?
Resolution: resolved, close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 26, 1998: closed issue
Discussion:
Issue 429: 6.5.4 Container Paragraph 10 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This para and para 4 both describe a limiy_type argument. These should be described in the same way since they appear to have the same semantics
Resolution: Incorporate resolution and close issue.
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 430: 6.5.4 Container Paragraph 11 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Same as issue # 429 with respect to 6.5.4 Container Paragraph 5.
Resolution: Incorporate resolution and close issue.
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 431: 6.5.4 Container Paragraph 12 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para refers to the describe operation. This operation is part of the parent interface from which container interface is inherited.There should be a pointer to the parent interface
Resolution: Close no change
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 432: 6.5.4 Container Paragraph 15 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para describes create_<type> operations. It indicates that there are errors returned under differing circumstances. Possible errors should be defined.
Resolution: Superceded by 778
Revised Text: Close with annotation that it is now being handled as part of 778.
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 433: 6.5.4 Container Last Paragraph - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The trailing period is missing.
Resolution: changed, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 434: 6.5.6. Repository Paragraph 2 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para indicates that there may be more than 1 interface Repository in any given environment. How can portable application determine this, and how can it determine what the requirements are?
Resolution: the application should use either the naming or trading service to determine which IR to use.
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed, no change to 2.3a
Discussion:
Issue 435: 6.5.6 Repository Paragraph 4 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This Para refers to a PrimitiveDef. There should be a pointer to where this is defined.
Resolution: In section 8.5.6 second para under Read Interface, add a cross reference to section 8.5.13 where Pr
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 436: 6.5.6 Repository Paragraph 4 - editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The mention of the kind attribute should be bold-face
Resolution: resolved, close issue
Revised Text: Changed.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 437: 6.5.8 ConstantDef Interface Paragraph 2 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: There should be a pointer to the list of simple types.
Resolution: Replace the phrase "simple type( ..... )" by the phrase "primitive types allowed in a constant decl
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 438: 6.5.10 StructDef Last paragraph - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para indicates that the type member is ignored and that it should be set to TC_void. If it is ignored, why should it be set to anything?
Resolution: Remove the phrase "is ignored" from the last sentence of section 8.5.9 rev 2.2
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 439: 6.5.11 UnionDef Last Paragraph - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This Para indicates that the type member is ignored and that it should be set to TC_void. If it is ignored, why should it be set to anything?
Resolution: Incorporate resolution and close issue
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 440: 6.5.20 AttributeDef Paragraph 2 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: What does the describe operation return for this interface?
Resolution: Add the sentence "The describe operation for an AttributeDef object returns an AttributeDescription
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 441: 6.5.22 InterfaceDef Paragraph 6 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: This Para indicates that the base_interface attribute can return an error if there are name conflicts. What error is returned?
Resolution: Subsumed by 778
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 442: 6.5.22 InterfaceDef Paragraphs 7 and 8 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: These paras indicate that an error is returned if the ID already exists in the repository. What is the error and what happens of the IR supports versioning?
Resolution: Superceded by 778
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 443: 6.6.1 OMG IDL Format Paragraph 5 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The semantics of minor version number changes should be a requirement on conforming applications (objects).
Resolution: That"s what the sections appears to say. close issue, no change
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 444: 6.6.4 Pragma Directives for RepositoryId Para 1 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Conforming compilers should ignore pragmas that are not defined. in this spec, and that they do not explicitly support. Portable applications should only use pragmas defined in this spec.
Resolution: The proposal in the summary is unreasonably restrictive, and would disallow use of other pragmas i
Revised Text: Append the following sentences to Para 1 of section 8.6.4
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 445: 6.7 TypeCodes Paragraph 3 - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: It"s better to say "However, TypeCode "literals" shall have a representation such that they can be placed in C include files."
Resolution: Offending sentence removed in the resolution of issue 73. This is the same as issue 73
Revised Text:
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 446: 6.7.1 The TypeCode Interface All Paragraphs - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: PIDL for this interface describes the exceptions that might be raised, but the text doesn"t define the conditions when all of those exceptions might occur. This must be addressed.
Resolution: Fixed in 2.2 close no change.
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 447: 6.7.1 The Type Code Interface Paragraph 4 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Last sentence: It"s not clear under which conditions this is permitted. It"s permitted when a structure,union,enumeration or alias typecode wasn"t obtained from Interface Repository.
Resolution: Fixed in 2.2 close no change
Revised Text:
Actions taken:
November 26, 1996: received issue
February 23, 1999: closed issue
Discussion:
Issue 448: 6.7.2 TypeCode Constants Last Paragraph - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para indicates that form of TypeCode constants might be implementation specific.Does that mean the contents of the TypeCode implementation as opposed to signature of programmer?
Resolution: Offending language has been removed in Revision 2.3
Revised Text: Close no change in 2.3a
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 449: 7.1 Converting Object References to Strings Para 3 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: it"s not clear from this whether the string generated by object_to_string is portable accross ORBs or among clients. Please add text clarifying portability of generated string.
Resolution: resolved, close issue
Revised Text: For all conforming ORBs, if obj is a valid reference to an object then string_to_object(object_to_string(obj)) will return a valid reference to same object if two operations are performed on same ORB. For all conforming ORBs supporting IOP this remains t
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 450: 7.2.1 Determining the Object Implementation and Interface (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para 1-comment: These interfaces are very important parts of ORB interface. Their semantics are very unclear. What exceptions are they permitted to raise? Expand on this definition.
Resolution: resolved, close issue
Revised Text: add a new paragraph at the beginning of 7.2.1, as follows:"Note: The get_implementation() operation is deprecated in this version of the specification, and will be removed in a future version of the specification."
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 451: 7.2.4 Equivalence Checking Operation Paragraph 3 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Concept of "type safe narrow" isn"t really described. What"s it"s importance, announcement mechanism, and whether it can be portably relied on by programmers. Where"s more info in spec??
Resolution: resolved, close issue
Revised Text: section 7.2.4, 3rd para: No change to this paragraph - it is non-normative. Replace "string" with "RepositoryID" in PIDL above
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 452: 7.2.5 Probing for Object Non-Existence Paragraph 2 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Para describes implementation strategies that ORB implementors might use to ensure ORBS remain synchronized about presence of objects.Info really appropriate for this spec?
Resolution: no change required, close issue
Revised Text: No change. This text is clearly non-normative.
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 453: 7.4 ORB Initialization Last Paragraph - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: X/Open would like to see either the provision for a system default ORB or an interface that application could use to get list of available ORBs from which to choose.
Resolution: No change to the specification. The existing spec supports a default ORB
Revised Text: No change to the specification. The existing spec supports a default ORB
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 454: 7.4 ORB Initialization Last Paragraph - objection (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Unacceptable to say that "calling the ORB_init function multiple times for the same ORB may be required where an ORB is implemented as a shared library."
Resolution: defer to portability
Revised Text: Intend od 2nd sentence is that some applications because of their thread structures, may have to call ORB_init() more than once in order to ensure that it is called at least once. This is a non-normative explanation of 1st sentence. Defer to Portability
Actions taken:
November 26, 1996: received issue
March 25, 1997: closed issue
Discussion:
Issue 455: 8.1 Role of the Basic Object Adapter Para 1 - comment (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Last sentence: Seems like an odd thing to say. All X/Open specs only guarantee that they are correct if system is configured correctly. Not a big deal
Resolution: resolved, close issue
Revised Text: The BOA will be replaced in a future version of the specification
Actions taken:
November 26, 1996: received issue
June 20, 1997: closed issue
Discussion:
Issue 457: CORBA::Bounds and CORBA::TypeCode::Bounds (orb_revision)
Click here for this issue's archive.
Nature: Bug
Severity: Critical
Summary: Summary: Does Bounds have data members or not? At what scope should Bounds be defined? Given that Bounds exception is also used by Request interface, I suspect what is meant is CORBA::Bounds
Resolution: no change to spec., close issue
Revised Text: No change to the specification. There are 2 definitions of Bounds: CORBA::Bounds and CORBA::typeCode::Bounds. Neither has data members
Actions taken:
November 13, 1996: received issue
December 11, 1996: closed issue
Discussion:
Issue 458: IDL grammar (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: There is an inconsistency between the IDL grammar as defined in chapter 3 of CORBA2.0 spec and an IDL example from same chapter(Example p. 3-16..rule 71 and rule 36 specify different
Resolution: resolved, close issue
Revised Text: Find the resolution in the corresponding archives file
Actions taken:
December 5, 1996: received issue
June 20, 1997: closed issue
Discussion:
Issue 459: CORE spec reference (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: CORE contains specific language binding information which should be in a language binding chapter or in a new appendix
Resolution: Such information now exists only in the way of examples of what a particular piece of pseudo-IDL me
Revised Text: Close no change in 2.3a
Actions taken:
November 26, 1996: received issue
February 22, 1999: closed issue
Discussion:
Issue 464: DII operations "get_response and get_next_response (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Both operations permit the flag CORBA::RESP_NO_WAIT to be set. How is is invoker being informed that there is no response available? Incorrect to use exception.
Resolution: resolved, closed issue
Revised Text: The CORBA 2.2 revision changed the mapping for some DII operations and
invalidated the C mapping for deferred synchronous DII. It may have
done the same for other languages that followed the C mapping rather
than the C++ mapping.
This is both a language mapping issue and a Core issue because of the
well-known mess in the PIDL for Request. Since the text for the C
mapping is in the DII chapter (that is, Core), until that mess is
cleaned up, it appears that orb_revision is the place to deal with the
faulty C mapping.
The problem is that the original (pre-2.2) PIDL for CORBA::Request had
the operation
Status get_response( in Flags invoke_flags);
If the RESP_NO_WAIT flag is set, return is immediate, even if the
response is not complete. Since "Status" was allowed to be mapped as a
"long" (in CORBA 2.1 and before), the return value could be used to
determine whether the response was ready by those implementations that
cared. With CORBA 2.2, "Status" was replaced by "void", making it
impossible to determine whether the response completed.
Exactly the same situation is true for the mapping of operation
get_next_response, for which no PIDL was ever given, only very
disparate language mappings.
The C++ mapping didn't use the Status approach. Its mapping added
(among others) operations CORBA::Request::poll_response and
CORBA::ORB::poll_next_response and redefined Request::get_response.
The same was true for Smalltalk.
We propose a similar approach to repair the C mapping. This does
nothing to move the C, C++, and Smalltalk mappings out of the chapter,
as they should be, but it at least makes the C mapping valid. Adding
"poll_response" to the Request pseudo-object doesn't heal the
disconnect between the PIDL and the language mappings -- obviously
more needs to be done to get to a cleaner spec -- but at least a valid
C language mapping would be restored.
Revised Text:
All references are to draft CORBA 2.3 (15-Nov-98).
1. Section 7.2 Request Operations, change the get_response operation
and add the poll_response operation to the IDL at the end:
void get_response () raises (WrongTransaction);
boolean poll_response();
2. Before 7.3.3, insert a section and renumber the following:
7.3.x poll_response
/* C */
CORBA_boolean CORBA_Request_poll_response (
CORBA_Request, CORBA_Environment *);
poll_response determines whether the request
has completed. A TRUE return indicates that it
has; FALSE indicates it has not.
Return is immediate, whether the response has
completed or not. Values in the request are
not changed.
3. Change the current 7.3.3 "get_response" to the
following, except leave the last paragraph as is.
//PIDL
void get_response () raises (WrongTransaction);
get_response returns the result of a request.
| If get_response is called before the request has
| completed, it blocks until the request has
| completed. Upon
return, the out parameters and return values
defined in the Request are set appropriately
and they may be treated as if the Request
invoke operation had been used to perform the
request.
4. In the current 7.3.4 "get_next_response"
a. Change the C mapping code to the following:
/* C */
CORBA_boolean CORBA_poll_next_response (
CORBA_Environment *);
void CORBA_get_next_response (
CORBA_Request *req,
CORBA_Environment *env
);
b. After the Smalltalk mapping, add the following paragraph.
poll_next_response determines whether any request
has completed. A TRUE return indicates that it
has; FALSE indicates it has not. Return is
immediate, whether any response has completed or
not.
c. Remove the two paragraphs beginning with:
"If the RESP_NO_WAIT flag..."
"The following response flag is defined ..."
Actions taken:
December 18, 1996: received issue
March 5, 1999: moved from c-rev-wg to orb_revisiojn
Discussion:
Issue 499: Internationalization (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: New Idl types have been introduced to cover non-ISO code sets.Sec 5.4.1 indicates that where "generic strings" are required in a spec "wstring"should be used. Place holder in naming spec: Istring
Resolution: not interpretable, closed
Revised Text:
Actions taken:
February 12, 1997: received issue
February 12, 1997: issue logged
February 23, 1999: moved to orb_revision
February 26, 1999: closed issue
Discussion: moved to orb_revision
Issue 542: Interface Repository (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: In the Interface Repository spec, StructDef,UnionDef, and ExceptionDef should be derived from Container,since types can be defined within structs,unions,and exceptions according to IDL gram
Resolution: resolved, close issue
Revised Text: In section 6.5.10 add a sentence to the end of the first paragraph:"It can contain structs, unions, and enums." and change the IDL declaration (see corresponding archive file)
Actions taken:
April 15, 1997: received issue
June 20, 1997: closed issue
Discussion:
Issue 545: Enums and enumerators (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Sec 3.13 says enumerators don"t create a nested scope.Implication: 2 differnt enum types within same module can"t have same enumerator names. Flag following example as an error
Resolution: issue closed, no change
Revised Text:
Actions taken:
April 10, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 551: Object::is_a (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Some ORBs are sloppy about existence. One ORB used raises INV_OBJREV whenever object doesn"t exist, even when server can be reached. Behavior is compliant..tighten spec here.
Resolution: close no change in 2.4
Revised Text:
Actions taken:
April 22, 1997: received issue
February 23, 1999: moved to orb_revision
Discussion:
Issue 556: OTS 1.1 specification changes (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: OTS 1.1 spec doesn"t clearly say which module defines the TRANSACTION_REQUIRED, TRANSACTION_ROLLEDBACK, INVALID_TRANSACTION WRONG_TRANSACTION exceptions.
Resolution: resolved close issue
Revised Text: Add 3 lines to the end of 3.15.1 as follows: exception TRANSACTION_REQUIRED ex_body; exception TRANSACTION_ROLLEDBACK ex_body; exception INVALID_TRANSACTION ex_body. Add a new section 3.15.3, as follows: <find new section in corresponding archive file>
Actions taken:
April 28, 1997: received issue
June 20, 1997: closed issue
Discussion:
Issue 557: WRONG_TRANSACTION (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: OTS 1.1 spec (page 10-17 and 10-18) is not clear whether the WRONG_TRANSACTION exception is intended to be a system exception or a user exception
Resolution: issue resolved, see revised text
Revised Text: Add a new paragraph at the end of 4.1 as follows. --> Find new paragraph in corresponding archives file
Actions taken:
April 28, 1997: received issue
June 20, 1997: closed issue
Discussion:
Issue 563: Object terminal missing from IDL grammar (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Given the current IDL grammar, there is no way to parse any IDL containing the keyword "Object". It never appears in the grammar as a terminal symbol.
Resolution: resolved, closed in "97
Revised Text: Append a line to production (31) and (32) <base_type_spec>, as follows:"| <object_type>", and insert a new production between (31) and (32), as follows"(31a) <object_type> ::="Object"". also, append sentence to second para of 3.2.4 (see corresponding arc
Actions taken:
May 1, 1997: received issue
June 20, 1997: closed issue
Discussion:
Issue 564: Description of constant expression semantics is unclear (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary:
Resolution: resolved, closed issue
Revised Text: replace 3rd para of 3.7.2 with the following (find full text in the corresponding archive file)
Actions taken:
May 1, 1997: received issue
June 20, 1997: closed issue
Discussion:
Issue 565: Terminology consistency (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: What terminology should the core settle on? Interface inheritance with use of subtype/supertype? What about immediate and transitive versions of relationships?
Resolution: resolved closed issue
Revised Text: This issue is being addressed by the ORMSC in its revision of the OMA. When they complete the revision a new issue if necessary will be filed to bring
the Core Chapters 1 and 2 in line with the new OMA. For now nothing should be done in this regard to the Core chapters pending the completion of the OMA
revision
Actions taken:
May 20, 1997: received issue
August 12, 1999: closed issue
Discussion:
Issue 566: OMG IDL prefix pragma (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: All standard OMG IDL including the CORE and all services have implicit #pragma prefix "omg.org". Make sure this appears intext of ALL IDL that is specified, particular in CORBAServices
Resolution: closed issue
Revised Text: Fixed by IOP 1.1
Actions taken:
May 22, 1997: received issue
June 20, 1997: closed issue
Discussion:
Issue 567: Scope and use of prefix pragma in IDL-style repository IDs (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: There is confusion about effect of "prefix" pragma evident in the Interface Repository chapter. Whole notion of prefix should be explained more fully in section 6.6.1
Resolution: Clarifying language has been incorporated in section 10.6.5.2 (old section 8.6.5.2) in Rev 2.3 adeq
Revised Text: Close no change in 2.3a
Actions taken:
May 12, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 568: inherit vs. include (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Ther is sense in which an interface "includes" operations it inherits from its base interface.Does it also "include" types, constants, and exceptions?
Resolution: close issue with annotation fixed in Rev 2.2+
Revised Text:
Actions taken:
May 21, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 569: What exactly is a request (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: One may expect it to be a reply or response.Reading chapters 1,4,5 makes clear that it is the entirety of an invocation of an operation, including request and response. Change possible soon?
Resolution: Clarify the sense in which the term Request is used in section 1.2.2
Revised Text: Replace the second sentence of the first paragraph of section 1.2.2 by:
"The term Request is broadly used to refer to the entire sequence of
causally related events
that transpires between a client intiating it and the last
event causally associated with that initiation, e.g. the
client receives the final response associated with that Request from
the server, or the server carries out the associated operation in case
of a oneway request, or the sequence of events associated with the
Request terminates in a failure of some sort. The initiation of a
Request is an event."
Actions taken:
May 20, 1997: received issue
August 12, 1999: closed issue
Discussion:
Issue 570: "service"~~operation or interface? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Does a service consist of single operation, or a collection of related operations, exceptions, types, and constants?
Resolution: Cleaning up the use of the word service throughout the document does not seem to be an achievable g
Revised Text: 1. In section 1.2.5 append the following phrase to the first sentence:
Actions taken:
May 20, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 571: Question about IDL grammar (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Is it a mistake, in IDL grammar as given in CORBA 2.0, revised July 1996, that <octet_type> is not one of <const_type>s?
Resolution: subsumed by issue 725
Revised Text:
Actions taken:
May 6, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 588: limited-length strings (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Limited-length strings are missing from enumeration in section 1.2.4. Were they intended to go in "Basic Types" or the "Constructed types" section?
Resolution: Incorporate change in 2.3a and close issue
Revised Text: ° A string type, which consists of a variable-length array of characters
Actions taken:
May 29, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 595: Section 16.7: only C++ mapping defines string_free and string_dup (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Only the C++ mapping defines string_free and string_dup. Why are these methods not present in other language mappings? If they are generally applicable they should be added to the IDL
Resolution: They are C++ language specific helper functions, that is why they are in the C++ mapping section. T
Revised Text:
Actions taken:
July 9, 1997: recived issue
February 23, 1999: issue closed, no change
Discussion:
Issue 596: request() should be added to IDL (section 17.13.2) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The Object C++ mapping has an _request() method that is not in the IDL. This method should be added to the IDL
Resolution: The Object::_request operation is an artifact of the C++ mapping and not generally applicable to ot
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed, no change
Discussion:
Issue 597: Sequence parameter specified is ignored (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Why does mapping ignore the sequence parameter specified in the IDL for the initialization service and split this single parameter into 2 separate ones in the mapping?
Resolution: That is an artificat of C/C++ historical usage and is not a core issue. In general language mapping
Revised Text: Close no change in 2.3a
Actions taken:
July 9, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 598: sec 17.7.1: IDL for interface request doesn"t match C++ mapping (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The IDL for interface Request does not match the C++ mapping. There are a series od add_arg methods in the mapping that should be added to the IDL.
Resolution: Language mappings are allowed to have custom mappings for pseudo-interfaces.
Revised Text: Close no change in 2.3a
Actions taken:
July 9, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 604: Section 7.2: get_implementation function (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Why does Object have a get_implementation function instead of a readonly implementation attribute? (likewise for get_interface)
Resolution: closed issue, no change
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed issue, no change
Discussion:
Issue 607: No defined value for OBJECT_NIL (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 7.2.3: reference is made to OBJECT_NIL but there is no defined value for this. A value must be explicitly defined and typed
Resolution: resolved, close issue
Revised Text:
Actions taken:
July 9, 1997: received issue
February 26, 1998: closed issue
Discussion:
Issue 609: TCKind enum should be updated (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 6.8: TCKind enum should be updated to include adopted IDL type extensions as follows: tk_longlong, tk_longdouble, tk_wstring, tk_wchar. Update DefinitionKind and PrimitiveKind enum
Resolution: Close, fixed in 2.2
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 610: create_exception() is declared outside any interface scope (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 6.8: The create_exception() methos is declared outside any interface scope. It seems logical to move it to Container Interface along with other create_XXX() methods
Resolution: Fixed in 2.2
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 611: Syntax for basic types must be updated (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 3.8.1: The syntax for basic types must be updated to include the adopted IDL type extensions.
Resolution: Fixed in 2.2
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 623: Section 7.8: editorial (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 7.8: ; is missing from definition of attribute policy_type
Resolution: Close, Fixed in 2.2
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 624: Section 3.7.2: take new IDL type extensions into account (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The section states that the <<and>> operands must be in the range 0 to 32. Should be changed to 0 to 64 to take new IDL type extensions into account
Resolution: Close, Fixed in 2.2
Revised Text:
Actions taken:
July 9, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 641: Do identifiers and keywords clash if they differ in case? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section 3.2.3 and 3.2.4: It"s not said explicitly that an identifier may not differ from a keyword only in case since it differs only in case from a keyword
Resolution: Fixed in 2.2+, Close
Revised Text:
Actions taken:
July 30, 1997: received issue
June 25, 1998: closed issue
February 23, 1999: closed issue
Discussion: closed issue
Issue 665: TypeCode equality (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: TypeCode equality is not very well-specified or portable.
Resolution: Incorporate more complete specification as shown below:
Revised Text: In section 3.8.2 following to the paragraph describing the any type:
Actions taken:
August 11, 1997: received issue
May 12, 1998: issue moved from port-rtf to orb_revision
February 23, 1999: closed issue
Discussion: : complete the changes that were intended in the resolution of issue 665 by adding
the missing pieces in Chapter 15
Revised Text:
Page 15-23, first para following heading "Encoded Idnetifiers and Names":
Change the para to read:
The Repository ID parameters in tk_objref, tk_struct, tk_union,
tk_enum, tk_alias, tk_except, tk_native, tk_value, tk_value_box
and tk_abstract_interface TypeCodes are Interface Repository
RepositoryId values, whose format is described in the specification
of the Interface Repository. For GIOP 1.2 onwards, repositoryID
values are mandatory. For GIOP 1.0 and 1.1, RepositoryId values are
required for tk_objref and tk_except TypeCodes; for tk_struct,
tk_union, tk_enum, and tk_alias TypeCodes RepositoryIds are
optional and encoded as empty strings if omitted.
Actions taken: Send this issue with the recommendation to adopt the proposed
resolution and revised text as above to the Interop RTF, with a strong
Issue 666: Native types with respect to typecodes, DII, DSI,Interface Reposit. (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: The portability spec is silent on issue of native types with respect to typecodes, DII, DSI and Interface Repository. Issue should be addressed. (see archive for details)
Resolution: Proposed resolution is to add representation of native type in the IR. Details below as proposed by
Revised Text: Here are the proposed extensions to allow native types in the IR. Our
Actions taken:
August 11, 1997: received issue
May 12, 1998: issue moved from port-rtf to orb_revision
February 23, 1999: closed issue
Discussion:
Issue 675: Section 3.3.8.16:deactivate_object() operation (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Section states that the deactivate_object() operation doesn"t wait for etherialize operation to complete before it returns. This is impossible to implement in single-threaded ORB
Resolution:
Revised Text:
Actions taken:
August 13, 1997: received issue
February 25, 1999: moved to cxx_revision
March 8, 1999: moved from cxx_revision to orb_revision
October 30, 2000: resolved
Discussion: moved from cxx_revision to orb_revision
Issue 719: CDR encoding of TypeCode names inconsistent with equal operation (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: Should the TypeCode equal operation compare the results of name() to determine TypeCode equality? Same question for member_name()
Resolution: Duplicate of issue 665
Revised Text:
Actions taken:
September 10, 1997: received issue
September 12, 1997: closed issue
Discussion:
Issue 724: Non ASCII alphabetics in IDL identifiers (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: IDL identifiers can contain non-ASCII alphabetic characters. None of the language maappings deals with this. To fix this restrict IDL identifiers to ASCII characters, digits and underscore
Resolution: Since most of the implementation languages to which IDL is mapped do not accept non-ASCII character
Revised Text: All revisions refer to base document Rev 2.2+ i.e. Rev 2.2 as modified by ptc/98-03-03
Actions taken:
September 17, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 725: Octet and enum constants (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: IDL should permit enum and octet constants.
Resolution: The following changes add enum and octet constants to IDL:
Revised Text: Page 3-11, production 13:
Actions taken:
September 17, 1997: received issue
February 23, 1999: closed issue
Discussion: :=
Issue 726: Figure 2-2 in CORBA 2.0 and CORBA 2.1 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized
Severity:
Summary: Summary: In the figure all the interfaces/skeletons/adaptors/stubs have either an Up-call or a Normal-call arrow or both with the exception of the Dynamic Skeleton which has neither
Resolution: Add an Up-Call Arrow to the Dynamic skeleton box.
Revised Text:
Actions taken:
September 18, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 727: Bug in the 2.1.spec for IDL unions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: Table 3-11 on page 3-26 shows wchar as al legal switch type for unions. The grammar on page 3-26 doesn"t have wchar as a legal switchtype. The same is true for grammar on page 3-13. Is wchar legal for union discriminator? Spec will need to be fixed
Resolution:
Revised Text:
Actions taken:
October 17, 1997: received issue
May 6, 1999: moved from idltx to core RTF
October 30, 2000: closed issue
Discussion:
Issue 749: Issue with ObjectId_to_string and string_to_ObjectId (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: Section 18.4 "illegal characters": It should be clarified what corresponds to the concept of "illegal characters". On the othe hand, do we want to specify that ObjectIds generated by the POA should not include those "illegal characters?
Resolution:
Revised Text:
Actions taken:
October 6, 1997: received issue
June 8, 1999: moved from C++ to Core RTF
October 30, 2000: closed issue
Discussion:
Issue 751: Inclusion of standard exception (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: The proposal is to define a new standard exception, called
EXTERNAL_ACCESS (the name is not important) that carries
an any value. Another alternative may be to re-define
the exception COMM_FAILURE so that it may carry an any in
addition to the existing minor and completed fields.
Resolution: close no change in 2.4
Revised Text:
Actions taken:
October 6, 1997: received issue
August 12, 1999: closed issue
Discussion: Not clear that an RTF is the right place for adding such featurelets. This should be added as part of some appropriate submission to some RFP.
Issue 753: Inheriting exceptions in IDL (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: When writing IDL, why is it not possible to have an exception declaration inherit from another exception? It"s possible to have an interface inherit another interface, so it seems logical to derive an exception class from an already declared exception area
Resolution: close issue with no change with the above explanation.
Revised Text:
Actions taken:
October 23, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 754: Minor bug in 2.1 spec (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: The grammar mentions fixed point literals for constsnts on page 3-12. The corresponding section of the grammar on page 3-19 does not include <fixed_pt_literal> as a valid constant initializer
Resolution: incorporate changes in 2.3 and close this issue and 1066.
Revised Text: 1. Change Production 80 to remove <fixed_pt_type> as a valid parameter type:
Actions taken:
October 21, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 776: CORBA 2.1 IR Structdef typo (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: "Read Interface" section of 7.5.10: The second sentence is a typo. The StructDef as a whole can "contain" structs, unions, and enums. However, the members attribute is a CORBA IDL data type not a subtype of Container, and hence cannot "contain" anything in the sense used elsewhere in the IR spec. The sentence should be deleted
Resolution: Remove the second sentence in section 8.5.10 of Rev 2.2
Revised Text:
Actions taken:
October 30, 1997: received issue
February 23, 1999: closed issue
Discussion:
Issue 777: TypedefDef issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: Is it legal for a TypedefDef to contain another TypedefDef that is NOT mentioned in it"s "members" attribute? If not, should the IR spec explicitly forbid this?
Resolution: resolved, issue closed
Revised Text: StructDef, UnionDef, ExceptionDef, InterfaceDef, and ValueDef are
derived from Container, but may only legally contain certain types of
Interface Repository definitions.
StructDef, UnionDef, and ExceptionDef objects may only contain
StructDef, UnionDef, or EnumDef definitions.
InterfaceDef and ValueDef objects may only contain TypedefDef (including
definitions derived from TypedefDef), ConstantDef, and ExceptionDef
definitions.
Revised Text:
Add the following text to the second paragraph of 10.5.4.2:
Certain interfaces derived from Container may restrict the types of
definitions that they may contain. Any create_<type> operation that
would insert a definition that is not allowed by a Container will raise
the BAD_PARAM exception with minor code 4.
Add to the end of 10.5.10.2:
A StructDef used as a Container may only contain StructDef, UnionDef, or
EnumDef definitions.
Add to the end of 10.5.11.2:
A UnionDef used as a Container may only contain StructDef, UnionDef, or
EnumDef definitions.
Add to the end of 10.5.20.2:
An ExceptionDef used as a Container may only contain StructDef,
UnionDef, or EnumDef definitions.
Add to the end of 10.5.23.2:
An InterfaceDef used as a Container may only contain TypedefDef,
(including definitions derived from TypedefDef), ConstantDef, and
ExceptionDef definitions.
Add to the end of 10.5.24.2:
An InterfaceDef used as a Container may only contain TypedefDef,
(including definitions derived from TypedefDef), ConstantDef, and
ExceptionDef definitions.
Actions taken:
October 30, 1997: received issue
August 12, 1999: closed issue
Discussion:
Issue 778: Proposed IFR exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: Proposed IFR exceptions raised by destroy() and move(): exception DependencyExists {}; raised by create_* and move(): exception RIDAlreadyDefined {}; exception NameALreadyDefined {};
Resolution: Incorporate changes in 2.3a and close issue.
Revised Text: 1. In Chapter 3 section 3.17.2 table of minor codes add the following rows in the BAD_PARAM group:
Actions taken:
November 7, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 779: Containers (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: On the issue of making StructDef, UnionDef, and ExceptionDef inherit from container, would it be possible to introduce the depreciation of including anything other than members in these three types?
Resolution: This issue appears to be a rehash of the essence of Issue 777 so I recommend that we close this wit
Revised Text:
Actions taken:
November 7, 1997: received issue
August 12, 1999: closed issue
Discussion:
Issue 780: RIDs (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: The definition of IDL Repository IDs the example in the IFR chapter 7.6.6 indicates that prefixes when not set are not separated. Definition says that "typically" it is the prefix and scoped name separated with "/".
Resolution: Fixed with sepcific example in section 10.6.5.2 in Rev 2.3
Revised Text: Close no change in 2.3a
Actions taken:
November 7, 1997: received issue
February 22, 1999: closed issue
Discussion:
Issue 783: IDL types are ambiguous with inheritance (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: What is the return type of parent(), short or long? The spec does not say whether the inherited ::y::y::z takes precedence, or whether it is ::x::z. The scope resolution rules don"t mention how to resolve such an ambiguity. The spec should be updated to state that ::x::z takes precedence (IDL example in corresponding archive "issue783")
Resolution: Close noting that this has been explained in Revised Chapter 3.
Revised Text:
Actions taken:
November 25, 1997: received issue
January 5, 1998: issue moved from C++ to ORB Revision
February 23, 1999: closed issue
Discussion: closed issue
Issue 797: locally constrained (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: What is the consensus for the notation to use for interfaces to objects
that are in the orb but not outside. We use to call them psuedo objects.
During the last talk I got the feel that there are three options:
1. //PIDL
2. "psuedo" keyword placed before "interface"
3. //locally constrained
Resolution:
Revised Text:
Actions taken:
December 9, 1997: received issue
December 23, 1997: closed issue
December 23, 1997: moved issue to orb_revision
October 30, 2000: closed issue
Discussion:
Issue 811: union typecode (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: 1. The label value corresponding to a default label should be
designated explicitly either as an ignored field whose size equals the
size for the discriminator type, as some value that does not coincide
with another label value, as reserverd for future use, or as absent
(Table 12-2 and page 12-16, "encoding the tk_union Default Case" of
IIOP 2.1).
Resolution:
Revised Text:
Actions taken:
December 23, 1997: received issue
December 29, 1997: closed issue
Discussion:
Issue 812: union typecode (02) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: 2. I cannot locate where the definition of typecodes for unions with
members with multiple labels. The natural semantics with respect to
the member accessor operations on that typecode and the CDR
marshalling of that typecode would seem to be that the union
declaration is treated as if the member definition in question were
replicated once for each label.
Resolution:
Revised Text:
Actions taken:
December 23, 1997: received issue
March 26, 1998: closed issue
Discussion:
Issue 884: Appendix B lists incorrect CORBA Components IDs (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: 1. Appendix B lists the CORBA Component IDs. This listing is
incorrect: Proposed resolution: Change Appendix B to correspond to the
main text.
Resolution: Proposed resolution: Change Appendix B to correspond to the
Revised Text:
Actions taken:
January 7, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 903: Ambiguity in non_existent() specification (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: There is a minor ambiguity here. Consider the case where the ORB cannot
make a reliable determination because the client-side run-time cannot
reach the implementation repository or the server. In that case, most
ORBs will raise a TRANSIENT or COMM_FAILURE exception. I can read the
above words in the spec to mean that a compliant implementation of
non_existent is allowed to hide the exception from me and return false
instead.
I suggest to amend the wording such that non_existent is obliged to propagate
any exception other than OBJECT_NOT_EXIST back to the caller.
Resolution: Sugested text below , close issue
Revised Text:
Actions taken:
January 13, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 910: #pragma processing (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 7-32, the 2.1 spec says about #pragma processing:
An IDL compiler must either interpret these annotations
as specified, or ignore them completely.
I don"t think this makes sense.
If the prefix pragma isn"t honored in one ORB, but used by another ORB,
the repository IDs will disagree for types generated from the same
IDL definition, but with different IDL compilers. This in turn means
that interoperability is destroyed.
Resolution: See resolution of 999 , close issue
Revised Text:
Actions taken:
January 23, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 911: Question about typecode creation (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Consider the following operation in the ORB pseudointerface:
TypeCode create_union_tc (
in RepositoryId id,
in Identifier name,
in TypeCode discriminator_type,
in UnionMemberSeq members)
Suppose that in some mapping this is invoked with the given arguments,
i.e. an id, a name, a discriminator_type, and members..
For concreteness, suppose that the id argument has the value
"IDL:foo/bar:1.0".
There are three main cases:<<Go to issue archive>>
Resolution: Add clarification to section 10.6 that consistency of RepositoryIds with the IDL source or the IR i
Revised Text:
Actions taken:
January 21, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 912: Inheritance of Exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: This is a request to add an optional extension to IDL which would
permit an exception declaration to include a specification of the
superexception or superexceptions for a given exception, exactly the
same way superinterfaces may be specified when defining an interface.The advantage of this extension is that it (optionally) permits
interface designers to organize exceptions into categories, which can
help clarify the design of the exceptions.
Resolution: close issue, resolved
Revised Text:
Actions taken:
January 22, 1998: received issue
February 23, 1999: closed issue
Discussion: close issue, resolved
Issue 913: defined_in member of ModuleDescription for top-level module (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: What is the value member of what is returned by
CORBA::Contained::describe when invoked on a CORBA::ModuleDef object
corresponding to a top-level IDL module?
Resolution: Incorporate change in 2.3 and close issue
Revised Text:
Actions taken:
January 21, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 915: Trader constraint language and international characters (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: the trader constraint language (page 16-98, 2.1 spec) defines a
character class "<other>". This class is used in the definition of
what characters may appear inside a string literal (on page 16-97).
The problem is that the definition limits the legal character values
that may appear in a string literal. Only character positions 0x1
to 0x7f are legal, anything else is illegal.
Resolution: Replace section B.2.3 with corresponding text from the ISO Trader standard
Revised Text: Replace section B.2.3 on page 16-97 of formal/97-12-23 by the following:
"B.2.3 Character Set Issues
The previous BNF has been complete up to the non-terminals <Leader>,
<Follow>, <Alpha>, <Digit>, and <Other>. For a particular character set,
one must define the characters which make up these character classes.
Each character set which the trading service is to support must define
these character classes.
The character classes for the ISO Latin-1 character set are:
<Leader> := <Alpha>
<Follow> := <Alpha>
| <Digit>
| _
<Alpha> is the set of alphabetic characters(letters), as defined in
ISO/IEC 14750
<Digit> is the set of digits [0-9]
<Other> is the set of Latin-1 characters that are not <Alpha>,
<Digit>, or <Special>"
Actions taken:
January 21, 1998: received issue
August 12, 1999: closed issue
Discussion:
Issue 916: Resetting #pragma prefix? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: the spec doesn"t say how I can reset a repository ID prefix back to nothing
after I have set it. Consider
#pragma prefix "dstc.edu.au"
interface foo {};
#pragam prefix "" // Attempt to reset prefix
interface bar {};
This doesn"t work with at least one ORB I have tried.
Resolution: See resolution of issue 999 , close issue
Revised Text:
Actions taken:
January 26, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 917: Incorrect definition of "object type" (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The definition of interface and object type in the Object Model
are imprecise, if not incorrect. [See section 1.2.5 of the Corba 2.1
spec (Aug 1997)]
Resolution: Clarify as follows
Revised Text:
Actions taken:
January 27, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 918: CORBA::Contained::describe() underspecified (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: The describe() operation of the CORBA::Contained interface of the
Interface Repository is under-specified in CORBA 2.1. (section 7.5.3
on page 7-12). The text should add that the "kind" field of the returned
Description struct should give the DefinitionKind for the "most derived"
type of the object. Without this, the spec can be read as allowing
describe() to return a kind of dk_Typedef, or even dk_all!
Resolution: incorporate the proposed clarification
Revised Text:
Actions taken:
January 25, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 991: Operation to add to CORBA::ORB pseudo-object (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: The following operations should be added to the CORBA::ORB
pseudo-object:
module CORBA {
interface ORB {
...
typedef sequence<octet> SerializedData;
typedef unsigned long SerializedEncoding;
const SerializedEncoding CDR_ENCODING = 0;
SerializedData serialize(in Any data,
in SerializedEncoding how);
Any unserialize(in SerializedData data,
in SerializedEncoding how);
...
};
};
Resolution: Close no change in 2.4
Revised Text:
Actions taken:
March 4, 1998: received issue
August 12, 1999: closed issue
Discussion: This issue is very unlikely to get resolved resolved through the RTF process. It was attempted once and it failed. Some of the objections were that it is inappropriate
to add such a complete featurelet through the RTF. It is probably better added through some submission to some RFP. It is therefore proposed that this issue be
closed.
Issue 992: CORBA 2.2 - "native" and the interface repository (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: Whilst implementing the POA I noticed that there were no extensions to
the Interface Repository or TypeCodes to handle native types.
The nett result appears to be that there is no way to express some of
the POA interfaces in the Interface Repository. Obviously the native
interfaces themselvse can"t be expressed, but nor can some of the IDL
specified interfaces.
e.g. ServantLocator has two operations (preinvoke and postinvoke) both
of which have a Cookie listed as a parameter. There appears to be no way
to generate a TypeCode for the Cookie (native) paramter and therefore no
way to perform an InterfaceDef.create_operation to desribe either of
preinvoke or postinvoke.
Resolution:
Revised Text:
Actions taken:
March 5, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 999: #pragma prefix issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: How does the scope of #pragma prefix interact with #include? Find details in the corresponding archive
Resolution:
Revised Text: The following text changes describe the resolution. Since vote 3 the changes to 8.6 have been added
Actions taken:
March 13, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1054: Marshalling is_equivalent (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: CORBA 2.2 GIOP does not define a way to invoke is_equivalent on an object remotely
Resolution: close no change with above explanation
Revised Text:
Actions taken:
March 13, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1066: Fixed point constant typo in 2.2 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 3.7.2 of CORBA 2.2 contains an error on page 3-20, last para:
For example, 0123.450d is considered to be fixed<5.2> and
3000.00 is fixed<1,-3>.
This is in conflict with section 3.2.5 on page 3-9, last para:
A fixed-point decimal literal consists of an integer part, a
decimal point, a fraction part and d or D. [ ... ]
Either the integer part of the fraction part (but not both)
may be missing; the decimal point (but not the letter d (or D))
may by missing.
So, it seems that the "3000.00" on page 3-20 really should be
"3000.00d" or "3000.00D".
Resolution:
Revised Text:
Actions taken:
March 18, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1067: Wide character and wide string literals (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 3.2.5 on page 3-9, 2nd para says:
Wide character and wide string literals are specified exactly
like character and string literals. All character and string
literals, both wide and non-wide, may only be specified
(portably) using the characters found in the ISO 8859-1 character
set, that is interface, names, operation names, type names, etc., will
continue to be limited to the ISO 8859-1 character set.
- The first part says that wide character literals and wide string literals
are to be specified exactly like character and string literals.
This seems to be impossible - if they were exactly the same, there would
be no point in having them... At any rate, the sentence seems to
imply that I must restrict myself to ISO Latin-1 characters in
wide literals.
- The second part then says that wide literals are restricted to 8859-1,
but that interface names (etc.) will continue to be limited to 8859-1.
Now what is that supposed to mean? Interface names have always (and
incorrectly) been limited to 8859-1. Nothing has changed. Am I to
imply then that the sentence was meant to suggest that wide literals
can actually contain wide characters other than 8859-1?
This paragraph simply doesn"t make sense as it stands.
Resolution:
Revised Text:
Actions taken:
March 18, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1068: Fixed point constants issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Page 3-20 of CORBA 2.2:
A fixed-point literal has the apparent number of total and
fractional digits, except that leading an trailing zeros are
factored out, including non-significant zeros before the decimal
point. For example, 0123.450d is considered to be fixed<5,2> and
3000.00 is fixed<1,-3>.
Apart from the fact that 3000.00 is not a fixed point constant literal,
I"m confused about something else...
If 3000.00d is fixed<1,-3>, then 3000.0000d is also fixed<1,-3>.
These rules result in
3000.00d being fixed<1,-3>
BUT
3000.01d being fixed<6,2>
This doesn"t seem to make sense. If I bother to write the trailing zeros,
surely I have a reason, namely, that I mean to use that scale. In other words,
I think that
3000.00d should be fixed<6,2>
and
3000.0000d should be fixed<8,4>
Why are fractional trailing zeros thrown away but fractional trailing
non-zeros retained?
Resolution:
Revised Text:
Actions taken:
March 18, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1071: Type of fixed point quotients (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Significant
Summary: Summary: the 2.2 spec on page 3-20 defines the type of a fixed point division as:
fixed<(d1-s1+s2) + Sinf, Sinf>
I"m having a problem with this: The type of the result cannot be known
at compile-time because it depends on the actual values.
This differs from the add, subtract, and multiplication operators,
where the result type can be determined statically.
There is a C++ mapping problem too. The C++ mapping uses a template
type for fixed point, where the digits and the scale are template parameters
(i.e. must be compile-time constants).
Resolution:
Revised Text:
Actions taken:
March 19, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1074: Typo in type code section (13.3.4) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 13-13, CORBA 2.2:
A "simple" parameter list has a fixed number of fixed length entries,
or a single parameter which is has its length encoded first.
This should probably be
... single parameter which has is length encoded first.
Resolution:
Revised Text:
Actions taken:
March 19, 1998: received issue
June 25, 1998: closed issue
Discussion:
Issue 1086: How to deal with object identity (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I"m not quite sure where this should go, but there should be an explicit
statement somewhere in the CORBA descriptions that states how to deal
with object identity with respect to subscribe/unsubscribe schemes.
The (language/CORBA/etc independent) pattern
interface SomeSender {
void addSomeListener( in SomeListener theListener );
void removeSomeListener( in SomeListener theListener );
...
}
is very commonly found, and as far as I understand it (I might be wrong,
but if so, it needs to be documented that this would be incorrect),
SomeListener actually needs to implement a "is_identical( Object )"
operation that would be called by the removeSomeListener() operation
in order to find out which of the registered listeners should be removed.
Resolution:
Revised Text:
Actions taken:
March 20, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1087: IDl "module" construct - IDL files (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: It appears that the IDL concept of a module is tightly bound to
the storage of IDL statements in files. In other words, it does not
seem to be possible to distribute IDL statements in the same logical
module across multiple files. Consequently, few people use the
concept, and name collisions occur sooner or later when trying to
integrate systems that have not been developed by only one group.
Resolution:
Revised Text:
Actions taken:
March 20, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1088: ORB_init (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Page 4-9 of CORBA 2.2:
ORBid strings other than the empty string are intended to be used
to uniquely identify each ORB used within the same address space
in a multi-ORB application.
I don"t believe this is possible, mainly because the language mappings
do not permit multiple ORB run-time libraries to be linked into the same
address space.
Resolution:
Revised Text:
Actions taken:
March 20, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1091: Editorial issue, chapter 8 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: In the recap IDL at the end of chapter 8, there is a missing comma after
the tk_except enumerator in the definition of TCKind.
Resolution:
Revised Text:
Actions taken:
March 21, 1998: received issue
February 23, 1999: closed issue
Discussion: received issue
Issue 1094: Indentation on page 4-4 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: interface Object on page 4-4 shows:
interface Object {
ImplementationDef get_implementation();
InterfaceDef get_interface();
boolean is_nil();
Object duplicate();
void release();
boolean is_a(...);
boolean non_existent();
boolean is_equivalent(...);
unsigned long hash(...); <======
// ...
};
The first four declarations use no indentation, the fifth declaration
uses one indentation level, and the final four declarations use a different
indentation level. This could be tidied up a bit.
Resolution:
Revised Text:
Actions taken:
March 22, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1145: Forward declarations and inheritance (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The IDL spec explains forward declarations at the end of section 3.5.2.
However, it does *not* make the following illegal:
interface base; // Forward declaration
interface derived: base { // Should be illegal
// ...
};
interface base {
// ...
};
The problem here is that a forward-declared interface is used as a base
interface before the definition for that interface has been seen.
In the absence of further words in the spec, this is legal, but clearly,
it should be illegal (otherwise, I can"t use a single-pass compiler).
Resolution:
Revised Text:
Actions taken:
April 16, 1998: received issue
June 25, 1998: moved from port-rtf to orb_revision
February 22, 1999: closed issue
Discussion:
Issue 1146: Semantics and standard exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The spec lists the standard exceptions in section 3.15.1.
However, for many of these, there are no semantics specified anywhere.
Instead, for the majority of standard exceptions, the *only* "semantics"
are what is in the comments in section 3.15.1.
We badly need an explanation of which standard exception indicates what
error condition in the spec, otherwise we"ll never get agreement on which
exception means what...
Resolution:
Revised Text:
Actions taken:
April 16, 1998: received issue
June 25, 1998: moved from port-rtf to orb_revision
February 23, 1999: closed issue
Discussion:
Issue 1153: Domain manager related specification shortcoming(s) (01) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: 1) The specification lacks any operations for moving an object reference
from one domain manager to another, thus making the domain manager
abstraction less useful as a means for managing allocation of policies
to groups of object references, the memberships of which change over a
period of time.
Resolution: This issue is included in the mandatory requirements of the Security Domain Membership Management R
Revised Text:
Actions taken:
April 17, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1154: Domain Manager related specification shortcoming (02)-ConstructionPolicy (orb_revision)
Click here for this issue's archive.
Nature:
Severity:
Summary: Summary: 2) The associated ConstructionPolicy object does not provide any
facility for allocating an object reference to any domain manager other
than the domain manager to which the creator (if an object) belongs or a
completely new domain manager.
Resolution: This issue is included in the mandatory requirements of the Security Domain Membership management R
Revised Text:
Actions taken:
April 17, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1155: Domain Manager related specification shortcomings (03) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: 3) There is no way at present to implement the
Object:get_domain_managers operation in an interoperable fashion. To fix
this it seems a new GIOP message needs to be defined to carry the
implicit get_domain_managers operation. There of course may be other
ways to fix this. Some of the submitters of the original security spec
saw domain managers as replicated objects such that a replica of it was
present in each ORB instance where there was an object belonging to that
domain manager was instantiated, thus relegating the problem of getting
the domain manager information to the replication mechanism. Well, the
hoped for replication facility has not happened yet and there is no
other way to implement this interoperably. This needs to be fixed.
Resolution: get_domain_managers operation in an interoperable fashion. To fix
Revised Text:
Actions taken:
April 17, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1156: resolve_initial_references under-specified (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: resolve_initial_references can raise an InvalidName exception. However,
the text in section 4.5 does not attach any semantics to that exception
(in fact, it does not mention the exception at all).
The spec needs to state explicitly *when* InvalidName should be raised.
Presumably, the intent was that it would be raised for unknown ObjectIds,
such as "XXXX".
Resolution: Needs no further action in Core RTF. Close this issue no change.
Revised Text:
Actions taken:
April 17, 1998: received issue
June 25, 1998: moved from port-rtf to orb_revision
August 19, 1999: closed issue
Discussion: This has been addressed in the submission that was accepted in response to the Interoperable Name Service RFP, and hence will be fixed in Core as
soon as that adopted spec is incorporated into Core
Issue 1160: GIOP typo, section 4.2 (page 4.4) of CORBA 2.2 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: Section 4.2 (page 4.4) of the corba 2.2 spec defines a "non_existent" operation
on CORBA::Object. In Section 13.4.1 (page 13-23) it sates that the operation
name for such a request is encoded as the string "_not_existent". This latter
string looks like a typo, and we propose to change this (on page 13.23) to
"_non_existent".
Resolution: :Object. In Section 13.4.1 (page 13-23) it sates that the operation
Revised Text:
Actions taken:
April 20, 1998: received issue
June 25, 1998: closed issue
Discussion: resolved, close issue
Issue 1164: Versioning by the back door? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I"ve always been under the impression that CORBA does not have versioning.
it looks like we
actually *do* have versioning. Could someone please let me know what
the correct interpretation should be? Has this versioning stuff sort
of quietly snuck in via the back door?
I find this section of the spec particularly stunning because a few pages
earlier, it says about #pragma directives:
An IDL compiler must eithe rinterpret these annotations
as specified, or ignore them completely.
So, on the one hand, we can happily ignore #pragma, and a few pages
later, we go and add semantics to the version pragma?!
Resolution:
Revised Text:
Actions taken:
April 22, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1241: / in prefix pragma? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: currently, #pragma prefix is completely unconstrained and can contain
any character. This includes potentially troublesome things such as space
and "/", or non-printing characters.
I would suggest to define a syntax for #pragma prefix. In particular, I think
that "/" should be forbidden in a prefix. This is because otherwise, given
a repository ID, I cannot work out where the prefix ends and the scoped
name starts. In addition, things that cannot normally be part of file names
or identifiers should probably be forbidden as well, otherwise we could
get problems with things like the class path in Java.
Resolution:
Revised Text:
Actions taken:
April 27, 1998: received issue
June 25, 1998: moved from port-rtf to orb_revision
February 23, 1999: closed issue
Discussion:
Issue 1315: Semantics of system exception completion_status (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The CORBA 2.2 spec says the following about completion_status:
Each standard exception also includes a completion_status code which
takes one of the values {COMPLETED_YES, COMPLETED_NO, COMPLETED_MAYBE}.
These have the following meanings:
COMPLETED_YES The object implementation has completed processing prior
to the
exception being raised.
COMPLETED_NO The object implementation was never initiated prior to the
exception
being raised.
COMPLETED_MAYBE The status of implementation completion is
indeterminate.
These definitions do not cover the case where the standard exception was
raised by the object implementation itself.
Resolution:
Revised Text:
Actions taken:
May 11, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 1394: Typos in IR IDL in spec (01) (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: The following problems appear in the 2.2 spec (98-02-23) and the IDL
summary extracted from it (98-03-01.idl).
- Section 8.8 page 8-45: need forward declaration of ExceptionDef, i.e.,
"interface ExceptionDef" before use on page 8-47. There are a number of
forward declarations in the middle of 8-45 that would seem to be the
logical place for it.
Resolution:
Revised Text:
Actions taken:
May 20, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1395: Typos in IR IDL in Specification (02) (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: - Section 8.8 page 8-47: need forward declarations of WstringDef and
FixedDef before use on page 8-48. Again, it would seem that they were
left out of the list of forward declarations on 8-47.
Resolution:
Revised Text:
Actions taken:
May 20, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1396: Typos in IR IDL in Specification (03) (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: - Section 8.8 page 8-48: remove incorrect "};" between "create_array" and
"create_fixed".
Resolution:
Revised Text:
Actions taken:
May 20, 1998: received issue
February 23, 1999: closed issue
Discussion: received issue
Issue 1397: Typos in IR IDL in Specification (04) (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: - Section 8.8 page 8-53: add "," after "tk_except" in definition of TCKind.
Resolution:
Revised Text: Fix and close
Actions taken:
May 20, 1998: received issue
February 23, 1999: closed issue
Discussion: closed issue
Issue 1398: Typos in IR IDL in Specification (050 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: - Section 8.8 page 8-55: change "element type" to "element_type" in
operation create_sequence_tc.
Resolution:
Revised Text:
Actions taken:
May 20, 1998: received issue
February 23, 1999: closed issue
Discussion: received issue
Issue 1422: Does the DII support the standard object operations? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: There are two types of standard operations: ones that are transmitted
over the wire, and ones that are not. Now it seems reasonable to
support the over-the-wire operations via the DII, such as "is_a",
"non_existent", "get_interface" and "get_implementation" (obsolete), but
what about the ones that don"t go over the wire:
hash
is_equivalent
get_policy
get_domain_managers
I would guess that the DII should not support these operations, but the
spec does not explicitly say that. So, should we add a statement to the
DII part of the spec that an attempt to invoke these non-over-the-wire
operations should raise BAD_OPERATION?
Resolution:
Revised Text:
Actions taken:
June 2, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1537: Typo in chapter 8 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: Table 8-1 on page 3-39 of the CORBA spec contains a typo.
"tx_fixed" should be "tk_fixed".
Resolution:
Revised Text:
Actions taken:
June 23, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1541: Type code typos (as only one issue) (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: There are a few typos in the spec for type codes.
Page 8-40:
A structure with N members results in a tk_struct TypeCode with
2N+1 parameters.
This is no longer correct. Because of the Repository ID parameter that
was added, this is now 2N+2.
Similar fixes need to be applied to the text for unions (3N+3 parameters,
not 3N+2), enumerations (N+2 parameters instead of N+1 as implied by
the text), and aliases (they have three parameters, not two).
The text for tk_objref also needs updating, because it states that
it has one parameter instead of two.
Also, Table 7-1 for tk_objref should be updated because it is internally
inconsistent.
Resolution:
Revised Text:
Actions taken:
June 24, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1542: Type code operations under-specified (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: On page 8-38:
Member_count [sic] returns the number of members
constituting the type.
This is a little ambiguous and easily confused with the number of parameters.
For clarity, I would suggest to add a sentence to make this clearer, e.g.
"For example, the member count of a structure with three members is three."
This would help to avoid confusion with parameters (if I am not careful,
I might think the number is six, because a the three members of a structure
are described by six parameters, or I might think that the number is nine,
because a three-member structure has a total of nine parameters).
The origin for the index to the member_name operation is never defined.
Presumably, indexes start at zero? If so, this must be stated.
Resolution:
Revised Text:
Actions taken:
June 24, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1543: Type code parameter ordering (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary:
the TypeCode pseudo interface makes no mention about the order of parameters
for structured types. For example, given the IDL struct
struct MyStruct {
char c_mem;
string s_mem;
};
it is legal for member_name(0) to return "s_mem" and member_name(1) to
return "c_mem" (provided member_type(0) returns a char type code and
member_type(1) returns a string type code).
The same comments apply to unions, exceptions, and enums, where the order
in which members are presented is not necessarily the same order as in the IDL
definition.
Resolution:
Revised Text:
Actions taken:
June 24, 1998: received issue
Discussion:
Issue 1545: Type codes cannot describe all unions (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: Fix this by stating that member_label returns an Any containing
a *sequence* of labels if a single member has more than label.
Add a typedef to the TypeCode pseudo-IDL:
typedef sequence<any> LabelSeq;
A sequence of this type would be contained in the Any returned by
member_label() if a member has multiple labels (this avoids changing the
signature of member_label()).
For the above union, the member_count() operation would return 2, not 5.
Resolution:
Revised Text:
Actions taken:
June 24, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1585: IDL struct issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: IDL structs are specified to have "one or more" members rather than
"zero or more".
Whilst it might be argued from a stylistic point of view that an empty
struct is of limited use, of should be avoided, there are places where
it may be desirable to specify a placeholder struct for later expansion,
or for machine generated code where there happens to be nothing to fill
the struct with.
I can see no compelling technical reasons for requiring that a struct
contain at least one member, so I propose that the grammar be revised to
alow for a struct with zero members.
Such a change would not break any existing IDL.
Resolution:
Revised Text:
Actions taken:
June 26, 1998: received issue
March 1, 1999: closed issue
Discussion:
Issue 1587: name scoping issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In the course of a discussion Philippe Gautron pointed out to me that in
ISO-C++, the scope of a class begins with its declaration, and hence a
member or type declaration in the class may not introduce the same name
as that of the class, exception being constructors of the class.
Analogous rules apply to struct and namespace. When this principle is
extended to the case insensitivity of IDL a consequence is that
interface I {
void i();
};
is illegal as is:
module M {
interface m {....};
};
The basic rule is that the name of the scope, if it has one is
implicitly inserted into the scope and hence cannot be reused for other
purposes in that scope. Given that IDL has to be mapped to C++ this
seems like an eminently reasonable restriction. However, I could not
find this explicitly stated anywhere. Do y"all feel this is reasonable?
If so, and if it is indeed not mentioned then I think we should add a
line or two in 3.13 clarifying this?
Resolution:
Revised Text:
Actions taken:
June 26, 1998: received issue
March 1, 1999: closed issue
Discussion:
Issue 1612: Description of Wide String type (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: Null termination is a marshalling and language mapping issue and should not
appear as part of the semantic description of the IDL type. It should be
completely valid for a language with a native wide string type to handle the
varying length nature of the wide string with or without use of null
termination and certainly without exposing it to the user. Therefore, the
description of the wide string type in 3.8.3 should not mention null
termination.
Also the syntax should be included.
Resolution:
Revised Text:
Actions taken:
June 29, 1998: received issue
February 23, 1999: closed issue
Discussion:
Issue 1622: TypeCode comparison proposal (01) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Points 1 through 9 need to be considered as one unit. Point 10 can be
voted on independently, but does provide a useful capability for
controlling the size and content of TypeCodes.
Proposal:
1. Make RepositoryIds mandatory for all TypeCodes that have them. [This
was done by the previous core RTF. I am just reiterating it here for
completeness.]
2. All TypeCode constants generated by the IDL compiler, as well as all
TypeCodes returned by the Interface Repository must include alias
TypeCodes wherever a typedef declaration appears in the original IDL
source.
3. Each IDL programming language mapping must provide a mechanism for
the programmer to ensure that values of the IDL any type contain the
exact typecode desired by the programmer.
4. The name() and member_name() fields of the TypeCode are for
documentary purposes only, and are never considered significant when
comparing TypeCodes.
5. Define a new equivalent operation for TypeCodes:
pseudo interface TypeCode {
...
boolean equivalent(in TypeCode other);
...
};
with the following semantics:
a) If the two TypeCodes are the same primitive type (null, void, short,
long, ushort, ulong, float, double, boolean, char, octet, any, TypeCode,
longlong, ulonglong, longdouble, wchar) then equivalent() returns true.
b) If the two TypeCodes are string, wstring or fixed with the same
parameters (bounds, digits or scale) then equivalent() returns true.
c) If the two TypeCodes are both arrays or both sequences, with the
same bounds and their component types are equivalent(), then
equivalent() returns true.
d) If the two TypeCodes are both object references, return true if the
their RepositoryIds are the same.
e) If the two TypeCodes are both structs, exceptions, unions, enums or
aliases, and they have the same RepositoryId, then equivalent() returns
true. Note in this case that member TypeCodes are not compared.
f) If either or both of the TypeCodes have an empty RepositoryId, then
equivalent() falls back to a structural comparison, and returns true if
all members of the two TypeCodes also are equivalent(). This case will
only occur when interoperating with an older ORB that does not yet
require RepositoryIds as mandatory for these TypeCodes. Note that the
name() and member_name() fields are not used in this comparison.
g) Otherwise, equivalent() returns false.
6. The ORB uses TypeCode::equivalent for all internal TypeCode
comparisons, such as for supporting any (and thus DII and DSI) and
DynAny.
7. If the programmer needs to distinguish between a type and/or
different aliases of that type, he can call TypeCode::id() and compare
the RepositoryIds.
8. All DynAny insert & get operations do not consider aliases as
significant. The type() operation however, will return the TypeCode
with all of the aliases intact, including type() from any DynAny member
components. DynAny::assign() and DynAny::from_any compare the internal
TypeCode of the DynAny with the TypeCode of its argument using
TypeCode::equivalent() and raise Invalid if equivalent() returns false.
9. The TypeCode::equal() operation is not used internally by the ORB
and is deprecated.
Resolution:
Revised Text:
Actions taken:
July 1, 1998: received issue
July 1, 1998: closed issue
Discussion:
Issue 1623: TypeCode comparison proposal (02) (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: 10. Define two new operations on TypeCodes:
pseudo interface TypeCode {
...
TypeCode get_compact_typecode();
TypeCode get_canonical_typecode();
...
};
TypeCode::get_compact_typecode() strips out all optional name & member
name fields. TypeCode::get_canonical_typecode() looks up the TypeCode
in the Interface Repository and returns the fully fleshed-out TypeCode.
If the top level TypeCode does not contain a RepositoryId, (such as
array and sequence TypeCodes, or TypeCodes from older ORBs), then a new
TypeCode is constructed by calling TypeCode::get_canonical_typecode() on
each member TypeCode of the original TypeCode. If the Interface
Repository is unavailable, or does not contain the information needed,
the call raises the INTF_REPOS system exception.
Resolution:
Revised Text:
Actions taken:
July 1, 1998: received issue
July 1, 1998: closed issue
Discussion:
Issue 1665: Lifetime of ORB and validity of ORB pointe (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: In CORBA 2.2 added the ORB::shutdown operation. What operations are
valid during the potentially lengthy shutdown process while ongoing
operations complete? What is the validity of the ORB reference after the
shutdown? Is the ORB destroyed? Can a new ORB be reconstituted by
ORB_init?
This issue came up during the port-rtf discussion for CORBA 2.3. It goes
beyond considerations for the POA so it should be addressed by
orb_revision.
r
Resolution: Fix the problem as described below
Revised Text: 1. Change the following text to ORB::perform_work() (Section 4.11.2)
after
the polling loop example:
Once the ORB has shutdown, work_pending() and perform_work() will raise
the
BAD_INV_ORDER exception. An application can detect this exception to
determine when to terminate a polling loop.
2. Change the text for ORB::run() (Section 4.11.3) to:
This operation provides execution resources to the ORB so that it can
perform its internal functions. Single threaded ORB implementations,
and some multithreaded ORB implementations, need the use of the main
thread in order to function properly. For maximum portability, an
application should call either run() or perform_work() on its main
thread. run() may be called by multiple threads simultaneously.
This operation will block until the ORB has completed the shutdown
process, initiated when some thread calls shutdown().
2. Change the text for ORB::shutdown() (Section 4.11.4) to:
This operation instructs the ORB to shut down, that is, to stop
processing in preparation for destruction.
Shutting down the ORB causes all object adapters to be destroyed,
since they cannot exist in the absence of an ORB. Shut down is
complete when all ORB processing (including request processing and
object deactivation or other operations associated with object
adapters) has completed and the object adapters have been
destroyed. In the case of the POA, this means that all object
etherializations have finished and root POA has been destroyed
(implying that all descendent POAs have also been destroyed).
If the wait_for_completion parameter is TRUE, this operation blocks
until the shut down is complete. If an application calls
shutdown(TRUE) in a thread that is currently servicing an invocation,
the BAD_INV_ORDER system exception will be raised with the OMG minor
code 3,
since blocking would result in a deadlock.
If the wait_for_completion parameter is FALSE, the shutdown may not
have completed upon return. An ORB implementation may require the
application to call run() or perform_work() after the shutdown(FALSE)
has been called in order to complete the shutdown process.
While the orb is in the process of shutting down, the ORB operates as
normal, servicing incoming and outgoing requests until all requests
have been completed. An implementation may impose a time limit for
requests to complete while a shutdown is pending.
Once an ORB has shutdown, invoking any operation on that ORB or any
object reference obtained from that ORB will raise the BAD_INV_ORDER
system exception with the OMG minor code 4, except for the reference
management operations: duplicate(), release(), and is_nil().
3. Add a new section (4.11.5) for the new ORB::destroy() operation:
void destroy();
This operation destroys the ORB so that its resources can be reclaimed
by the application. Any operation invoked on a destroyed ORB
reference will raise the OBJECT_NOT_EXIST exception. Once an ORB has
been destroyed, another call to ORB_init with the same ORBid will
return a reference to a newly constructed ORB.
If destroy() is called on an ORB that has not been shutdown, it will
start the shutdown process and block until the ORB has shutdown before
it destroys the ORB. If an application calls destroy() in a thread
that is currently servicing an invocation, the BAD_INV_ORDER system
exception will be raised with the OMG minor code 3, since blocking
would result in a deadlock.
For maximum portability and to avoid resource leaks, an application
should always call shutdown() and destroy() on all ORB instances before
exiting.
4. Add the following entries to the minor exception code table in
section 3.17.2:
SYSTEM EXCEPTION MINOR CODE EXPLAINATION
BAD_INV_ORDER 3 Operation would deadlock.
4 ORB has shutdown.
Actions taken:
July 10, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1667: Proposal on floating point fixes (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I"m preparing a proposal to "fix" fixed point types, but I"d like to
outline what I am thinking before I have it completed, in order to give
people a chance to comment.
Michi has pointed out a few issues with the fixed point constant
grammar, but I think I can resolve those pretty easily by making changes
so that fixed point constants are only allowed to be defined using the
syntax:
const fixed FOO = 1.2D;
Some people have expressed the idea that the fixed point type
specification is lacking sufficient semantic content, and they are
afraid that since different languages or even implementations of
languages might do the math differently that portability or
interoperability is affected. Frankly, I don"t see the problem as
serious for the CORE RTF. In most cases, the fixed point type is mapped
to the native fixed point facility of the language. If that isn"t
sufficiently robust to support stuff like banking applications, the CORE
RTF can"t do much to fix it anyway.
For the C++ RTF:
For the C++ binding, of course, things are broken. However, I think I
may have a solution to the problem:
First, define a new class CORBA::FixedValue which is used as the results
of all of the Fixed arithmetic operations, as well as for the type for
fixed point constants. FixedValue would store the digits and scale
information dynamically. All of the defined fixed point types would be
convertable from/to the FixedValue type, with the DATA_CONVERSION
exception available to signal overflow.
Second, get rid of the explicit reference to a template type. Since the
grammar will be changed to no longer allow anonymous fixed point
declarations (as parameter types), there is no longer a specific need to
define the exact type name for the Fixed types, and in fact,
implementations no longer must implement fixed as a template type.
Resolution:
Revised Text:
Actions taken:
July 13, 1998: received issue
July 15, 1998: closed issue -- resolved by issue754
Discussion:
Issue 1679: DynStruct::get_members needs exception (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: If get_members is called on a DynStruct whose members have not been
initialized, what should it do? It can"t return any values, because there
are none.
I suggest allowing it to raise DynAny::Invalid in this case. If there are
objections to adding a raises clause, I suggest having it raise BAD_INV_ORDER.
Resolution: incorproate changes and close issue in 2.4
Revised Text:
Actions taken:
July 14, 1998: received issue
August 19, 1999: closed issue
Discussion: Added TypeMismatch exceptions to deal with empty exceptions.
Added types for DynAny. Added exceptions to deal with situations where there cannot be a member or
where the current position does not indicate a member.
Revised Text: see ptc/99-03-02
Issue 1688: Illegal IDL in CosTime module (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The IDL in module CosTime for the compare_time and
time_to_interval operations is illegal. Reference
http://www.omg.org/archives/experts/msg00890.html
for further information.
Resolution:
Revised Text: //www.omg.org/archives/experts/msg00890.html
Actions taken:
July 16, 1998: revceived issue
February 23, 1999: closed issue
Discussion: All references to formal/97-12-21.pdf
Issue 1725: CosObjectIdentity::ObjectIdentifiers can"t be UUIDs? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Does anyone know why the CosObjectIdentity::ObjectIdentifier was changed
from "typedef sequence<octet,16>" to "typedef unsigned long"? This
happened some time ago between the 3/94 and 3/95 versions of the
CosRelationships specification.
It seems odd since the earlier version could support the 128 bit UUIDs
used in DCE and the 128 bit GUIDs found in Microsoft but the current
version is only one quarter the size. Also, all available literature I
can find on the topic indicates that the 128 bit version is necessary
for uniqueness "across space and time". In large distributed object
environments, I don"t think the 32 bit version will cut it.
Resolution:
Revised Text:
Actions taken:
July 23, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1728: Proposed change to IDL in section 3.10.2, page 3-32 "Parameter Declaration (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Firstly, in Section 3.10.2, "Parameter Declarations" on
page 3-32, the last paragraph states:
When an unbounded string or sequence is passed as an
inout parameter, the returned value cannot be longer
than the input value.
This seems like an undesirable and unnecessary restriction to me.
Is there any chance that you could remove this restriction in a
future version of the specification? Alternatively, if there is
a good reason for this restriction then perhaps you could document
it in a future revision of the specification.
Resolution:
Revised Text:
Actions taken:
July 23, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1729: Change to IDL for anonymous types (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Secondly, anonymous types are generally a pain to deal with
for a language mapping. I know that anonymous sequences are
a necessary evil because they are needed to define recursive
structs and recursive unions. For example:
struct node {
long data;
sequence<node> children;
};
However, IDL allows anonymous sequences and arrays to be used
in other ways for which they are not essential.
Resolution:
Revised Text:
Actions taken:
July 23, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 1753: Size of IDL char (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: The IDL chapter says on page 3-24:
OMG IDL defines a char data type that is an 8-bit quantity which...
This seems to imply that chars must map to an 8-bit type in the target
language. Not all CPUs can do this. For example, on a Cray, chars are a
32-bit type.
I would suggest to remove the size requirement.
Resolution:
Revised Text:
Actions taken:
July 30, 1998: received issue
February 22, 1999: closed issue, no action in 2.3a
Discussion:
Issue 1772: Incorrect LifeCycle IDL? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 6.2 of formal/98-07-05 mentions
typedef Naming::Name Key;
I believe it should be CosNaming::Name instead.
Resolution:
Revised Text:
Actions taken:
August 4, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1796: Missing orb.idl (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: It appears that during the editing for the POA changes for 2.2, Appendix A
of the old BOA chapter was dropped without a trace. As a result, it looks
like the definition for the orb.idl include file has disappeared.
Resolution:
Revised Text:
Actions taken:
August 11, 1998: received issue
February 22, 1999: closed issue
Discussion: Add the following text to Section 3.14, following the example IDL that shows
Issue 1797: Types defined in the CORBA module? (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity:
Summary: Summary: Where am I supposed to pick up the types defined in the CORBA module,
such as CORBA::Identifier, if I want to use them in my IDL?
The (now apparently missing) orb.idl file gave me access to the
TypeCode interface and the IFR interfaces, but mentioned nothing about
other types defined in the CORBA module.
Resolution: :Identifier, if I want to use them in my IDL?
Revised Text:
Actions taken:
August 11, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1802: Multiple paths to a recursive sequence typecode (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Minor
Summary: Summary: What exactly is the story for how the TypeCodes are created? Is there
one call to create_recursive_sequence_tc per recursive sequence template in the
source, or one per cycle in the type graph? I think this is worth clarifying
in section 8.7.3, which doesn"t seem to conceive of the possibility of multiple
type graph cycles through the same recursive sequence type.
Resolution: This was fixed in the process of resolving issue 1928 in Core Revision 2.3a. See resolution of 1928.
Revised Text:
Actions taken:
August 12, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1892: Nested scopes (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: The name of an interface or a module may not be redefined within
the immediate scope of the interface or the module. For example:
module M {
typedef short M; // Error: M is the name of the module
in the scope of which the typedef is.
interface I {
void i (in short j); // Error: i clashes with the interface name I
};
};
Resolution: Incorporate changed text and close issue in 2.4
Revised Text: : (i) Editorial fixed in 2.3a
(ii) extend the restriction to struct, union and exception to be consistent across the board.
Revised Text: On page 3-48 of ptc/98-12-04 change the paragraph which currently reads:
The name of an interface, value type, or a module may not be redefined within the
immediate scope of the interface, value type, or the module. For example:
To read:
The name of an interface, value type, struct, union, exception or a module may not be redefined within the
immediate scope of the interface, value type, struct, union, exception or the module. For example:
Actions taken:
August 27, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1893: page 3-47: Identifiers (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: Page 3-47:
"Identifiers for the following kinds of definitions are scoped:
- types
- constants
- enumeration values
- exceptions
- interfaces
- attributes
- operations"
I"m not sure I understand the purpose of this list. In particular, what
is meant by "are scoped"? Scoped by what? I think the intent was to state
that if any of these identifiers appears within a nested scope, it needs
to be unique only within that nested scope?
Resolution: Incorporate changes in 2.4 and close issue
Revised Text: Replace the following text on page 3-47, 3-48 at the beginning of section 3.15.2:
An entire OMG IDL file forms a naming scope. In addition, the following kinds of
definitions form nested scopes:
* module
* interface
* valuetype
* structure
* union
* operation
* exception
Identifiers for the following kinds of definitions are scoped:
* types
* constants
* enumeration values
* exceptions
* interfaces
* valuetype
* attributes
* operations
An identifier can only be defined once in a scope. However, identifiers can be
redefined in nested scopes. An identifier declaring a module is considered to be
defined by its first occurrence in a scope. Subsequent occurrences of a module
declaration within the same scope reopen the module allowing additional definitions to
be added to it.
By the text:
Contents of an entire OMG IDL file, together with the
contents of any files referenced by #include statements,
forms a naming scope. Definitions that do not appear
inside a scope are part of the global scope. There is
only a single global scope, irrespective of
the number of source files that form a specification.
The following kinds of definitions form scopes:
* module
* interface
* valuetype
* struct
* union
* operation
* exception
The scope for module, interface, valuetype, struct and exception begins
immediately following its opening '{' and ends immediately preceding its closing '}'.
The scope of an operation begins immediately following its '(' and ends
immediately preceding its closing ')'. The scope of an union begins immediately
following the '(' following the keword "switch", and ends immediately preceding
its closing '}'. The appearance of the declaration of any of these kinds in any
scope subject to semantic validity of such declaration, opens a nested scope
associated with that declaration.
An identifier can only be defined once in a scope. However, identifiers can be
redefined in nested scopes. An identifier declaring a module is considered to be
defined by its first occurrence in a scope. Subsequent occurrences of a module
declaration with the same identifier within the same scope reopens the module
and hence its scope, allowing additional definitions to be added to it.
Actions taken:
August 27, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1928: Proposal for creating recursive TypeCodes (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: We have spent some time pondering the various issues surrounding
recursive TypeCodes and OBV, and have come up with a proposed
solution. This is not a formal proposal (it does not include actual
changes to the CORBA spec) and is intended mostly to promote
discussion.
For this discussion a recursive TypeCode is defined as a TypeCode
which contains data members which refer to the containing type or any
type containing the containg type.
The basic problem of creating recursive TypeCodes has become more
complex with the addition of valuetypes. The current mechanism for
creating TypeCodes (as adopted by the last RTF) cannot create
TypeCodes for a large number of cases, and can be quite confusing.
The new proposal solves the problem of creating recursive TypeCodes in
general and would deprecate all existing mechanisms for creating
recursive TypeCodes.
Resolution:
Revised Text:
Actions taken:
September 2, 1998: received issue
February 22, 1999: closed issue
Discussion:
Issue 1944: Typo on pages 10-53, 10-55, and 10-70 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: The create_value_tc() api and C++ example use ValueMembersSeq, but the name
should match the ValueMemberSeq ( no "s" after Member) definition given on page
10-33 & 10-65
Resolution:
Revised Text:
Actions taken:
September 11, 1998: received issue
September 21, 1998: closed issue
Discussion:
Issue 1950: deactivate_object page no: 9-35 (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary: Summary: deactivate_object page no: 9-35
void deactivate_object(in Objectid oid)
raises (ObjectNotActive,WrongPolicy)
If a servant manager is associated with the poa, ServantLocator:: etherealize will be invoked with the oid and the servant.
It should be ServantActivator::etherealize instead of ServantLocator:: etherealize.
The Note of deactivate object it should be ServantActivator::etherealize instead of ServantLocator:: etherealize
Resolution:
Revised Text:
Actions taken:
September 15, 1998: received issue
September 29, 1998: close issue
Discussion: :etherealize instead of ServantLocator:: etherealize.
Issue 1967: New proposal for recursive TypeCode creation (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The basic problem of creating recursive TypeCodes has become more
complex with the addition of valuetypes. The current mechanism for
creating TypeCodes (as adopted by the last RTF) cannot create
TypeCodes for a large number of cases, and can be quite confusing.
The new proposal solves the problem of creating recursive TypeCodes in
general and would deprecate all existing mechanisms for creating
recursive TypeCodes.
Resolution:
Revised Text:
Actions taken:
September 17, 1998: received issue
November 3, 1998: closed issue
Discussion:
Issue 1969: Handling of minor codes for standard exceptions underspecified (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Looking at ptc-98-08-07, I find the discussion of minor codes hopelessly
underspecified. The text in 3.17.2 doesn"t actually mention the OMG
space explicitly; it should. Also, the definition of the partitioning
of the minor code, at the beginning of 3.17, is hopelessly vague -- what
``high order bits"" are used, what ``low order bits""? What"s the
policy for obtaining a new vendor registration?
Resolution: I believe that this issue has been adequately addressed in the 2.3a revision. So I propose that we c
Revised Text:
Actions taken:
September 23, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1970: set_servant_manager (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: What exception should POA::set_servant_manager raise if the wrong servant
manager type is passed? For example, if a POA has RETAIN and I try to
register a ServantLocator, should set_servant_manager raise WrongPolicy, or
some system exception? With respect to set_servant_manager, the spec says
"This method requires the USE_SERVANT_MANAGER policy; if not present, the
WrongPolicy exception is raised."
Because WrongPolicy is used to denote whether set_servant_manager can be
called correctly or not, it seems like the wrong exception to also use for
the case of passing the wrong servant manager type. May I suggest that
BAD_PARAM be raised in that case instead?
Resolution: Incorporate change in 2.4 and close issue.
Revised Text: The OBJ_ADAPTER exception should be raised in this case.
The reasoning for this is as follows:
I think the cases can best be shown in a table:
Policies
Servent manager Arg Narrowable to
Servant Activator
Servent manager Arg Narrowable to
Servant Locator
Servent manager Arg Narrowable to
Other
USE_SERVENT_MANAGER
& RETAIN
(ok)
OBJ_ADAPTER
OBJ_ADAPTER
USE_SERVANT_MANAGER
& NON_RETAIN
OBJ_ADAPTER
(ok)
OBJ_ADAPTER
not(USE_SERVANT_MANAGER)
WrongPolicy
WrongPolicy
WrongPolicy
The columns are the cases of what type the argument to
set_servant_manager can be narrowed to. It would be weird
but (at least theoretically) possible for the argument to
have its most derived type be ServantManager or some other
derived type. That is the last column.
The rows are cover relevant combinations of poa policies.
In the cells are my proposals for what exception should be
raised. The two cells marked (ok) are the only ones where the
call works without exception.
I have used OBJ_ADAPTER rather than BAD_PARAM for the reasons
already discussed in the archive.
Revised Text:
In section 11.3.8.11 (set_servant_manager), add an additional
paragraph between the first and second (last) paragraph:
"If the ServantRetentionPolicy of the POA is RETAIN, then the
ServantManager argument (imgr) shall support the ServantActivator
interface. (E.g. in C++ imgr is narrowable to ServantActivator.)
If the ServantRetentionPolicy of the POA is NON_RETAIN,
then the ServantManager argument shall support the ServantLocator
interface. If the argument is nil, or does not support the
required interface, then the OBJ_ADAPTER exception is raised."
Actions taken:
September 24, 1998: received issue
August 19, 1999: closed issue
Discussion:
Issue 1972: Missing equality for DynAny (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Type DynAny has no equality operator. This makes it impossible
to determine whether or not two DynAnys contain the same value, unless
I am prepared to recursively iterate over all of a DynAny"s components
to determine whether they are equal. This is rather inconvenient.
I would suggest to add a new operation to DynAny:
boolean equal(in DynAny da);
Resolution: added comparison operator
Revised Text: see ptc/99-03-02
Actions taken:
September 30, 1998: received issue
August 19, 1999: close dissue
Discussion:
Issue 1974: DynUnion::member() (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: What does DynUnion::member() return if a union does not have a default
case label and has no active member? A nil reference? A DynAny
with TCKind tk_null?
It"s not specified, but should be.
Resolution: incorporate change and close in 2.4
Revised Text: see ptc/99-03-02
Actions taken:
September 17, 1998: received issue
August 19, 1999: closed issue
Discussion: Revision of DynUnion fixes this problem
Issue 1981: Which OBV initialiser to run is under-specified (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: Detail: The 2.3 draft says:
There may be any number of init declarations, as long as the signatures
of all the initializers declared within the same scope are unique.
To me, this implies that initialiser selection is done by matching the actual call parameter types against the formal parameter types in all the initialisers, and choosing the one that applies. However (a) this isn"t said explicitly and (b) if it is the intention, it"s fairly easy to construct a case where no one initialiser is more applicable than any other. Assuming initialiser parameters are allowed to be interface types (it doesn"t say they aren"t), consider a declaration of two initialisers in the same scope with parameter interfaces A and B, then calling the initialiser with a parameter of C, an interface that inherits from both A and B. It is impossible to say that one initialiser is more or less applicable than the other. The specification should make clear what choice a compliant ORB should make.
Resolution: Incorporate changes in 2.4 and close issue
Revised Text: The solution is to eliminate the possibility of there being a question of which
initializer to call in the face of polymorphism. In effect, outlawing the potential
overloading implied by the current design.
The proposal requires the IDL designer to specify a unique name for the initializer.
The syntax is changed to be:
factory <identifier> ( <in_parameter_list> )
Language mappings specify how the <identifier> is mapped to a method in the target language.
Normally this would wind up being a create operation of some kind on the value factory.
Changes are specified against the draft CORBA2.3a document.
Revised Text:
1. In section 10.5.24 ValueDef Add a new field to Initializer
struct Initializer {
StructMemberSeq members;
Identifier name;
};
2. Make the same change in 10.8
3. In Section 5.2.5.2 change Value instance -> Value type
4. In the example change the initializer to:
factory init(in string name, in string SSN);
5. In Section 3.4 OMG IDL Grammar In production 24 <init_dcl>
change "init" to "factory" <identier>
6. In Section 3.8.5 Initializers
Change "init" to "factory" <identifier>
Replace the 2 descriptive paragraphs by the following single paragraph:
In order to ensure portability of value implementations, designers may also define the
signatures of initializers (or constructors) for non abstract value types.
Syntactically these look like local operation signatures except that they are
prefixed with the keyword "factory", have no return type, and must use only
in parameters. There may be any number of factory declarations. The names of
the initializers are part of the name scope of the value type.
7. In 3.8.1.6 Value Type Example
Change the initializer to
"factory" init(....)
8. In Section 3.2.4 Keywords
remove "init" as a keyword.
add "factory" as a keyword.
Actions taken:
September 20, 1998: received issue
February 26, 1999: moved from obv-rtf to orb_revision
August 19, 1999: closed issue
Discussion:
Issue 1997: What does interface substitutability mean in CORBA? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Thanks to Joaquin Miller, a question came up in the context of the OMA
revision work that is going on in ORMSC about what the ORB vendors think
"substitutability" means.
Resolution:
Revised Text:
Actions taken:
September 29, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 2000: OMG VMCID (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Well, it looks like I get to choose what OMG"s VMCID is going to be. My
> current thoughts are to allocate 65613 as OMG"s VMCID. This will make
> the minor code value unsigned long appear on the wire as \x00, "M",
> \x0<e>, <E>; where <e> is the high four bits of the minor code and <E>
> is the lower 8 bits of the minor code.
Resolution:
Revised Text:
Actions taken:
September 29, 1998: received issue
September 30, 1998: closed issue
Discussion: non-issue
Issue 2007: TypeCode constants for bounded strings? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: CORBA 2.2 has the following sentences near the beginning of section
8.7.2:
In the case of an unnamed, bounded string type used directly in an
operation or attribute declaration, a TypeCode constant named
TC_string_n, where n is the bound of the string is produced. (For
example, "string<4> op1();" produces the constant "TC_string_4".)
CORBA 2.3 is missing these sentences.
Resolution:
Revised Text:
Actions taken:
September 28, 1998: received issue
Discussion:
Issue 2034: Recursive IDL types (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The current spec is not terribly clear on how recursive IDL types are
supposed to work.A minor problem here is that the terminating semicolon is missing following
the closing curly brace.
But more seriously, it leaves it open whether, for example, the following
is legal:
struct foo {
union u switch (long) {
case 0:
sequence<foo> foo_mem;
case 1:
char c_mem;
} u_mem;
long l_mem;
};
Resolution:
Revised Text:
Actions taken:
October 5, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 2070: InconsistentTypeCode exception in CORBA 2.3 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The current CORBA 2.3 ORB interface chapter (ptc/98-08-08) does not
match the resolution which was voted on for the InconsistentTypeCode
exception (issue 1089).
The proposed resolution from ptc/98-05-01 was to place the exception
in the ORB interface with InvalidName, not in the CORBA module.
Jishnu, could we correct this mistake by moving InconsistentTypeCode
from the CORBA module into the ORB interface?
Resolution: Already fixed in 2.3a Draft
Revised Text:
Actions taken:
October 10, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2084: Recursive exceptions? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Is the following IDL legal?
exception e {
sequence<e> e_seq;
};
The grammar permits it, so from that, I would have to conclude it"s legal.
However, not all ORBs I"ve tried can handle this -- some accept it and it
works, others accept it but generate bad code, and yet others won"t compile
the IDL.
Resolution:
Revised Text:
Actions taken:
October 15, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 2119: long double problem? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: (2.2 3-24) and (2.2 13-8)
I"m no floating point expert, but it seems to me that these two
definitions are inconsistent. The first implies 1 + 15 + 64 = 80
bits of information, while the second implies 1 + 15 + 112 = 128 bits
of information.
Resolution: No inconsistency exists as explained in the archive.
Revised Text:
Actions taken:
October 23, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2156: Exception for abstract interface inheritance (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Abstract interfaces can only inherit from other abstract interfaces,
yet the Interface Repository chapter (98-10-08) does not define the
behavior of an InterfaceDef object when an attempt is made to violate
this rule.
Text should be added to section 10.5.23.2 defining the behavior of
the mutators is_abstract and base_interfaces.
Since none of the BAD_PARAM minor codes really apply, it appears
that a new one is needed.
Resolution:
Revised Text:
Actions taken:
November 2, 1998: receive dissue
October 30, 2000: closed issue
Discussion:
Issue 2162: void * in DII Chapter (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Now that we have the native type, it is time to replace those void *s in
the DII specification PIDL and restate them in terms of native types.
Resolution: Incorporate changes in text and close issue.
Revised Text: Resolution: void * is used in four places in Chapter 7 to denote an opaque value which is interpreted in an implementation language specific way to get hold of a
value to associate with a Request or an NVList. Essentially it is as if a native type were defined as follows:
native OpaqueValue;
and used to type those parameters. It happens so that in the C language mapping OpaqueValue maps to void *. SO it is proposed to introduce the native type
OpaqueValue and state that individual language mappings map it to whetever is appropriate for that language. We should raise an issue with each language mapping
RTF to revise the appropriate pieces of those chapters to align with the "native" terminology.
Revised Text:
1. In IDL on top of page 7-5, insert the first line in module CORBA to read:
native OpaqueValue;
2. In IDL on top of page 7-5, replace the following line:
in void * value, // argument value to be added
by the line:
in OpaqueValue value, // argument value to be added
3. Immediately preceding section 7.2.1 insert the following paragraph:
"In IDL, The native type OpaqueValue is used to identify the type of the implementation language
representation of the value that is to be passed as a parameter. For example in the C language
this is the C language type "void *". Each language mapping specifies what OpaqueValue maps
to in that specific language".
4. In section 7.2.2 on page 7-7 in IDL for add-arg replace the line
in void * value, // argument value to be added
by the line
in OpaqueValue value, // argument value to be added
5. On page 7-11 section 7.4 in the IDL for NVList::add-item replace the line:
in void * value, // argument value to be added
by the line
in OpaqueValue value, // argument value to be added
6. On page 7-12 section 7.4.2 in IDL for add_item replace the line:
in void * value, // argument value to be added
by the line
in OpaqueValue value, // argument value to be added
Actions taken:
November 3, 1998: received issue
November 3, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2200: Typo in POA (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On P. 11-52 I see:
...Assuming the POA has the USE_SERVANT_MANAGER policy and no servant
manager is associated with a POA, any request received by the POA for
an Object Id value not present in the Active Object Map will result
in an OBJECT_NOT_EXIST exception.
However on P. 11-9:
If the POA has the USE_SERVANT_MANAGER policy, a servant manager
has been associated with the POA so the POA will invoke incarnate or
preinvoke on it to find a servant that may handle the request. (The
choice of method depends on the NON_RETAIN or RETAIN policy of the
POA.) If no servant manager has been associated with the POA, the POA
raises the OBJ_ADAPTER system exception.
Resolution: Incorporate changes in 2.4 and close issue.
Revised Text: The issue is clearly valid - there is an inconsistency that needs to
be removed. The only choice is whether to make the exception be
OBJECT_NOT_EXIST or OBJ_ADAPTER.
I agree with the submitter of the issue that it should be OBJ_ADAPTER.
My reasoning is that error should be obviously different than the case
where the servant manager is present but does not want to provide a
servant. This is an internal error in the implemenation of the server,
and the client ought to be able to easily tell the difference.
Revised Text:
In the second paragraph of 11.6.4 (first paragraph on pg 11-52),
replace "OBJECT_NOT_EXIST" with "OBJ_ADAPTER".
Actions taken:
November 9, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2202: Scoping resolution for member names (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The wording of the current 2.3 spec says nothing to suggest that member names in structs are in (or
out) of the scope of the struct. That is, whether
struct s {
struct t {...} t;
};
is legal or illegal.
Resolution: Close this issue in 2.4 noting that the resolution of issue 1893 subsumes this issue.
Revised Text: The resolution of 1893 takes care of the problem described in this issue
by precisely stating where the scope of a struct (among other constructs) begins and where it ends.
In particular struct s { struct t { ... } t; }; is illegal.
Actions taken:
November 10, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2206: Need namespace for Policy Type (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: To allow vendors to define their own value added Policies, the
PolicyType should be partitioned into spaced that can be assigned to
vendors. Since the PolicyType is a CORBA long, just like the system
exception minor code, we can just reuse the VMCID for this purpose.
Resolution: resolved and closed
Revised Text: Resolution: Do it, using essentially the same space as VMCID, ensuring that the appropriate blocks of values that are reserved for experimental and OMG
allocated VMCIDs and VPVIDs are honored in the allocation of either. Also point out that getting an allocation of VMCID results in the allocation of the same value
as VPVID to the vendor. Take note of the following facts:
(i) PolicyTypes associated with adopted standards have already been allocated in the "0" space.
(ii) VMCID of 0 is used widely for experimental use
(iii) The VMCID OMGVMCID is reserved for the use of OMG hence the same
VPVID value should be reserved by OMG (but perhaps not used).
(iv) Propose that VMCID/VPVID of 1 - \xf be reserved for OMG use.
(v) Propose that \xfffff be reserved for experimental use.
Revised Text:
1. Replace the following text in section 4.9.1 on page 4-21:
PolicyType defines the type of Policy object. The values of PolicyTypes are
allocated by OMG. New values for PolicyType should be obtained from OMG by
sending mail to request@omg.org. In general the constant values that are allocated are
defined in conjunction with the definition of the corresponding Policy object.
by:
PolicyType defines the type of Policy object. In general the constant values
that are allocated are defined in conjunction with the definition of the
corresponding Policy object. The values of PolicyTypes for policies
that are standardized by OMG are allocated by OMG. Additionally, vendors may
reserve blocks of 4096 PolicyType values identified by a 20 bit Vendor PolicyType
Valueset ID (VPVID) for their own use.
PolicyType which is an unsigned long
consists of the 20-bit VPVID in the high order 20 bits, and the vendor assigned
policy value in the low order 12 bits. The VPVIDs 0 through \xf are reserved for
OMG. All values for the standard PolicyTypes are allocated within this range
by OMG. Additionally, the VPVIDs \xfffff is reserved for experimental use and
OMGVMCID (ref) is reserved for OMG use. These will not be allocated to anybody.
Vendors can request allocation of VPVID by sending mail to tag-request@omg.org.
When a VMCID (ref) is allocated to a vendor automatically the same value
of VPVID is reserved for the vendor and vice versa. So once a vendor gets either
a VMCID or a VPVID registered they can use that value for both their minor codes
and their policy types.
2. In section 3.17 on page 3-52 of ptc/98-12-04, replace
the paragraph that reads: "Within a vendor assigned space,
the assignment of values to minor codes is left to each ORB implementation."
by:
Within a vendor assigned space, the assignment of values to minor codes is left
to the vendor. Vendors may request allocation of VMCIDs by sending email
to tag-request@omg.org.
The VMCID 0 and \xfffff are reserved for experimental use. The VMCID
OMGVMCID (re) and 1 - \xf are reserved for OMG use.
Actions taken:
November 11, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2214: create_policy specification needs to be completed (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The specification of the create_policy operation in Chapter 4 section
4.9.2 (ptc-98-10-05, 5 November 98) is missing the following important
elements:
1. There is no specification of what is expected of someone who is
defining a new policy type, in order to use this operation as the
factory for policy objects of that type.
2. Policy objects of wich of the PolicyTypes can be created using this
operation in release 2.3 is not specified. Consequently, the types that
are valid as input through the "val" parameter are unspecified also.
Resolution: Incorporate changes in 2.4 and close issue
Revised Text: Insert two new sections 4.9.5 and 4.9.6 as follows:
4.9.5 Specification of New Policy Objects
When new PolicyTypes are added to CORBA specifications,
the following details must be defined. It must be clearly stated
which particular uses of a new policy are legal and which are
not:
o Specify the assigned CORBA::PolicyType and the policy's
interface definition.
o If the Policy can be created through CORBA::ORB::create_policy,
specify the allowable values for the any argument 'val' and
how they correspond to the initial state/behavior of that Policy
(such as initial values of attributes). For example, if a Policy
has multiple attributes and operations, it is most likely that
create_policy will receive some complex data for the implementation
to initialize the state of the specific policy:
//IDL
struct MyPolicyRange {
long low;
long high;
};
const CORBA::PolicyType MY_POLICY_TYPE = 666;
interface MyPolicy : Policy {
readonly attribute long low;
readonly attribute long high;
};
If this samply MyPolicy can be constructed via create_policy, the
specification of MyPolicy will have a statement such as: "When
instances of MyPolicy are created, a value of type MyPolicyRange is
passed to CORBA::ORB::create_policy and the resulting MyPolicy's
attribute 'low' has the same value as the MyPolicyRange member 'low'
and attribute 'high' has the same value as the myPolicyRange member
'high'.
o If the Policy can be passed as an argument to POA::create_POA,
specify the effects of the new policy on that POA. Specifically
define incompatibilities (or inter-dependencies) with other POA
policies, effects on the behavior of invocations on objects activated
with the POA, and whether or not presence of the POA policy implies
some IOR profile/component contents for object references created with
that POA. If the POA policy implies some addition/modification to the
object reference it is marked as "client-exposed" and the exact
details are specified including which profiles are affected and how
the effects are represented. Typically, the Messaging::TAG_POLICIES
component is used to carry this information.
o If the Policy can be set within a client to tune the client's
behavior, specify the policy's effects on the client specifically with
respect to (a) establishment of connections and reconnections for an
object reference; (b) effects on marshaling of requests; (c) effects
on insertion of service contexts into requests; (d) effects upon
receipt of service contexts in replies. In addition,
incompatibilities (or inter-dependencies) with other client-side
policies are stated. For policies that cause service contexts to be
added to requests, the exact details of this addition are given.
o If the Policy can be used with POA creation to tune
IOR contents and can also be specified (overriden) in the client,
specify how to reconcile the policy's presence from both
the client and server. It is strongly recommended to avoid
this case! As an excercise in completeness, most POA policies
can probably be extended to have some meaning in the client
and vice versa, but this does not help make usable systems, it
just makes them more complicated without adding really useful
features. There are very few cases where a policy is
really appropriate to specify in both places, and for these
policies the interaction between the two must be described.
o Pure client-side policies are assume to be immutable.
This allows efficient processing by the runtime that can
avoid re-evaluating the policy upon every invocation and
instead can perform updates only when new overrides are
set (or policies change due to rebind). If the newly
specified policy is mutable, it must be clearly stated what
happens if non-readonly attributes are set or operations
are invoked that have side-effects.
o For certain policy types, override operations may be disallowed.
If this is the case, the policy specification must clearly
state what happens if such overrides are attempted.
4.9.6. Standard Policies
Table xxx below lists the standard policy types that are defined by
various parts of CORBA and CORBA Services in this version of CORBA
Policy Type Policy Interface Definion in section/page Uses create_policy?
<OMG editing staff, complete with all current standard policies before publishing>
Actions taken:
November 16, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2218: WRONG_TRANSACTION (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: WRONG_TRANSACTION Exception
The CosTransactions module adds the WRONG_TRANSACTION exception
that can be raised by the ORB when returning the response to a
deferred synchronous request. This exception is defined in Chapter 4
of the Common Object Request Broker: Architecture and Specification.
This para doesn"t state what module is to be used for
WRONG_TRANSACTION. I assume what is meant is that it should be
a system exception?
- I can"t find this exception in either chapter 4 or chapter 3
of the 2.3 spec. Looks like it needs to be added. I don"t know
why the above para refers to chapter 4 though -- it seems that
this exception should be added to the list of system exceptions
in chapter 3?
Resolution: issue merged with issue1963
Revised Text:
Actions taken:
November 17, 1998: received issue
November 18, 1998: issue closed, merged with issue 1963
Discussion:
Issue 2221: Core uses both "standard" and "system" exception terminology (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The core chapters (chapter 3, for example) uses both "standard" and
"system" to describe the same class of exceptions. Most of the core
seems to prefer "standard", however the C++ language mapping uses
SystemException.
The core should be cleaned up to use "standard" as the normal term, and
then state that "system" is used in some language mappings as a synonym.
Resolution:
Revised Text:
Actions taken:
November 19, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 2223: Local operations on CORBA::Object (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Basically, people get confused about which operations on CORBA::Object
can go remote. It"s clear from the GIOP spec that only non_existent(),
is_a(), get_interface(), and get_domain_managers() can go on the wire.
It follows that things like nil(), hash(), and is_equivalent() must be
local. However, as Owen Rees pointed out, this only applies to GIOP, not
the core, but a compliant ORB need not provide GIOP.
It seems that it would be a good idea to add some clarification to the core
to state which operations on CORBA::Object must be local and which ones
may (but need not) go remote.
Resolution: Incorporate changes in 2.4 and close issue
Revised Text: Provide clarifying text in Chapter 4 for each of the Object operations stating which ones may go remote and which are local only.
Revised Text: Change text in Chapter 4 as follows:
1. In section 4.3.1 append the sentence: "The implementation of this
operation may involve contacting the ORB that
implements the target object." to the last paragraph of the section.
2. In section 4.3.9, append the sentence: "The implementation of this
operation may involve contacting the ORB that implements the
target object." to the first paragraph of the section.
3. In section 4.3.7, append the sentence: "The implementation of this
operation may involve remote invocation of an operation (e.g.
DomainManager::get_domain_policy for some security policies) for some
policy types." to the first paragraph of the section.
4. Add the following paragraph at the end of section 4.3 (immediately
preceding section 4.3.1: "Unless otherwise stated, the operations
in the IDL above do not require access to remote information."
Actions taken:
November 19, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2230: is_a underspecified (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: the description of is_a suffers from the same problem that we fixed for
non_existent in 2.3: it is not clear what the operation should do if
it could not make a determination due to a hard error. This means that
the application does not know whether failure to make a determination
returns false, or whether that will raise an exception (and false is
returned only if the object doesn"t have the expected type).
Resolution: clarify
Revised Text: Add the following text before the last para of section 4.3.4 (add text
at the top of page 4-12):
Determining whether an object's type is compatible with the
logical_type_id may require contacting a remote ORB or interface
repository. Such an attempt may fail at either the local or the
remote end. If is_a cannot make a reliable determination of type
compatibility due to failure, it raises an exception in the calling
application code. This enables the application to distinguish
among the true, false, and indeterminate cases.
Actions taken:
December 1, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2235: uses of recursive_tc (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: According to ptc/98-10-08, 16 Oct. 98 [REVIEW], p. 10-53,
"Once the recursive TypeCode has been properly embedded in the
enclosing TypeCode which corresponds to the specified repository
id, it will function as a normal TypeCode."
Given the following idl:
valuetype v {
public v m0;
};
And the following C++ code to generate the typecode for v:
CORBA::ORB_ptr orb = ...;
CORBA::TypeCode_ptr tcRecursive =
orb->create_recursive_tc("IDL:v:1.0");
CORBA::ValueMemberSeq v_seq;
v_seq.length(1);
v_seq[0].type = tcRecursive;
...
CORBA::TypeCode_ptr tcV = orb->create_value_tc("IDL:v:1.0", "v",
VM_NONE, CORBA::TypeCode::_nil(),
v_seq);
After tcRecursive has been properly embedded, what does "tcRecursive
functioning
like a normal TypeCode" mean? Does it mean that one can call on
tcRecursive the same
methods that are available on tcV? For example, will
CORBA::Visibility vis = tcRecursive->member_visibility(0);
work?
Resolution: Close no change in 2.4
Revised Text: -currently, the spec says the embedded typecode is incomplete
when constructed but must function as a real typecode when
embedded. This requires implementers to perform some
sort of delegation for a recursive tc.
- the issue proposes that even once completed, the embedded typecode
raise an exception whenever it is programmatically queried.
In both scenarios, ORBs must implement a special typecode
(the embedded one). In one case to do delegation, in the
other to raise exceptions. Both wordings of the spec (the
current wording and your proposal) impose a limitation on
implementations of recursive typecodes.
There doesn't appear to be any pressing reason to
make the embedded typecode unusable if it can just as
easily (and with some additional benefits for implementors
who are using reference counting) perform the delegation
so the wording should remain unchanged.
Actions taken:
December 3, 1998: received issue
September 16, 1999: closed issue
Discussion:
Issue 2252: DynValue::get_members/set_members (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The final draft (ptc/98-10-16 - from 15-Nov-98) defines
DynValue::get_members/set_members as:
--
struct NameValueAccess {
FieldName id;
Visibility access;
any value
};
typedef sequence<NameValueAccess> NameValueAccessSeq
NameValueAccessSeq get_members();
void set_members(in NameValueAccessSeq values) raises (InvalidSeq),
--
and goes on to say "Any attempt to set or get a member which has been
declared private in the IDL definition of the value contained in the
dynamic any raises the exception NO_PERMISSION."
Resolution: :get_members/set_members as:
Revised Text:
Actions taken:
December 10, 1998: revceived issue
Discussion:
Issue 2254: Destruction of ORB (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: how is the ORB object destroyed? There is no ORB::destroy() operation,
like for the POA. (With "destroy", I mean to remove it from memory
(C++), or to allow it to be garbage collected (Java).)
Is shutdown to be meant to destroy the ORB? If so, then this must be
clarified in the specification. For example, if shutdown() destroys the
ORB, all subsequent calls to ORB operations (via ORB references) must
raise OBJECT_NOT_EXIST, just as it is with any other (locality
constrained) object.
If shutdown() does not destroy the ORB, but just shuts down
communications and stops handling of further requests, then some other
operation is needed to destroy the ORB.
Resolution:
Revised Text:
Actions taken:
December 14, 1998: receive dissue
December 14, 1998: closed issue
Discussion:
Issue 2258: OBV, value-reference substitution, Multiple Inheritance (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Hi, is it possible to pass a supporting value type by value when used as
a interface? It looks like this is droped from the OBV spec
(ptc/98-10-06.pdf says when a supporting value type is used as a
interface then an object reference will be used).
Resolution:
Revised Text:
Actions taken:
December 15, 1998: received issue
February 19, 1999: moved to orb_revision
Discussion:
Issue 2275: Sequences of recursive structs/unions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: If I have a recursive struct or union type and want to pass a sequence
of that type to an operation, I am completely stuck if I want to do
this with C++. I"m not sure about other mappings, but I expect that
Java, Ada, etc. will all suffer from the same problem.
Resolution:
Revised Text:
Actions taken:
December 21, 1998: received issue
October 30, 2000: closed issue
Discussion:
Issue 2296: Custom marshalling & AbstractBase (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The 2.3a draft defines DataOutputStream as having the following
operation (see p. 5-12):
void write_Abstract(in AbstractBase value);
Yet there is no definition of the type `AbstractBase" anywhere
in the document.
Resolution: Add AbstractBase as a native type in the CORBA module, together with explanation in Chapter 6.
Revised Text: 1. In section 6.2, add a new numbered list item 4. Renumber existing items
4 and higher to 5 and higher. The text is:
"Abstract interfaces implicitly inherit from CORBA::AbstractBase.
This type is defined as native. It is the responsibility of each
language mapping to specify the actual programming language type
that is used for this type.
module CORBA {
// IDL
native AbstractBase;
}; "
2. In Section 4.2 in the CORBA IDL, insert the line:
native AbstractBase;
immediately preceding the line that reads "interface NVList".
Actions taken:
January 7, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2303: POA threading policies (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The POA offers the SINGLE_THREAD_MODEL policy. It guarantees that, for
a POA with this policy, all invocations are serialized. (The only other
threading policy, ORB_CTRL_MODEL, allows to ORB to thread invocations as
it sees fit.)
There is a pragmatic problem here: SINGLE_THREAD_MODEL guarantees
serialization for only a particular POA. This means that if I have a server
that uses three POAs, all of which use SINGLE_THREAD_MODEL, invocations on
any one of these POAs are serialized but invocations on different POAs
can be dispatched in parallel.
Resolution:
Revised Text:
Actions taken:
January 10, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2308: POA SINGLE_THREAD_MODEL description ambiguous (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The description for the SINGLE_THREAD_MODEL policy only states that the
POA makes all upcalls in a manner that is safe for code that is
multi-thread-unaware. This statement could be read to disallow
recursive upcalls from one object implementation to another mediated by
the same POA on a single thread.
Proposed resolution:
Add the following sentence to both sections 9.2.8 and 9.3.7, where the
text defines the Single Threaded Model:
A single-threaded POA will still allow recursive upcalls, where an
object"s implementation invokes an operation on an object implemented
using the same POA.
Resolution:
Revised Text:
Actions taken:
January 18, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2310: Missing minor code (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In the 2.3a core chapters, there is a minor code missing from page 3-58,
table 3-13. BAD_PARAM minor code 1 should also be raised for errors
trying to lookup and unregister a value factory. Alternatively we could
add new minor codes for these.
Resolution: Let minor code one be used for all value factory related exceptions.
Revised Text: In table 3-13 on page 3-58 change the "Explanation" field for BAD_PARAM minor code 1 to read:
"failure in attempt to register, unregister or lookup value factory."
Actions taken:
January 20, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2311: Custom Marshaling clarification (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In the core 2.3a chapters, page 5-11, section 5.5.1, last paragraph needs
to be clarified or deleted. This paragraph originally referred to the
"streaming policy" registration APIs that used to be specified here but
have since been deleted.
Do we still intend to allow language mappings to provide alternative
mechanisms for custom marshaling as well as the standard mechanism of
having the valuetype implementation provide the CustomMarshal methods
marshal and unmarshal? If not, this paragraph should be deleted. If so,
the last part of the paragraph should be reworded, for example "... to
support other ways for value types to implement custom marshaling".
Resolution: Incorporate change in 2.4 and close issue
Revised Text: Delete last paragraph of section 5.5.1 (the one starting "This API
is guaranteed").
Actions taken:
January 20, 1999: received issue
September 16, 1999: closed issue
Discussion: Delete last paragraph of section 5.5.1 (the one starting "This API
is guaranteed").
Rationale:
This is a hangover from a previous level of the spec (the version that
used streaming policies) and now serves no purpose other than to confuse
the reader.
Issue 2312: Names of Data*Stream methods (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The method names in DataInputStream and DataOutputStream have been
chosen to match the method names in the Java portability streams.
There is a proposal before the Java RTF to change some of the latter
names. If this is accepted, we should change the corresponding names
in Data*Stream as well.
This affects page 5-12 in the core 2.3a chapters. write_Value should
change to write_value and write_Abstract to write_abstract_interface.
The corresponding read_* methods on page 5-14 should also be changed.
Resolution:
Revised Text:
Actions taken:
January 20, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2314: Supporting multiple abstract interfaces (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Valuetypes should be able to support multiple abstract interfaces but
only a single regular interface. See also comments number 28 and 31
in the list of core 2.3a errata I just sent out.
Resolution: Incorporate changes in 2.4 and close issue.
Revised Text: Resolution: Make changes to allow valutypes to support multiple abstract interfaces.
The current prohibition on valuetypes supporting multiple interfaces
was intended to prevent the OBV spec introducing multiple interface
support by the "back door." The argument went that there is not
much if any difference between a valuetype supporting multiple IDL
interfaces and any implementation supporting sulitple IDL interfaces.
Since we had no standard way to do the latter, we should not invent
a standard way to do the former but not the latter, and we should
not invent a standard way to do the latter as part of adding OBV.
All very logical and reasonable.
This consideration does not require disallowing support of multiple
abstract interfaces. These are just giving the valuetype additional
type semantics, as in C++ where a class has multiple abstract base
classes containing only pure virtual functions, or in Java where a
class implements multiple Java (not IDL) interfaces.
So there is no reason to prevent this. The reason to allow this is
the Java to IDL mapping. A Java serializable class that implements
multiple RMI abstract interfaces (i.e., interfaces that do not extend
java.rmi.Remote but whose methods throw RemoteException) is mapped
to an IDL valuetype that supports multiple IDL abstract interfaces.
If the latter is prohibited, we cannot correctly support the former.
Revised Text:
a. Page 3.13, section 3.4, production 19. Change last line to
[ "supports" <interface_name> { "," <abstract_interface_name> }* ]
b. Page 3.13, section 3.4, add new production
<abstract_interface_name> ::= <scoped_name>
c. Make above two changes in section 3.8.1.3 on page 3-23.
d. Page 3-24, section 3.8.1.3, first line. Change "and <interface_name>"
to "<interface name>, and <abstract_interface_name>".
e. Page 3-27, section 3.8.5, third paragraph, add "and any number of
abstract interfaces" at end of sentence.
f. Page 3-27, section 3.8.5, third line of fifth paragraph. Change
"interfaces and abstract interface" to "interface and abstract
interfaces".
g. Page 3-27, table 3-10. Add new column for Abstract Interface
following the column for Interface. Contents are the same as
the existing column for Interface except that the entry for
Stateful Value should be "supports".
h. Page 3-27, table 3-10. Abstract Value inherits from Interface
should be "supports single". Also add new row for Abstract Interface,
with contents
(Interface) (Abs Int) (Abs Val) (Stfl Val) (Box Val)
no multiple no no no
i. Page 6-2, add new numbered point 6 before existing point 6 (which
becomes point 7): Value types may support any number of abstract
interfaces, but no more than one regular interface.
j. Page 10-16: Change the supported_interface parameter of the
create_value method of Container to a parameter named
supported_interfaces with a data type of InterfaceDefSeq.
Also make this change on page 10-58.
k. Page 10-19: Change supported_interface to supported_interfaces.
l. Page 10-34: Change the supported_interface attribute of ValueDef
to a parameter named supported_interfaces with a data type of
InterfaceDefSeq. Also make this change on page 10-64.
m. Page 10-35: Change the supported_interface member of ValueDescription
to a member named supported_interfaces with a data type of
RepositoryIdSeq. Also make this change on page 10-66.
n. Page 10-36: Change the first paragraph of section 10.5.24.1 to
"The supported_interfaces attribute lists the interfaces that this
value type supports."
o. Page 10-36: In section 10.5.24.2, change supported_interface to
supported_interfaces.
Actions taken:
January 20, 1999: received issue
September 16, 1999: closed issue
Discussion: a. Page 3.13, section 3.4, production 19. Change last line to
Issue 2316: Codebases with multiple URLs (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: To support JDK 1.2 correctly, the codebase support for Objects By Value
needs to support multiple URLs rather than a single URL as at present.
This affects page 5-16 in the core 2.3a chapters. Either the signatures
of the implementation and implementations methods need to change to:
URLSeq implementation(in CORBA::RepositoryId x);
URLSeqSeq implementations(in CORBA::RepositoryIdSeq x);
or we need to say that the URL string can be a blank-separated
sequence of URLs. This also affects the OBV grammar on page 15-19.
Resolution: Incorporate changes in 2.4 and close issue
Revised Text: It needs one or other of the following resolutions:
Option A. Encode multiple URLs as a blank-separated string. This leaves the existing
IDL unchanged, but requires changes to the supprting text in chapters 5 and 15 to
state that a codebase URL can be multiple blank-separated URLs.
Option B. Encode multiple URLs as a sequence of strings. This requires IDL changes
to page 5-16 and 15-19.
It is proposed that we resolve this issue using option B because:
(a) Encoding multiple URLs as a sequence of strings is more natural in IDL
(b) The Java to IDL mapping already does it this way.
This means that the core IDL remains unchanged. However, the text and
code comments should be clarified.
Revised Text:
On page 5-16, change the line:
typedef string URL;
to:
typedef string URL; // blank-separated list of one or more URLs
Also change the comment:
// Operations to obtain a URL to the implementation code
to:
// Operations to obtain the location of the implementation code
In the last paragraph on page 5-17, change the text:
In this case, in addition to the codebase URL that is sent in the
service context, each value which has a different codebase may have a
codebase URL associated with it.
to the text:
In this case, in addition to the codebase URL(s) sent in the service
context, each value which has a different codebase may have codebase URL(s)
associated with it.
One unrelated editorial point on this section. It is currently section
5.5.3 (part of "Custom Marshalling"). This is incorrect. It should be
section 5.6 as it has nothing to do with custom marshalling. Apparently
the wrong head level was used.
Some changes to chapter 15 are also required.
In section 15.3.4.1, first bullet, add a sentence at the end:
The <codebase_URL> string is a blank-separated list of one or
more URLs.
In section 15.3.4.1, second last paragraph, change "codebase URL" to
"codebase URL information".
In section 15.3.4.2, first paragraph, change "a URL" to "codebase
URL information".
In section 15.3.4.3, second sentence, change "a codebase URL" to "codebase
URL information".
In section 15.3.4.3, third sentence, change "codebase URL" to "codebase
URL information".
Actions taken:
January 20, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2318: Misleading text in section 3.2.5.2 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The second last paragraph in section 3.2.5.2 is confusing. The
second last sentence says (modulo typos) that since a string is a
sequence of character literals, a sequence of \u literals can be
used to define a wide string literal.
This seems to me to be a non sequitur. The conclusion does not
follow from the premise. I think this sentence was supposed to say
that since a wide string is a sequence of wide character literals,
a sequence of \u literals can be used to define a wide string literal.
Resolution: Fix it
Revised Text: On page 3-10, second last paragraph, replace the last two sentences
by the following:
Since a wide string literal is defined as a sequence of wide character
literals, a sequence of \u literals can be used to define a wide
string literal. Attempts to set a char type to a \u defined literal
or a string type to a sequence of \u literals result in an error.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2319: Clarify meaning of no IDL initializers (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 3.8.1.5 on page 24 does not make it clear what it means to
have no initializers for an IDL valuetype. The decision of the OBV
designers, which is reflected in the C++ and Java language mappings,
was that this means there is no portable way to create an instance
of the value type. This should be clearly stated in the definition of
IDL semantics for valuetypes, not deduced from the language mappings.
Resolution: Fix it
Revised Text: Page 3.24, section 3.8.1.5, add new paragraph after first paragraph:
If no initializers are specified in IDL, the
value type does not provide a portable way of creating a runtime
instance of its type. There is no default initializer. This allows
the definition of IDL value types which are not intended to be
directly instantiated by client code.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2320: Signature of unmarshal method is wrong (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 5-11, section 5.5.1, the signature of the unmarshal method is
wrong. It should return void, not ValueBase.
Resolution: Fix it
Revised Text: On page 5-11 in IDL for CustomMarshal replace the line:
ValueBase unmarshal (in DataInputStream is);
by the line
void unmarshal (in DataInputStream is);
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2321: Errors in figure 10-2 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 10-8, the section of figure 10-2 describing the module object
has become wrongly ordered when the green text was inserted. It says:
InterfaceDef
ValueDef
ValueBoxDef
ModuleDef
It should say:
ModuleDef
ValueBoxDef
InterfaceDef
Resolution: fix the order and indentation
Revised Text: Change the figure to look like:
(A) Repository
(B) ConstantDef
TypedefDef
ExceptionDef
InterfaceDef
ValueDef
ValueBoxDef
ModuleDef
(C) ConstantDef
TypedefDef
ExceptionDef
ValueBoxDef
ModuleDef
InterfaceDef
(D) ConstantDef
TypedefDef
ExceptionDef
AttributeDef
OperationDef
ValueDef
(E) ConstantDef
TypedefDef
ExceptionDef
AttributeDef
OperationDef
ValueMemberDef
With the following annotation in the right column against the blocks identified by letters in parens in the left margin above:
(A) Each interface repository is represented
by a global root repository object.
(B) The Repository IR object represents the constants,
typedefs, exceptions, interfaces valuetypes value boxes and modules
that are defined outside the scope of a module.
(C) The Module IR object represents the constants,
typedefs, exceptions, interfaces, valuetypes, value boxes and other modules
defined within the scope of the module.
(D) An Interface IR object represents constants,
typedefs, exceptions, attributes, and operations
defined within or inherited by the interface.
(E) A value type IR object represents constants,
typedefs, exceptions, attributes, operations
and members defined within or inherited by
the value type.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2322: No description for NativeDef (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 10.5.26, NativeDef, has no description of its read and write
interfaces. This is inconsistent with other sections.
Resolution: Provide description
Revised Text: Add the following paragraph at the end of section 10.5.26:
The inherited <font>type</font> attribute is a <font>tk_native
TypeCode</font> describing the native type.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2323: is_a description is wrong (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 10-36, the "is_a" description is wrong. "interface_id" should
be "value_id" for consistency with the IDL.
Actually, it would be more correct to name this "value_or_interface_id"
or just "id" since both values and interfaces can be passed to the is_a
method of ValueDef. This requires changing the IDL on pages 10-34 and
10-65.
Resolution: Incorporate changes in 2.4 and close issue.
Revised Text: The parameter named value_id should changed to id to reflect the fact that it can be either and interface or a value id.
Revised Text:
On pages 10-34 and 10-65, change the argument name in the is_a operation
from "value_id" to "id".
In section 10.5.24.1 on page 10-36, in the "is_a" description, change "interface_id" to "id".
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
September 16, 1999: closed issue
Discussion:
Issue 2325: No description for ValueBoxDef (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 10.5.25, ValueBoxDef, has no description of its read and write
interfaces. This is inconsistent with other sections.
Proposed resolution:
Add copies of sections 10.5.13.1 and 10.5.13.2 here.
Resolution: Provide description
Revised Text: Add copies of sections 10.5.13.1 and 10.5.13.2 as section 10.5.25.1 and 10.5.25.2 to this section. The second para of new section 10.5.25.1 shall read:
The inherited type attribute is a tk_value_box TypeCode describing the value box.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2327: Error in ValueDef IDL (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 10-35, the first line should be "RepositoryId supported_interface;".
Also, on page 10-65, the eleventh member of FullValueDescription should be
"RepositoryId supported_interface;" (same change).
Resolution: The resolution of this is tied to the resolution of issue 2314. So this issue is attached to and sub
Revised Text:
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2328: Text was inserted in wrong place (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 10-9, the recently added second paragraph should be moved to the
bottom of the section. The parapgraph preceding it and the two paragraphs
following it refer back to numbered points 1, 2 and 3 at the bottom of
page 10-8, so this block of text should not be broken up.
Resolution: Make it so
Revised Text: Move the paragraph:
"Analagous operations are provided for manipulating value types."
to the end of the section.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2329: RMI Repository ID missing from section 10.6 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 10.6 needs to be updated to reflect the addition of RMI
Hashed Format RepositoryIds.
Resolution: change introductory sentence to fix this problem in section 10.6
Revised Text: In section 10.6 change the sentence that currently says:
This specification defines three formats: one derived from OMG IDL names,
one that uses DCE UUIDs, and another intended for short-term use, such as
in a development environment.
to:
This specification defines four formats: one derived from OMG IDL names,
one that uses OMG IDL names and Java serialization version UIDs, one that
uses DCE UUIDs, and another intended for short-term use, such as in a
development environment.
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2330: Error in text describing TypeCode interface (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The IDL on page 10-47 describing the TypeCode interface says that
the member_count, member_name, and member_type operations apply to
tk_except TypeCodes. However, the text on page 10-49 says that
these do not apply to exception TypeCodes.
Resolution: Fix it.
Revised Text: Page 10-49, "member_count" and "member_name" operations description,
second line. After "non-boxed valuetype" add ", exception".
Page 10-49, "member_type" operation description, first line. After
"non-boxed valuetype" add ", exception".
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2331: Clarify text in section 15.3.7 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: On page 15-26, last sentence of section 15.3.7, the phrase "The abstract
encoding of value type" is not very clear. This refers to abstract
interfaces, but a reader might think it refers to abstract valuetypes.
Resolution: Incorporate change in 2.4 and close issue
Revised Text: On page 15-26, last sentence of section 15.3.7 change the phrase
"The abstract encoding of value type"
to
"The encoding of value types marshaled as abstract interfaces".
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2332: Clarifications needed in section 5.2.2 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In section 5.2.2 it states in the second paragraph that instances of
valuetypes passed into valuetype methods are passed by reference (in a
programming language sense). That"s fine, but:
1. This paragraph should also state that returned results are passed
by reference. This is necessary to ensure consistent IDL
valuetype semantics across different implementation languages.
2. The last sentence of the following paragraph is confusing because
it appears to contradict the statement in the second paragraph
about reference semantics. It says that "normal semantics for the
programming language in question apply". So if I have a language
that only does pass-by-value, pass-by-value semantics would apply
(so this says). This cannot be correct, since it would prevent
valuetypes from having well-defined semantics at the IDL level.
Resolution: Fix it.
Revised Text: 1. In the first sentence of the second paragraph of 5.2.2 page 5-3, change "passed into"
to "passed into and returned by".
2. In the last sentence of the third paragraph, change "the normal
semantics .... apply" to "programming language reference semantics
apply".
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2334: Value base and the IFR (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Consider the following IDL:
// IDL
interface I
{
void op(in ValueBase vb);
};
How is this represented in the IFR? What is the IDLType of the vb
parameter?
I think it should be a PrimitiveDef, just as it would be the case if I
would pass "Object" instead of "ValueBase". However, there is no
pk_ValueBase defined. Shouldn"t this be added?
Resolution: Add value base to primitive defs.
Revised Text: (1) In section 10.5.14 page 10-25 enum declaration for PrimitiveDefs append to the list pk_ValueBase
(2) Append the following sentence to the paragraph that immediately foolows the IDL referred to in (1) above:
"A PrimitiveDef with kind pk_ValueBase represents the IDL type
ValueBase."
Actions taken:
January 21, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2340: Forward-Declared Interfaces (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: there just has been raging discussion on the OB list about forward-declared
interfaces. The words we have right now are inadequate. You could argue that the
interface is defined in the same "specification" here. However,
current IDL compilers (if they implmement the check at all) require
the interface to be defined in the same compilation unit as the
forward declaration.
Now, we could allow a forward-declared interface to not be defined in
the same compilation unit, but then, I think, we would have to very
carefully specify what sort of things I can do with the forward-declared
interface. (If we don"t do that, we"ll make separate compilation impossible
because the compiler doesn"t know the size of a forward-declared interface
nor its base interfaces.)
What"s the general feeling here? I think we could simple change "specification"
to "IDL source file" and be done with it. That"s the simple way out.
Resolution:
Revised Text:
Actions taken:
January 22, 1999: receive dissue
October 30, 2000: closed issue
Discussion:
Issue 2341: Calling get_response twice? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: What if I call get_response on a request a second time, after I"ve already
retrieved the response previously? It seems that an exception should
be raised but the spec doesn"t say which one.
Also, the spec could be interpreted right now to say that it"s OK to
call get_response twice for the same request (because the spec says nothing
about that). However, to me, permitting this would be silly because it would
oblige the ORB to keep the reply around until the request object is destroyed
or is used to initiate another request.
Resolution:
Revised Text:
Actions taken:
January 22, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2343: Grammar section 3.9.2 missing "float" rules, and other problems (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 3.9.2 has the following problems:
No rules for combining floats are given, although double and long double types are mentioned.
The rules for sizing intermediate forms of constant expressions that must result in an octet type
are unspecified.
The size a positive integer constant is required to have is not specified; I imagine it should be
restricted to (at most) an "unsigned long" size, as larger sizes would not make valid array indices
in several languages.
Resolution: Sumsume this issue in 1139, and close this issue with that annotation in 2.4.
Revised Text:
Actions taken:
January 25, 1999: received issue
September 16, 1999: closed issue
Discussion: This issue is closely related to issue 1139, and therefore should be merged into 1139, so that the wholeissue of constant arithmetic can be dealt with in a single
consolidated resolution
Issue 2371: Issue - no PIDL, just language bindings (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In section 7.3.2 of CORBA 2.3a (ptc/98-10-07 pg 7-9) the description of
send_multiple_requests gives the C, C++, and SmallTalk bindings for the
operation but does not describe it in PIDL. This is inconsistent with
the description style for other operations. It is unnecessarily biased
towards these particular languages, and complicates the process of
maintaining the specifications of the individual language bindings.
The same comment applies to section 7.3.4 regarding get_next_response.
In this case the language binding is in fact inconsistent with that
published in the C++ language binding.
Resolution: Incorporate changes in 2.4 and close issue and raise new issue in C++ RTF
Revised Text: Resolution: Remove all the language mappings from the DII chapter and insert corresponding PIDL. Also update the PIDL in Chapter 4 ORB interface and make
it consistent with Chapter 7. Use the ORB pseudo interface in the C++ and Java language binding chapter as the basis for this cleanup.
Since this is just PIDL cleanup that simply aligns the PIDL with the way things are in the C++ and Java mappings, it has relatively little immediate impact on the most
important language mappings. Even those language mappings that diverge a little from this setup are not necessarily broken, since language mappings have
considerable latitude in how they map PIDL. If necessary they can eventually get aligned more closely.
What is proposed involves removing C language mapping specific flag values and such from the Core chapters and requesting the C language mapping RTF to
incorporate them in the C mapping chapter.
Revised Text:
1. In the PIDL for the ORB interface on page 4-2, immediately following the line "interface DynValue ..." insert the lines:
interface Request; // forward declaration
typedef sequence <Request> RequestSeq;
2. In chapter 4 on page 4-3 in the IDL for ORB interface immediately following the get_default_context operation add the following lines of PIDL:
void send_multiple_requests_oneway(in RequestSeq req);
void send_multiple_requests_deferred(in RequestSeq req);
boolean poll_next_response();
void get_next_response(out Request req);
3. In the third paragraph below the PIDL on page 4-7 which reads:
"For a description of the create_list and create_operation_list operations, see ?List
Operations? on page 7-11. The get_default_context operation is described in the
section ?get_default_context? on page 7-15."
Add the sentences:
"send_multiple_request_oneway and send_multiple_request operations are described
in the section "send_multiple_request" on page 7-9. poll_next_response and get_next_response
are described in the section "get_next_response" on page 7-10."
4. In section 7.3.2 on page 7-9 remove the C, C++ and Smalltalk language mappings at the beginning
of the section and place there instead the PIDL:
interface Request; // forward declaration
typedef sequence <Request> RequestSeq;
void send_multiple_requests_oneway(in RequestSeq req);
void send_multiple_requests_deferred(in RequestSeq req);
5. Remove the last four paragraphs of section 7.3.2. They belong in specific language mapping
sections that happen to use the Flags, as C language does.
6. In section 7.3.4 on page 7-10 remove the C, C++ and Smalltalk language mappings at the beginning
of the section and place there instead the PIDL:
interface Request; // forward declaration
boolean poll_next_response();
void get_next_response(out Request req) raises (WrongTransaction);
Actions taken: 1. Incorporate changes in 2.4 and close issue.
2. Raise a new issue for C language mapping RTF to take the C language specific material repoved from the
core chapters and incorporate them in the C chapter.
Actions taken:
February 2, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2372: Use UNICODE Character set (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: I am member of the nation using another set of accented Latin letters than is LATIN-1 standard (ISO 8859.1), namely LATIN-2. For this reason, I must comment your preference of one particular character set as an unfortunate case. I would understand, that if you would limit character set to basic Latin characters of the basic ASCII code, but preference of one national enhancements of this code brings my doubts.
In fact, the problem is not so hot, as it may seem on the first view. I know at present no classical compiler allowing use of the national character set e.g. for the language identifiers, and the limitation of the character sets to pure Latin characters is considered by Czech (and other nation"s) programmers as no significant limitation, with exception of the comments. The same concerns CORBA identifiers used in the OMG IDL language.
Resolution: Close issue in 2.4 with no change.
Revised Text:
Actions taken:
February 2, 1999: received issue
September 16, 1999: closed issue
Discussion: IDL only allows ASCII characters. strings (and char) may contain characters from the Latin-1 set. The wchar and wstring type can be used for unicode
character and unicode strings. Consequently no change is required in the standards to address the concerns raised in this issue.
Issue 2377: Application Interface issue (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: During study of the ORBIX software, I analyzed structure of internal stubs generated by IDL compiler on the both client and server side of the CORBA connection. I appreciated, that for creation of the both sides are used the same constructions like Request object, not different objects Request on the client side and ServerRequest on the server side. Naturally, there was also possibility to use CORBA compliant ServerRequest object when requested, but generated stubs used "old" IONA logic. May be, there are some sophisticated reasons why OMG specification use various objects on both client and server sides which I do not know, but in general, I prefer more simple approach of IONA. Please, let application interface as simple as possible.
Resolution: This issue is adequately dealt with in the POA specification.
Revised Text:
Actions taken:
February 2, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2378: Try to define obligatory and optional parts of the CORBA specification. (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Minor
Summary: Summary: This comment uses examples from the chapter 3, but its idea concernes style of the all specification, as a general rule.
6) In the version CORBA 2.2, there were introduced new features and new simple data type. I understand, that such types like long long and/or long double may be key parts for some application. On the other hand, majority of applications need not such data types, and I see no reason to introduce them as obligatory to all CORBA implementations. For this reason, try to difference various features as obligatory for any CORBA compliant implementation and other ones as optional.
In general, it is good idea to specify advanced features of this system to unify various its implementators, but, on the other hand, why those features are made obligatory? For this reason, try to define obligatory and optional parts of the CORBA specification.
Resolution: Close in 2.4 with no change.
Revised Text: Creating multiple conformance points will make the management of conformance problem very difficult and will make interoperability considerably
more difficult thus defeating the very purpose and one of the cornerstones of the success of CORBA. The implementation of a particular application may use
whatever subset it chooses but the at the interface the entire set of types must be supported.
Actions taken:
February 2, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2432: clarification and bug in InterfaceDef::FullInterfaceDescription (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The text in the interface repository specification that describes FullInterfaceDescription is ambiguous. CORBA v2.3a draft, section 10.5.23.1, page 10-22 reads:
The describe_interface operation returns a FullInterfaceDescription
describing the interface, including its operations and attributes. The
inherited describe operation for an InterfaceDef returns an
InterfaceDescription.
It does not specify whether the elements of the FullInterfaceDescription should describe only items (e.g., operations, attributes) that where defined in the interface being described, or whether they should describe items inherited from base interfaces as well. My naive, assumed rationale is that the full description is intended to improve efficiency. It should allow a dynamic client to obtain all of the information it needs to invoke any operation supported by the interface in a single request, avoiding the need to traverse the graph of base interfaces. If this is the case, then the full description should include inherited items as well, and the spec should say so. I checked our implementation (VisiBroker) and this is what it does.
My suggested remedy is to add the following words to the paragraph cited above:
"The operations and attributes fields of the FullInterfaceDescription structure include descriptions of all of the operations and attributes in the transitive closure of the inheritance graph of the interface being described."
The bug (I think) is that the FullInterfaceDescription description doesn"t include the boolean is_abstract member. The abbreviated InterfaceDescription struct has been extended with this member, and the FullInterfaceDescription should be a superset of the InterfaceDescription.
The suggested fix is to add the the following member to the InterfaceDef::FullInterfaceDescription struct:
boolean is_abstract;
Resolution: Incorporate changes in 2.4 and close issue
Revised Text: Resolution: Clarify that the FullInterfaceDescription structure includes all operations and attributes in the transitive closure of the inheritance graph.
The "bug" mentioned above has already been fixed editorially.
Revised Text:
In section 10.5.23.1, page 10-22, append the following sentence:
"The operations and attributes fields of the FullInterfaceDescription structure include descriptions of all of the operations and attributes in the transitive closure of the
inheritance graph of the interface being described."
to the paragraph that reads:
"The describe_interface operation returns a FullInterfaceDescription
describing the interface, including its operations and attributes. "
Actions taken:
February 2, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2435: Interceptors broken (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: There seems to be general consensus that the interceptor spec is
unimplementable fantasy material. Given this, it would seem advisable to
remove interceptors from the core.
Also, there is some doubt as to whether P&P rules were followed when
interceptors were added. My understanding is that an RTF cannot add
new features to a spec, yet interceptors definitely seem to fall into
that category.
Given that no RFP was ever issues and that the feature is obviously broken,
I suggest to remove the interceptor section until the outcome of the
Portable Interceptors RFP can be added.
Resolution: Close in 2.4 with no change.
Revised Text: What is proposed in this issue is well outside the scope of what an RTF can do, i.e. an RTF cannot add new features or remove exisiting ones. It can
only fix it, and if the fix requires an extremely substantial change, the fix has to be done using an RFP. Since there already is an RFP out to fix the chapter in question,
it would seem inappropriate for an RTF to step in and usurp what another TF is already trying to do properly..
Actions taken:
February 4, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2436: another problem with IDL specification section 3.9.2 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The spec doesn"t say how octal and hex integral constants are treated.
For instance, is the following line legal IDL or not:
const short s = 0xFFFF; // Valid???
If the interpretation of "0xFFFF" in this context is "65535", then
this is illegal, since the value is out of range. If the interpretation
is "-32768", then this assignment is valid. The wording in this section specifies that
each operand is converted immediately to the size of the eventual
storage location, but fails to specify *how* that conversion is to be
performed for hexadecimal and octal literals.
Resolution: closed issue
Revised Text:
Actions taken:
February 4, 1999: received issue
September 16, 1999: closed issue
Discussion: Resolution: This issue is closely related to issue 1139. It therefore makes sense to subsume this issue into 1139 and thus aid in producing a single consolidated
resolution ot the constant arithmetic related stuff associated with 1139.
Issue 2442: POA Construction Policy. (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: >From what I understand of the POA document is that
the POA or POAs are process resident, and that the servants they register
are within their own process space, i.e. the Server.
Resolution:
Revised Text:
Actions taken:
February 5, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2444: Problems in Chapter 5 IDL (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In ptc/98-12-04 Chapter 5, page 5-14, a DataInputStream operation
has the signature "long long long read_long()". It should be
"long long read_longlong()"
Also, the spelling of W[Cc]harSeq is inconsistent between its
declaration and its usage on pages 5-12 to 5-14.
Resolution: Close no change in 2.4
Revised Text:
Actions taken:
February 9, 1999: received issue
September 16, 1999: closed issue, no action in 2.4
Discussion: These errors have been fixed editorially in Rev 2.3a and they will appear in the fixed form in the published 2.3 spec which incorporate the output of the
2.3 and 2.3a RTFs.
Issue 2446: Inheritance of value types (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity: Minor
Summary: Summary: There is a need for clarification regarding inheritance
for value types. Must a value type that inherits from
abstract bases always inherit from a "concrete"
value? This seems to be enforced by the IDL
grammar and the introduction of the ValueBase
primitive type (as a concrete base in case no
other concrete base is inherited).
This seems somewhat ambiguous.
Resolution: close this issue with the note that it is resolved as part of 2490 in 2.4
Revised Text:
Actions taken:
February 9, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2447: What value type does ValueDef"s base_value() return? (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary: Summary: full_desc: What does a ValueDef"s base_value() operation
return for a value type that does not inherit from
any concrete value?
I see two possible resolutions: (1) make base_value()
return ValueDef::_nil() in this case, or (2) add a
pk_ValueBase primitive type to PrimitiveDef and
return that.
Resolution:
Revised Text:
Actions taken:
February 9, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2450: IR Changes in 2.3 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Jishnu has pointed out (very pointedly i might add :-) that a whole slew of
upwardly incompatible changes have been made to the IR.
E.g. old structs that have been modified (e.g. full interface description),
new structs have been added, operations added to container, changed
tckind, etc., etc.
The question before us is how, if at all, to reflect this change.
We came up with several options (listed in no particular order and
with no particular recommendation.)
1. Do nothing. This is the traditional approach but probably becoming
less and less appropriate as we mature :-)
2. Add a #pragma version name_of versioned_thingy major.minor
for every definition. (Jishnu thinks that in
principle all the #pragma version statements could go in one place,
say at the end of the CORBA module. [We leave it as exercise to the
reader to work out why they have to go at the end] )
3. Change the name of the enclosing module. say CORBA -> CORBA_2_3, gulp!!
Resolution: incorporate changes in 2.4 and close issue.
Revised Text: Tag all remotely accessible IR Contained's (those things that have a version attribute) in the IR specifications that have changed with the version tag 2.3. This includes
not only those that have been modified themselves but in addition all those that pass any that have been modified as parameters or return values, and in general those
that contain things that have changed, which pretty much boils down to all interfaces and many structs, and many enums. Also to keep things easy to remember, all
new stuff that has been added in 2.3 is tagged with 2.3.
These version tags enable those implementations that want to provide this information in their IR, to do so, while not forcing those that would rather not into doing so.
Additionally, to maintain the sanctity of module version, it is required that whenever the content of a module is changed its version tag must be changed, which implies
that once a particular version of the CORBA module is published with a specific version tag - 2.3 in this case, any changes that are proposed to the CORBA module
would require the change of the version tag.
The revised text keeps the actual choice of version number open for resolution by the marketing/publishing department of OMG. It however requires that a version
number be assigned as directed before the standard is published.
Revised Text:
In the following the string <x.y> represents the version number of the published standard. The editor should replace this with the version number of the published
standard. For example if the published standard is 2.3 then <x.y> should be replaced by 2.3 before publication. On the other hand if it happens to be 2.4 then <x.y>
should be replaced by 2.4.
(1) In section 3.14 append the following paragraph:
"The version of CORBA specified in this release of the specification is version <x.y>, and this is reflected in the IDL for the CORBA module by including the
following pragma version (ref pragma version):
#pragma version CORBA <x.y>
as the first line immediately following the very first CORBA module introduction line, which in effect associates that version number with the CORBA entry in the IR.
The version number in that version pragma line must be changed whenever any changes are made to any remotely accessible parts of the CORBA module in an
officially relaeased OMG standard."
(2) In the IDL in section 10.8 insert a line of the form:
#pragma version <name> <x.y>
immediately following the line in which the <name> appears in the full declaration of the <name>. for the following module, struct, enum, union, interface, valuetype:
DefinitionKind
IRObject
Container
Contained
Initializer
IDLType
Repository
All *Def
All *Description except ExceptionDescription
Value*
TCKind
Note that in case of modules that are opened multiple times, the version pragma must appear only once, immediately following the first module declaration line for
such modules.
Actions taken:
February 12, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2454: Inconsistent spellings of "policy" related identifiers: (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity: Significant
Summary: Summary: I have found inconsistent spellings of "policy" related identifiers:
"DomainManagersList" is used on pages 4-4 and 4-8
"DomainManagerList" is used on pages 4-17,20-87,20-88,20-110
Also, the operation identifer
"set_policy_override" is used on pages 20-87, 20-88, 20-110
However, this same operation identifier is consistently spelled as
"set_policy_overrides" on pages 15-52,15-61,15-65,15-66,15-103,
15-104,15-105,15-106,15-108,15-109,15-111,15-199,15-218,
and 15-219
in 98-12-03.pdf (Security Service Specification - Security Service
v1.5 15 December 1998 [FINAL]
So what is the "correct" spelling of these identifiers?
Resolution: Close no change in 2.4
Revised Text: DomainManagerList is correct, and all occurences of DomainManagersList in Chapter 4 is changed to DomainManagerList before publishing. Necessary changes
will be made in the Security spec as required too before Security 1.5 is published.
set_policy_overrides is correct. The latest version of C++ mapping reflects this in ptc/98-09-03.
It should also be pointed out that set_policy_overrides pertains to an operation of the Object interface the mappings of which to individual languages munge names
anyway. While it is desirable that the mappings do not munge the names in arbitrary ways, an error slipping in is not a show-stopping disaster, and it can be fixed in
the next round of revision.
Actions taken:
February 17, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2456: CORBA::Object::ping ? (orb_revision)
Click here for this issue's archive.
Nature: Enhancement
Severity:
Summary: Summary: I"d like to float the idea of adding a ping operation to CORBA::Object:
module CORBA {
interface Object {
void ping();
// ...
};
// ...
};
The reason for suggesting this is that developers have a frequent need
for this functionality. (How to determine object reachability (as opposed
to object existence) is a FAQ).
Resolution:
Revised Text:
Actions taken:
February 18, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2487: Inconsistent Definition of Flags type (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In Section 4.3 of V2.3a specification, the typedef of Flags is "long". In
Section 7.1.1, it is "unsigned long".
Resolution: Make it uniformly unsigned long
Revised Text: In the IDL on page 4-9 replace the line:
typedef long Flags;
by the line
typedef unsigned long Flags
Actions taken:
February 24, 1999: received issue
June 4, 1999: closed issue
Discussion:
Issue 2490: What use is CORBA::exception_type? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: This enumeration type is defined in 3.17.1, but used no where else. Why
is it even there?
Resolution: incorporate changes in 2.4 and close issue.
Revised Text: Fix the grammar problems as shown below and also remove the possibility of deriving anything explicitly from ValueBase keeping in line with the way in
which Object is handled.
Revised Text:
In section 3.4, replace productions 19 and 20 by:
(19) <value_inheritance_spec> ::= [":" ["truncatable"] <value_name>
{"," <value_name>}*]
["supports" <interface_name> {"," <interface_name>}*]
(20) value_name> ::= <scoped name>
Delete production 21.
Replace section 3.8.1.3 by the following:
3.8.1.3 Value Inheritance Specification
<value_inheritance_spec> ::= [":" ["truncatable"] <value_name>
{"," <value_name>}*]
["supports" <interface_name> {"," <interface_name>}*]
<value_name> ::= <scoped name>
Each <value_name> and <interface_name> in a <value_inheritance_spec> must
denote a previously defined value type or interface. See ?Valuetype Inheritance?
on page 3-27 for the description of value type inheritance.
The truncatable modifier may not be used if the value type being defined
is a custom value.
Actions taken:
February 25, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2492: Error in IRObject definition in 98-12-04 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The definition of IRObject in 10.5.2 somehow got an additional attribute
that makes no sense: "readonly attribute InterfaceName type_name".
This is probably an editorial mistake.
Resolution: They have been fixed in ptc/98-12-04.
Revised Text:
Actions taken:
February 26, 1999: received issue
June 4, 1999: closed issue
Discussion:
Issue 2502: Need to specify exception for abstract interface error (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: An abstract interface type in an operation signature indicates that
at runtime the value passed will either be an object reference or a
valuetype. However, it is possible for user code invoking this
operation to supply (incorrectly) a runtime programming language object
that is neither of these. For example, an IDL abstract interface type
maps into a Java interface, and the object passed at runtime could be
any Java type that implements this interface.
The spec does not currently define an exception to be used in this
error case. The Java to IDL mapping needs a defined exception so that
it can detect this error and return a NotSerializableException to the
application.
Resolution: Add a new minor code to the BAD_PARAM system exception:
Revised Text: Add a new minor code to the BAD_PARAM system exception table 3-13 on page 3-58:
6 Incorrect type for abstract interface
Actions taken:
March 3, 1999: received issue
March 8, 1999: moved from java2idl-rtf to orb_revision
September 16, 1999: closed issue
Discussion:
Issue 2507: Scope of SendingContextRunTime service context (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: It is not clear what is the scope of the SendingContextRunTime service
context defined in section 13.6.7.
Since the content of this service context will remain constant through
the lifetime of a connection, it needs to be sent only once per
connection. This is much more efficient than requiring it to be sent
on a per-request basis.
This seems to parallel the current usage of the CodeSets service context.
Section 13.7.2.6 says:
Code set negotiation is not performed on a per-request basis, but only
when a client initially connects to a server. All text data communicated
on a connection are encoded as defined by the TCSs selected when the
connection is established.
Resolution: closed in interop/2000-01-01
Revised Text:
Actions taken:
March 3, 1999: received issue
March 4, 1999: moved from orb_revision to interop
March 7, 2002: moved to Core RTF
March 22, 2002: closed issue
Discussion:
Issue 2508: omg.org prefix not well specified (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The core spec says in section 10.6.7 that:
Unless pragma directives establishing RepositoryIds for all definitions
are present in an IDL definition officially published by the OMG, the
following directive is implicitly present at file scope preceding all
such definitions:
#pragma prefix omg.org
What does an IDL compiler need to do to be compliant with this? How
is it supposed to recognize IDL definitions officially published by the
OMG so that it can insert the required implicit pragma?
Resolution: Incorporate change in 2.4 and close issue
Revised Text: The sentence quoted is asking for the impossible, since as
Simon has pointed out it is impossible for anyone to figure this info
out of thin air. So it should be removed.
The current policy is that each OMG standard IDL file must contain the pragma prefix "omg.org", unless the file is included in standard by reference to another
standard from a different standards organization like the W3C, in which case there must be a pragma prefix identifying the source standards organization.
Revised Text:
In section 10.6.7. replace the following text::
"Unless pragma directives establishing RepositoryIds for all definitions
are present in an IDL definition officially published by the OMG, the
following directive is implicitly present at file scope preceding all
such definitions:
#pragma prefix omg.org
For example, if an existing official specification included the IDL fragment:
module CORBA { // non-normative example IDL
interface Nothing {
void do_nothing();
};
};
the RepositoryId of the interface would be
IDL:omg.org/CORBA/Nothing:1.0.
"
by:
"All official OMG IDL files shall contain a pragma prefix directive:
#pragma prefix "omg.org"
unless said file already contains a pragma prefix identifying the
original source of the file (e.g "w3c.org")."
Actions taken:
March 3, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2509: Can an any with a tk_null or tk_void TypeCode be encoded with CDR? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The spec is silent about whether an any with a TypeCode of tk_null or
tk_void can be marshalled and unmarshalled with CDR.
Resolution: closed in interop/2000-01-01
Revised Text:
Actions taken:
March 3, 1999: received issue
March 7, 2002: moved to Core RTF
March 22, 2002: closed issue
Discussion:
Issue 2511: POA that has IdAssignmentPolicy=SYSTEM--portability problem (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: For a POA that has IdAssignmentPolicy=SYSTEM, there is a portability
problem in the combination of the POA generation of an ObjectId and
the language functions that convert between ObjectId and string.
The C++ functions PortableServer::ObjectId_to_string (and wstring)
state that
If conversion of an ObjectId to a string would
result in illegal characters in the string (such
as a NUL), the [...] functions throw the
CORBA::BAD_PARAM exception.
This apparently assumes that the conversion does nothing but take the
sequence of octet and recast it as a char*. Thus, an embedded null
would cause the string to be interpreted as shorter than the sequence,
so it"s an error.
Resolution: Close no change in 2.4
Revised Text: Let people write non-portable code and have redundant
conversion routines. Recommend to the language mapping RTFs that
the individual language RTFs that have
null-octet restrictions for CORBA::ObjectId_to_string (and cousins)
should add a warning. The warning should state that the use of these
functions is intended only for converting from original,
user-specified strings to ObjectId and back, not the reverse
Actions taken:
March 4, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2513: POA issue, section 11.3.8.10 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 11.3.8.10 of the Core draft 2.3a says that the application is
free to assign its own servant manager to the root POA, but the next
section says that the
set_servant_manager() operation requires that the POA in question must
support the request processing policy of USE_SERVANT_MANAGER. But as
the root
POA has a req. proc. policy of USE_ACTIVE_OBJECT_MAP_ONLY, surely the
user CANNOT assign a servant manager to the root POA.
The text is a mistake, isn"t it? The application cannot "assign its own
servant manager to the root POA". Unless there is some subtlety to the
meaning of the word "assign" which make it different from "set". I
thought the root POA was something the user could not tamper with in any
way.
Resolution:
Revised Text:
Actions taken:
March 5, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2521: LocateReply body alignment issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Hi folks, I know this is a bit late but I was going through some GIOP
1.2 issues with Bob and I only just noticed another required
clarification for LocateReply messages. Bascially the text added under
Request/Reply which states "In GIOP 1.2, the Request[/Reply] Body is
always aligned on an 8 octet boundary" was not also added to the
description for LocateReply"s (15.4.2.2). I presume the requirement
was intended for the body data of all message types. If so, perhaps it
would make sense to move this text to the start of 15.4 and reworded
to indicate the requirement for all message body data in general.
If the LocateReply body alignment issue will not be clarified in the
GIOP 1.2 specification then I wish to submit this as a new interop
issue.
Resolution: closed in interop/2000-01-01
Revised Text:
Actions taken:
March 8, 1999: received issue
March 7, 2002: moved to Core RTF
March 22, 2002: closed issue
Discussion:
Issue 2522: forward declaration in ptc/98-10-04 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity: Significant
Summary: Summary: Pages 3-18 and 3-19 of the CORBA 2.3a spec state that a forward declaration consists of the following:
[abstract] "interface" <identifier>
I believe that this should be:
[abstract] "interface" <scoped_name>
Otherwise, the following would be illegal:
module A
{
interface B::d; //forward decl of d
interface c
{
B::d f();
};
};
module B
{
interface d
{
A::c f();
};
};
Resolution: Close no change in 2.4
Revised Text: This has already been recognized as illegal and we wanted
it to stay that way. You can rewrite the code like this:
module B
{
interface d;
};
module A
{
interface c
{
B::d f();
};
};
module B
{
interface d
{
A::c f();
};
};
Actions taken:
March 9, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2529: RMI style repository ID hash code (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: There is a problem with the currently defined algorithm for computing
the hash code component of the RMI Hashed Format repository ID as
defined in section 10.6.2. Because it is based only on the structural
information in the most derived Java class and does not take into
acoount any superclass information, it can give a "false positive"
result when the state of a superclass changes but the state of the
most derived class does not.
This is a core RTF issue since the affected text is in chapter 10.
Resolution: Replace the currently defined algorithm with one that fixes the problem as described below
Revised Text: In section 10.6.2, replace the paragraph starting "The hash code is"
by the following text:
For classes that do not implement java.io.Serializable, and for
interfaces, the hash code is always zero, and the RepositoryID does not
contain a serial version UID.
For classes that implement java.io.Externalizable, the hash code is
always the 64-bit value 1.
For classes that implement java.io.Serializable but not
java.io.Externalizable, the hash code is a 64-bit hash of a stream of
bytes. An instance of java.lang.DataOutputStream is used to convert
primitive data types to a sequence of bytes. The sequence of items in
the stream is as follows:
1. The hash code of the superclass, written as a 64-bit long.
2. The value 1 if the class has no writeObject method, or the value 2
if the class has a writeObject method, written as a 32-bit integer.
3. For each field of the class that is mapped to IDL, sorted
lexicographically by Java field name, in increasing order:
a. Java field name, in UTF encoding
b. field descriptor, as defined by the Java Virtual Machine
Specification, in UTF encoding
The National Institute of Standards and Technology (NIST) Secure Hash
Algorithm (SHA-1) is executed on the stream of bytes produced by
DataOutputStream, producing a 20 byte array of values, sha[0..19]. The
hash code is assembled from the first 8 bytes of this array as follows:
long hash = 0;
for (int i = 0; i < Math.min(8, sha.length); i++) {
hash += (long)(sha[i] & 255) << (i * 8);
}
Actions taken:
March 12, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2539: Incorrect IDL is section 5.5.3 (orb_revision)
Click here for this issue's archive.
Nature: Revision
Severity:
Summary: Summary: The IDL in section 5.5.3 is incorrect. It refers to
CORBA::FullValueDescription
but the correct name for this type according to chapter 10 is
CORBA::ValueDef::FullValueDescription
Proposed Resolution:
Change chapter 5 to match up with chapter 10.
Resolution: make it so.
Revised Text: On page 5-15 and 5-16 replace occurences of
CORBA::FullValueDescription
by:
CORBA::ValueDef::FullValueDescription
Actions taken:
March 15, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2543: confusing rules for operations on Object (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Section 4.3 of ptc/98-10-05 documents Object Reference Operations. These
are described as "not operations in the normal sense, in that they are
implemented directly by the ORB, not passed on to the object
implementation".
This includes a variety of operations, requiring varying contexts to be
used successfully:
- Some require remote communication to the orb of the server
or (contrary to the quote above) may actually be passed on
to the object implementation, or something similar like a
servant manager (e.g. is_a, non_existent)
- some may require remote communication to an interface repository
(e.g. get_interface)
- some require the local orb to be operational
(e.g. create_request)
- some can function even without a local orb
(e.g. is_nil, duplicate, release)
Resolution:
Revised Text:
Actions taken:
March 16, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2547: DynAny.insert_valuetype shoud be insert_val (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The IDL in section 9.2 of ptc/98-12-04 is incorrect. The OBV RTF adopted
method names insert_val and get_val instead of the original insert_value
and get_value which conflicted with the get_value method in the DynFixed
subclass. The IDL incorectly shows these methods as insert_valuetype
and get_valuetype.
Proposed Resolution:
Change insert_valuetype to insert_val and get_valuetype to get_val.
Resolution: fix the names in section 9.2
Revised Text:
Do a global replace of all occurences of get_valuetype by get_val and insert_valuetype by insert_val in section 9.2
Actions taken:
March 16, 1999: received issue
September 16, 1999: closed issue
Discussion:
Issue 2548: Repository ID for Object (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Latest 2.3, draft (98-10-10), page 13-17:
"A Null TypeID is the only mechanism that can be used to represent
the type CORBA::Object."
I am aware of more than one ORB that uses "IDL:omg.org/CORBA/Object:1.0".
I don"t understand why:
- a null ID should mean Object
- why a perfectly good repository ID for Object should be disallowed
Related to this is the fact that we made repository IDs mandatory in
reference TypeCodes with the 2.3 revision. Unless an implementation is
very careful, this could mean that, if it gets a reference that doesn"t
have the repository ID, it could present an illegal TypeCode (with an
empty ID) for that reference to the application.
Resolution: closed in interop/2000-01-01
Revised Text:
Actions taken:
March 17, 1999: received issue
March 7, 2002: moved to Core RTF
March 22, 2002: closed issue
Discussion:
Issue 2549: activate_object_with_id and exceptions (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: If I use activate_object_with_id and the object ID is already in the AOM,
the operation raises ObjectAlreadyActive.
If I use activate_object_with_id and the servant is already in the AOM, and
the POA has UNIQUE_ID, the operation raises ServantAlreadyActive.
What happens if I have UNIQUE_ID, and I run the following code?
poa->activate_object_with_id(my_id, my_servant);
poa->activate_object_with_id(my_id, my_servant); // ???
Which exception is raised on the second call, ObjectAlreadyActive or
ServantAlreadyActive?
Resolution:
Revised Text:
Actions taken:
March 18, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2553: ORB::shutdown again (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I"m sorry to reopen this can of worms, but I believe that the shutdown()
issue we voted on (1665) still only offers a partial solution. The problem
appears to be that terminating the event loop and ORB destruction must be
separate steps.
Consider a very simple application that uses RETAIN, NO_IMPLICIT_ACTIVATION,
and USER_ID. No servant manager is used.
Resolution: This issue should be closed no change.
Revised Text:
Actions taken:
March 23, 1999: received issue
February 27, 2001: closed issue
Discussion: This issue should be closed no change.
The best way to deal with the destruction of POAs issue
is to arrange the POAs into a hierarchy such that POAs that depend
on other POAs are destroyed first, followed by those POAs that don't depend
on other POAs. The semantics of POA::destroy() are already sufficient
to achieve this.
In addition, by using reference-counted servants, the issue goes away too
because one can then rely on the POA to take care of removing servants from the
AOM, so one doesn't have to call deactivate_object() in the destructor.
Issue 2559: deactivate_object asymmetry (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: In the POA, we have
ObjectId activate_object(in Servant s) raises(...);
void activate_object_with_id(in ObjectId id, in Servant s) raises(...);
However, for deactivation, we have only one function:
void deactivate_object(in ObjectId id) raises(...);
This lacks symmetry. If I can use implicit activation of a servant,
why can"t I use implicit deactivation? For symmetry, I would have expected:
void deactivate_object() raises(...);
void deactivate_object_with_id(in ObjectId id) raises(...);
Resolution:
Revised Text:
Actions taken:
March 29, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2574: Clarification on IdUniquenessPolicy (orb_revision)
Click here for this issue's archive.
Nature: Clarification
Severity:
Summary: Summary: The description of IdUniquenessPolicy in section 11.3.7.3 fails to
mention how this policy interacts with the ServantRetentionPolicy.
My interpretation is that the IdUniquenessPolicy is irrelevant when the
ServantRetentionPolicy is NON_RETAIN. If this is the case it should be
explicitly stated. Alternatively, one specific value might be required
when NON_RETAIN is in effect. (If so, it ought to be MULTIPLE_ID.)
Without some statement clarifying this there could be portability
problems with some orbs allowing either value while others require a
particular value.
Resolution:
Revised Text:
Actions taken:
March 31, 1999: received issue
March 31, 1999: received issue
October 30, 2000: closed issue
Discussion:
Issue 2576: UNIQUE_ID and ServantActivator issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: What should happen if the servant returned from a
ServantActivator::incarnate call is already registered for another
object id, and the POA has the UNIQUE_ID policy?
Since this is clearly an error, I suggest raising the OBJ_ADAPTER
exception (which will be returned to the client whose request prompted
the call to incarnate). I also suggest requiring the POA to call
ServantActivator::etherealize for that object id. The latter is
necessary to allow the application to dispose of any resources
associated with that object, and to ensure that an application will
never recieve two calls to ServantActivator::incarnate for a particular
object id without an intervening call to ServantActivator::etherealize.
Resolution: Incorporate change and close issue
Revised Text: Add the following sentence to the second-last paragraph of
section 11.3.5.1 on page 11-24 (preceding the note):
In this case, etherealize is not called by the POA because the
servant was never added to the Active Object Map.
Actions taken:
April 2, 1999: received issue
October 6, 2000: closed issue
Discussion: Based on the log, it seems that the behavior of raising OBJ_ADAPTER is
already specified.
Regarding the idea of calling etherealize, the are some possible
benefits, but they are dubious for a servant locator that has already
proven itself to be broken. Consequently, we should clarify that
etherialize is not invoked in this case.
Issue 2577: sharing valuetypes across Anys (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Should valuetype identity be preserved across arguments when those
valuetypes reside within Anys?
Resolution:
Revised Text:
Actions taken:
April 5, 1999: receive dissue
October 30, 2000: closed issue
Discussion: receive dissue
Issue 2579: is_abstract parameter missing from create_interface() IDL (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I noticed the IDL for Container in ptc/98-12-04, page 10-59 is missing
is_abstract parameter in create_interface() operation.
The instance on page 10-16 does include it.
Resolution:
Revised Text:
Actions taken:
April 8, 1999: received issue
April 8, 1999: closed issue
Discussion:
Issue 2615: The insert_dyn_any and get_dyn_any operations are barely documented (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: 1) The insert_dyn_any and get_dyn_any operations are barely documented. It
seems the only explanation is given on 9-15: "The get_dyn_any and
insert_dyn_any operations are provided to deal with any values that contain
another any." The insert_dyn_any function should be specified as behaving
identically to insert_any, except that it allows an any in the form of a
DynAny to be inserted. The get_dyn_any should be specified as behaving
identically to get_any, except that it returns its result in the form of a
DynAny rather than an any.
Resolution: "The get_dyn_any and
Revised Text:
Actions taken:
April 20, 1999: received issue
April 20, 1999: received issue
April 26, 1999: moved to Core RTF from C++ RTF
Discussion:
Issue 2616: DynAny::equal operator issue (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: The DynAny::equal operator does not mention how to compare object
references or TypeCodes. It should be specified to require is_equivalent()
to be called for object reference comparison and equivalent() to be called
for TypeCode comparison.
Resolution:
Revised Text:
Actions taken:
April 20, 1999: received issue
April 26, 1999: moved from C++ to Core RTF
October 30, 2000: closed issue
Discussion:
Issue 2617: DynFactory or DynAnyFactory? (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: Page 9-10 of the new DynAny draft says that you pass "DynFactory" to
resolve_initial_references() to get a DynAnyFactory. The third comment on
page 9-2, however, says the string should be "DynAnyFactory". I believe the
latter is correct.
Resolution:
Revised Text:
Actions taken:
April 20, 1999: received issue
April 26, 1999: closed issue, fixed
Discussion: fixed, issue is closed
Issue 2674: New "opaque" data type (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: I propose the addition of the new basic data type "opaque."
Many applications require the sending or retrieving of opaque data,
like graphical data or file contents. Currently, such data is packaged
as sequence<octet>.
In the past, the performance of passing sequence<octet> parameters
was not satisfactory because of the generic mapping of sequences. In
the recent C++ mapping, the dubious get_buffer() is introduced for
the mapping of sequences.
I feel that this matter is best resolved by adding a new data type
which can then be mapped efficiently into target languages without
the side effect of complicating the mapping of other sequences.
After all, a "string," too, is nothing but a sequence of char.
Resolution:
Revised Text:
Actions taken:
May 30, 1999: received issue
December 16, 1999: ransferred from C++ RTF to Core RTF
October 30, 2000: closed issue
Discussion:
Issue 2791: Expected behavior of POA configured with ServantLocator receiving LocateRe (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary: Summary: This is an issue with the Portable Object Adapter:
If a POA configured with a ServantLocator receives a LocateRequest, what
is the expected behavior? A ServantLocator expects to receive an operation
name as a parameter to preinvoke() and postinvoke(), but there is no
operation name in a LocateRequest.
We could just return a true response to the LocateRequest and not involve
the ServantLocator. That might mislead the sender though. If the sender
received a true response and then sent a message they might get an
OBJECT_NOT_EXIST exception back.
We could pass an operation name like "_locate" to the manager. That would
let the manager know that a location request was being processed, and the
underscore would signify that it is an internal message since it"s not a
_get or _set.
Resolution: Add a subsection to section 11.3.6 specifying "_locate" and its usage.
Revised Text: 1) New section 11.3.6.3 titled "ServantLocator and Location Determination"
contain the following text:
"Under certain circumstances, an ORB may need to determine the actual
location of an object's implementation.
For objects that are managed by a POA that is configured with a ServantLocator,
it may invoke preinvoke and postinvoke or it may determine the object's
location by some other means. If it invokes preinvoke and postinvoke under
these circumstances it shall use the argument "_locate". "
2) New section 15.4.6.3 titled "Handling ForwardRequest exception
from ServantLocator" containing the following text:
"If the ServantLocator in a POA raises a ForwardRequest
exception the ORB shall send a LocateReply message to the client
with locate_status set to OBJECT_FORWARD, and with the body
containing the object reference from the ForwardRequest exception's
forward_reference field."
Actions taken:
July 8, 1999: received issue
July 16, 1999: moved from Java RTF to Core RTF
October 6, 2000: Incorporate core change and forward to interop RTF recommendi
Discussion:
Issue 2796: The syntax for stringified IORs in section 13.6.6 (orb_revision)
Click here for this issue's archive.
Nature: Uncategorized Issue
Severity: Hewlett-Packard EIAL
Summary: Summary: The syntax for stringified IORs in section 13.6.6 shows: =
"IOR:" The problem is that URL scheme names are supposed to be case
insensitive. So, "Ior:"
or "ioR:" should be allowed to. I would suggest to add a footnote to
state that case for the scheme name is ignored.
Resolution: closed in interop/2000-01-01
Revised Text:
Actions taken:
July 9, 1999: received issue
August 11, 1999: moved from Core RTF to Interop
March 7, 2002: moved to Core RTF
March 22, 2002: closed issue
Discussion:
Issue 2817: Null Value semantics under specified (orb_revision)
Click here for this issue's archive.
Source: Objective Interface Systems (Mr. Victor Giddings, victor.giddings(at)mail.ois.com)
Nature:
Severity:
Summary:
he description of null value semantics (in ptc/99-03-07) is insufficient to ensure an adequate mapping to an implementation language. Issues that should be specified include: - Creation. How are null values created? Are all declared (but uninitialized) values born null? Is this a language mapping requirement or allowance? - Invocation. Presumably invoking an operation ON a null value should result in an exception. But, what exception? Shouldn't the exception be specified for application portability? - Passing. Presumably, it is allowable to provide a null value as the actual parameter for a non member operation (i.e., not on itself). True? - Typing: are null values typed, untyped, or is this governed by the language mapping? - Substitutability (see "typing" above): -- Presumably: a null value may be successfully widened to a null value of an ancestor stateful value type. True? -- Can a null value be successfully widened to a (null) supporting concrete interface? (Can a null value be activated as a servant?) -- Can a null value be successfully widened to a (null) supporting abstract interface? -- Can a null value be successfully widened to a (null) ancestor abstract value type? The only mentions of null values currently are: - the bullet in 5.2 - 5.2.4.2
1. Creation. How are null values created? Are all declared (but
uninitialized) values born null? Is this a language mapping
requirement or allowance?
The DynAny aspect of this is being addressed in DynValue issue.
The rest is a language mapping issue, and needs to be dealt with in each
language mapping.
2. Invocation. Presumably invoking an operation ON a null value should
result in an exception. But, what exception? Shouldn't the exception
be specified for application portability?
Yes, but the exception is language mapping specific, and hence
should be specified for each language mapping, and not in the Core.
3. Passing. Presumably, it is allowable to provide a null value as the
actual parameter for a non member operation (i.e., not on itself). True?
True.
4. Typing: are null values typed, untyped, or is this governed by the
language mapping?
The wire format for a null value contains no type information.
So technically I think that null values are untyped. That is about
all that can be said by the core or interop.
In a language mapping that supports static typing, the variable that
contains a null value may be typed, and in this case the value may be
considered to have that type. But that is actually a property of the
variable and not the value.
5. Substitutability (see "typing" above):
-- Presumably: a null value may be successfully widened to a null
value of an ancestor stateful value type. True?
-- Can a null value be successfully widened to a (null) supporting
concrete interface? (Can a null value be activated as a servant?)
-- Can a null value be successfully widened to a (null) supporting
abstract interface?
-- Can a null value be successfully widened to a (null) ancestor
abstract value type?
These are entirely language mapping issues.
Summary: An issue we"ve run across is enumerating the set of system exceptions that are valid to be passed via GIOP 1.0 (and similarly for 1.1, and 1.2). This is important for implementations of GIOP, which are, for instance, attempting to map wire exceptions to C++ exceptions, and is also important for packet-sniffing implementations. Since many conforming GIOP 1.0 implementations were built (and bought) and incorporated into products before various CORBA system exceptions were added to the Core, it seems that servers should not raise `newer" exceptions back to older clients -- that is, clients speaking GIOP 1.0. Instead, they should map those `newer" exceptions to UNKNOWN, I"d guess.
Summary: The spec is currently unclear on when and how messages with different giop versions may share a single connection. This has already been discussed, with different RTF members holding positions running the range from: "all messages on a connection must have the same giop version" to "messages with differing giop versions must be permitted on the same connection". So clearly there is an issue. The resolution of this issue should address at least the following unclear points: 1) suppose a client orb supporting giop 1.2 initiates an invocation on an IOR with iiop version 1.1. As a result, it establishes a new connection and sends the request using giop 1.1. Later, the same client obtains another IOR referencing the same transport address, but specifying iiop version 1.0. - may the same connection be used to send a request to the new IOR? - if so, what giop version should be used to send the request? 2) Later, the same client obtains another IOR referencing the same transport address, but specifying iiop version 1.2. - may the same connection be used to send a request to the new IOR? - if so, what giop version should be used to send the request - if so, what giop version should be used to send subsequent requests to the IORs mentioned in (1). 3) Imagine a day in the not too distant future, when giop 1.3 has been approved and implemented. A client that supports giop 1.3 obtains an IOR with iiop version 1.2, establishes a new connection, and then sends a request using giop 1.2. A service context offering bidirectional giop is sent with this request, and accepted by the server. The client provides the server (that supports giop 1.3) with a callback IOR that has iiop version 1.3, and the server attempts to call back on it. - may the callback use the incoming connection? - if so, what giop version should the request use? - if so using v1.2, what if the callback request requires a feature only available in giop 1.3?
Summary: Many changes between CORBA 2.2 and CORBA 2.3 are not changebarred. Some examples from the POA chapter (docs/formal/99-07-15.pdf): - Page 11-20: added PortableServer::POAManager::get_state() method. - Page 11-28: change in the TRANSIENT lifespan policy"s semantics (from "cannot outlive the process" to "cannot outlive the POA instance") - Page 11-35: change in PortableServer::POA::set_servant_manager() semantics wrt multiple invocations I wonder which other tidbits I"ve overlooked so far. Is there a complete list of changes (such as a CVS log) anywhere?
change in PortableServer::POA::set_servant_manager()
Summary: CORBA 2.3 chapter 3.8.5 (docs/formal/99-07-07.pdf, p. 3-27) claims that a stateful value can only support a single interface. CORBA 2.3 chapter 5.2 (docs/formal/99-07-09.pdf, p. 5-2) claims that a concrete (stateful) value can support multiple interfaces. The latter is obviously wrong.
Summary: In CORBA 2.3, chapter 11.3.8.11 (docs/formal/99-07-15.pdf, p. 11-35): seems to me as if the paragraph that was added to the description of get_servant_manager() is really intended for set_servant_manager().
Summary: According to the spec, a wide string may contain one or more Unicode escape sequences of the form \uxxxx, where the x"s are hex digits. It also says that such an escape sequence may not have the value 0, and that leading 0s are optional in the hex digits. Taking all this into account, how does a parser tell the difference between (imaginary parentheses inserted to show the writer"s intent)
Summary: CORBA 2.3, chapter 3, section 3.10.2, page 3-35 says: "Although the IDL syntax allows the generation of recursive constructed type specifications, the only recursion permitted for constructed types is through the use of the sequence template type." With the introduction of valuetypes, this is no longer true. A valuetype is allowed to have a member of its own type, either directly or indirectly.
Summary: On page 4-5 of CORBA 2.3 the deprecated create_recursive_sequence_tc operation is missing its open parenthesis for its parameter list.
received issue
Summary: Just got a question from our IDL compiler folks - I think they"ve found a bug in the 2.3 IDL chapter..... (actually the bug has been there for a while).. Looking at the new CORBA2.3 book, The syntax for discriminated unions are described on two pages (3-16 and 3-36). On both pages the <wchar_type> isn"t included in the grammar for <switch_type_spec>. Therefore my conclusion was that it shouldn"t be allowed. The problem is that further down on page 3-36 there is a table for "case label matching" and in that table wchar is listed as a discriminator type. So, was the wchar type forgotten from the grammar for switch type spec, or was wchar mistakenly added to the table?
Summary: There are several cases in the POA specification where the POA is required to raise system exceptions. We should assign OMG minor exception codes to each of these cases so that applications can diagnose these conditions better. Examples: 1. POA has the USE_DEFAULT_SERVANT policy but no servant is assigned, the POA raises OBJ_ADAPTER. 2. If no adapter activator is available (or the available one refuses to create a POA), the OBJECT_NOT_EXIST exception is raised.
Summary: the spec makes no statement as to the legality of the following constant definitions: const long C1 = 3.14; const short C2 = 1.0; const unsigned long C3 = -1; const char C4 = 10; const char C5 = 500; const long C6 = 999999; const short C7 = C6; const octet C8 = 1000; const short C9 = C5; const short C10 = 100 * 100 * 100; I"m sure that there are lots of others I haven"t thought of, but you get the idea... There are certainly lots of holes in the spec, with respect to both the legal types of the RHS and rules for overflow/underflow and mixed-type arithmetic. Looks like this will require a major cleanup...
Summary: This issue is for the Core RTF. Although it shows up in the context of Java, fixing it requires a change to an API defined in the CORBA core. The CORBA::DataInputStream type (part of the CORBA core) is specified in a way that makes it extremely inefficient to implement in Java. A small change to this IDL definition would reduce the number of Java classes needed to implement it from 27 to 1. (Really!)
"Can someone please clue me in as to what the > repository ID of Object is? Is it "IDL:omg.org/CORBA/Object:1.0"? Or is > it "IDL:omg.org/Object:1.0"?"
I was wondering why the Standard Exception definitions are in Chapter 3 IDL Syntax and Semantics. Shouldn't they be better in Chapter 4 ORB Interfaces? I would like to get a feel for how the RTF membership feels about moving the entire section 3.21 from Chapter 3 to Chapter 4.
The corbaname & corbaloc url formats provide a situation where an IOR designating a server is created and used by a client without input by that server. One (optional) element of an IOR is a CodeSetComponent specifying the code sets that the server is willing/able to utilize. Normally these are examined by a client and used to select a pair of code sets (narrow and wide) to be used for communication between client and server. Chapter 13 of the Corba spec states: "If the code set component is not present in a multi-component profile structure, then the deault char code set is ISO 8859-1 for backward compatibility. However, there is no default wchar code set. If a server supports interfaces that use wide character data but does not specify the wchar code sets that it supports, client-side ORBs will raise exception INV_OBJREF." This seems to imply one of the following: 1) URLs may not be used to reference interfaces that employ wide characters; 2) URLs must generate IORs with a code set component supporting wchar data; 3) The CORE must be changed to relax the above restrictio
The CORBA 2.3 spec for DynAny makes no mention whatsoever of how it should handle Any values corresponding to TypeCodes whose kind is tk_alias. The implementation of (CORBA 2.2) DynAny in a popular free ORB strips off typecode aliases when it creates a DynAny. While this seems to be contrary to the overall intent of the DynAny spec, I can find nothing in the 2.2 or 2.3 spec that definitively precludes this (IMO bogus) behaviour.
Section 10.7.3 of the CORBA 2.3 spec says that operations on recursive
TypeCodes and recursive sequence TypeCodes before they have been embedded
give undefined results.
However, it is not clear whether this applies to other uses of these
TypeCodes ... or other incomplete TypeCodes or Anys that contain them. For
example, can an incomplete TypeCode be used:
* as a parameter to create_dyn_any_from_type_code,
* as a parameter to a DII or DSI operation; e.g. the arg_type parameter
of CORBA::Request::add_arg(), or
* as a (CORBA IDL) parameter or result of a regular operation invocation?In the CORBA 2.3 spec for DynFixed::set_value (page 9-14) it says, "If val contains a value whose scale exceeds that of the DynFixed or is not initialized, the operation raises InvalidValue." Later in the same paragraph it says, "If val has more fractional digits than can be represented in the DynFixed, fractional digits are truncated and the return value is false." Given that the term "scale" is used with the fixed-point type to describe the number of fractional digits, these two quoted sentences are confusing and appear to contradict one another. I propose changing the first quoted sentence to: "If val contains a value whose number of digits exceeds the maximum number of digits specified by the TypeCode of the DynFixed, or if val is not initialized, the operation raises InvalidValue."
It is not clear from section 10.7.3 of CORBA 2.3 how much param checking
the ORB operations for TypeCode creation should do. It is also unclear
whether only the BAD_PARAM exception should be raised, or whether some
others are legitimate; e.g. BAD_TYPECODE.
Here are some detailed questions on TypeCode creation argument checking:
1) should the operations that take a "name" argument check that it
is a valid IDL name? A non null string?
2) should the operations that take a "RepositoryId" argument check
that it has a recognisable format?
3) should the operations that take content and member types as
parameters check that they are legitimate; i.e. that they
don't have kinds tk_null, tk_void or tk_exception.
4) should the operations that take members check that the member
names are valid IDL names and that they are unique within the
member list?
5) should create_union_tc check that there are no duplicate label
values? Should it check that the labels' TypeCodes are equal to
discriminator TypeCode? Or equivalent?
6) should create_union_tc check that the supplied discriminator
type is legitimate?
There are probably more cases as well.CORBA 2.3 added the CORBA::RequestSeq definition to orb.idl. The C++ mapping defines CORBA::ORB::RequestSeq, which is now redundant and should be removed.
The ORB Core IDL extracted in formal/99-08-01.txt is missing the various '#pragma' definitions for the IFR interfaces.
I notice that the CORBA 2.3 spec hasn't been updated with one of the corrections in part B of the COM-CORBA Interworking spec (orbos/97-09-06). page 13C-130 of the Part B spec, CORBA::Char mapping to UI1 has not been updated in the corresponding section in the CORBA 2.3 spec (19.3.1, page 19-10).
with one of the corrections in part B of the COM-CORBA Interworking spec (orbos/97-09-06).
The first paragraph of 11.3.2.6 says: This operation changes the state of the POA manager to inactive. If issued while the POA manager is in the inactive state, the AdapterInactive exception is raised. Entering the inactive state causes the associated POAs to reject requests that have not begun to be executed as well as any new requests. But the last paragraph says: If deactivate is called multiple times before destruction is complete (because there are active requests), the etherealize_objects parameter applies only to the first call of deactivate; subsequent calls with conflicting etherealize_objects settings will use the value of the etherealize_objects from the first call. The wait_for_completion parameter will be handled as defined above for each individual call (some callers may choose to block, while others may not). So which is right? Is does a subsequent call to deactivate() raise AdapterInactive, or does it succeed, perhaps blocking until completion?
In this case it is best to NOT throw the exception and allow multiple concurrent calls to deactivate(). Otherwise, if an application needs to have this behavior (where different threads might call deactivate()), it requires more code to catch the exception and then block waiting for the other deactivate call to complete.
DataInputStream and DataOutputStream (CORBA 2.3, Section 5.5.2) has definitions for reading and writing individual items and arrays of primitive data types except long double. This seems to be an oversight.
Also, 13.6.2.2 claims "ORB services are assigned component identifiers in a namespace that is distinct from the the profile identifiers". What is the significance of this statement?
Section 11.3.8.20 (servant_to_id) was not updated in the same fashion as section 11.3.8.21. There are two problems: 1. The RETAIN policy in the first paragraph needs bold face. 2. Behaviors 1 & 2 should both require the RETAIN policy, just like the text in section 11.3.8.21.
The comments in the definition of TypeCode in 10.7.1 shows that id() and name() are valid for TypeCodes of kind tk_abstract_interface, but the text descriptions of the id() and name() operations do not list abstract interface TypeCodes as supporting these operations.
I was wondering why the Standard Exception definitions are in Chapter 3 IDL Syntax and Semantics. Shouldn't they be better in Chapter 4 ORB Interfaces? I would like to get a feel for how the RTF membership feels about moving the entire section 3.21 from Chapter 3 to Chapter 4.
Could someone explain to me the justification for all the restrictions on > exceptions? Why CAN'T we: pass exceptions as parameters, use them as > elements in container types? I know the IDL language doesn't allow it, I > just want to know why it was designed that way. Other languages certainly > allow it.
Chapter 5 (formal/99-07-09) is missing specification of minor codes for all the standard system exceptions that are specified to be raised under various circumstances.
Chapter 8 (formal/99-07-12) is missing specification of minor codes for all the standard system exceptions that are specified to be raised under various circumstances.
I was wondering why the TypCodes definition section is in Chapter 10, Interface Repository. Type Codes are used by lots of other things that have very little to do with Interface Repository. Wouldn't it be better to move the TypeCode section to Chapter 4.
Regarding using a version in a repository ID: If old PIDL were to be recast to local, each time the interface def would be enhanced (by adding new local operations), the IDL module would have to be appropriately versioned. I also point out that using a version for corba::object's repository id seems inappropriate, since there are multiple version of corba::object which the omg never bothered to version, since they did not have to. Thus, in summary, putting version 1.0 to correspond to a pidl interface implies stability in that inteface (i.e., it will not change without changing the version number), which the OMG has never enforced for PIDL.
page 3-2 of the spec says (Section 3.1, para 3 and para 5): OMG IDL obeys the same lexical rules as C++. [ ... ] The OMG IDL grammar is a subset of the proposed ANSI C++ standard... Both paragraphs are simply wrong. IDL doesn't obey the same lexical rules and it isn't a subset of C++. In addition, we now have the final ISO/IEC C++ standard, so talking about the proposed or draft standard is out of date. I would suggest to systematically replace references to ANSI C++, the "proposed" standard, or the "draft" standard with the proper ISO/IEC reference. The verbage about IDL being a subset of C++ and obeying the same lexical rules should be removed. It simply isn't true.
Page 3-12:
OMG IDL preprocessing, which is based on ANSI C++ preprocessing, ..
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The highlighted phrase is meaningless and should be deleted.
In addition, the last para of 3.3 says that
A complete description of the preprocessing facilities may be found
in the The Annotated C++ Reference Manual.
For one, the ARM is badly out of date. Second, the para implies, but doesn't
actually say, that IDL preprocessing is exactly like C++ preprocessing.
I would suggest to replace the last para with a definitive statement to
say that IDL is preprocessed as described for C++ in the ISO/IEC C++ standard.
In addition, that statement should probably be used as the lead-in to
section 3.3.
Page 3-11 says about string literals: The size of a string literal is the number of character literals enclosed by the quotes, after concatenation. The size of the literal is associated with the literal. The final sentence appears to be meaningless. Suggest to delete it.
The special scoping rules make it clear that they apply only to identifiers that name a type, however the second IDL example claims that the import of a constant definition (in this case the identifier I) into an interface scope behaves the same way. So which one is it? Do the rules only apply to type identifiers or to all identifiers?
Recently, we decided not to permit wchar as the discrinator type for unions because of the impossibility of dealing with different codesets. Well, it looks like we have exactly the same problem for char
The algorithm for TypeCode::equivalent in 10.7.1 was not updated to reflect the new TypeCode::member_visibility, TypeCode::type_modifier, and TypeCode::concrete_base_type operations.
I was wondering if anyone can explain the rationale for adding the field 'is_abstract' to the CORBA::InterfaceDescription and CORBA::InterfaceDef::FullInterfaceDescription struct types in the CORBA 2.3 Interface Repository specification. (I do know about abstract interfaces, I am really looking for the rationale for breaking backwards compabitility). Basically, a CORBA 2.3 client using stubs compiled from the latest IDL cannot interoperate using IIOP with the Interface Repository of a pre-CORBA 2.3 ORB, because virtually any client of the IR will want to obtain a FullInterfaceDescription from an InterfaceDef, and a pre-CORBA 2.3 ORB will not marshal the 'is_abstract' field for the description struct, thereby the CORBA 2.3 client will fail to unmarshal the struct.
Adding the is_abstract member to the Structs InterfaceDescription and FullInterfaceDescription and associated changes to the InterfaceDef interface was an error. The correct way to do this is shown below. A proper resolution to 3015 should recognize that because Abstract Interfaces are a distinct type in IDL, they should be their own type in the IFR as well. This distinction has already been addressed in TypeCodes with create_abstract_interface_tc and tk_abstract_interface. Because the behaviors of interfaces and abstract interfaces are very different, this should also be stressed in the IFR. Consequently, in keeping with the general pattern established with the way abstract interfaces are handled in TypeCodes, it is porposed that AbstractInterfaceDef be defined as an IFR object that represents Abstract Interfaces, and that otherwise has all the attribtues, operations and properties similar to InterfaceDef. This is represented by having AbstractInterfaceDef derive from InterfaceDef, sort of recognizing that an AbstractInterfaceDef IR Object is an InterfaceDef of a special restricted kind. It is necessary to ensure, however, that the base_interfaces of AbstractInterfaceDefs only contain AbstractInterfaceDefs. Also, It is necessary to remove version pragmas at least from InterfaceDef in order to make sure that a 2.2 InterfaceDef is not rejected as not equivalent to a 2.3 InterfaceDef. Admittedly this is a bit hokey since a 2.3 InterfaceDef derives from a 2.3 Container and hence has additional operations through derivation when compared to 2.2 InterfaceDef, but from an interoperability and backward compatibility perspective this is relatively benign since a 2.3 client attmepting to invoke a 2.3 operation on a 2.2 IFR will merely get a BAD_OPERATION. A 2.2 client will never be able to invoke a 2.3 operation anyway. Since it would then be absurd for a 2.2 (aka 1.0) InterfaceDef to be deriving from a 2.3 Container, it is necessary to remove version pragmas from the transitive closure of the dependency graph for InterfaceDef. It is much easier to remove all version pragmas from IFR interfaces and other IDL entities. It is acknowledged that this is not a complete and clean resolution, but it is also acknowledged that it is impossible to fix all version problems that have accumulated in the IFR due to past carelessness. With these changes, it is believed that pre-2.3 and 2.3 IFR are able to interoperate compatibly with pre 2.3 or 2.3 clients. Future enhancements to IFR should be carried out with greater care and with more attention towards compatibility and cleanliness of versioning.
In the new Core 2.3.1 (http://www.omg.org/cgi-bin/doc?formal/99-10-07), section 3.7.4 is incorrect in that it does not mention the optional "abstract" keyword. A forward declaration declares the name of an interface without defining it. This permits the definition of interfaces that refer to each other. The syntax consists simply of the keyword interface followed by an <identifier> that names the interface. The actual definition must follow later in the specification. The paragraph is not in sync with the idl grammar in section 3.4 (6) <forward_dcl> ::= [ "abstract" ] "interface" <identifier>
Why was the \uxxxx escape from C++ added to wide string & char literals in IDL, but the equivalent \Uxxxxxxxx escape was not?
Now that we've bitten the bullet and moved the Exception section from chapter 3 to chapter 4, shouldn't we do the same thing with section 7.6, since IDL contexts actually have little to do with the DII? I propose that we move section 7.6 to chapter 4 as well.
Section 3.17.1.15 states: "NO_RESPONSE This exception is raised if a client attempts to retrieve the result of a deferred synchronous call, but the response for the request is not yet available." Meanwhile, section 7.3.4 states: "get_response returns the result of a request. If get_response is called before the request has completed, it blocks until the request has completed." So if get_response blocks, how and when will and ORB ever raise NO_RESPONSE?
The first paragraph of 9.2.3.6 refers to "creation operations on the ORB interface". This needs to be changed to "creation operations on the DynAnyFactory interface".
At present, the following IDL code is illegal:
interface I
{
CORBA::TypeCode get_type();
};
To make it legal, "orb.idl" must be included. From the spec:
"The file orb.idl contains the IDL definitions for the CORBA module. The
file orb.idl must be included in IDL files that use names defined in the
CORBA module."
I don't think that this is a good idea, because of the following
reasons:
- TypeCode is PIDL, not IDL. So orb.idl can only be used as a "switch"
to enable TypeCode, but it cannot contain a "real" IDL definition for
TypeCode.
- Having to include orb.idl for every little program that requires
TypeCode means a huge overhead, as orb.idl includes *everything* from
the CORBA module (including the IFR!).
I don't see any reason why TypeCode should only be available if orb.idl
is included. To me, TypeCode is "built-in", even if it doesn't have a
keyword. So it appears rather strange to me that I have to artificially
disable TypeCode in our IDL parser if orb.idl is not included, just to
be compliant with the spec.
I would therefore propose to allow CORBA::TypeCode in IDL even if
orb.idl is not included.
The following thing is unnoticed in CORBA V2.3, June 1999, OMG document 99-07-07.pdf, Chapter 3, "OMG IDL Syntax and Semantics", pages 3-37..3-39, definition of "sequence" type: There is no explicit definition what length sequence may have at run time. Things are perfectly defined for sequence bounds (i.e. maximum size at compile time) which is explicitly declared to be a positive integer. However, nothing is said whether length of sequence at run time can be: (a) positive; or (b) non-negative; or even (c) negative.
Chapter 5.2.5: Value type semantics should not define that an instance of a value type can be passed (directly) as a parameter that is declared as an interface type. The reason is that this is not true in some of the language mappings (e.g. C++) because it contradicts the kind and nature of value types. A value type instance IS NOT an object reference even if it is registered with the ORB. Therefore, if a construct conceptually is not a subtype of another construct, it should not be possible that it substitutes the other. Also, it should not be required that there are any shortcuts which automatically convert a registered valuetype to it's associated object reference.
what should happen if I call create_POA() on a POA whose POA manager is in the inactive state (that is, a POA on which, previously, deactivate() was called? The spec says nothing about this. Seeing that creating a new POA on a "dead" POA doesn't make sense, I would suggest to raise BAD_INV_ORDER, possibly with a new minor code.
In spite of objections based on misunderstandings from certain quarters
I would like to propose that Principal in the IDL describing GIOP as
excerpted below be replaced by "sequence <octet>". For whatever it might
be worth, doing so would make the IDL in the GIOP module actually
compilable for the first time in its entire existence!:-)
module GIOP { // IDL extended for version 1.1 and 1.2
// GIOP 1.0
struct RequestHeader_1_0 { // Renamed from RequestHeader
IOP::ServiceContextList service_context;
unsigned long request_id;
boolean response_expected;
sequence <octet> object_key;
string operation;
Principal requesting_principal;
^^^^^^^^^
};
// GIOP 1.1
struct RequestHeader_1_1 {
IOP::ServiceContextList service_context;
unsigned long request_id;
boolean response_expected;
octet reserved[3]; // Added in GIOP 1.1
sequence <octet> object_key;
string operation;
Principal requesting_principal;
^^^^^^^^^
};
...
};
Firstly, ever since the GIOP standard was adopted, the use of Principal
in that struct has been erroneous, since it is undefined in GIOP module,
unless adorned with a CORBA:: prefix. Secondly, in effect all that it is
trying to say
is that the Principal is represented as a sequence<octet> in the header
field
requesting_principal, not a Principal pseudo-interface, which is
undefined in that context anyway. Thirdly, even if you could find a
definition for an unadorned Principal somewhere, what is the meaning of
that type when CDR encoded? It really is
nothing but sequence<octet>.
I think this issue should go to the Interop RTF.Section 3.17.1 says that "ORB implementations may raise non-standard system
exceptions." This raises a number of questions:
1. How are non-standard system exceptions defined? Are they defined using
IDL, or are they PIDL? If they are IDL, how are they identified as
system exceptions by the language mappings?
2. The definitions in section 3.17.1 for standard system exceptions appear
to be IDL, but I believe the intention is that they are PIDL. This
should be stated clearly.
3. Should non-standard system exceptions be defined in the CORBA module like
the standard system exceptions? There are three choices:
a. They must be in the CORBA module.
b. They must not be in the CORBA nmodule.
c. They can either be in the CORBA nodule or in other modules.
4. Point 3 raises the more general question of whether it is legal for ORB
vendors to add non-standard definitions to the CORBA module. Section 3.14
says that "Names defined by the CORBA specification are in a module named
CORBA," but it does not say whether these are the only names that may appear
in the module named CORBA. This should be clarified.
I found a lot of errors in the CORBA IDL text file that's on the server for download: In general, the layout of the file is a mess. Inconsistent, meaningless indentation, whitespace before semicolons on occasion, comments indented poorly, etc, etc. Wouldn't hurt to clean this up -- it's quite embarrassing as it is now.
Section 9.2.2 states:
"The operation raises InconsistentTypeCode if value has a TypeCode with
a TCKind of tk_Principal, tk_native, or tk_abstract_interface."
This is totally broken for abstract interfaces. What happens if I do
this:
// IDL
abstract interface I {
};
struct S {
I an_i;
};
// C++
S mys;
CORBA::Any a;
a <<= s;
DynamicAny::DynAnyFactory_var daf = ...;
DynamicAny::DynAny_var da = daf->create_dyn_any(a);
DynamicAny::DynAny_var component = da->current_component();
Obviously the value of component must be meaningful, otherwise there is
no way to examine or construct a value of type S.
Nowhere in the CORBA 2.3 specification is it made clear whether or not valueboxes have or need a valuefactory. Since valueboxes are clearly completely concrete types, with no operations, and with no factory initializers, there is no need for a factory for valueboxes. Proposal: Add the following to secion 5.2.8.1: "Value box types do not need or use factories."
I know this is late, but I think it is quite urgent, and we ought to
add it to the last Core 2000 vote.]
The spec is silent about the existence and properties of a TypeCode
constant for ValueBase, even though it is necessary to define one so
that the DII, DSI and IFR can operate properly.
There also is no explicit information about what values operation calls
on the TC_Object typecode constant return.
Proposal:
1. Add to the list of TypeCode constants in 10.7.2:
TC_ValueBase = tk_value { ValueBase }
2. Add at the end of section 10.7.2:
For the TC_Object TypeCode constant, calling id returns
"IDL:omg.org/CORBA/Object:1.0" and calling name returns "Object". For
the TC_ValueBase TypeCode constant, calling id returns
"IDL:omg.org/CORBA/ValueBase:1.0", calling name returns "ValueBase",
calling member_count returns 0, calling type_modifier returns
CORBA::VM_NONE, and calling concrete_base_type returns a nil TypeCode.
Yes, this is a signficant outage. It should be fixed and the fix should be incorporated in 2.3 via the urgent process.
The CORBA 2.3 spec states in table 18-2 that OMG IDL wstring maps to LPWSTR in COM. This was presumably added with the introduction of CORBA support for wstrings. I don't see any mapping defined for OMG wchar. This would naturally map to COM WCHAR. Is this an error/omission in the 2.3 spec?
The DynAny chapter says absolutely nothing about value boxes. Do they fulfill only the base DynAny interface, or the DynValue interface, or do we need a new DynValueBox interface? If the DynValue interface is supposed to be used, do you treat the boxed value as a single member? If so, what is its name?
The DynAny chapter says nothing about whether DynAnyFactory::create_dyn_any_from_type_code is supposed to correctly handle a TypeCode argument that has a TCKind of either tk_null or tk_void. I assume these are valid argument TypeCodes that do not result in an InconsistentTypeCode exception, and the returned DynAny is simply one that fulfills the basic DynAny interface and has no components. However, it would be nice to explicitly document the cases for these two TypeCodes, though, given that they're a little different from other TypeCodes in that they can't have any associated values.
on page 11-30, we have: RETAIN and USE_ACTIVE_OBJECT_MAP_ONLY This combination represents the situation where the POA does no automatic object activation (that is, the POA searches only the Active Object Map). The server must activate all objects served by the POA explicitly, using either the activate_object or activate_object_with_id operation. The final sentence is wrong. Implicit activation is controlled by the ImplicitActivation policy.
on page 3-48, we have:
On the other hand, if module Inner2 were:
module Inner2 {
typedef Inner1::S1 S2; // Inner1 introduced
typedef string inner1; // Error
typedef string S1; // OK
};
The definition of inner1 is now an error because the identifier
Inner1 referring to the module Inner1 has been introduced in the
scope of module Inner2 in the first line of the module declaration.
Also, the declaration of S1 in the last line is OK since the
identifier S1 was not introduced into the scope by the use of
Inner1::S1 in the first line.
This is fine, but it doesn't make it clear that, if the name is qualified,
it is *not* introduced into the scope.the following text in the spec could be made a bit clearer: 2. If the POA has the IMPLICIT_ACTIVATION policy and either the POA has the MULTIPLE_ID policy or the specified servant is not active, the servant is activated using a POA-generated Object Id and the Interface Id associated with the servant, and that Object Id is returned. Although it is stated elsewhere that IMPLICIT_ACTIVATION requires SYSTEM_ID, it wouldn't hurt to reflect this here too: 2. If the POA has the IMPLICIT_ACTIVATION policy and either the POA has the MULTIPLE_ID policy or the specified servant is not active and the POA has the SYSTEM_ID policy, the servant is ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ activated using a POA-generated Object Id and the Interface Id associated with the servant, and that Object Id is returned. Another question: What should be returned if the USER_ID policy is present? The spec doesn't say. Given that we can't add a new user exception, OBJ_ADAPTER seems appropriate.
The current spec for local interfaces disallows making calls to a local interface via the DII. It turns out that this is rather inconvenient for implementors of scripting languages. That's because, for a scripting language, *everything* is a DII request. Local interfaces, therefore, force the implementor to wrap all pseudo-objects and local interfaces in special wrapper objects. For pseudo-objects, there is nothing we can do. However, for local interfaces, we could require DII calls to be supported.
Since local interfaces are allowed to take native values for parameters, which you cannot pass via DII. So we'll have to limit DII usage on local inter- faces anyway (e.g. you could not call activate_object on the POA).
The resolution to issue 3048 special-cases TypeCode in a manner that essentially makes it a keyword. First of all, given that TypeCode lives in the CORBA module, and thus is properly named CORBA::TypeCode, this is highly irregular because it means we have a scoped keyword. Second, this change also significantly breaks working products -- it adopts implementation details of certain compilers and rules out already-working implementation approaches of other existing compilers. The OMG is not supposed to dictate implementation. Finally, the rationale for the changes made for 3048 centered around unquantifiable performance issues that IMO affect only a very small minority of applications.
This issue requests reversal of an action taken in a previous RTF which was supported by an overwhelming majority. Such a step would be justified if new facts have come to light to justify such a reversal. Implementors have had considerable time to gain experience with the change that was put in place. So the first question to vote on was: Have any new facts come to light as a result of experience gained since the change was made to justify considering reversal of the resolution for issue 3048 that was adopted with iverwhelming majority?. Since YES prevailed it is further decided that the previous change in 3048 resolution went too far causing invalidation of perfectly legitimate implementations of IDL compilers which actually gets the definition of TypeCode from its IDL declaration instead of implicitly defining it within the compiler. In order to make both kinds of compilers admissible as compliant, the changes shown below are proposed. These changes allow compilers that depend on the declaration of TypeCode in IDL file to deliver said definition in the TypeCode.idl file and #include that file at an appropriate place in the orb.idl file, or use any other combination that works. Additionally, compilers that implicitly define TypeCode in the compiler can deliver in effect an empty TypeCode.idl file, and comply with this change. Users of any IDL compiler that need the definition of TypeCode are expected to either #include TypeCode.idl or #include orb.idl.
The current C++ mapping does not offer efficient insertion or extraction of data from CORBA::Any if static type information (IDL-generated insertion and extraction operators) are not available. I'm thinking of a dynamic DII gateway that needs to shovel large amounts of data, such as a sequence<octet>. Presently, the gateway must employ the DynAny type, and loop over the number of elements, calling insert_octet() or get_octet() repeatedly. This is inefficient, especially for large sequences/arrays of basic types. I think that a more efficient mechanism might be useful for some applications.
New operations cribbed from the DataInputStream & DataOutputStream interfaces for custom valuetypes are added to facilitate this. I only added inserters and extractors for types that map to a fixed memory size, since they are the only ones that I anticipate a good performance gain.
The following are currently undefined in the spec: - What happens if poll_response or get_response is called before send_deferred? - What happens if get_response is called after invoke? - What if get_response is called more than once? [ Interestingly, the resolution to issue 2341 resolved something, but it wasn't issue 2341 ;-) That's because the resolution doesn't say that calling get_response twise is illegal. ] - Is it legal to call poll_response more than once? I think that, for the first three, we should raise BAD_INV_ORDER. We also need minor codes for those. For case four, I'd suggest that calling poll_response multiple times is OK, but that calling it once get_response was called should raise BAD_INV_ORDER.
there really is a different issue here. On page 7-5: boolean poll_response(); On page 7-9: boolean poll_response ( in Request req);
There appears to be a minor glitch in table 3-10. It states that stateful valuetypes can only support one non-abstract interface, but it is not clear what is correct for abstract valuetypes or abstract interfaces, since it uses the words "supports", not "supports single" or "multiple" which are used elsewhere. It certainly does not appear reasonable for abstract valuetypes to be able to inherit from more than one non-abstract interface when stateful valuetypes cannot. This brings up a question: Can abstract valuetypes support non-abstract interfaces? It's not clear to me what the answer to this ought to be. Anyway, it appears to me that part of the table should look like this instead: May inherit from: | Interface | Abstract Interface --------------------------------------------------------------------------- Abstract | *no or supports single| multiple Value | --------------------------------------------------------------------------- Stateful | supports single | multiple Value | | --------------------------------------------------------------------------- * depending on the answer to the question above
CORBA 2.3.1, 9.2.3.5 says: "Two DynAny values are equal if their TypeCodes are equivalent and, recursively, all component DynAnys have equal values." We already added text in the Y2K RTF to clarify equal for object references & typecodes, but this leaves an exercise for the reader to figure out what equal means for some IDL types, particularly fixed, sequences & valuetypes. I believe that an experienced person thinking about it can come up with the correct rules, but why leave it up to mistaken interpretation.
As briefly as possible, here is a description of the problems that valuetypes and the DynAny interfaces have in the Corba 2.4.2 specification right now: #1. There is confusion over what a DynValue represents: is it a reflective interface to a real underlying valuetype instance, or is it a separate thing that represents a valuetype and is converted to/from a real valuetype via DynAny::to_any()/from_any()? #2. The semantics of DynAny::equal() when applied to DynValues is underspecified: is it reference equality or contents equality? #3. The DynAny/DynValue interface is lacking expressiveness to properly implement a DII/DSI application that can properly inspect/copy/construct a valuetype graph that appears in more than one argument of an invocation. This also breaks the ability to write a generic bridge that can handle valuetypes. #4. The interaction between valuetype truncation and conversion to a DynValue is underspecified. My first suggested solution to the problem was to declare that DynValue is actually a reflective interface that provides access directly to the members of an underlying real valuetype instance. This generated some pretty strong objections from a couple of RTF members and that stalled the discussion about a year ago. After quite a while to reflect on this, I've got another approach that avoids this problem. However, it does have some implications that I want to air before working up a final proposal. The basic idea is to treat DynValue (and DynValueBox) as a proxy for a real valuetype with the same identity semantics. This means that if I convert a graph of valuetypes into its representation as a collection of DynAny objects, each valuetype will be represented by a single DynValue instance, no matter where it appears in the graph. Along with this, we need operations added to DynAnyFactory to batch convert multiple anys to DynAnys and vice versa. This batch conversion process will map the same valuetype instance to the same DynValue instance. As for truncation & DynValue, since the CCM spec has put a stake in the ground that a valuetype that remains in an Any should be able to be retransmitted by a server that does not know the specific type of that valuetype, it's clear to me that a mode of conversion to DynAny that avoids truncation is necessary, since otherwise we break DII/DSI and bridges again. The DynAnyFactory might use the SendingContextRunTime service context or the IFR directly to lookup the complete TypeCode of the truncatable valuetype. Also, the DynAnyFactory needs a new exception to indicate that it could not find the TypeCode of a truncatable valuetype. I think this solves the four problems listed above as follows: #1. DynValue stands as a proxy for a valuetype instance that will be constructed when the DynValue is converted into a real valuetype embedded in an any. It is not a reflective interface to a real valuetype instance with all of the baggage that entails. #2. DynAny::equal for valuetypes should be defined as reference equality in order to get the same comparison semantics that we already have for valuetypes. #3. The batch conversion operations on DynAnyFactory allow a DII/DSI to preserve the relationships between valuetypes when they are converted to DynValues and vice versa. #4. When a truncatable valuetype is converted to a DynValue, the application can indicate that the valuetype not be truncated. This allows generic DII/DSI applications to manipulate truncatable valuetypes correctly as long as the application can find the correct TypeCode for the valuetype.
The components spec permits attributes to raise user exceptions, to bring them in line with operations. That's a really nice idea, but raises yet another versioning problem. In particular, no new IDL that uses an attribute with a raises clause can be compiled by an older IDL compiler. (Simply deleting the raises clause and then compiling with an older compiler is risky at best -- marshaling code won't in general expect to get a user exception in reply to accessing an attribute...)
Although legal in the CORBA 2.3 IDL grammar, creating a valuebox of another valuebox or valuetype is of dubious use. I can't see why having an extra level of indirection here would ever be useful. None of the language mappings that have defined mappings for valuebox (C++, Java, Ada) address this issue either. Does it make sense to disallow valueboxing valueboxes or valuetypes?
It makes sense to disallow valueboxing of valuetypes. This was apparently the sense of the original OBV RTF, but it never got reflected in any text in the spec
It seems that the only time an international string will ever appear in an encapsulation would be a private IOR component. If we can keep the issue down to International strings in encapsulations this will simplify the solution. If anyone has an example of how any other GIOP header string could carry an international string please come forth with it quickly. The use of international strings in GIOP 1.1 and 1.2 is dependant on the asserted use of service context code set negotiation. In particular: 1) if the negotiatiation is not initiated, then strings are passed as latin-1 only and wstrings are not allowed to be passed as parameters. 2) If the negotiation is initated and successfully completed, the agreed codesets are used respectively for string and wstring 3) If negotiation is initated by no comon codeset is agreed, then UTF-8 is the default for string and UTF-16 is the default for Wstring (note: the current codeset negotiation does not discuss the big endian or litte endian aspects of UTF-16). There is also text somewhere in GIOP stating that Encapsulations in IORs should be encoded in giop 1.0 for maximum interoperability. It just occured to me that disallowing international strings in IOR encapsulations (i.e., private IOR components) is equivalent to assuming that negotiation is not initiated for encapsulations. This seems to be a consistent set of semantics. The only problem with this interpretation, is that it does not allow international strings in IOR encapsulations.
DynValue is missing support for null valuetypes. There is no
way to determine whether a DynValue represents a null valuetype,
nor is there any way to dynamically construct an Any containing
a null valuetype.
Proposed resolution:
Add the following operations to the DynValue interface:
boolean is_null();
void set_to_null();
void set_to_value();
And replace the description of the interface with the following text:
The DynValue interface can represent both null and non-null
valuetypes. For a DynValue representing a non-null valuetype, the
DynValue's components comprise the public and private members of
the valuetype, including those inherited from concrete base valuetypes,
in the order of definition. A DynValue representing a null valuetype
has no components and a current position of -1.
boolean is_null();
The is_null operation returns TRUE if the DynValue represents
a null valuetype.
void set_to_null();
The set_to_null operation changes the representation of a DynValue
to a null valuetype. Specifically, the current components of the DynValue
are destroyed, component_count returns zero and the current position is
set to -1.
void set_to_value();
The set_to_value operation changes the representation of a DynValue
to a non-null valuetype. The state of the DynValue is initialized
exactly as if create_dyn_any_from_type_code had been invoked.
The set_to_value operation has no effect when invoked on a DynValue
representing a non-null valuetype.
The remaining operations of the DynValue interface have equivalent
semantics to DynStruct. When invoked on a DynValue representing a
null valuetype, get_members and get_members_as_dyn_any return an empty
sequence.CORBA 2.3.1, section 3.10.5 says:
"A native type may be used to define operation parameters and results.
However, there is no requirement that values of the type be permitted in
remote invocations, either directly or as a component of a constructed
type."
This is ambiguous as to whether a native type may be used in a
constructed IDL type that is intended to be used only locally:
// IDL
native MyNative;
struct MyStruct {
MyNative a_native;
};
So, should the first sentence in 3.10.5 be read to mean that native may
ONLY be used in parameters & results? If so, we ought to put the word
"only" in there.
While the second sentence in the quoted text from 2.3.1 section 3.10.5 alludes to using natives in constructed types, trying to generalize its use in general structs etc adds considerable complexity to marshaling time checking etc. So native should not be allowed anywhere else other than as parameter or return value type sepecification unless of course a very pressing use case is found for allowing it. Since we have not seen such a use case yet, it is prposed that native be restricted to specifying parameter types only.
On page 10-46 of the latest draft, at the end of section 10.6.5.2, there are three paragraphs that talk about a SoftCo printer. It looks like these are somewhere else in previous version and accidentally got moved or left behind during the edition for the chapter. (If that's a wrong guess, I'd like to know what they are doing there because they most certainly don't contribute to the content of this section ;-)
I think the current rules for #pragma are too tight and we need to relax
them. In particular, for the ID pragma (page 10-43):
If an attempt is made to assign a repository ID to the same
IDL construct a second time, a compile-time diagnostic shall
be emitted, regardless of whether the second ID is in conflict or not:
interface A {};
#pragma ID A "IDL:A:1.1"
#pragma ID A "IDL:X:1.1" // Compile-time error
interface B {};
#pragma ID B "IDL:BB:1.1"
#pragma ID B "IDL:BB:1.1" // Compile-time error
This causes problems with separate compilation. For example:
// x.idl
namespace Foo {
// ...
};
#pragma ID Foo "IDL:blah:1.0"
// y.idl
namespace Foo {
// ...
};
#pragma ID Foo "IDL:blah:1.0"
// z.idl
#include "x.idl"
#include "y.idl"
The same problem arises with the version pragma, because I may want to
change the version in two different source files.
When value types added forward declarations, and when we added forward declarations for structs and unions, we forgot to update the version pragma text. Currently, it says (page 10-45): Attempts to assign a prefix to a forward-declared interface and a different prefix to that interface later result in a compile-time diagnostic: Proposal: Change that sentence to read: Forward-declared constructs (interfaces, value types, structures, and unions) must have the same prefix in effect wherever they appear. Attempts to assign conflicting prefixes to a forward-declared construct result in a compile-time diagnostic. For example:
In order to resolve the OTS RTF issue 1819, we need to have clearer wording regarding what COMPLETED_NO. Since we now have the POA, the following phrase from section 3.17 is not clear enough: COMPLETED_NO The object implementation was never initiated prior to the exception being raised In order to get proper rollback logic for transactions that get system exceptions and, I'd imagine, to get proper fault tolerant behavior, it needs to be made clear that COMPLETED_NO means that absolutely no execution on the server took place prior to the exception being raised. Without such a clarification, it is not possible to guarantee data integrity for fault tolerance and it forces the OTS to insist on a strict rollback policy when a system exception is raised. In particular, with the advent of the POA, "object implementation" is not as clear as it once was. Does this include servant locators, for example. As a place to start, I'd like to suggest this instead: COMPLETED_NO No execution was initiated in the server prior to the exception being raised (The archive for issue 1819 contains a lot more discussion on this topic as it relates to the OTS.)
Given the myriads of possible configurations and scenarios that are possible exploiting the great flexibility that is afforded by the POA specification, it is not possible to nail down the semantics of COMPLETED_NO any more tightly than it is currently. Consequently this issue should be closed no change, as was informally agreed to at the Burlingame Core RTF meeting.
The CORBA 2.3.1 Core specification is silent on the issue of whether factories defined for a valuetype are "inherited" into derived valuetypes. I assume that there is no such inheritence. Proposal: Add to the end of the first paragraph in 3.8.1.5: "Initializers defined in a valuetype are not inherited by derived valuetypes."
in section 3.17.2, we show all the minor codes for exceptions. Unfortuantely, these are all magic numbers rather than symbolic constants. In turn, these means that I can't write portable code unless I use the magic numbers directly. It would be nice to have constant definitions for these instead, so I can refer to minor numbers in the code without having to resort to hard-wired magic numbers.
I thought we could fix this by simply adding another column to the table that provided a symbolic name for each minor code, and a footnote to say that these symbolic names are provided for language mappings that want to make minor codes available at the API level as symbolic constants. However, the problem I have now is that the minor codes are quite numerous and are likely to continue to grow. In turn, this means that the symbolic names would probably have to be scoped by their "parent" exception name, otherwise it gets too hard to come up with unique names. I think we should just drop the issues as "too hard".
Are the names of valuetype initializers introduced into the scope of a derived valuetype? I'm proposing that they are not introduced. The implication is that derived valuetypes are free to reuse the names of base type initializers. Proposed resolution: Change the last sentence of the first paragraph in 3.8.1.5: "The names of the initializers are part of the name scope of the value type, but are not part of the name scope of derived valuetypes."
Core issue #1: The Core should explicitly state that valuetype parameters are copied for collocated interface invocations.
This system exception is listed in the notification specification but does not exist in CORBA 2.3 (nor CORBA 2.0 AFAIK).
n the interop draft (ptc/00-02-04) the response_flags are defined now in terms of SyncScope. However, SyncScope does only apply to oneway, DII with INV_NO_RESPONSE, and sendc-stubs with no reply handler. The Messaging submission explicitly defines that it is ignored in the other cases. from CORBA Messaging: interface SyncScopePolicy This interface is a local object derived from CORBA::Policy. It is applied to oneway operations to indicate the synchronization scope with respect to the target of that operation request. It is ignored when any non-oneway operation is invoked. This policy is also applied when the DII is used with a flag of INV_NO_RESPONSE since the implementation of the DII is not required to consult an interface definition to determine if an operation is declared oneway. The default value of this Policy is not defined. Applications must explicitly set an ORB-level SyncScopePolicy to ensure portability across ORB implementations. When instances of SyncScopePolicy are created, a value of type Messaging::SyncScope is passed to CORBA::ORB::create_policy. This policy is only applicable as a client-side override. The clients SyncScopePolicy is propagated within a request in the RequestHeaders response_flags as described in GIOP Request Header.
This is clearly an Interop issue. Transfer to the Interop RTF
Corba 2.3.1 section 5.2.4.3 states that valuetypes passed as parameters
are copied when passed into the receiving context. Is this also true
for valuetypes that are embedded in a contructed IDL type passed as a
parameter?
Example:
// IDL
valuetype V { };
struct S {
V a_v;
};
interface I {
S op(in S s1, inout S s2, out S s3);
};
When I::op is called are the valuetypes embedded in s1, s2, s3 and the
return value supposed to be copied when making a collocated call?
Example 2:
// IDL
interface J {
any op(in any a1, inout any a2, out any a3);
};
If one of the any parameters to J::op contains a valuetype, must it be
copied before/after a collocated call? What if the any contains a
struct S instead?
It seems to me we need to revisit the valuetype copying issue. We have
three choices:
1. Valuetypes are not copied for collocated calls.
2. Only valuetypes as explicit parameters are copied for collocated
calls.
3. All valuetypes are copied no matter how deeply they are nested in
parameters.
Currently the specification is ambiguous as to whether the semantics are
supposed to be case 2 or 3. Case 3 is the only one that provides
guaranteed location transparency, but the cost to implement case 3 for
collocated calls far too high. It would effectively require the same
overhead as marshalling/unmarshalling for any operation that has a
valuetype embedded in a complex IDL type or any.
So, given that transparency for collocated calls cannot be maintained
without high overhead, should we completely remove the copying
requirement because transparency cannot be maintained, or should we just
document that case 2 is the accepted semantic?
ection 11.3.8.4 of the 2.3 spec states: "After all descendant POAs have been destroyed and their servants etherealized, the POA continues to process requests until there are no requests executing in the POA." does that mean new requests are rejected or that new requests for that POA are processed? also, if a parent POA is being destroyed, once a descendant has been destroyed, can an adapter activator be called for the descendant during this period? in the same paragraph, the spec says "After destruction has become apparent, the POA may be recreated .. via an Adapter Activator". should the request block, or can it be rejected?
In section 21.7.2: Delete the following methods, exceptions and types.
register_initial_reference
resolve_initial_references
codec_factory
InvalidName
ObjectId
Add:
readonly attribute CORBA::ORB orb;
Add a new section to describe this attribute:
This attribute is the ORB being initialized.
In addition I propose two additions to the section:
Proposal A:
The ORB shall be considered partially constructed in that any method invocations on objects created by this ORB will not have
request interceptors called. Calling work_pending()/perform_work()/run()/shutdown() or destroy() on the ORB is not
permitted and shall have undefined results.
Proposal B:
The ORB shall be considered partially constructed in that no method invocations on objects created by this ORB are
permitted. Calling work_pending()/perform_work()/run()/shutdown() or destroy() on the ORB is not permitted and shall have
undefined results.
I prefer Proposal A since not being able to make method invocations implies that things that narrowing of object references is
not permitted. What this essentially means is that interceptors probably cannot be fully initialized in the ORB initializer.
PIDL Mapping for C++:
[I'm not sure exactly how this should look -- this is essentially
trimmed output from out IDL translator]
namespace PortableInterceptor
{
class ORBInitInfo : virtual public CORBA::Object
{
public:
static inline ORBInitInfo_ptr
_duplicate(ORBInitInfo_ptr p)
{
if(p)
p -> _OB_incRef();
return p;
}
static inline ORBInitInfo_ptr
_nil()
{
return 0;
}
static ORBInitInfo_ptr _narrow(CORBA::Object_ptr);
static ORBInitInfo_ptr _narrow(CORBA::AbstractBase_ptr);
struct DuplicateName : public CORBA::UserException
{
DuplicateName() { }
DuplicateName(const DuplicateName&);
DuplicateName& operator=(const DuplicateName&);
static DuplicateName* _downcast(CORBA::Exception*);
static const DuplicateName* _downcast(const CORBA::Exception*);
virtual void _raise() const { throw *this; }
virtual const char* _name() const;
virtual const char* _rep_id() const;
virtual char* _to_string() const;
DuplicateName(const char*);
};
virtual CORBA::StringSeq* arguments() = 0;
virtual char* orb_id() = 0;
virtual CORBA::ORB_ptr orb() = 0;
virtual void add_client_request_interceptor(ClientRequestInterceptor_ptr interceptor) = 0;
virtual void add_server_request_interceptor(ServerRequestInterceptor_ptr interceptor) = 0;
virtual void add_ior_interceptor(IORInterceptor_ptr interceptor) = 0;
virtual SlotId allocate_state_slot() = 0;
virtual void register_policy_factory(CORBA::PolicyType type,
PolicyFactory_ptr policy_factory) = 0;
};
class ORBInitializer : virtual public CORBA::Object
{
public:
static inline ORBInitializer_ptr
_duplicate(ORBInitializer_ptr p)
{
if(p)
p -> _OB_incRef();
return p;
}
static inline ORBInitializer_ptr
_nil()
{
return 0;
}
static ORBInitializer_ptr _narrow(CORBA::Object_ptr);
static ORBInitializer_ptr _narrow(CORBA::AbstractBase_ptr);
virtual void pre_init(ORBInitInfo_ptr info) = 0;
virtual void post_init(ORBInitInfo_ptr info) = 0;
};
} // End of namespace PortableInterceptor
namespace CORBA
{
inline void
release(PortableInterceptor::ORBInitInfo_ptr p)
{
if(p)
p -> _OB_decRef();
}
inline Boolean
is_nil(PortableInterceptor::ORBInitInfo_ptr p)
{
return p == 0;
}
} // End of namespace CORBA
//
// IDL:omg.org/PortableInterceptor/ORBInitializer:1.0
//
namespace CORBA
{
inline void
release(PortableInterceptor::ORBInitializer_ptr p)
{
if(p)
p -> _OB_decRef();
}
inline Boolean
is_nil(PortableInterceptor::ORBInitializer_ptr p)
{
return p == 0;
}
} // End of namespace CORBA
PIDL mapping for Java (still to be supplied...)The description of POA destroy in section 11.3.8.4 is unclear. There are several ways to implement this, which may result in problems porting application code between orbs. Some of the ambiguities are: 1) It may or may not be legal for an application to create new child POAs while the existing children are being destroyed. This could happen explicitly or via AdapterActivators. Such behavior could prevent destruction from ever completing. 2) If the POA's POAManager is in the holding state at the time of destruction (or if its state is changed to holding during the destruction process), it isn't clear what happens to the held requests. 3) If the POA's POAManager is active, what happens to requests that arrive after the call to destroy but before the destruction becomes apparent? If they are to be serviced, a sufficiently rapid arrival rate may prevent the destruction from ever completing.
in 10.7.1 the fixed_scale() operation is defined to return a short but the 'scale' value of a fixed type is defined to be a positive integer (in 3.4 (96)) and also in the C++ mapping. It seems to me there is some inconsistency here.
Section 4.6 of CORBA 2.3.1 addresses the meaning of the ORBid argument. It is clear that ORB_init can be called multiple times in the same address space resulting in different ORBs. I think the CORBA spec should make it clear that all of these ORBs have different POA namespaces. This should probably be indicated in section 11.2.3 by stating something like: If an application makes use of multiple ORBs in the same address space, each ORB defines its own separate POA namespace. In particular, each ORB returns a distinct root POA in response to a resolve_initial_references( "RootPOA" ) call.
Section 4.5.1 of the CORBA core document explains the ORBid argument to ORBinit. However, it is sufficiently vague to present implementation and usage problems. It says: "All ORBid strings other than the empty string are allocated by ORB administrators and are not managed by the OMG." It fails to define ORB administrator. This administrator could be the developer of the application calling the ORB, or it could be the administrator of the machine on which the ORB will run, or it could be the developer of the ORB itself. Each answer to this question may result in a different mechanism for determining if a supplied ORBid is valid.
Not much can further can be said about this ecept for clarifying that ORB suppliers may allow someone else to specify this for a particular installation, and leave it at that.
CORBA 2.3.1 section 11.2.8.17 states that "An ObjectId which has been deactivated continues to process requests until there are no active requests for that ObjectId" In the short window where deactivate_object is called but object is not yet deactivated, the above sentence is open to interpretation. The 2 interpretation are: 1. Active requests are those requests that came *before* deactivate_object was called. In this case, POA continues to service those requests and throws OBJECT_NOT_EXIST for future requests if the object is not activable. 2. Active requests are *any* requests. In this case, POA will continue to service requests that come even after deactivate_object was called as long as deactivation is not complete. So what is the intended interpretation? I suspect it is 1. If so, can we make this section clearly state that?
Clarify the meaning of active object in this context. It is not clear that anything needs to be said about OBJECT_NOT_EXIST here. The description further down says that reactivation is blocked until deactivation is complete. Presumably whether reactivation succeed or an OBEJCT_NOT_EXIST is raised is a matter for the reactivation process, and not a concern of the deactivation process.
Two questions: 1) Are calls to operations on servant managers mediated by the ORB? 2) Is it legal to export the object reference for a servant manager to another process? For question 1, the answer would appear to be no. Here is why: Page 11-17: Inactive state When a POA manager is in the inactive state, the associated POAs will reject new requests. [...] If the client is co-resident in the same process, the ORB could raise the OBJ_ADAPTER system exception, with standard minor code 1, to indicate that the object implementation is unavailable. [...] If the transition into the inactive state is a result of calling deactivate with an etherealize_objects parameter of - TRUE - the associated POAs will call etherealize for each active object associated with the POA once all currently executing requests have completed processing (if the POAs have the RETAIN and USE_SERVANT_MANAGER policies). If a servant manager has been registered for the POA, the POA will get rid of the object. If there are any queued requests that have not yet started executing, they will be treated as if they were new requests and rejected. If calls to servant managers were to be ORB-mediated, the calls to etherealize() cannot possibly be dispatched because the corresponding servant manager is already in the inactive state. The only logical conclusion I can see is that calls to servant managers are not mediated by the ORB. I think the spec should be updated to state this. For question 2, the answer would also appear to be no: Exporting a reference to a servant manager outside my own address space makes no sense whatsoever. Here a servant manager offers either incarnate() and etherealize(), or it offers preinvoke() and postinvoke(). These are the *only* operations that are possible (apart from operations on Object). If it were possible to export a reference to a servant manager to another address space, there is nothing the receiver of the reference could do with it (other than call operations on Object). That's because incarnate(), etherialize(), and preinvoke use a native type (servant). postinvoke() doesn't use a native type, but accepts a parameter of type POA, so postinvoke cannot be invoked remotely either (because POA is locality constrained and its reference cannot be marshaled). So, it appears clear that export of servant manager references should be illegal and flagged the same way as an attempt to export a POA manager reference. The spec currently says this about servant managers: A ServantManager object must be local to the process containing the POA objects it is registered with. Contrast this with POA managers, for which the spec says: A POAManager object must not be exported to other processes, or externalized with ORB::object_to_string. If any attempt is made to do so, the offending operation will raise a MARSHAL system exception. An attempt to use a POAManager object with the DII may raise the NO_IMPLEMENT exception. To me, it looks like we should say the same thing for servant managers as for POA managers. And, by the same reasoning, I think it also must be said for the AdapterActivator interface: it doesn't make sense to marshal a reference for an adapter activator because the only operation (unknown_adapter) has an in parameter of type POA, which cannot come from a remote location.
On page 3-46, CORBA 2.3, we have some old words that got forgotten during
the scope resolution rule cleanup we did some time ago:
Inheritance produces shadow copies of the inherited identifiers;
that is, it introduces names into the derived interface, but these
names are considered to be semantically the same as the original
definition. Two shadow copies of the same original (as results
from the diamond shape in Figure 3-1 on page 3-21) introduce a
single name into the derived interface and don't conflict with
each other.
That's wrong because it confuses visibility of an identifier with introduction
of an identifier (which are different things). I would suggest to reword
as follows:
Inheritance produces shadow copies of the inherited identifiers;
that is, inherited identifiers are visible in derived interfaces.
Such identifiers are considered to be semantically the same as
the original definition. Two shadow copies of the same original (as
results from the diamond shape in Figure 3-1 on page 3-21) do
not conflict with each other.
This simply gets rid of the word "introduces", which has the wrong meaning.
Note that these words have been wrong all along, even before we changed
the name lookup rules. That's because, if inherited identifiers were
indeed introduced into the derived interface, the following would be illegal
(but has in fact never been illegal):
interface B {
typedef string S;
};
interface D : B {
typedef long S;
};
In the CORBA 2.3.1 99-10-07.pdf spec, where "The Interface Repository chapter has been updated based on CORE changes from ptc/98-09-04 and the Object by Value documents (orbos/98-01-18 and ptc/98-07-06).", ValueMemberDef is not fully documented. ValueMemberDef should have it's own section in the Interface Repository chapter but it does not. This would contain it's IDL and at least two subsections, one for the read interface and one for the write interface.
Page 7-9 of 2.3.1 shows boolean poll_response(in Request req); However, on page 7-5, we have: boolean poll_response(); The version on page 7-5 is the correct one because poll_response() is an operation on Request. Proposal: Change the signature on page 7-9 to read: boolean poll_response();
How should is_equivalent() behave if I compare two references that denote the same object at the same location, using the same profiles, etc, but differ in the policies? Do differences in the policies affect the outcome? My gut feeling is that is_equivalent() should return false in this case because it uses reference identity, not object identity. However, we are rapidly approaching the point where is_equivalent() might as well unconditionally return false because we are adding more and more flavours of additional information into IORs as time goes by. Invocation policies, transaction policies, codesets, multiple profiles, optional components, etc, etc. Does is_equivalent() require a more precise definition in order to remain useful?
s_equivalent does not take into consideration any local policies that are set on the object reference in order to arrive at its result. Clarify this.
In section 3.9.2 (of ptc/99-12-07) on semantics of constants, an example is given showing 3000.00D being of type fixed<1,-3>. This is inconsistent with statements elsewhere that fixed scale is a non-negative quantity. Also, the preceding explanation states: "... leading and trailing zeros are factored out, INCLUDING NON-SIGNIFICANT ZEROS BEFORE THE DECIMAL POINT." This rule of course leads to negative scale factors, so it must also be incorrect. Suggested Revision: Change the following text: "A fixed-point literal has the apparent number of total and fractional digits, except leading and trailing zeros are factored out, including non-significant zeros before the decimal point. For example, 0123.450d is considered to be fixed<5,2> and 3000.00d is fixed<3,-1>." to: "A fixed-point literal has the apparent number of total and fractional digits, except leading zeros before the decimal point and trailing zeros after the decimal point are factored out. For example, 0123.450d is considered to be fixed<5,2> and 3000.00d is fixed<4,0>."
Section 4.3.7.1 refers to a get_client_policy operation, but it is not defined anywhere in the CORBA specification.
consider the following, which as valid IDL as best as I can figure out:
interface I1 {};
abstract valuetype V1 supports I1 {};
interface I2 {};
abstract valuetype V2 supports I2 {};
interface I3 {};
valuetype V3 : V1, V2 supports I3 {};
The above raises some *very* interesting issues. For one, this can't be
mapped into C++ for a number of reasons (largely having to do with
ambiguous multiple inheritance). However, there much deeper issues here
relating to the object model. Some questions:
- What is the type of the a V3 instance?
- What is the repository ID of that instance?
- What is the return value of a call to _this()?
- What is the result of invoking
is_a("IDL:I1");
is_a("IDL:I2");
is_a("IDL:I3");
on an I3 reference?
- What are the results of I1::narrow(), I2::narrow(), and I3::narrow()
on an I3 reference?
- What is returned by a call to get_interface()?
- What are the results of traversing the above in an IFR?
There are probably more questions along these lines. They all aim at
the fact that the above construct effectively creates an object that has
multiple unrelated interfaces. This flies in the face of the CORBA
type system, which fundamentally requires every object to have exactly
one most-derived type.
I think we need to put the axe through constructs such as the one above
in a hurry!
The issue is based on a reading of the text that is fixed in issue 3072. The clarified text in issue 3072 makes this issue go away.
In CORBA 2.3, servant_to_id does not work if the POA has the RETAIN, MULTIPLE_ID, and NO_IMPLICIT_ACTIVATION policies, even if servant_to_id is invoked in the context of the specified servant. According to 11.3.8.20, such a call raises WrongPolicy. Inconsistent with that specification, it is apparently still possible to obtain the ID for that servant, using id = poa.reference_to_id(poa.servant_to_reference(self)) This works since 11.3.8.21/3 supports all cases of currently-active servant, not only USE_DEFAULT_SERVANT
CORBA2.3.1 section 4.11.5 destroy() has following information. Once an ORB is destroyed, another call to ORB_init with same ORBid will return a reference to a newly constructed ORB. My assumption here is if I call shutdown() on an ORB followed by ORB_init() with the same ORBid as of the shutdown ORB, I get the same ORB back. Essentially, we can not get rid of that ORB until destroy() is called. Is this a valid assumption? If so, can we add a sentence to that effect to shutdown() section?
Clarify two things: 1. ORB_init in this case will return the same ORB in a shutdown state. 2. The only thing that can be done with such an ORB are as described in section 4.2.3.4 last paragraph.. 3. Invocation of any other operation of such an ORB that has been shutdown will cause the BAD_INV_ORDER standard system exception to be raised with minor code foo. This is actually stated to be so in the last para of section 4.2.3.4 of orbrev/00-09-01 so needs no additional text.
I thought there are some error in Grammer which number are (24) and (27).
The grammer which number is 24 in specification is
<init_param_decls> ::= <init_param_decl> { "," <init_param_decl> }
I thought it may be <init_param_decls> ::= <init_param_decl> { "," <init_param_decl> } *
Can you see asterisk?
And grammer number 27 is miss-printing.
It is all of my question in grammer and next problem is in Preprocessing.
User can use #include for source inclusion.
But in case of C++, there are two kind of source inclusion. One is standard library inclusion using angle brackets.
Another is using quotation mark.
Is the rule adapted in IDL preprocessor?
Could you send me a document about Preprocessing rule?
Another question is #ifdef, #ifndef.
Is this option able to be duplicated?
Last question is about position of inclusion command.
In some example in specification 2.3, I find this example.
module M{
#include <E.idl>
};
- from CORBA V2.3, June 1999, 10-43
The source inclusion command - #incude - is in module block.
How that source will be compiled and mapped?
I thought that source is wrong....The specific change requested has already been made by an earlier RTF.
This has already been fixed in CORBA 2.4 draft. See
ptc/00-05-02. Closethis one NO change, or better still don't
even create an issue.
> It is all of my question in grammer and next problem is in
Preprocessing.
> User can use #include for source inclusion.
> But in case of C++, there are two kind of source inclusion. One is
standard
> library inclusion using angle brackets.
> Another is using quotation mark.
> Is the rule adapted in IDL preprocessor?
Yes.
> Could you send me a document about Preprocessing rule?
See the C++ preprocessor standard document, the IDL specification
includes the definition of include statement by reference to the C++
preprocessor standard.
> Another question is #ifdef, #ifndef.
> Is this option able to be duplicated?
I don't understand the question. It is exactly the same as in the C++
preprocessor.
> Last question is about position of inclusion command.
> In some example in specification 2.3, I find this example.
>
> module M{
> #include <E.idl>
> };
>
> - from CORBA V2.3, June 1999, 10-43
>
> The source inclusion command - #incude - is in module block.
> How that source will be compiled and mapped?
> I thought that source is wrong....<BR>
The contents of E.idl will be inserted at the point where the
#include statement appears and then the resulting character stream
willbe parsed by the IDL compiler. I guess, again I don't understand the
question.
(All document refs to ptc/00-03-02, but I think the relvant sections are the same in ptc/00-04-05) (a) Sec. 4.3.7.1 (Object::get_policy) says that the "effective Policy is the intersection of the values allowed by the effective override and the IOR-specified Policy." What does this mean? For example, the example MyPolicy given in 4.8.5 appears to define some range or interval, so the intersection of two MyPolicy objects has some meaning - but I doubt if it's reasonable to expect the ORB to deduce that. I suggest that the effective policy is: - any override of that type if there is one, else - any IOR-specified policy of that type if there is one, else - the system default of that type if there is one, else - the null Policy reference (or a system exception? which?). This is feasible and consistent with normal meaning of "override" as "replace", not "modify". (b) Sec. 4.3.7.2 (Object::get_client_policy) suggests that the ORB searches the object's overrides, then PolicyCurrent's overrides, then PolicyManager's overrides. If it can't find any in those, then it can return the system default. I suggest the system default be left out of this search - it's not an override, it's a final default - and that we define what happens if no policy of the right type can be found, either null or a system exception. (c) Sec. 4.3.8.1 (Object::set_policy_overrides) and sec. 4.9.3.1 (PolicyManager::set_policy_overrides) both allow the existing set of overrides either to be replaced or to be extended. If the set is to be extended, and the new overrides contain a Policy of a type for which there is already an override, should the supplied Policy (1) replace the existing Policy silently, or (2) be ignored silently, or (3) cause a system exception (and which)? Whatever the value of 'set_add', if the supplied Policy list contains two Policies of the same type, which one prevails, if any? I suggest "implementation defined", but we could mandate a system exception.
The necessary rationale for Policy management is in 4.9.1 after all. So the proposed resolution is now confined to a relatively minor clarification in 4.3.7.1 and error cases in 4.3.8.1 & 4.9.3.1. The key elements are as follows: Sec. 4.3.7.1 (Object::get_policy): We no longer talk about the 'intersection' of the effective override and the IOR policy but use 'reconciliation' and reference 4.9.2 for its meaning. Sec. 4.3.7.2 (Object::get_client_policy): No change; this is still OK because it's talking about the policies set somewhere on the client side (including the default). Sec 4.3.8.1 (Object::set_policy_overrides) & Sec 4.9.3.1 (PolicyManager::set_policy_overrides): 1) When the set_add parameter is ADD_OVERRIDE and the policies parameter contains a policy 'new' whose type is the same as an existing override 'old', 'new' replaces 'old' in the updated list of overrides. 2) When the policies parameter contains two or more policies of the same type, the operations raise BAD_PARAM with some minor code t.b.d.
If I call ORB::shutdown(), it implicitly calls POA::destroy() on the Root POA. I assume that the value of the wait_for_completion parameter to ORB::shutdown() should be passed through to POA::destroy()? The spec isn't entirely clear on this point. Further, what is the effect of calling ORB::shutdown() on the value of the etherealize_objects parameter for POA::destroy()? Since ORB::shutdown() doesn't have an etherealize_objects parameter itself, the value passed through to POA::destroy must be implicit, but the spec doesn't say what it is. Similarly, ORB::destroy() implicitly calls ORB::shutdown(). From the second-last para on page 4-35, it would appear that this implicit call is made as ORB::shutdown(true) rather than ORB::shutdown(false). It might be nice to make this explicit so I don't have to read between the lines to figure it out.
Yes, it should be clarified that the apparent behavior of the system under these conditions should be consistent with the invocations as described below:
Pages 11-30 (twice), 11-31 (three times), and 11-52 (once) mention the OBJECT_ADAPTER exception. That's wrong -- it should be OBJ_ADAPTER.
Page 11-47, reference_to_servant, uses "Wrongpolicy". That should be "WrongPolicy".
Page 11-47, reference_to_servant, uses "Wrongpolicy". That should be "WrongPolicy".
This operation requires the USE_DEFAULT_SERVANT policy or a combination of the RETAIN policy and either the UNIQUE_ID or IMPLICIT_ACTIVATION policies; if not present, the WrongPolicy exception is raised. Note that there is nothing conditional here. If these policies are not present, the operation raises an exception. Compare this with servant_to_reference: This operation requires the RETAIN policy and either the UNIQUE_ID or IMPLICIT_ACTIVATION policies if invoked outside the context of an operation dispatched by this POA. Note that, in this case, we have a qualification: "... if invoked outside the context of an operation..." Why the difference between the two? They almost do the same thing, namely, map from a servant to an object ID. It's just that servant_to_reference, after it has the object ID, also embeds that object ID in a reference. So, shouldn't the two operations behave the same way? In particular, why should servant_to_id raise an exception if I call it from within the context of an executing operation on the specified servant? In other words, it seems that the behavior specified for servant_to_reference is correct and should apply equally to servant_to_id. In effect, calling the operation from withing an executing operation on the specified servant should do the same thing as calling get_object_id on the POA Current and use the resulting id. Am I missing something?
The difference is a leftover from when thespecification of servant_to_reference was changed. Provide additional clarification by making the changes shown below.
I know that this is probably not the best RTF to send this to, but the
issue spans RTFs and we don't have RTFs for the collection or the life cycle
service, so I'm sending this to the Core RTF for want of a better task force...
In the CosLifeCycle IDL (formal/98-10-01.idl), we have:
module CosLifeCycle{
typedef CosNaming::Name Key;
typedef Object Factory;
typedef sequence <Factory> Factories;
The two occurences of "Factory" are illegal. According to the comment
at the beginning of the module, this should read:
module CosLifeCycle{
typedef CosNaming::Name Key;
#ifdef NO_ESCAPED_IDENTIFIERS
typedef Object Factory;
typedef sequence <Factory> Factories;
#else
typedef Object _Factory;
typedef sequence <_Factory> Factories;
#endif
The same problem also appears in formal/98-10-15.idl.
Also in formal/98-10-01.idl:
// C o l l e c t i o n F a c t o r i e s
interface CollectionFactories : CollectionFactory {
boolean add_factory (
in Istring collection_interface,
in Istring impl_category,
in Istring impl_interface,
in CollectionFactory factory);
// ...
// R A C o l l e c t i o n F a c t o r i e s
interface RACollectionFactories : RACollectionFactory {
boolean add_factory (
in Istring collection_interface,
in Istring impl_category,
in Istring impl_interface,
in RACollectionFactory factory);
Both operation definitions need the same #ifdef to map away from the
"factory" keyword that is used as a parameter name.
That same problem also appears in formal/98-10-03.idl.
I guess the IDL in the formal CORBAservices documents should be fixed too.
Since pragma version only applies to the name given in the
pragma and not to anything in the scope of the name this
means that the rep id of things like Bounds and BadKind are
still "...:1.0":
interface TypeCode { // PIDL
# pragma version TypeCode 2.3
exception Bounds {};
exception BadKind {};
This is just one example of many things inside version 2.3
pragma'ed scopes that are defaulting to 1.0.
Close no change with the following explanation: If the exceptions Bound and BadKind have not themselves changed and do not depend on anything else that has changed, then in principle there is no reason for their version to be upped. No changes required since things are OK the way they are, given the limitations of the way Repids are defined.
The standard IDL files included in the corba/ subdirectory
of the IDL text files archive, formal/00-04-01, should be compilable
with any compliant IDL parser. Most notably, these files comprise
a "corba/orb.idl" source file, whose inclusion in application
IDL files is necessary whenever an application has to manipulate
type CORBA::TypeCode (as mandated by section "3.14 CORBA module"
of the CORBA specification v. 2.3).
It is thus expected that the file corba/orb.idl be a legal
IDL specification.
This is not the case, because the corba/orb.idl files #includes
a CORBA_Stream.idl file, which contains the following declaration:
abstract valuetype DataOutputStream {
[...]
void write_Abstract (in AbstractBase value);
[...]
}
In this declaration, the syntax of the language imposes that
the name AbstractBase be interpreted as a <scoped_name>.
This <scoped_name> is not defined in corba/orb.idl or any of
the files it #includes.
The declaration is therefore illegal.
According to the CORBA 2.3 specification, section
"4.2 The ORB operations", module CORBA contains a declaration
"native AbstractBase".
The following resolution is therefore proposed for this issue:
In file corba/orb.idl, include the followinf declaration:
native AbstractBase; // Chapter 4For explicit activation, the spec says: 11.3.8.15 activate_object ObjectId activate_object(in Servant p_servant) raises (ServantAlreadyActive, WrongPolicy); This operation requires the SYSTEM_ID and RETAIN policy; if not present, the WrongPolicy exception is raised. And: 11.3.8.16 activate_object_with_id void activate_object_with_id( in ObjectId oid, in Servant p_servant) raises (ObjectAlreadyActive, ServantAlreadyActive, WrongPolicy); This operation requires the RETAIN policy; if not present, the WrongPolicy exception is raised. Neither section says that IMPLICT_ACTIVATION would be required. The intent for IMPLICIT_ACTIVATION was that it permits implicit activation as well as explicit activation. However, I can infer this only by reading between the lines. In particular, in section 11.2.7, the intent is never made clear. I would suggest to change the the text in section 11.2.7 from: When a POA supports implicit activation, an inactive servant may be implicitly activated in that POA by certain operations that logically require an Object Id to be assigned to that servant. Implicit activation of... to read: When a POA supports implicit activation, an inactive servant may be implicitly activated in that POA by certain operations that logically require an Object Id to be assigned to that servant. (IMPLICIT_ACTIVATION does not disallow explicit activation; instead, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ it enables both implicit and explicit activation.) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Implicit activation of...
1. According to CORBA V2.3 spec, 99-10-07.pdf, section 11.3.8.22, reference_to_servant raises ObjectNotActive, WrongAdapter, and WrongPolicy exceptions. This is inconsistent with the method signature specified in the poa.idl (section 11.4). According to the idl the reference_to_servant raises only ObjectNotActive and WrongPolicy exceptions. It is requested that the signature of reference_to_servant in poa.idl be changed to match the description in section 11.3.8.22.
2. According to CORBA V2.3 spec, 99-10-07.pdf, section 11.3.3.2 description of unknown_adapter, indicates that: " The implementation of this operation should either create the specified POA and return TRUE, or it should return FALSE. If the operation returns TRUE, the ORB will proceed with processing the request. If the operation returns FALSE, the ORB will return OBJECT_NOT_EXIST to the client." In Section 11.3.8.3, find_POA specifies the following: "If a child POA with the specified name does not exist and the value of the activate_it parameter is TRUE, the target POA's AdapterActivator, if one exists, is invoked, and, if it successfully activates the child POA, that child POA is returned. Otherwise, the AdapterNonExistent exception is raised." Since find_POA itself invokes the unknown_adapter() method on the AdapterActivator. If the unknow_adapter() returns false, the find_poa() should throw an OBJECT_NOT_EXIST exception. This is not very clear from explanation in section 11.3.8.3.
There is inconsistency in the POA.IDL and description in section 11.3.8.19
in formal/99-10-07.pdf.
According to poa.idl the signature for create_reference_with_id is:
Object create_reference_with_id ( in ObjectId oid,
in CORBA::RepositoryId intf )
raises (WrongPolicy);
whereas, section 11.3.8.19 completely omits this exception in the
signature and does not even describe under what condition it is raised.
Clause 48 <constr_type_spec> in the syntax has been modified to include a choice <constr_forward_decl>. This does not in fact allow things like struct a; though that is the obvious intention. But it does allow bizarre stuff such as typedef struct a, array_of_a[100]; which IMHO should not be legal (I am not that keen on typedef struct a b;) I think this choice should be deleted from clause 48 and inserted in clause 42 <type_dcl> instead.
That is correct. Changes enumerated below to be incorporated to fix this problem urgently so as to allow inclusion of these changes before 2.4 is published.
1. The phrase "the only recursion permitted for constructed types with the exception of value types" is confusing: a) valuetypes are not constructed types b) the definition of a valuetype may indeed be recursive, but then so can interfaces - why are these not mentioned? Are you trying to say something specific with regard to valuetypes? 2. The cross reference in the first example should be 3.10.7 not 3.10.3. 3. Why does the second paragraph on page 3-38 insist that a forward declared definition must follow "in the same source file"? While this is sensible I do not see the point in enforcing it (there is a separate rule about repository IDs which has a bearing). I couldn't find a statement requiring completion of forward interface and valuetype declarations to compare with - I have always assumed these must be satisfied too.
>1. The phrase "the only recursion permitted for constructed types with
> the exception of value types" is confusing: a) valuetypes are not
> constructed types b) the definition of a valuetype may indeed be
> recursive, but then so can interfaces - why are these not
> mentioned? Are you trying to say something specific with regard to
> valuetypes?
The wording is indeed suboptimal and needs fixing. See edits under 1 below.
> 2. The cross reference in the first example should be 3.10.7 not 3.10.3.
Yes, see edits under 1 below..
> 3. Why does the second paragraph on page 3-38 insist that a forward
> declared definition must follow "in the same source file"? While
> this is sensible I do not see the point in enforcing it (there is a
> separate rule about repository IDs which has a bearing). I couldn't
> find a statement requiring completion of forward interface and
> valuetype declarations to compare with - I have always assumed
> these must be satisfied too.
The Core RTF explicitly decided some time ago that forward-declared interfaces
and valuetypes need not have a definition in the same source file. That
decision was made because members that use such a forward-declared type
have reference semantics, so there is no need for the compiler to see
the complete definition of the type (and therefore know the sizes involved)
in the same source file.
For recursive structs and unions, the situation is different. The recursive
sequence elements (which have the forward-declared type) have *value*
semantics. In turn, this means that the compiler must find out what the
size of things is in the same source file. We could relax this definition,
but that would have negative implementation consequences. In particular,
the compiler would be forced to generate sequence implementations that
store each sequence element on the heap and hold a pointer to each element
(because the size of the element would not be known at compile time.)
In the interest of efficiency and not making compiler implmentations
overly complex, I suggest to retain the rule as is.
The text forces the compiler to emit a diagnostic as a matter of principle;
otherwise, a compliant compiler would be allowed to compile
non-compliant IDL without emitting a message. That's not useful behavior.
>4. I believe the following should be legal:
>
> struct R;
> typedef sequence<R> SqR;
> typedef sequence<SqR> SqSqR;
> struct R {
> SqSqR square_chain;
> };
>
> But the existing wording seems to forbid this because the second
> typedef falls foul of the last pragraph on page 3-38. I think you
> need to add that a sequence type that has a forward declared element
> type may also be used to declare a further sequence type, which is
> itself similarly restricted.
Agreed -- the intent was to permit this but the text in the spec does
not properly capture the intent. The edits in item 2 below should fix it:
>5. The syntax of the "union Bar" example is wrong: the declarator is
> missing. It should read something like:
>
> ...
> case 1:
> struct Foo {
> ...
> } s_mem;
> ^^^^^
Yes, thanks. A line is missing from the example. The edits in item
3 below will fix it:
Given the IDL below, is the third case (labeled "Nested Recursive
Case") legal in CORBA 2.3.x? (I understand that the answers to my questions
may change in 2.4: I am interested in possible flaws in 2.3 at the moment).
If it is legal, I have some concerns listed after the IDL:
//IDL
module recurse
{
//Recursive Struct: This is legal
struct TestStruct1 {
sequence<TestStruct1> list;
};
// Nested Struct: This is legal
struct TestStruct2 {
struct TestStruct3
{
long threeMember;
} twoMember;
};
// Nested Recursive Case: IS THIS LEGAL?
struct One {
struct Two {
sequence<One> twoMember;
} oneMember;
};
};
1) If this IDL is loaded into an IFR, and the type() method of the StructDef
for ::recurse::One::Two is called, what should happen? I can think of at
least three interpretations of the spec (in particular, section 10.5) :
a) type() should fail since the TypeCode for Two is not valid
outside of the definition of One. If this is the case, what should it
throw? (the natural result of many implementations would be MARSHAL, but
that seems wrong)
b) type() should succeed and should include a complete, valid
TypeCode of the form:
//*BEGIN TYPECODE*//
Struct_tc(Two)
MemberList
StructMember
twoMember,
TypeCode: Struct_tc(One)
MemberList
StructMember
oneMember,
TypeCode: Recursive_tc("IDL:recurse/One/Two:1.0")
//*END TYPECODE*//
c) type() should succeed and should include a complete, valid
TypeCode of the form:
//*BEGIN TYPECODE*//
Struct_tc(Two)
MemberList
StructMember
twoMember,
TypeCode: Struct_tc(One)
MemberList
StructMember
oneMember,
TypeCode: Struct_tc(Two)
MemberList
StructMember
twoMember,
TypeCode: Recursive_tc("IDL:recurse/One:1.0")
//*END TYPECODE*//
2) Similarly, what should the behavior be when the type() method on the
generated structs (or their Helper classes in Java) are called? In
particular, at what point is the ORB responsible for "embedding" the
recursive TypeCode in its enclosing TypeCode as specified by section 10.7.3
"Creating TypeCodes"?
For example, given the following code (in Java, but applied to other
languages):
TypeCode recursiveTC = orb.create_recursive_tc("IDL:recurse/One:1.0");
org.omg.CORBA.StructMember[] members = new
org.omg.CORBA.StructMember[1];
members[0] = new org.omg.CORBA.StructMember("twoMember",
_orb().create_sequence_tc(0, recursiveTC), null);
/*1*/ TypeCode twoType = _orb().create_struct_tc(id(), "Two", members);
members = new org.omg.CORBA.StructMember[1];
members[0] = new org.omg.CORBA.StructMember("oneMember", twoType,
null);
/*2*/ TypeCode oneType = _orb().create_struct_tc(id(), "One", members);
If *1* attempted to resolve the recursive TC, it would fail.
If *2* attempted to resolve the recursive TC, it would succeed, but would
have to traverse all of twoType's members to see if there was a recursive TC
in there.
Any other thoughts on this issue would be appreciated.
Close with clarfication:
Yes. Nested recursive structs are legal in 2.3.x. It is a matter of
implementation to determine where the recursion occurs in the typecode
itself. This is determined at runtime based on what the starting point of
the type() method is:
Given the example in the issue:
struct one {
struct two {
sequence<one> twoMember;
}; oneMember;
};
if two.type() is called. Then the typecode looks like this:
tk_struct{"two",
member{
{tk_sequence{
{tk_struct{"one",
member{
{tk_recursive{"two"}, oneMember}
} //end "one"
},
0}, //end sequence
twoMember}
}; //end "two"
if one.type() is called. Then the typecode may look like this:
tk_struct{"one",
member{
{tk_struct
member {
tk_struct{"two",
member{
{tk_sequence{tk_recursive("one"), twoMember},0}
}
} //end "two"
},
twoMember}
}; //end "one"Is the following IDL legal?
interface A {
void B();
};
interface B : A {};
Interface B has an inherited operation named B. Whether it is legal or
not depends on whether the inherited operation is considered "defined"
within interface B.
This issue is subtly different from the discussions in issue 3525.
Operations and attributes are more strongly "introduced" into the
inherited interface than type declarations are, since inherited type
declarations can be overridden, but operations and attributes cannot.
I think the IDL specification should be clarified to state whether the
above IDL is legal or not.I don't think we need to say anything special there? The spec explicitly says that directly-nested, same-named constructs are illegal. It doesn't say that I can't inherit an operation from a base interface with the same name as a derived interface (and it shouldn't, IMO). There is no danger of name clashes at the language mapping level here because ::A and ::B::A are in different scopes and therefore end up getting mapped to different classes.
The IDL grammar does not allow valuetype initializers to be declared as raising user exceptions, which seems like a potentially useful thing to do. Was this possibility considered and rejected for some reason?
The following two preliminary questions need to be answered first: A. Should exceptions be added to valuetype initializers? [Yes, No, Abstain] B. Is this within the scope of what an R/FTF can do? [Yes, No, Abstain] If No wins for either A or B above this issue will be closed no change. NO won for B, so issue is closed no change
The org.omg.CORBA.DataInputStream and org.omg.CORBA.DataOutputStream do not define read_fixed() and write_fixed() methods. To enable custom marshalling/unmarshalling of the fixed data types, these methods should be added to the above classes.
Add read_fixed and write_fixed to DataOutputStream and DataInputStream respectively, and let them be mapped using the usual Java mapping. And while at it, also add read_fixed_array and write_fixed_array.
ORB_init allows me to specify an ORB ID, but there is no way to get that
ORB ID back from an ORB. It seems wrong to force people to specify an
object identity during object creation but to not allow access to that
identity later.
I would suggest to add an accessor to the ORB interface:
interface ORB {
ORBid id();
// ...
};
The specification, ptc/00-08-06, defines the following modules: Dynamic IOP_N PortableInterceptor These modules reference the following modules: CORBA IOP Messaging The CORBA 2.4 specification, orbrev/00-09-01, only explicitly specifies: #pragma prefix "omg.org" for: DynamicAny (page 196) CORBA, the Interface Repository Case, (p 280) PortableServer (page 338) and the Messaging specification, orbos/98-05-05, specifies the prefix for messaging. ---------- Proposed solution: Either explicitly add #pragma prefix "omg.org" before Dynamic, IOP_N, PortableInterceptor, CORBA (in general), and IOP OR Change, the second paragraph of 10.6.7 RepositoryIDs for OMG-Specified Types (page 270) from: "All official OMG IDL files shall contain the following pragma prefix directive: #pragma prefix "omg.org" unless said file already contains a pragma prefix identifying the original source of the file (e.g., "w3c.org")." to: "All official OMG IDL modules shall contain the following pragma prefix directive: #pragma prefix "omg.org" unless said file already contains a pragma prefix identifying the original source of the module (e.g., "w3c.org")." ---------- Discussion: Perhaps we can interpret 10.6.7 above to mean already mean the all official OMG modules have the "omg.org" prefix. In that case, there is no issue.
The interceptors specification, ptc/00-08-06, defines: IOP_N Issue: "_N" needs to be replaced with the correct version such that this module has a real name.
_N should be replaced by the null string, i.e. whatever is in IOP_N in ptc/00-08-06 should be appended to the IOP module.
This is a core issue. formal/99-10-07 (and orbrev/00-09-01) section 7.1.1 claims arg_modes is a bit mask with CORBA::ARG_IN, ... as possible values. The values are not defined in that document. The values defined in ptc/00-01-08 (IDL to Java mapping) section 1.19.4 do not look like bit masks: typedef unsigned long Flags; const Flags ARG_IN = 1; const Flags ARG_OUT = 2; const Flags ARG_INOUT = 3; const Flags CTX_RESTRICT_SCOPE = 15; This needs clarification (e.g., how wide is the bit mask, what are the values, or, if not a bit mask, a better definition).
Doing a complete fix of all possible usages of the Flag type will require considerable rewrite of Chapter 7, so that is not attempted in this resolution. This resolution addresses the specific problem mentioned in this issue relative to the actual values of ARG_IN, ARG_OUT, ARG_INOUT and CTX_RESTRICT_SCOPE.
As I understand things, string_to_ObjectId is an artifact of the C++ POA mapping. It certainly isn't defined in the core POA spec. However, some of the example code in the POA spec uses this routine. Is this kosher? Shouldn't the relevant examples at least have a cross-reference to the C++ mapping?
close 3918 without change. Given that the examples are in C++, I don't see how they can avoid to use features of the C++ mapping. I don't think that a cross-reference is needed. I think it's obvious that, for C++, it's the C++ mapping that is used.
There is a conflict between the specification of the OBJECT_NOT_EXIST
exception and its use in the POA spec. The exception definition says
that OBJECT_NOT_EXIST means that an object has gone away forever, and
that clients should tidy up references to it. However, the POA spec
requires an ORB to raise this exception in cases where the object may
not have gone away for ever.
In particular, 11.2.6 (in the 5 May 2.4 Draft) requires an ORB to raise
OBJECT_NOT_EXIST if request comes in for a child POA that is not active
and was not activated by the application's POA Activator. While this
may mean that the object has gone away for ever, it doesn't always
mean that. For example:
1) If the server admin has stuffed port number allocations, a server
may accidentally get requests for POAs that it doesn't know about.
2) If the server has been incorrectly (re-)built one of its "static"
child POAs might not be activate.
3) If the server is buggy and / or its persistent state is flakey,
it may temporarily fail to dynamically activate a child POA.
In each case, the problem MAY be one that can be fixed, allowing the
missing POA to reappear in a few minutes. It is therefore inappropriate
for the ORB to be telling the client that the Object has gone away for
ever.
For what it is worth, I think the ORB should raise another exception,
say OBJ_ADAPTER, in the default case. It might raise OBJECT_NOT_EXIST
if it (somehow) tracks the lifecycle of transient and / or persistent
POAs, or if the application code tells it the POA no longer exists.
Note: I'm not suggesting that an ORB be required to support such things.
The other alternative is to change the definition of OBJECT_NOT_EXIST
to remove the implication that the object has gone away forever and
the suggestion that clients should throw away references to the object.
[I think that's wrong though ...]
A server can signal the case where it's prevented (by resource/config problems, say) from creating a POA on demand by raising OBJ_ADAPTER or some other system exception. Since _by_definition_, returning null from an AdapterActivator triggers OBJECT_NOT_EXIST, returning null to signal some other condition is simply a programming error. An incorrect/noncompliant application, all bets are off and the spec can and should say nothing useful. After all, by accident or design, OBJECT_NOT_EXIST might mean "today's Thursday" in my app.
The format of the "hash code" element of an RMI Hashed Format repid needs to be clarified. Section 10.6.2 gives the algorithm for computing the 64-bit number to be used as the hash code, but does not specify the on-the-wire format for this number. In contrast, the spec explicitly states that the 64-bit number representing the SUID is transcribed as a 16-digit upper-case hex string.
Proposal: In the seventh paragraph of section 10.6.2, after the text "the hash code is a 64-bit hash of a stream of bytes", add the text "(transcribed as a 16-digit upper-case hex string)".
The CORBA 2.4 specification is not clear about whether a valuetype can
support multiple non-abstract interfaces via inheritance. Here is an
example:
interface I1 {};
interface I2 {};
valuetype V1 supports I1 {};
valuetype V2: V1 supports I2 {};
Is V2 legal?
I see three possible resolutions to this issue:
1. Make V2 illegal. A valuetype may not support a non-abstract
interface if any of its base valuetypes supports a non-abstract
interface. This is a pretty simple rule, but I think it is far too
restrictive, and can get in the way of some cases where supporting
multiple interfaces could be genuinely useful.
2. Make V2 legal. Since we have clarified (assuming that the proposed
resolution of 3589 passes, which it appears it will) that valuetypes
that support an interface are not synonymous with an object reference
that uses that valuetype as a servant, I don't see any actual core
issues that break the object model. Also, my inspection of the language
mappings does not reveal any problems on that front either.
3. Make V2 illegal, but make it legal if I2 inherited from I1. The
rule would be that a valuetype can support a non-abstract interface only
if that interface is derived (directly or indirectly) from all other
non-abstract interfaces that are supported by base valuetypes. This
allows the use of the ladder inheritance pattern, which I think is very
useful in this case:
interface I1 {};
valuetype V1 supports I1 {};
interface I2 {};
valuetype V2 supports I2 {};
interface I3 : I1, I2 {};
valuetype V3 : V1, V2 supports I3 {};
Of these three posible resolutions, I prefer #2, since I don't see any
practical implementation problems, so the restriction in #3 is really
not necessary.
Essentially do what is suggested in (3) above for reasons given above, and futher expounded upon in the archive.
given the a DynUnion value, I want to find out whether the discriminator
currently indicates the default case. For example:
union u switch (long) {
case 0:
long l;
case 1:
char c;
case 2:
double d;
default:
float f;
};
For this union, I want to know whether the default member is active, that is,
whether the discriminator has a value other than 0, 1, or 2.
Finding out whether the discriminator indicates the default case is currently
rather difficult. I have to:
1) get the union type code
2) collect the values of all the explicit case labels from
the type code
3) check if the discriminator currently has a value that is not
one of the explicit case labels values
It would be much nicer to add the following to DynUnion:
interface DynUnion : DynAny {
boolean is_set_to_default_case();
// ...
};
The is_set_to_default_case operation returns true if a union has
an explicit default label and the discriminator value does not
match any of the union's other case labels.
Consider a servant for a persistent object that sits in front of a database.
Assume a simple implementation model, using RETAIN and
USE_ACTIVE_OBJECT_MAP_ONLY.
We have n CORBA objects with n servants, and each servant implements
its operations by reading/writing through to the persistent store, possibly
also caching some state and maintaining other resources, such as database
connections or memory buffers.
I want to implement a life cycle destroy() operation. In the body of
destroy, I have to write something like:
void
Foo_impl::
destroy() throw(CORBA::SystemException)
{
my_poa->deactivate_object(my_oid);
// Cannot remove database record here or do any other
// cleanup.
}
The problem is that the servant can't simply blow things away at that
point because there may be other operations running concurrently in the
same servant, and those operations would get awfully surprised if their
state suddenly disappeared.
So, I delay reclaiming resources and deleting the database record until
the servant becomes idle. In C++, that's no problem. Eventually, the
servant's AOM entry disappears and (at least if I use reference-counted
servants) that triggers the destructor of the servant, and I can
clean up in the destructor.
However, it appears that this doesn't work for other languages because they
may not have destructors or, like Java, make no guarantees about when
the destructor will be called.
The problem is that there is no way for me to find out at what
point the servant becomes idle, so that I could clean up.
I think we need a callback from the ORB to the server application code that
notifies the server when a servant finally becomes idle. Otherwise, it is
pretty much impossible to implement life cycle support in languages other
than C++, especially for threaded servers.
(USE_SERVANT_MANAGER + RETAIN) =
USE_ACTIVE_OBJECT_MAP_ONLY + life_cycle_control;
i.e. Use ACTIVE_OBJECT_MAP_ONLY when you do not care about life cycle control and
use SERVANT_MANAGER + RETAIN when you want the life cycle control.
You can even selectively bypass incarnate by explicitly activating your objects even
when SERVANT_MANAGER is being used. That way, you get notified only when the object
is deactivated and not when it is created.
There seems to be insufficient justification for changing the semantics of
USE_ACTIVE_OBJECT_MAP_ONLY to fix these race & deadlock conditions when
simply using a ServantActivator solves the problem.
ReIn the CORBA 2.4 spec, chapter 10, the definition of #pragma ID has
been modified so that later re-declarations of the same ID for a type
are permitted. Before, it was explicitly an error to use #pragma ID
for a type more than once, even if the same IDs were given.
The section of #pragma version has not been updated. This means that
handling of the two similar pragmas is now inconsistent:
interface A {};
#pragma ID A "LOCAL:foo"
#pragma ID A "LOCAL:foo" // OK in 2.4, error in 2.3
interface B {};
#pragma version B 3.4
#pragma version B 3.4 // Error in 2.4 and 2.3
Should #pragma version be updated to be consistent with #pragma ID?
A non-conflicting version pragma should be considered benign, just as a non-conflicting ID pragma.
The semantics for local interfaces states: A valuetype may support a local interface. This brings up two questions. 1. Can it support multiple? In addition to a unconstrained non abstract interface? 2. Does it then become a local type (I think not, I think it becomes a local type only when it contains state that is a local type)
1. Can it support multiple? In addition to a unconstrained non abstract interface? No, for the same reason that it cannot support more than one non abastract interface. In fact , it can support only one non-abstract interface. That supported interface may or may not be local. 2. Does it then become a local type (I think not, I think it becomes a local type only when it contains state that is a local type) No, it does not become a local type, in the sense that it cannot be marshaled. For that to happen on of the state variables must be of a local (unmarshalable) type.
This is the first issue I found w/ POAManager::deactivate definition. The spec states in section 11.3.2.6, paragraph 1. Entering the inactive state causes the associated POAs to reject requests that have not begun to be executed as well as any new requests. However, there is no definition of what "reject" means. What does the client see in this case? Proposal: Add to the paragraph: When a request is rejected, an OBJECT_NOT_EXIST system exception with standard minor code XX is returned to the client.
Section 11.3.2.6 has a paragraph that states: If the ORB::shutdown operation is called, it makes a call on deactivate with a TRUE etherealize_objects parameter for each POA manager known in the process; the wait_for_completion parameter to deactivate will be the same as the similarly named parameter of ORB::shutdown. Shouldn't this be reworded to not require an explicit call to deactivate(but only the effect). Also, since ORB::shutdown already does the equivalent of destroy on the POAs shouldn't the order of these operations be specified. I also think they should be specified in the text for ORB shutdown rather than here.
Following statement in CORBA V2.3 (06/1999),
P10-39, Chapter 10.6.1, OMG IDL Format concerning
the *OMG IDL format* for Repository IDs:
>> The RepositoryId consists of three components, separated by
colons, (":")
The first component is the format name, "IDL."
The second component is a list of identifiers, separated by
"/" characters.
These identifiers are arbitrarily long sequences of alpha-
betic, digit, underscore ("_"), hyphen ("-"), and period (".")
characters. Typically, the first identifier is a unique prefix,
and the rest are OMG IDL Identifiers that make up the scoped
name of the definition. <<
There are two issues here:
* Firstly I propose to change >>"IDL."<< into >>"IDL".<<
* Furthermore, I propose be more specific on the definition
of the Repository Id. The above definition does *not*
exclude a RepositoryId in the following style (which
in my opinion does not make sense and effects inter-
operability between ORBs): "IDL:/A/B:1.0"
A regular expression could clarifiy this issue:
* Firstly I propose to change >>"IDL."<< into >>"IDL".<<
Editing style detail. Both are valid depending on which style is being followed. There are numerous examples in the chapter which
precludes the possibility of misinterpreting the existing "IDL." as if it is saying that an OMG IDL RepId should be of the form
"IDL.:foo:1.0". Nochange required.
* Furthermore, I propose be more specific on the definition
of the Repository Id. The above definition does *not*
exclude a RepositoryId in the following style (which
in my opinion does not make sense and effects inter-
operability between ORBs): "IDL:/A/B:1.0"
A regular expression could clarifiy this issue:
Not clear that this affects interoperability in any way. As long as ORBs follow the instructions in section 10.6.5.4 "Generation of
OMG IDL - Format IDs." So no further specificity in definition is required. However, some changes in section 10.6.5.4 for
clarifying its meaning is in order as shown below:
>From CORBA 2.4, Table 4-3: TRANSIENT minor code 1 is described as: "Request discarded due to resource exhaustion in POA." However, section 11.3.2.1 states that minor code 1 is used when the POAManager is in the DISCARDING state. I think it would be better to reword this description as: "Request discarded because POAManager is in DISCARDING state (e.g. server lacks resources to complete request.)"
I was looking at the spec to amend 4033 to not use up a new minor code but
noticed this text for minor code 2 under OBJECT_NOT_EXIST:
POAManager::incarnate failed to create POA.
This is clearly not consistent with its use under the TRANSIENT POA Lifespan
Policy description (I also found other inconsistent uses, detailed below).
There are two things that need fixing here. The first one is probably
straightforward.
1. The minor code allocated for 4033 must be used in the text for TRANSIENT
Lifespan Policy in section 11.3.7.2
2. POAManager::incarnate is not a valid operation at all.
I found references to OBJECT_NOT_EXIST with minor code 2 in the following
places:
A - Section 11.2.6, paragraph 2
The adapter activator has the opportunity to create the required POA. If it
does not, the client receives the
OBJECT_NOT_EXIST exception with standard minor code 2.
B - Section 11.2.6
If the POA has the NON_RETAIN policy or has the RETAIN policy but didn't
find a
servant in the Active Object Map, the POA takes the following actions:
Bullet 3
- If t he USE_OBJECT_MAP_ONLY policy is in effect, the POA raises the
OBJECT_NOT_EXIST system exception with standard minor code 2.
C - 11.3.3.2 unknown_adapter
If the operation returns TRUE, the ORB will
proceed with processing the request. If the operation returns FALSE, the ORB
will
return OBJECT_NOT_EXIST with standard minor code 2 to the client.
D - 11.3.3.2 unknown_adapter
If the parent of a nonexistent POA does not have an
associated adapter activator, the ORB will return the OBJECT_NOT_EXIST
system
exception with standard minor code 2.
E - 11.3.7.6 Request Processing Policy
USE_ACTIVE_OBJECT_MAP_ONLY - If the Object Id is not found in the
Active Object Map, an OBJECT_NOT_EXIST system exception with standard
minor code 2 is returned to the client.
Cases A, C and D hint that minor code 2 should actually say "Could not
create or locate POA" or something to that effect. Cases B and E should
really be using another minor code ("Could not locate object in AOM?").
Taking the factors from above into consideration, the best way to resolve this issue is to change the description of OBJECT_NOT_EXIST/Minor code 2) to be consistent w/ use. This minor code is used to indicate either a failure to create a POA by an AdapaterActivator or a failure to locate the POA or an associated AdapterManager.
the 2.4 specification states that 'preinvoke and postinvoke operations are always called in paris in response to any ORB activity...' the spec details in particular the case of what happens when preinvoke is called when processing a GIOP Locate message: postinvoke is called subsequent to calling preinvoke. if the preinvoke raises an exception, what is the expected behavior? should postinvoke be called if preinvoke raises a system exception or ForwardRequest? are there any situations in which postinvoke would not be called following a call to preinvoke?
There appears to be a contradiction in CORBA 2.4.1 (00-11-07) as to whether CORBA::ORB::object_to_string() should raise INV_OBJREF or BAD_PARAM when an invalid string is passed. Here's where I see a contradiction in the spec: CORBA 2.4.1: "4.11.3.6 INV_OBJREF This exception indicates that an object reference is internally malformed. For example, the repository ID may have incorrect syntax or the addressing information may be invalid. This exception is raised by ORB::string_to_object if the passed string does not decode correctly." This explicitly specifies that INV_OBJREF is thrown if a non-decodable stringified IOR is passed to string_to_object(). On the other hand the table: CORBA 2.4.1: "4.11.4 Standard Minor Exception Codes ... BAD_PARAM ... 7 string_to_object conversion failed due to bad scheme name. 8 string_to_object conversion failed due to bad address. 9 string_to_object conversion failed due to bad bad schema specific part. 10 string_to_object conversion failed due to non specific reason." indicates that BAD_PARAM/10 should be raised for non-specific string_to_object failures, contradicting 4.11.3.6 above. Is this simply an editing issue in that 4.11.3.6 has not yet been updated to take cognizance of 4.11.4? I propose that 4.11.3.6 is updated to allow BAD_PARAM to be raised on string_to_object failures where the problem lies in the string content.
The sentence: "This exception is raised by ORB::string_to_object if the passed string does not decode correctly." was removed editorially in 2.4.2, since this specification does not belong in Chapter 4.
Is the following legal IDL?
module M
{
abstract interface I
{
string s();
};
valuetype V supports I
{
private string s;
};
};
Our interpretation of the spec is that it is legal but we have been informed
that some other IDL compilers consider it an error.
The potential for name clashes in the implementation language mappings for many commonly used implementation languages is avoided if declaration of new identifiers in valuetypes deal with the naming scope of supporting interfaces being inherited into the scope of the valuetype, following the normal inheritence rules as they apply to scopes of interfaces and valuetypes. Resolve this issue by spelling out that restriction, and clearly making the IDL presented above illegal.
Section 2.1.7 of CORBA 2.3 and 2.4 (and presumably all earlier versions) concludes with the sentence Object-oriented programming languages, such as C++ and Smalltalk, do not require stub interfaces. I suspect that this is a relic of some prehistoric age when early OMG folk imagined that OO languages would handle some stub stuff via language mechanisms. Since this has not turned out to be the case, the sentence should be excised.
Remove the quoted sentence, and repair collateral damage as suggested below. General comment..... perhaps it is time to redo significant parts of chapter 2.
In the Interface Repository, Container::contents() and describe_contents() do not seem to have any restrictions on ordering. However, these seem to be necessary for interoperability, so that a dynamic bridge that tries to find out about a Value by using Container::contents (dk_ValueMember, 0) does the right thing.
CORBA Core should state that language mappings providing a narrowing mechanism are also required to provide an 'unchecked narrowing'-mechanism. The original CORBA Messaging specification (orbos/98-05-05) specifies an unchecked narrow operation that has not been changed by any Messaging RTF. 'unchecked narrowing' is not an issue of a single language mapping. Therefore, it would be good if this was formulated in the CORBA Core as a general requirement for any language mapping. The originally adopted CORBA Messaging specification, orbos/98-05-05, had an explanatory paragraph for this purpose: '3.3.7 Note on Asynchrony and Narrowing of Object References Many programming languages map IDL interfaces to programming constructs that support inheritance. In those language mappings (such as C++ and Java) that provide a mechanism for narrowing an Object reference of a base interface to a more derived interface, the act of narrowing may require the full type hierarchy of the target. In this case, the implementation of narrow must either contact an interface repository or the target itself to determine whether or not it is safe to narrow the clients object reference. This requirement is not acceptable when a client is expecting only asynchronous communication with the target. Therefore, for the appropriate languages this specification adds an unchecked narrow operation to the IDL mappings for interface. This unchecked narrow always returns a stub of the requested type without checking that the target really implements that interface. If a client narrows the target to an unsupported interface type, invoking the unsupported operations will raise the system exception CORBA::BAD_OPERATION.' However, the semantics of the above have obviously not made it into CORBA 2.4.
This indeed needs to be mentioned in Chapter 4. Unfortunately, since narrow only applies to strongly typed languages, it is not an operation in the Object reference, and nor should it be. However, the issue of type coercion does deserve a mention in section 4.3. So what is proposed is to insert a section after section 4.3.6 "Object Reference Identity" with the title "Type Coercion Considerations" with contents as shown below
I propose that ObjectId be changed from: typedef sequence<octet> ObjectId; to: typedef CORBA::OctetSeq ObjectId; This shouldn't cause any existing code to break. However, currently PortableInterceptor::ObjectId (needed so that the PI module doesn't depend on the PortableServer module) isn't directly assignable to PortableServer::ObjectId which means additional copying that doesn't seem necessary. It also reduces the code-size of the ORB somewhat (since a sequence type can be removed from the core).
The discussion for issue 3525 shows that it is legal to redefine a type
in a derived interface, as in
interface B { typedef string S; };
interface D : B { typedef long S; };
However, I don't think that this legality is obvious from the text. On
page 3-52, it says that "inheritance causes all identifiers defined in
base interfaces to be visible in derived interfaces." Then, on page
3-56, it is said that "once a type has been defined anywhere within
the scope of a module, interface or valuetype, it may not be redefined
except within the scope of a nested module or interface."
Since B::S is not "defined" but only "visible" in D, and D is not a
nested interface but a derived interface, there seems to be a gray
area.
Proposed resolution:
Edit the first paragraph of 3.15.3 (Special Scoping Rules for Type
Names) on p 3-56 to read:
"Once a type has been defined anywhere within the scope of a module,
interface or valuetype, it may not be redefined except within the
scope of a nested module, interface or valuetype, or within the
scope of a derived interface or valuetype."
Edit the following example to include, after interface A, but before
the erroneous redefinition of ArgType,
interface B : A {
typedef long ArgType; // OK, redefined in derived interface
struct S { // OK, redefined in derived interface
ArgType x; // x is a long
A::ArgType y; // y is a string
};
};
I cannot seem to come to grips with the introduction of identifiers
by their use in a nested scope. The example on page 3-54 reads
(simplified)
module Inner1 {
typedef string S1;
};
module Inner2 {
typedef Inner1::S1 S2; // Inner1 introduced
typedef string inner1; // Error
};
The text goes on to explain that the above construct introduces the
identifier "Inner1", while using the absolute name, "::Inner1::S1"
in the typedef wouldn't. Therefore, the following code would be
legal:
module Inner2 {
typedef ::Inner1::S1 S2; // Inner1 not introduced
typedef string inner1; // legal
};
I fail to see the rationale in this. Also, this is not in sync with
the Interface Repository, which cannot even detect that the first
example is illegal, because it never sees relative names.
My proposed resolution would be to get rid of "introduced names"
altogether and to declare the above example legal.
No specific bug has been identified above. It is not clear what it means for this to be out of sync with IFR, and what relevance it has to this discussion. Insufficient justification for change. Revised Text: Actions taken: Close no change
interface Foo {
void op() raises(PortableServer::ForwardRequest);
};
What happens if a client invokes op() and op() throws ForwardRequest?
Is this received by the client as a locate forward or does the client
simply receive the exception?
The spec doesn't say either way. However, thinking about how all this is
implemented, I strongly suspect that current implementations will simply
marshal the exception back to the client instead of sending a locate forward
reply.
Personally, I think that's how it should be. If it werent, we'd have to
insert additional code into the user exception processing path to deal
with this special exception (which would probably set a bad precedent).
I'd suggest to amend the spec to state that ForwardRequest has the effect
of causing a locate forward reply only if thrown from preinvoke() and
incarnate() and is otherwise just a normal exception.
Add a clarifying sentence or two to the Portable Server chapter to make the behavior of PortableServer::ForwardRequest consistent with that of PortableInterceptor::ForwardRequest.
In document 01-01-01, there are the following paragraphs which seem contrary to one another regarding the minor code to be used when an ORB receives an unrecognized system exception. 4.11.2 Vendors may define non-standard system exceptions, but these exceptions are discouraged because they are non-portable. A non-standard system exception, when passed to an ORB that does not recognize it, shall be presented by that ORB as an UNKNOWN standard system exception. The minor code and completion status from the unrecognized exception shall be preserved in the UNKNOWN exception. 15.3.5.5 Exception Exceptions are encoded as a string followed by exception members, if any. The string contains the RepositoryId for the exception, as defined in the Interface Repository chapter. Exception members (if any) are encoded in the same manner as a struct. If an ORB receives a non-standard system exception that it does not support, or a user exception that is not defined as part of the operation's definition, the exception shall be mapped to UNKNOWN, with standard minor code set to 2 for a system exception, or set to 1 for a user exception.
Make section 4.11.2 consistent with section 15.3.5.5 by changing section 4.11.2 as shown below.
The mode attribute can only be set to OP_ONEWAY if the result is TC_void and all elements of params have a mode of PARAM_IN. which might be taken to mean that the mode attribute *must* be set to OP_ONEWAY if the signature is as described. A better wording might be The mode attribute can be set to OP_ONEWAY only if the result is TC_void and all elements of params have a mode of PARAM_IN. This was brought to my attention by an email question I received today, from someone who thought he understood CORBA oneway semantics until he read that sentence - then he became confused.
As with other DynAny operations that accept an Any parameter, the set_boxed_value operation should be capable of raising InvalidValue. Proposal: * In sections 9.2 and 9.12, add InvalidValue to the raises clause for set_boxed_value * In section 9.12, replace the text describing set_boxed_value with the following: "The set_boxed_value operation replaces the boxed value with the specified value. If the type of the passed Any is not equivalent to the boxed type, the operation raises TypeMismatch. If the passed Any does not contain a legal value, the operation raises InvalidValue. If the DynBoxedValue represents a null valuetype, it is converted to a non-null value."
A minor issue with section 3.3 of the 2.4 specification:
"... Text in files included with a #include directive is treated as
if it appeared in the including file. ..."
That is not true since, as we find out in chapter 10, included files
behave specially with regard to assigning repository identifiers.
e.g. in
// a.idl
#pragma prefix "foo"
interface bar {};
the repository id of bar is IDL:foo/bar:1.0, but in
// a.idl
#pragma prefix "foo"
#include "b.idl"
// b.idl
interface bar {};
it is just IDL:bar:1.0.
The quoted sentence in section 3.3 is somewhat misleading. Word it better as proposed below.
The CORBA::DataInputStream abstract valuetype has operations like: void read_boolean_array( inout BooleanSeq seq, in unsigned long offset, in unsigned long length); However, the spec says nothing about whether the provided sequence must already have sufficient length to satisfy the offset+length or whether the operation will extend the sequence to fit.
Section 3.7.4 doesn't mention local as a legal prefix for an interface forward declaration. Proposal 1: Change the sentence: "The syntax is: optionally the keyword abstract, followed by the keyword interface, followed by an <identifier> that names the interface." to: "The syntax is: optionally either the keyword abstract or the keyword local, followed by the keyword interface, followed by an <identifier> that names the interface." Proposal 2: Just strike the sentence entirely, since it is redundant.
The definition of the NamingContextExt interface in the IDL of Appendix A is not consistent with the definition in section 2.5.4. Specifically, 1. The Appendix A version has an extra operation: resolve_context 2. In Appendix A, there is an extra exception type in the raises clause of the resolve_str operation: AlreadyBound
In the absence of a Naming Service RTF carry out the following to resolve this issue: 1. In formal/01-02-65, page A-3, delete the resolve_context() operation from the IDL. 2. In formal/01-02-65, page A-3, delete the AlreadyBound exception from the raises clause of resolve_str(). 3. formal/98-10-19.idl contains old IDL. Republish formal/98-10-19.idl as as new document, with the correct IDL. A copy of that corrected IDL is attached to this message, as 98-10-19_new.idl. 4. Republish formal/98-10-01.txt and formal/98-10-01.idl. A copy of the correct IDL is attached to this message as 98-10-01_new.idl. 5. Remove the Names Library IDL from 98-10-01.idl. (This has been done in the attached 98-10-01_new.idl.) 6. Remove advertisements for formal/98-10-20.idl from the OMG server. (The Names Library no longer exists.) 7. Update the web pages to remove references to 98-10-20 and replace them with the new version of that document. The main page is http://www.omg.org/technology/documents/formal/corbaservices_omg_idl_text_files.htm, but there may be others that reference this document.
Incorrect example for recursive definitions which can span multiple levels. I and my IDL compiler are missing an identifier in the following example union for the last struct member.
union Bar; // Forward declaration typedef sequence<Bar> BarSeq; union Bar switch(long) { // Define forward-declared union case 0: long l_mem; case 1: struct Foo { double d_mem; BarSeq nested;// OK, recurse on enclosing type being defined } ???identifier missing???; };
I think it would be nice to mention something about code generation in section 19.5.22.2. People seem to either expect that the compiler will generate code for everything, or that it will generate code only for things that are not in included files. The following might help to clear this up: "Note that whether a particular IDL compiler generates code for included files is an implementation-specific issue. To support separate compilation, IDL compilers may not generate code for included files, or do so only if explicitly instructed."
The new text in 3.10.5 states: "Native type parameters are permitted only in operations of local interfaces or valuetypes". However, 11.4 states that: a) Servant is a native type, and b) that it is used on the POA::get_servant operation, and c) that POA is not a local interface (Taking POA as an arbitrary example here; other POA interfaces show the same problem). Does that mean that CORBA 2.5 will be inconsistent?
Incorporate changes implied in the adopted Components specification regarding local interfaces, in the process explicitly declaring the interfaces that contain operations passing native parameters as local, thus resolving this issue
What happens when someone attempts to set the mode attribute while not
adhering to the restrictions spelled out?
We should say what happens if these conditions
aren't met. Furthermore, a oneway method can't have exceptions.
I suggest:
* add a new row to the BAD_PARAM block in Table 10-1 (p.10-10):
Exception Minor Code Explanation
BAD_PARAM N Attempt to define a oneway
operation with non-void result,
out or inout parameters or
exceptions
* Add a similar entry to table 4.3 (p.4-61).
* Change the last para of 10.5.22.2 to read:
"The mode attribute can be set to OP_ONEWAY only if the result is
TC_void, all elements of params have a mode of PARAM_IN, and the
list of exceptions is empty. If the mode is set to OP_ONEWAY
when these conditions do not hold, a BAD_PARAM exception is
raised with minor code N."
This is perhaps rather large to be a friendly ammendment. I'm
happy to vote YES to the current resolution, which is still a
useful change, and raise this for next time. I can't discuss
further in this round, as I'm on vacation for a week from this
evening.
We should say what happens if these conditions aren't met. Furthermore, a oneway method can't have exceptions. So the solution must depend on standard system exceptions. Make the changes shown below to resolve this issue
Section 4.5.3.2 says: <ObjectURL> can be any of the URL schemes supported by CORBA::ORB::string_to_object (Sections 13.6.6 to 13.6.7 CORBA 2.3 Specification). Couple of problems w/ this. Shouldn't the reference be Section 13.6.10 of this spec. Also, the ObjectURL specifications in chapter 13 include a "rir" protocol which obviously makes no sense for ORBInitRef. Proposal: Replace first sentence of last paragraph of section 4.5.3.2 from: <ObjectURL> can be any of the URL schemes supported by CORBA::ORB::string_to_object (Sections 13.6.6 to 13.6.7 CORBA 2.3 Specification). to <ObjectURL> can be any of the URL schemes supported by CORBA::ORB::string_to_object (Section 13.6.10), with the exception of the corbaloc URL scheme with the rir protocol (i.e. corbaloc:rir:...).
The second paragraph of "3.10.1.7 Any Type" uses a cross-reference to explain the concept of the TypeCode in an Any value. This cross-reference refers to section 3.10, which is useless. Suggestion: Change this cross-reference to read as follows: '(see Section 10.7, "Type Codes", on page 10-51)'
"This indicates that an object reference denotes an existing object, but that the object does not support the operation that was invoked." This text does not specify a minor code nor a completion status. Section 11.3.4.1 (last paragraph) says: "If the ServantManager returns the wrong type of Servant, it is indeterminate when that error is detected. It is likely to result in a BAD_OPERATION with standard minor code 5 or MARSHAL exception at the time of method invocation." This implies that 4.11.3.13 should specify a '5' for the minor code. A specific minor code for this case is necessary since BAD_OPERATION may be raised in other contexts (e.g., IDL->Java mapping for union, Any, any extraction, ...). I am not sure why it says '5' in 4.11.3.13. Is this minor code specified somewhere else that I'm missing? Assuming that this is underspecified I would suggest: 1. assigning a minor code for the case discussed in 4.11.3.13, 2. making sure that 11.3.4.1 is in sync with that assignment, 3. specifying a completion status of COMPLETED_NO (since there is no way anything could be completed since the call never makes it out of the skeleton into the servant).
Currently there are no minor codes defined for BAD_OPERATION. In order to actually assign a minor code for this case make the changes shown below. [Will it actually be possible to determine the root cause when the problem is discovered at some indeterminate time with sufficient accuracy to actually be able to use this minor code?]
the current way of dealing with POAManager objects is less than satisfactory.
Consider:
interface POA {
// ...
POA create_POA(
in string adapter_name,
in POAManager a_POAManager,
in CORBA::PolicyList policies
) raises(AdapteraAlreadyExists, InvalidPolicy);
readonly attribute POAManager the_POAManager;
};
The problem here is twofold:
- There is no way to get at the list of all existing POA managers,
at least not easily; I have to either keep a list myself,
or I have to traverse the POA tree and build the list as I go.
- POA managers have no identity. There is no name or other piece
of state that would allow me to distinguish one POA manager from
another.
The second problem is the more serious one because POA managers are used
to control the behavior of one or more transport endpoints. Most ORBs
permit configuration control over transports. For example, it is usually
possible to configure things such as which protocols/transports should
be associated with a POA manager, how many protocols/transports should
be associated, at what address/port the transport controlled by a
POA manager should listen for requests, what timeouts to apply, etc, etc...
Currently, ORBs have to resort to proprietary means to attach such
configuration information. For example, in ORBacus, we use a proprietary
POA manager factory that permits a name to be attached to a POA manager.
That name then is used as a hook to attach configuration information
to POA managers, so we can do things like configure port numbers, etc.
I'd like to improve the spec such that it becomes possible to control
identity for POA managers through a standard API. The thoughts are:
- Add a POAManagerFactory interface that allows
- creation of POA managers
- listing of existing POA managers
- searching for POA managers by name
- Add an id() accessor to POAManager that returns the name
For creation of POA managers, a CORBA::PolicyList can be passed into
the call in addition to the POA manager name. That policy list would permit
configuration of POA managers through a defined API (even though the
actual policies that apply would still be proprietary).
These changes would be completely backward-compatible, so no existing
code breaks.
There appears to be general consensus that this is a good idea The following changes are needed to make it happen Revised Text:
"If a ServantManager returns a null Servant (or the equivalent in a language mapping) as the result of an incarnate() or preinvoke() operation, the POA will return the OBJ_ADAPTER system exception with standard minor code 3 as the result of the request." Should that be minor code 2 rather than 3? I couldn't find any other reference to OBJ_ADAPTER minor code 2 and the description makes more sense for this condition.
on page 3-23 of section 3.7.6.1, first bullet point, we find: Local types cannot be marshaled and references to local objects cannot be converted to strings. Any attempt to marshal a local object, such as via an unconstrained base interface, as an Object, or as the contents of an any, or to pass a local object to ORB::object_to_string, shall result in a MARSHAL system exception with OMG minor code 2. ^^^^^^^^^^^^^^^^ However, the minor code table, page 4-59, section 4.11.4 shows: MARSHAL 1 Unable to locate value factory. 2 ServerRequest::set_result called before ServerRequest::ctx when the operation IDL contains a context clause. 3 NVList passed to ServerRequest::arguments does not describe all parameters passed by client. 4 Attempt to marshal Local object. This is inconsisent -- the text requires minor code 2, but the table requires minor code 4. I would suggest to update the first bullet of 3.7.6.1 to require minor code 4, in line with what is shown in the table.
On page 22-6, we say for SYNC_WITH_SERVER: For a server using a POA, the reply would be sent after invoking any ServantManager, but before delivering the request to the target Servant. What's the motivation for this? Why wait that long? The ServantManager may still fail to return a servant for the request, meaning that the ORB might as well acknowledge the request before the ServantManager is called without losing anything. Also, as specified, the receiving ORB has to first run any adapter activators. Again, there doesn't seem any point in waiting this long. Why can't the receiving ORB simply acknowledge the request as soon as it has read the request header off the wire?
The following from the CORBA 2.4.1 specification. 3.2.5.2 Character Literals A character literal is one or more characters enclosed in single quotes, as in x. Character literals have type char. A character is an 8-bit quantity with a numerical value between 0 and 255 (decimal). 3.2.5.4 String Literals A string literal is a sequence of characters (as defined in Section 3.2.5.2, Character Literals, on page 3-9) surrounded by double quotes, as in .... The above statements together implies that a string literal may contain embedded NULL characters. That is incorrect. The definition of string literals must explicitly eliminate NULL. Proposal: Revised text: Section 3.2.5.4 String Literals replace this first paragraph A string literal is a sequence of characters (as defined in Section 3.2.5.2, Character Literals, on page 3-9) surrounded by double quotes, as in .... with A string literal is a sequence of characters (as defined in Section 3.2.5.2, Character Literals, on page 3-9), with the exception of the character with numeric value 0, surrounded by double quotes, as in ....
Section 4.3.5.1 non_existent last paragraph says: Probing for object non-existence may require contacting the ORB that implements the target object. Such an attempt may fail at either the local or the remote end. If non-existent cannot make a reliable determination of object existence due to failure, it raises an exception in the calling application code. This enables the application to distinguish among the true, false, and indeterminate cases. This does not define what exception gets thrown in the indeterminate case. I picked TRANSIENT, but COMM_FAILURE or NO_RESPONSE may also be valid choices. Proposal: Change the sentence in last paragraph of section 4.3.5.1: If non-existent cannot make a reliable determination of object existence due to failure, it raises an exception in the calling application code. to: If non-existent cannot make a reliable determination of object existence due to failure, it raises a TRANSIENT with XX minor code in the calling application code.
The language in the spec is already quite clear and gives the freedom to the implementor to give as much specific information as possible. It would be inappropriate to tie the implementors hands to require returning just the TRANSIENT exception
CORBA 2.4.1 final, Section 7.2.1 (create_request), page 7-7, last paragraph reads: "If the name of an implicit operation that is not invocable through DII is passed to create_request with a "_" prepended, create_request shall raise a BAD_PARAM standard system exception". This does not specifies the minor code for the exception.
Allocate a new minor code for BAD_PARAM to cover this case and update section 7.2.1 with info about using it. In addition, incorporate the boilerplate language in chapter 4 as suggested in the archive covering cases where specific minor code has not been standardized yet.
The UML diagram on page 11-49 uses "the_manager" in two places. This should be "the_POAManager". In one place, it uses the attribute "the_servant_manager". No such attribute exists.
the text for get_interface() says: An operation on the object reference, get_interface, returns an object in the Interface Repository, which provides type information that may be useful to a program. See the Interface Repository chapter for a definition of operations on the Interface Repository. The implementation of this operation may involve contacting the ORB that implements the target object. This does not say what should happen if I call _get_interface() and - the interface repository isn't running, - the interface repository is running and can be reached, but doesn't contain an entry for the object's interface. Looking at the INTF_REPOS exception, we have: An ORB raises this exception if it cannot reach the interface repository, or some other failure relating to the interface repository is detected. This would indicate that, if the repository isn't running, the client should get INTF_REPOS. However, we have no idea what should happen if the repository is in fine shape, but no entry exists for the interface. Since an unpopulated interface repository is very much the same thing as no interface repository at all, I would like to flag both scenarios as an error. Proposal: add the following sentence to the end of 4.11.3.22: If the interface repository is not available, get_interface() raises INTF_REPOS with minor code 1. If the interface repository does not contain an entry for the object's (most derived) interface, get_interface() raises INTF_REPOS with minor code 2. Update the minor code table in 4.11.4 accordingly.
Please take a look at the resolution of issues 4285 and 4306 in > ptc/2001-06-08 - the RTF report that is up for recommendation to adopt > at this upcoming meeting, and see if they do not fix these problems. > 4285 fixes the BAD_OPERATION problem most definitely. 4306 seems to fix > the OBJ_ADAPTER problem too, although slightly differently from how you > suggest. If these fixes address the problem that you raise in your > message, could you please ask Juergen to not create an issue?I didn't CC issues, so I don't think Juergen will create an issue (at least, that was the intent). My apologies for the duplication. However, looking at 4285 once again, I think there may be a problem: In order to return something that means "ServantManager returned wrong servant type", I think the ORB core has to insert an active check at the point where the servant manager returns. If it doesn't, it will either get an unmarshaling error or return a BAD_OPERATION exception with some other minor code when it detects that the operation isn't in the function pointer table for the servant. In the latter case, the ORB won't know anymore *why* the operation is missing (for example, it could also be missing because the client used the DII to invoke a non-existent operation.) I am also not sure whether BAD_OPERATION is really the correct exception to use. To me, BAD_OPERATION tells the client "you invoked an operation that doesn't exist". If we give this exception to the client when it invokes an operation that's perfectly good, that's highly misleading because the actual problem isn't with the client, but with the servant manager. So, I think that using OBJ_ADAPTER, as I suggested, would be better. For the resolution to 4306, I think we also have something that is suboptimal. That's because minor code 2 say "Servant not found" in table 4-3. But I don't see how this is possible. Basically, a servant manager isn't allowed to return a null servant. If it can't find the servant, it's supposed to throw a system exception. So, a servant manager that returns null is simply broken and needs to be recoded. 4306 (by using "Servant not found" as the explanation of minor code 2) is misleading, because that condition simply can't happen. So, without trying to create a procedural mess, could we reconsider the resolution to these two issues, maybe for the next vote?
Steve's and my book contains a bit of code that pretty-prints a TypeCode. (See page 704ff, in particular, 709-711.) No big deal -- just write a recursive function that does a depth-first traversal of a TypeCode tree and prints things out, except for one thing: recursive types. For recursive types, the code has to be careful not to get trapped in infinite recursion. In essence, this means that the pretty-printer has to remember which TypeCodes it has already seen and end the recursion if it gets to a TypeCode that was printed previously. This is where we run into problems because there is no legal way to do this: - I cannot rely on the repository ID in the TypeCode to determine TypeCode identity because the repository ID for structs and unions is optional prior to GIOP 1.2, but recursion happens via structs and unions. (A GIOP 1.2 implementation may interoperate with a GIOP 1.0 or 1.1 implementation and still end up sending TypeCodes without repository IDs.) - The code in the book uses is_equivalent() to determine whether it has seen a TypeCode previously. However, doing this is completely illegal (even though it happens to work with most ORBs) because: - is_equivalent() does not provide object identity. - TypeCode is a pseudo-object, and pseudo-objects do not inherit from CORBA object. This means that TypeCode doesn't even *have* an is_equivalent() operation that I could call. So, as far as I can see, there is no compliant way to reliably and portably determine TypeCode identity and, as a result, I can't ever reliably parse a TypeCode... I can see several solutions for this problem, all with different drawbacks: 1) Add an identity() operation of some kind to TypeCode. An ORB that receives a TypeCode would have to make sure that it generates a unique ID for each TypeCode. But that's not all that easy to implement -- in particular, if we have an older TypeCode where all the optional bits are missing, we can't reliably establish object identity for a TypeCode. (Only structural comparison is possible.) 2) Add an identity() operation to TypeCode, but have the TypeCode's identity generated at the sending end instead of the receiving end. Major drawbacks: the identity would have to large because it needs to be globally unique (e.g. a UUID) and it would change the marshaling of TypeCodes. 3) Add is_equivalent() and hash() operations to TypeCode. This might break existing ORB implementations because a lot of ORBs seem to inherit from Object for TypeCode and other PIDL objects, even though they shouldn't. 4) Make PIDL objects implicitly inherit from CORBA::Object. Note that making the repository ID mandatory is impossible because we can't legislate for existing GIOP 1.0 or 1.1 implementations... On a related note, we seem to have further problems with the idea that PIDL objects don't inherit from CORBA::Object. For example, in the C++ mapping, pseudo-objects such as TypeCode, ORB, etc. can be passed as Object_ptr (for example, to CORBA::is_nil()). This really means that the C++ mapping (and possible mappings for other languages) are completely in conflict with the core spec... My feeling is that option 4 is really the least-intrusive one. But I'm not sure that I fully understand all the ramifications of making that change.
There appears to be significant discomfort about the ramifications of making any of the proposed changes. So it would be appropriate to close this issue no change
the terms "pseudo-object", "pseudo-interface", and "PIDL" appear in many places in the spec. However, there does not appear to be a definition of what these things actually are anywhere in the spec. Now, for many years now, I've been telling people that PIDL objects differ from normal ones in the following ways: - They don't inherit from Object. - They can't be invoked via the DII. - They don't have definitions in the IFR. - They can't be passed as arguments to remote operations (except for TypeCode). - They may have special mapping rules. I know that, once upon a time, when I first wrote these points into a CORBA training course, I didn't just make them up -- I found them in the spec. However, I'm damned if I can find them now. I looked in the 2.0 spec as well as the 2.4.2 spec to no avail. Can someone help me out? At any rate, we should add the definition somewhere because, write now, we have lots of free-floating terms in the spec. On a related note, by searching for "pseudo", I found a few places where it is stated that "pseudo-objects do not have object references". That seems to be wrong. After all, we pass these things across (local) interfaces by reference (instead of by value) and, at the language mapping level, pseudo-objects have references that are indistinguishable from any other reference. We should correct this.
There appeared to be preponderance of opinion that while pseudo objects are accessed through implementation language references and even some of the CORBA::Object operations may be available from some of them, that does not imply that they are accessible through a CORBA object reference. The only definition of PIDL that covers it all is that the are things of which the interface is specified using an IDL-like language and they do not follow all of the rules that would make them a full-fledged CORBA object or a full-fledged CORBA local object. So unless there is a specific suggested change this issue should be closed no change
For local interfaces, we seem to have internal inconsistencies in the spec. For one, it is not clear whether or not a local interface implicitly inherits from Object. There is one sentence in the spec that seems to imply that there *is* implicit inheritance from object, on page 3-23 of the 2.5 draft (http://doc.omg.org/ptc/1-6-10): Any attempt to marshal a local object, such as via an unconstrained base interface, as an Object, or as the contents of an any, or to pass a local object to ORB::object_to_string, shall result in a MARSHAL system exception with OMG minor code 4. This implies that I can at least try to pass local object as CORBA::Object, which implies that local interfaces do indeed implicitly inherit from Object. But then, a bit further down, it says: The is_a, get_interface, get_domain_managers, get_policy, get_client_policy, set_policy_overrides, get_policy_overrides, and validate_connection pseudo-operations, and any DII support pseudo-operations, may result in a NO_IMPLEMENT system exception with minor code 3 when invoked on a reference to a local object. "*May* result in a NO_IMPLEMENT system exception"? I would suggest "shall"! But, more seriously, I can't call is_a() on a local interface. In turn, that seems to imply that I can't narrow a local interface either, but narrowing is clearly necessary in the presence of inheritance for local interfaces. It seems that local interfaces *must* inherit from Object. After all, it would be difficult to see, for example, how resolve_initial_references can return a reference to the Root POA if it were otherwise... But then, if local interfaces *do* inherit from Object, It doesn't make sense to prohibit calling is_a() on them. Related to that then is the question of "What is the repository ID of a local interface?" Given that they can be narrowed, it would seem that they must have repository IDs. (Although, you could argue that narrowing is to be achieved via some mechanism other than repository IDs -- that would also permit is_a() not to be supported and would make narrowing an issue that is specific to each language mapping.) But the inheritance issue seems serious -- if something doesn't inherit from Object, I can't return or pass it as an Object, but we are doing just that for local objects. I think this will require some careful thought. We don't want to find ourselves in yet another maze of twisty little passages, all different, as we did with pseudo-objects...
Resolution: Clarify that CORBA::LocalObject is derived from CORBA::Object. This clearly was intended to be so as is bvious from looking at the C++ and Java language mappings of local objects.
CORBA 2.4.2 (01-02-01.pdf) 4.2.3.4 shutdown (relevant portion): "If the wait_for_completion parameter is TRUE, this operation blocks until the shut down is complete. If an application does this in a thread that is currently servicing an invocation, the BAD_INV_ORDER system exception will be raised with the OMG minor code 3, since blocking would result in a deadlock." But does this mean that things will be as if the operation has not been called (suggested by the name of the exception raised?), or will they be as if the operation had been called with wait_for_completion FALSE (seems more appropriate)? Or should the implementation decide, and should it just use an appropriate completion code? In this case, is COMPLETION_MAYBE allowed? Letting the implementation decide puts a higher burden on the developer, though, if s/he wants to write portable code, so that developer may decide to just program for the current implementation... This question has additional relevance for me because I'm implementing an ORB.
Please have a look at the news article below. Basically, the problem is
that we don't say in the spec what has to happen if I try to give
conflicting prefixes/IDs/versions to a module (which can happen if a module
is reopened).
My feeling is that we should deal with this the same way as for forward
declarations, that is, force the compiler to emit a diagnostic. I think
we should also add a note that this can't be enforced by the compiler
under all circumstances because of separate compilation.
> Orbacus distribution contains following IDL file.
>
> > #pragma prefix "omg.org"
> >
> > module CosNaming
> > {
> > typedef string Istring;
> >
> > struct NameComponent
> > {
> > Istring id;
> > Istring kind;
> > };
> > };
> >
> > #pragma prefix "ooc.com"
> >
> > module CosNaming
> > {
> > typedef string Ostring;
> > };
>
> And here the error message of IDL to Visual Basic compiler.
>
> orbacusnaming.idl:16(8): Attempt to assign a different prefix
> to a forward-declared identifier
> orbacusnaming.idl:3(8): Position of the first identifier definition
The error message is misleading becuase there is no forward-declared
identifier here. But the compiler has a point -- something strange is
going on there...
> I look in the CORBA specification and found that modules do have
> repository ids.
Absolutely.
> > Forward-declared constructs (interfaces, value types, structures,
> > and unions) must have the same prefix in effect wherever
> > they appear. Attempts to assign conflicting prefixes
> > to a forward-declared construct result in a compile-time
> > diagnostic. For example:
> [...]
>
> And what about reopened modules?
This part of the spec simply doesn't apply because it talks about
forward-declared things only.
> Which repository id do they
> have if someone use different prefix statements? I think
> they can have only one because the IFR of CORBA allows only
> one (if the repository version is equal).
Yes. The spec isn't really clear on this point. Here is your example
once more, simplified to the bare bones:
#pragma prefix "X"
module M {
typedef string foo;
};
#pragma prefix "Y"
module M {
typedef string var;
};
The spec simply does not address this problem, so we have a hole. Thinking
about it, there are two possible interpretations:
1) Module M gets a prefix "X" initially. Then, when the prefix
changes to "Y" and the compiler sees M for the second time,
it could just ignore the prefix for M because M has the prefix
"X" already.
2) The compiler could notice that M previously got prefix "X"
and then complain when it sees M for the second time because
it would get a conflicting prefix.
For forward-declared things, the spec applies the philosophy that
the prefixes must not change. Seeing that a reopened module is somewhat
similar to a forward declaration (because the same definition can be seen
more than once), I'd be inclined to amend the spec to say that the prefix
for a module must not change.
For cases where the compiler can actually detect this, we can even force
a diagnostic. However, as for forward-declared things, this is not always
detectable by the compiler. In particular, if the reopened module is
reopened in different source files and the two source files are compiled
separately, there is no way for the compiler to detect that the module
is getting a different prefix in each source file. If the generated code
from the two files is linked into the same binary, you should at least
get a multiple definition error. But if the code for the two files ends
up in different executables, there is no way to detect the error at all
and you will get strange things happening at run time.
As far as the ORBAcus IDL is concerned, I think it needs fixing. The second
prefix pragma should be inside the module, to avoid the conflict:
#pragma prefix "omg.org"
module CosNaming
{
typedef string Istring;
struct NameComponent
{
Istring id;
Istring kind;
};
};
module CosNaming
{
#pragma prefix "ooc.com"
typedef string Ostring;
};
> Is my IDL2VB compiler again buggy or the Orbacus IDL file
> or the CORBA specification not clear?
Well, a little bit of all three :-) I'll raise an issue with the core RTF.
> I recently solve all founded bugs in IDL2VB and it compiles now
> all examples of syntax chapter in CORBA spec and find
> all errors. CORBA is to difficult for humans...
That's why we use compilers for IDL instead of humans :-)
There is no mapping for fixed types in the COM/CORBA mapping. Why has this been omitted? Is there a submission underway?
1. Mapping for fixed type is not defined because fixed type in IDL did not exist when COM/CORBA mapping was adopted. 2. There is no submission under way to address this.
in the absence of an RTF for the time service, I'm sending this to the
core RTF. (You could argue that this is a core issue anyway, since
the core depends on the time service for messaging.)
What is the interpretation of the time and tdf fields in a UtcT?
The spec shows:
struct UtcT {
TimeT time; // 8 octets
unsigned long inacclo; // 4 octets
unsigned short inacchi; // 2 octets
TdfT tdf; // 2 octets
// total 16 octets.
};
For TimeT, the spec says:
TimeT represents a single time value, which is 64 bits in size, and
holds the number of 100 nanoseconds that have passed since the base
time. For absolute time the base is 15 October 1582 00:00.
For UtcT, the spec says:
UtcT defines the structure of the time value that is used
universally in this service. The basic value of time is of type
TimeT that is held in the time field. Whether a UtcT structure
is holding a relative or absolute time is determined by its history.
[...]
The tdf field holds time zone information. Implementation must
place the time displacement factor for the local time zone in this
field whenever they create a UTO.
The proposed replacement text below need to be applied to both the original Time Service and the Enhnced View of Time Specification ptc/00-04-02
The spec doesn't say whether or not resolve_initial_references() is allowed to return nil. Clearly, it doesn't make sense for it to do that -- we should say so in the spec.
resolve_initial_references was never intended to return a Nil reference. It was always supposed to raise a designated exception in case no object reference was found matching the search criteria. Make ths explicit.
My issue is the ambiguity surrounding the following statement: "If the POA has the SYSTEM_ID policy and it detects that the Object Id value was not generated by the system or for this POA, the activate_object_with_id operation may raise the BAD_PARAM system exception." So the spec says the operation may raise the BAD_PARAM exception, but doesn't have to. It would be nice if the spec were to clarify the exact behaviour that should be followed to remove ambiguity, because I'm finding some ORB implementations are throwing a BAD_PARAM exception whereas others are not raising an error condition at all.
Since POAs in general do not have persistent memory it is impossible for them to verify the correctness of an ObjectId. That is why the word "may" was used instead of "shall". Any ORB that can actually do the necessary verification can raise that exception, but need not.
Proposal: Section 3.7.6.1: Change the bullet that says - The is_a, get_interface, get_domain_managers, get_policy, get_client_policy, set_policy_overrides, get_policy_overrides, and validate_connection pseudo-operations, and any DII support pseudo-operations, may result in a NO_IMPLEMENT system exception with minor code 3 when invoked on a reference to a local object. to: - The get_interface, get_domain_managers, get_policy, get_client_policy, set_policy_overrides, get_policy_overrides, and validate_connection pseudo-operations, and any DII support pseudo-operations, may result in a NO_IMPLEMENT system exception with minor code 3 when invoked on a reference to a local object.
In chapter 11, section 11.3.8.19, the "raises (WrongPolicy)" clause has been omitted from the specification of the create_reference_with_id operation. (This exception clause is included in the IDL definition in section 11.4.)
Already fixed in 2.5 formal/01-09-15 by removing raises clause from section 11.4.
a few problems with IDL contexts:
1) On page 4-32, with have:
"CORBA::CTX_DELETE_DESCENDENTS deletes the indicated context
^^^^^^^^^^^
object and all of its descendent context objects, as well."
^^^^^^^^^^
The standard system exception BAD_PARAM is raised if there are one
or more child context objects and the CTX_DELETE_DESCENDENTS
^^^^^^^^^^^
flag was not set."
That's a bit embarrassing because the correct spelling is "descendants",
not "descendents".
2) For the get_values() operation, we have:
"Scope indicates the context object level at which to initiate the
search for the specified properties (e.g. "_USER", "_SYSTEM"). If
the property is not found at the indicated level, the search
continues up the context object tree until a match is found
or all context objects in the chain have been exhausted."
This does not say exactly how this is meant to work. I assume that
the idea is to start at the current context object, checking whether its
name matches the start_scope parameter. If it does, start the search here;
otherwise, go up a level and repeat. Once a context object has been found
with a matching name, then start looking for the properties and collect
them together, with lower level settings overriding higher level settings,
until either all property values have been determined or we run out of
context objects.
If this is the intended interpretation, the words in the spec are a long
way from actually expressing that...
3) Context objects have names. Those names are used to control the behavior
of get_values(). However, we have two problems:
- The top-level context object does not have a defined name, so
I can't specify its name for get_values().
- Once I've given a context object a name, I can't get it back out.
(Yet another case where I am forced to give identity to an object
only to be denied any opportunity of ever asking what that
identity is...)
4) For create_child(), what happens if I:
- specify a name that doesn't look like an IDL identifier?
- call create_child() twice with the same name on the same
parent context?
5) For delete_values(), what is the behavior if the specified property
does not exist?
6) For delete(), what is the minor code of the BAD_PARAM exception
if I don't set the CTX_DELETE_DSCENDENTS [sic] flag and the context
has child contexts?
7) For get_values(), what does it mean to "omit" the scope name? The only
way to omit it, as far as I can see, is to pass the empty string. If so,
that should be stated.
8) For get_values(), what exception is raised if the specified scope name
is not found?
9) get_values() and delete() accept a Flags parameter. It is not specified
how to *not* set a flag (only what it may be set to). Given that Flags
is an unsigned long, presumably I have to pass zero to indicate that a
flag is not set. However, this is not specified.
10) For get_values(), what is the minor code of the BAD_CONTEXT system
exception if a property isn't found? Why a BAD_CONTEXT exception? Why
an exception at all (instead of returning an empty sequence)?
11) For get_values(), it says:
The NO_MEMORY exception is raised if dynamic memory allocation fails.
This sentence is utterly redundant.
12) For get_values(), we have:
The values returned may be freed by a call to the list free operation.
What "list free operation"? There is no such operation on NVList.
There is CORBA::free, but that is specific to the C mapping.
13) For get_values(), we have:
"Scope indicates the context object level at which to initiate the
search for the specified properties (e.g. "_USER", "_SYSTEM")."
However, for create_child(), we have:
"Context object names follow the rules for OMG IDL identifiers."
"_USER" and "_SYSTEM" are not valid IDL identifiers (at least they were
not at the time this was written, and you can argue that they still are
not valid IDL identifiers because the underscore is stripped immediately
by the IDL compiler).
14) What happens if I call get_default_context() multiple times? Presumably,
I will get a reference to the same single context object?
15) In the first para of page 4-29, it says:
"... although a specified property may have no value associated
with it"
This would appear to be impossible. If the property itself exists,
it always has a value, namely a string. The closest thing to "no value"
would appear to be the empty string (or a property doesn't exist at all).
16) "An operation definition may contain a clause specifying those context
properties that may be of interest to a particular operation. These
context properties comprise the minimum set of properties that will
be propagated to the server's environment..."
So, what happens if I have
interface I {
void op() context("C");
};
and no property "C" exists in the context object passed by the client?
Does this mean that the call will be made, but no property "C" will
be available to the server? (I don't think so, because that would
contradict the above words about "minimum set of properties that *will*
be propagated")
Or does it mean that the call will be made, but that the value of "C"
will be the empty string?
Or does it mean that the call will be refused because the caller has
not supplied the required properties? If so, what exception is be
raised?
17) "Context property names (which are strings) *typically* have the
form of an OMG IDL identifier, or a series of OMG IDL identifiers
separated by periods."
This is in conflict with the words about property name syntax elsewhere.
This is a total mess. One interface with six operations, and about a dozen
bugs. Impressive! :-(
In the section describing DynUnion operations, the restatement of the IDL definition of the get_discriminator() operation includes a raises (InvalidValue) clause. This exception is not discussed in the paragraph describing the operation, nor does it appear in the IDL definintion of this operation anywhere else in the chapter.
Resolve by removing the InvalidValue exception from the definition of get_discriminator. it shouldn't be there. (The IDL in section 9.2 correctly shows get_discriminator() without a raises clause.)
The IDL specification for the include directive follows the ANSI C++ specification. This means that the include statement is replaced by the included file's text. The C++ mapping then calls for the generation of stubs and skeletons for the now inline included interfaces. But if the same IDL file, for example CosTransactions.idl, is included in multiple compilation units, the included interfaces become multiply defined. It's like including C++ class definitions rather than class declarations in a C++ program. The problem arises because IDL language mappings specify implementation. Wrapping include directives in different modules has the undesirable effect of requiring multiple implementations of the same operations that differ only in their qualified names. The IDL specification should provide a specification similar to the Java language import statement. That is, the IDL include directive should introduce declarations into the namespace but not implementation via the language. mappings.
This issue becomes moot in CORBA 3.0 IDL in which "#include" is deprecated and replaced by "import" in CORBA 3.0 IDL. A clarification of this has been attempted i the past but to no avail, because there are too many IDL compilers that handle this differently. Therefore the best way to deal with this is to let the "#include" bugs rest in peace, and move away from "#include" to "import". If the same problem exists in the specification of "import" let us raise a different issue and fix it in "import" only.
The set_length operation of the DynSequence interface is defined as: void set_length(in unsigned long len) raises(InvalidValue); in the IDL but is defined as: void set_length(in unsigned long len) raises(TypeMismatch, InvalidValue); in the discussion that follows the IDL in section 9.2.8. The TypeMismatch exception appears inconsistently in the definition of the operation.
Resolution: Remove the TypeMismatch from the raises clause in the discussion of the operation.
The IDL for ORB::resolve_initial_references declares that it may throw the standard user exception InvalidName, however the Specification does not specify when, if ever the ORB may do so. Two cases of interest are an unknown name such as a misspelled well-known name and an unimplemented well-known name such as Trading Service.
Close this without change because the proposal that has already been recommended for 4532 clarifies this already: if a token is not configured, or configured with a nil object reference, resolve_initial_references() throws invalid name. The return value from resolve_initial_references() is configurable, so there is no point in distinguishing between well-known (but not available) and unknown tokens. (All tokens are potentially well-known.) Revised Text:
The Messaging Programming Model introduces implied interfaces. These
interfaces have the same name as the original interface, but with an
AMI_ prefix.
What happens if the original interface is in a module? Will AMI_ be
prepended to the unqualified name, or to the absolute name? E.g.
module Stock {
interface StockManager { ... };
};
In this case, will the absolute name of the ReplyHandler be
::AMI_Stock::StockManagerHandler, or ::Stock::AMI_StockManagerHandler ?
All examples in the spec (formal/2001-09-26) are outside any module.
Since it never talks about absolute names, but only of names, it might
indicate that it should be the latter (AMI_ prepended to the unquali-
fied name).
However, the precedent for prefixes, the POA, always prepends the POA_
prefix to the absolute name, and I would find it confusing if the AMI_
prefix was used differently.
Resolution: It was always intended that the prefix be applied to the local i.e. unqualified name. Otherwise, modules need to get created on the fly, and that was not the intention. So in the above example, the correct name is ::Stock::AMI_StockManagerHandler.
In the Corba 2.5 spec, section 7.1.1 claims to define the "NVList structure", but doesn't. Section 7.5 defines the "NVList interface". Is this a typo in 7.1.1, then? This is a bit confusing. Is NVList a struct, or an interface? Inquiring minds want to know :-)
NVList is a pseudo interface and NamedValue is a struct. To clarify, remove references to NVList from section 7.1.1 and fix the introductory paragraph of the "List Operations" section 7.5.
In formal/01-11-01.txt, the second occurrence of create_native reads NativeDef create_native( in RepositoryId id, in Identifier name, in VersionSpec version, ); This is incorrect; the comma after version must be removed.
Fix issue as suggested, by removing the extraneous comma.
The Java RTF recently passed a resolution to fix some problems with the
use of portable interceptors with the co-located call optimization. This
resolution introduced a new abstract class ServantObjectExt that extends
org.omg.CORBA.portable.ServantObject with methods for reporting
normal and exceptional completion of the co-located call.
When we look at the issue of mixed versions of stubs and ORBs with
this change, there is one case that is particularly interesting:
an old stub (uses only ServantObject) with a new ORB (provides
ServantObjectExt). In this case, the ORB can detect that an old
stub was used, because neither one of the two new methods was called.
However, this leaves the ORB with no way to report the reply status
correctly in the RequestInfo::reply_status attribute.
To handle this special case, I propose that we add a new value of
UNKNOWN for the reply status. This will only be used if the ORB
cannot determine the reply status of an operation. This occurs
with any co-located optimized call with the existing Java mapping.
With the passage of the resolution to issue 4701, the scope of
this occurence is smaller but still possible.
Revised text:
In section 21.3.12.10, add after PortableInterceptor::TRANSPORT_RETRY:
PortableInterceptor::UNKNOWN
In section 21.3.12.10, replace the third bullet under client with:
Within the receive_other interception point, this attribute will
be any of: SUCCESSFUL, LOCATION_FORWARD, TRANSPORT_RETRY, or UNKNOWN.
SUCCESSFUL means an asynchronous request returned successfully.
LOCATION_FORWARD means that a reply came back with LOCATION_FORWARD
as its status. TRANSPORT_RETRY means that the transport mechanism
indicated a retry - a GIOP reply with a status of NEEDS_ADDRESSING_MODE,
for instance. UNKNOWN means that the ORB was unable to determine
the correct status. This can occur for example in the Java language
mapping when the optimized path for a co-located call is used.
In section 21.3.12.10, replace the third bullet under server with:
Within the send_other interception point, this attribute will
be any of: SUCCESSFUL, LOCATION_FORWARD, or UNKNOWN.
SUCCESSFUL means an asynchronous request returned successfully.
LOCATION_FORWARD means that a reply came back with LOCATION_FORWARD
as its status. UNKNOWN means that the ORB was unable to determine
the correct status. This can occur for example in the Java language
mapping when the optimized path for a co-located call is used.
In section 21.10, add the following after const ReplyStatus TRANSPORT_RETRY = 4:
const ReplyStatus UNKNOWN = 5;
Accept the proposed change based on the discussion above. Revised Text:
Valuetype initializers need exception declarations in order to provide complete mapping of Java declarations to IDL declarations in Java to IDL mapping. Discussion: This was discussed in te past and rejected because of the backward non-compatible changes required in the IFR. This time around.... the IFR changes are already part of the backward compatible changes maded in connection with the addition of exeptions to attributes etc in CCM in resolution to issue 3233. So all that is needed is change to one grammar rule and provision of language mappings. As the results of Components FTF is merged into Core to create CORBA Core 3.0 everything then falls into place to give us initializers with exceptions for valuetypes. Issue 3641 in Java-IDL RTF is handling the Java language mapping issue, and Simon is shepherding that. We need to create a C++ language mapping issue and resolve it with the obvious mapping in C++ (Michi?) Specfic text changes: All changes specified here relative to document ptc/01-06-10: 1. On page 3-13 change grammar production rule 23 to read: (23) <init_dcl> ::= factory <identifier> ( [ <init_param_decls> ] ) [ <raises_expr> ] ; instead of: (23) <init_dcl> ::= factory <identifier> ( [ <init_param_decls> ] ) ; 2. On page 3-26 in section 3.8.1.5 change grammar production rule 23 to read: (23) <init_dcl> ::= factory <identifier> ( [ <init_param_decls> ] ) [ <raises_expr> ] ; instead of: (23) <init_dcl> ::= factory <identifier> ( [ <init_param_decls> ] ) ;
The section concerning with the TypeCode interface was removed from the Interface Repository chapter into the ORB Interface chapter, but the Minimum CORBA chapter refers to it in the old place.