OMG CCM 4.0 — Spec Coverage

Spec: OMG CCM 4.0 (315 pages, OMG formal/06-04-01).

Audit item-by-item against the spec; each requirement with a spec quote + repo path + test path + status (done / partial / open / n/a).

Context: CCM 4.0 is the master spec behind AMI4CCM (see omg-ami4ccm-1.1.md) and DDS4CCM (see dds4ccm-1.1.md). It covers the Component Model (§6), CIDL (§7), the CCM Implementation Framework (§8 CIF), the Container Programming Model (§9), EJB integration (§10), the IFR metamodel (§11), the Lightweight CCM Profile (§13) and the Deployment PSM/IDL/XML (§14-§16). ZeroDDS implements this stack fully in pure Rust — including the CORBA ORB, the CCM container and the D&C subsystem that the container part of the spec builds on.

The §6 equivalent-IDL transformation also covers the migration path: old CCM-IDL files can be carried into pure-DDS worlds via equivalent IDL — with or without the full container stack. The Components::* core data types (CCMObject, Cookie, ConnectionDescription, etc.) are present as Rust models.

Implementation:


§1 Scope

§1 Scope Statement

Spec: §1, p. 1 (PDF) — “This specification defines: The syntax and semantics of a component model (Chapter 6) […] A language to describe the structure and state of component implementations (Chapter 7 CIDL) […] A programming model for constructing component implementations (Chapter 8) […] A runtime environment (Chapter 9) […] Interaction with EJB (Chapter 10) […] Meta-data for deployment (Chapter 14) […] A lightweight subset (Chapter 13).”

Repo: ZeroDDS covers: - §6 Component Model = equivalent IDL over the AST from crates/idl-parse/ + crates/idl-lower/. - §7 CIDL via crates/corba-ccm/src/cidl.rs. - §8 Programming Model via crates/corba-ccm-lib/. - §9 Runtime via crates/corba-ccm/src/container.rs. - §10 EJB interaction via crates/corba-ccm-ejb/. - §13 Lightweight Profile: equivalent-IDL filter in crates/ccm/src/lightweight.rs, profile restrictions in crates/corba-ccm/src/lwccm.rs. - §14 Deployment via crates/corba-dnc/. - conformance markers crates/corba-ccm/src/lib.rs::conformance.

Tests: crates/corba-ccm/src/lib.rs::conformance_tests::{ ccm_conformance_basic_level_marker_matches_spec, ccm_conformance_basic_level_java_marker_matches_spec, lightweight_ccm_level_marker_matches_spec, lwccm_restrictions_marker_matches_spec, lwccm_filter_marker_matches_spec, all_markers_are_distinct}.

Status: done — all sub-stacks present + conformance markers stated at the crate level.


§2 Conformance and Compliance

§2 Conformance Point 1: CORBA COS Vendor

Spec: §2 point 1 — Lifecycle/Transaction/Security changes.

Repo: spec points partly covered by service crates: - Lifecycle via crates/corba-ccm/src/lifecycle.rs (ReceptacleManager + Configurator + container state). - Transaction via crates/corba-ccm-ejb/src/tx.rs (TX marker + begin/commit/rollback hooks). - Security via crates/corba-csiv2/ (CSIv2 stack: SAS + GSSUP + TLS bind). - Naming as an additional COS service in crates/corba-cosnaming/. - Event as an additional COS service in crates/corba-cos-event/.

Tests: crates/corba-ccm/src/lifecycle.rs::tests::facet_lifetime_passes_when_alive, ::receptacle_simplex_connect_then_disconnect, ::configurator_set_get_roundtrip; crates/corba-ccm-ejb/src/tx.rs::tests::cos_to_jta_round_trip_for_all_states, ::begin_then_commit_succeeds; crates/corba-csiv2/src/sas.rs::tests::sas_msg_type_values_match_spec; crates/corba-cosnaming/src/context.rs::tests::bind_and_resolve_simple; crates/corba-cos-event/src/channel.rs::tests::push_fan_out_to_multiple_consumers, ::pull_supplier_dequeues_events.

Status: done — the three COS areas named in §2 point 1 (Lifecycle/Transaction/Security) are covered; further COS services (Naming, EventService) as a bonus.

§2 Conformance Point 2: CORBA Component Vendor (Basic/Lightweight)

Spec: §2 point 2 — Basic Level or Lightweight Profile.

Repo: equivalent IDL for components in crates/idl-parse/ + LwCCM filter in crates/ccm/src/lightweight.rs + container lifecycle in crates/corba-ccm/src/{container,lifecycle}.rs (ReceptacleManager, Configurator, generic-op skeletons) + ORB singleton in crates/corba-ccm/src/orb_core.rs::Orb.

Tests: crates/ccm/tests/equivalent_idl.rs::a_plain_component_inherits_ccmobject, ::provides_yields_a_provide_operation_returning_the_facet, ::uses_simplex_yields_connect_disconnect_and_get_connection, ::the_whole_trader_component_yields_every_operation_the_clauses_name; crates/corba-ccm/src/lifecycle.rs::tests::facet_lifetime_rejects_use_after_destroy, ::receptacle_multiplex_allows_multiple_connects; crates/corba-ccm/src/orb_core.rs::tests::orb_init_yields_running, ::orb_destroy_transitions_to_shutdown; crates/corba-ccm/src/lwccm.rs::tests::only_session_and_service_components_are_supported, ::the_lightweight_filter_reports_a_component_it_would_empty.

Status: done — IDL-3 aspects + container lifecycle + ORB stub layer covered.

§2 Conformance Point 3: Optional Extended Level

Spec: §2 point 3 — Extended Level (PSS + additional configurator/lifecycle features).

Repo: full wire-up via: - Persistent State Service via crates/corba-ccm/src/pss.rs (StorageHome + PssSession + Pid + TxHandle + PssTxStatus). Tx-aware store(pid, value) / remove(pid) write to a pending buffer; commit(tx) applies to the StorageHome, rollback(tx) discards. load(pid) is tx-aware (pending path on an active tx). - Configurator via crates/corba-ccm/src/lifecycle.rs::Configurator. - conformance marker corba-ccm::conformance::CCM_OPTIONAL_EXTENDED_LEVEL.

Tests: crates/corba-ccm/src/pss.rs::tests::* (13 tests, of which 4 tx-aware: pss_begin_commit_roundtrip_persists_pending_writes, pss_rollback_restores_prev_state, pss_load_after_store_in_tx_returns_pending_value, pss_tx_status_transitions_active_committed_rolledback) + crates/corba-ccm/src/lifecycle.rs::tests::configurator_* + cross-ref conformance-marker tests.

Status: done — full PSS tx lifecycle (begin/commit/rollback + pending buffer + tx-aware load/store/remove)..

§2 Conformance Point 4: Basic Level non-Java

Spec: §2 point 4 — IDL extensions + CIDL + container + XML D&C.

Repo: IDL extensions + CIDL in crates/idl-parse/ + crates/idl-lower/ + crates/corba-ccm/; container lifecycle in crates/corba-ccm/src/lifecycle.rs; XML D&C in crates/corba-ccm-lib/ + corba-dnc/; ORB stub layer (Lifecycle/Threading/Policy) in crates/corba-ccm/src/orb_core.rs.

Tests: crates/ccm/tests/equivalent_idl.rs::a_component_with_supports_inherits_ccmobject_and_the_supported_ones, ::a_keyed_home_yields_the_four_operations_and_inherits_nothing; crates/corba-ccm/src/cidl.rs::tests::all_four_composition_categories_distinct, ::entity_composition_with_storage_valid; crates/corba-ccm/src/lifecycle.rs::tests::configurator_registry_register_and_lookup; crates/corba-dnc/src/xml.rs::tests::parses_minimal_plan, ::validation_fails_on_unknown_impl_reference; crates/corba-ccm/src/orb_core.rs::tests::orb_set_get_policy_round_trip.

Status: done — IDL+CIDL+D&C model + ORB stub + container lifecycle covered.

§2 Conformance Point 5: Basic Level Java

Spec: §2 point 5 — EJB1.1 + java-to-IDL.

Repo: EJB integration in crates/corba-ccm-ejb/ (ConnectorBean+NamingGlue+StubGen+TX); Java language mapping in crates/lang-rules/src/emit/java.rs; Annex-A.1 CORBA Java codegen in crates/corba-codegen/src/stub.rs + crates/corba-codegen/src/skeleton.rs.

Tests: crates/corba-codegen/src/stub.rs::tests::{ java_out_and_inout_take_a_holder_and_in_does_not, a_user_type_takes_the_generated_holder_beside_it, raises_reaches_the_java_throws_clause}, crates/corba-codegen/src/skeleton.rs::tests::java_switches_on_the_method_string_and_throws_the_omg_class, crates/corba-ccm-ejb/src/stub_gen.rs::tests::{ stateful_bean_has_postconstruct_and_predestroy, stateless_bean_has_no_lifecycle_hooks}.

Status: done — the EJB integration, java-to-IDL and the Annex A.1 CORBA binding for Java all name paths that exist.

§2 Conformance Point 6: Extended Level Java

Spec: §2 point 6 — Persistent State Service + §6.x extensions.

Repo: full PSS lifecycle (cross-ref CP3) via crates/corba-ccm/src/pss.rs; Java binding via crates/corba-ccm-ejb/ + Annex-A.1 codegen, plus bind helper crates/corba-ccm-ejb/src/connector_bean.rs::pss_session_for_bean which couples a ConnectorBean to a PssSession and delivers the tuple (bean.name, bean.component_id, tx_status) as a PssBeanBinding.

Tests: crates/corba-ccm/src/pss.rs::tests::* (13 tests, cross-ref CP3) + crates/corba-ccm-ejb/src/connector_bean.rs::tests::connector_bean_with_pss_session_binds_correctly.

Status: done — PSS tx lifecycle (CP3) plus an EJB bind helper on the ConnectorBean.

§2 Conformance Point 7: Lightweight CCM (LwCCM)

Spec: §2 point 7 — subset profile from §13.

Repo: equivalent-IDL filter crates/ccm/src/lightweight.rs + profile restrictions crates/corba-ccm/src/lwccm.rs + container lifecycle in crates/corba-ccm/src/lifecycle.rs + conformance marker corba-ccm::conformance::LIGHTWEIGHT_CCM_LEVEL.

Tests: crates/corba-ccm/src/lwccm.rs::tests::* (§13 restrictions), crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_drops_configurator_operations, crates/corba-ccm/src/lifecycle.rs::tests::*, crates/corba-ccm/src/lib.rs::conformance_tests::lightweight_ccm_level_marker_matches_spec.

Status: done — IDL subset + filter + container lifecycle + conformance marker live.

§2 Conformance Point 8: ORB Vendor

Spec: §2 point 8 — component-specific extensions on the ORB.

Repo: crates/corba-ccm/src/orb_core.rs::Orb with component-specific extensions on the ORB singleton: with_interceptor_registry(Arc<InterceptorRegistry>) / interceptor_registry() (cross-ref corba-3.3.md §16), with_messaging_policy(MessagingPolicy) / messaging_policies() (cross-ref §17), with_compression(CompressionAlgorithm) / compression() (cross-ref §18). Plus default lifecycle/ threading modes/policy domain manager. Conformance marker corba-ccm::conformance::CCM_ORB_VENDOR_STUB.

Tests: crates/corba-ccm/src/orb_core.rs::tests::{orb_vendor_config_interceptor_registry, orb_vendor_config_compression_and_messaging_policies} + crates/corba-ccm/src/orb_core.rs::tests::orb_set_get_policy_round_trip + cross-ref conformance-marker tests.

Status: done — ORB-vendor configuration surface for all three CCM-relevant component-specific extensions (PI/Messaging/ Compression).


§3 References

§3.1 Normative References

Spec: §3.1, pp. 2-4 (PDF) — CORBA 2.6, CORBA 3.0, IDL/CDR specs, EJB1.1, MOF, XMI.

Repo: these external specs are covered in the consumer items §7-§16 in pure Rust (own implementations, no external MOF/EJB library dependencies); the §6 equivalent IDL uses the zerodds_ast layer as input.

Tests: —

Status: n/a (informative) — external normative reference list; impact in the consumer items §7-§16.

§3.2 Non-normative References

Spec: §3.2 — CCM predecessor specs.

Repo: —

Tests: —

Status: n/a (informative) — non-normative background references.


§4 Terms and Definitions

§4 Component / Connector / Container / Executor / Facet / etc.

Spec: §4, pp. 4-7 (PDF) — glossary.

Repo: the crate doc of crates/ccm/src/lib.rs references the terms; Component + Facet + Receptacle + Event Source/Sink are mirrored in the transformation from zerodds_ast::ComponentRole variants.

Tests: —

Status: n/a (informative) — glossary; terms are referenced in the consumer items.


§5 Symbols

§5 Abbrev (CCM/CIDL/CIF/CMT/CORBA/COS/…)

Spec: §5, pp. 7-8 (PDF) — abbreviation list.

Repo: —

Tests: —

Status: n/a (informative) — symbol table; without a code mapping.


§6 Component Model

§6.1 Component Model Overview

Spec: §6.1, p. 9 (PDF) — components as an IDL meta-type, levels (basic + extended), ports (facets/receptacles/event sources/event sinks/attributes), component identity, homes.

Repo: crates/ccm/src/transform.rs::transform_component covers the component meta-model completely; ImplKind=InterfaceKind::Plain, because the equivalent interface is not local (spec §6.3.2).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_plain_component_inherits_ccmobject, the_whole_trader_component_yields_every_operation_the_clauses_name, a_keyless_home_yields_an_implicit_inheriting_keylesscmhome, a_component_attribute_is_left_alone} — the four meta-model axes (component-as-interface, all four port kinds, home, attributes).

Status: done

§6.1.1 Component Levels (Basic vs Extended)

Spec: §6.1.1, p. 9 (PDF) — “There are two levels of components: basic and extended. […] Basic components are not allowed to offer facets, receptacles, event sources and sinks. They may only offer attributes.”

Repo: transform_component works generically — the caller determines from comp.body content whether the component is basic or extended; the transformation is correct for both (basic: only attributes → no provide/connect ops).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_basic_component_carries_its_attributes_and_no_port_operation, a_component_attribute_is_left_alone, the_whole_trader_component_yields_every_operation_the_clauses_name} — basic (attributes only, no port ops) against extended (all port ops).

Status: done

§6.1.2 Ports

Spec: §6.1.2, pp. 9-10 (PDF) — four port types + attributes.

Repo: all four (facets/receptacles/event sources/event sinks) + attributes are transformed in transform_component from ComponentExport::{Provides,Uses,Emits,Publishes,Consumes,Attribute}.

Tests: crates/ccm/tests/equivalent_idl.rs::the_whole_trader_component_yields_every_operation_the_clauses_name — one component with all four port kinds plus an attribute.

Status: done

§6.1.3 Components and Facets — Equivalent Interface

Spec: §6.1.3, p. 10 (PDF) — “The component has a single distinguished reference whose interface conforms to the component definition. This reference supports an interface, called the component’s equivalent interface, that manifests the component’s surface features to clients.”

Repo: crates/ccm/src/transform.rs::ComponentEquivalent — equivalent_interface is exactly that one distinguished reference: transform_component hands back the component node itself, with InterfaceKind::Interface instead of InterfaceKind::Component.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_component_equivalent_is_comparable, a_plain_component_inherits_ccmobject} — the first checks the identity equivalent_interface == component, the second the change of kind.

Status: done

§6.1.4 Component Identity

Spec: §6.1.4, p. 11 (PDF) — component reference + facet references identify the component instance; the same_component operation on Components::Navigation + is_equivalent_component_kind/ get_component_def.

Repo: crates/corba-ccm/src/component_def.rs::ComponentDef:: {is_equivalent_component_kind, get_component_def_repo_id}. Components::Navigation::same_component itself remains ORB-bound (object-reference comparison), the type-identity sub-pattern is covered.

Tests: crates/corba-ccm/src/component_def.rs::tests::is_equivalent_component_kind_matches_repo_id, get_component_def_repo_id_returns_repo_id.

Status: done — type-identity operations implemented; object-reference same_component remains ORB-bound.

§6.1.5 Component Homes

Spec: §6.1.5, p. 11 (PDF) — home as a manager for component instances.

Repo: crates/ccm/src/transform.rs::transform_home.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_keyless_home_yields_an_implicit_inheriting_keylesscmhome, a_keyed_home_yields_the_four_operations_and_inherits_nothing, a_derived_home_inherits_the_base_homes_explicit_interface}.

Status: done

§6.2 Component Definition

Spec: §6.2, p. 11 (PDF) — “A component definition in IDL implicitly defines an interface that supports the features defined in the component definition body.”

Repo: crates/ccm/src/transform.rs::transform_component.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_component_equivalent_is_comparable, the_whole_trader_component_yields_every_operation_the_clauses_name} — the component declaration becomes the interface declaration, and the declaration body carries the features the interface then supports.

Status: done

§6.3 Component Declaration — Basic Components

Spec: §6.3.1, p. 11 (PDF) — basic-component pattern (<component_dcl> restricted form "component" <identifier> [<supported_interface_spec>] "{" {<attr_dcl> ";"}* "}").

Repo: the input is the InterfaceNode with InterfaceKind::Component from crates/idl-lower/; crates/ccm/src/transform.rs::transform_component transforms the basic form (only attr_dcl in the body, optionally supports) without producing a single port operation.

Tests: crates/ccm/tests/equivalent_idl.rs::a_basic_component_carries_its_attributes_and_no_port_operation — both attributes stay, the operation list is empty, and the supports list follows Components::CCMObject.

Status: done

§6.3.2.1 Equivalent IDL — Simple Declaration

Spec: §6.3.2.1, p. 12 (PDF) — component component_name { ... }; → interface component_name : Components::CCMObject { ... };.

Repo: crates/ccm/src/transform.rs::transform_component — the §6.3.2 base list; without a declared base it holds Components::CCMObject.

Tests: crates/ccm/tests/equivalent_idl.rs::a_plain_component_inherits_ccmobject.

Status: done

§6.3.2.2 Equivalent IDL — Supported Interfaces

Spec: §6.3.2.2, p. 12 (PDF) — component <name> supports <I1>, <I2> { ... } → interface <name> : Components::CCMObject, <I1>, <I2> { ... }.

Repo: crates/ccm/src/transform.rs::transform_component appends the supports list to Components::CCMObject.

Tests: crates/ccm/tests/equivalent_idl.rs::a_component_with_supports_inherits_ccmobject_and_the_supported_ones.

Status: done

§6.3.2.3 Equivalent IDL — Inheritance

Spec: §6.3.2.3, p. 12 (PDF) — component <name> : <base_name> { ... } → interface <name> : <base_name> { ... } (CCMObject is transitive via <base_name>).

Repo: crates/ccm/src/transform.rs::transform_component sets Components::CCMObject only when the declared base list is empty — otherwise <base_name> stands alone.

Tests: crates/ccm/tests/equivalent_idl.rs::a_derived_component_inherits_its_base_and_not_ccmobject.

Status: done

§6.3.2.4 Equivalent IDL — Inheritance + supports

Spec: §6.3.2.4, p. 13 (PDF) — component <name> : <base> supports <I1>, <I2> { ... } → interface <name> : <base>, <I1>, <I2> { ... }.

Repo: crates/ccm/src/transform.rs::transform_component sets <base> first, then the supports list.

Tests: crates/ccm/tests/equivalent_idl.rs::a_derived_component_with_supports_lists_the_base_first_and_then_the_supported — checks the order [B, I1, I2] and that Components::CCMObject is not repeated on top.

Status: done

§6.3.3 Component Body

Spec: §6.3.3, p. 13 (PDF) — “Declarations for facets, receptacles, event sources, event sinks and attributes all map onto operations on the component’s equivalent interface.”

Repo: crates/ccm/src/transform.rs::transform_component — the loop over the ComponentRole ports of the declaration body.

Tests: crates/ccm/tests/equivalent_idl.rs::the_whole_trader_component_yields_every_operation_the_clauses_name — one component with provides/uses/uses multiple/emits/ publishes/consumes/attribute; the test enumerates every operation that follows on the equivalent interface.

Status: done

§6.4.1 Facets — Equivalent IDL

Spec: §6.4.1, p. 13 (PDF) — provides <interface_type> <name>; → <interface_type> provide_<name>(); on the equivalent interface.

Repo: crates/ccm/src/transform.rs::transform_component (ComponentRole::Facet branch).

Tests: crates/ccm/tests/equivalent_idl.rs::{ provides_yields_a_provide_operation_returning_the_facet, the_whole_trader_component_yields_every_operation_the_clauses_name}.

Status: done

§6.4.2 Semantics of Facet References

Spec: §6.4.2, pp. 13-14 (PDF) — behavior constraints for facet refs (nil allowed, lifecycle bounded by component).

Repo: IDL op signatures via component_def.rs::FacetDef + lifetime-constraint validator crates/corba-ccm/src/lifecycle.rs::{check_facet_lifetime, FacetLifetimeViolation}. The container runtime uses this check to reject use-after-destroy + orphan references.

Tests: crates/corba-ccm/src/lifecycle.rs::tests::{facet_lifetime_passes_when_alive, facet_lifetime_rejects_use_after_destroy, facet_lifetime_rejects_orphaned}.

Status: done — IDL-op mapping + lifetime-constraint check live.

Spec: §6.4.3, pp. 14-16 (PDF) — Components::Navigation interface with provide_facet/get_all_facets/get_named_facets/ same_component. CCMObject inherits Navigation.

Repo: crates/corba-ccm/src/component_def.rs::ComponentDef:: {provide_facet, get_all_facets, get_named_facets} (generic-op skeleton implementation on the component definition; the caller layer binds interface_id to a concrete ORB object reference). same_component remains ORB-bound (object-reference comparison).

Tests: crates/corba-ccm/src/component_def.rs::tests::{provide_facet_returns_facet_by_name, provide_facet_returns_none_for_unknown, get_all_facets_returns_complete_list, get_named_facets_filters_by_names}.

Status: done — inheritance model + generic operations as a skeleton path live; object-reference same_component ORB-bound.

§6.4.3.1 get_component (CORBA::Object enhancement)

Spec: §6.4.3.1, p. 14 (PDF) — extension of CORBA::Object with an Object get_component() pseudo-IDL op. The ORB delivers this even without a component vendor.

Repo: crates/corba-ccm/src/home.rs — FacetRef::get_component returns the component reference behind a facet reference, ComponentRef::get_component returns the same reference; the GIOP operation name is crates/corba-ccm/src/home.rs::GET_COMPONENT_GIOP_OPERATION.

Tests: crates/corba-ccm/src/home.rs::tests::{ get_component_on_a_facet_reference_returns_the_component, get_component_on_a_component_reference_returns_the_same_reference, get_component_travels_as_the_giop_operation_named_component}.

Status: done

§6.4.4 Provided References and Component Identity

Spec: §6.4.4, p. 17 (PDF) — same_component operation on Navigation; default implementation via the container servant framework.

Repo: crates/corba-ccm/src/home.rs — ComponentRef::same_component compares component type and instance identity, FacetRef::same_component delegates to the owning component, as §6.4.4 requires for facets that inherit Navigation.

Tests: crates/corba-ccm/src/home.rs::tests::{ two_facets_of_one_instance_are_the_same_component, a_facet_answers_same_component_as_the_component_that_owns_it, two_instances_of_one_component_type_are_not_the_same_component, one_instance_id_under_two_component_types_is_not_the_same_component}.

Status: done

§6.4.5 Supported Interfaces

Spec: §6.4.5, pp. 17-19 (PDF) — supports <I> widening + narrowing semantics; KeylessCCMHome::create_component returns CCMObject, narrowing to I.

Repo: the inheritance model covers this (component_bases); type- identity narrowing as a runtime helper in crates/corba-ccm/src/component_def.rs::ComponentDef:: {supports_interface, supported_interface_repo_ids}. Object- reference widening (POA is_a) remains ORB-bound.

Tests: crates/corba-ccm/src/component_def.rs::tests::{supports_interface_returns_true_for_listed_iface, supports_interface_returns_false_for_unknown, supported_interface_repo_ids_returns_full_list}.

Status: done — inheritance + type-identity narrowing helper implemented; object-reference widening ORB-bound.

§6.5.1 Receptacles — Equivalent IDL

Spec: §6.5.1, pp. 19-20 (PDF) — simplex: connect_<name>(in T) raises (AlreadyConnected, InvalidConnection), T disconnect_<name>() raises (NoConnection), T get_connection_<name>(). Multiplex: Cookie connect_<name>(in T) raises (ExceededConnectionLimit, InvalidConnection), T disconnect_<name>(in Cookie), <name>Connections get_connections_<name>().

Repo: crates/ccm/src/transform.rs::uses_ops (multiplex/simplex branch).

Tests: crates/ccm/tests/equivalent_idl.rs::{ uses_simplex_yields_connect_disconnect_and_get_connection, uses_multiple_returns_a_cookie_and_the_plural_getter}.

Status: done

§6.5.2 Receptacles — Behavior

Spec: §6.5.2, pp. 20-22 (PDF) — connect/disconnect behavior, cookie semantics.

Repo: Components::Cookie modeled in crates/ccm/src/model.rs + connect/disconnect state machine in crates/corba-ccm/src/lifecycle.rs::{ReceptacleManager, ConnectionState, ConnectionError} with simplex-vs-multiplex constraints (simplex double-connect rejected, disconnect-unknown-id rejected).

Tests: crates/ccm/src/model.rs::tests::{cookie_new_stores_octet_seq, cookie_truncate_preserves_octet_seq, receptacle_description_supports_simplex_and_multiplex} + crates/corba-ccm/src/lifecycle.rs::tests::{receptacle_simplex_connect_then_disconnect, receptacle_simplex_double_connect_rejected, receptacle_multiplex_allows_multiple_connects, receptacle_disconnect_unknown_id_rejected, receptacle_double_disconnect_rejected}.

Status: done — data model + connect/disconnect state machine live.

§6.5.3 Receptacles Interface (generic)

Spec: §6.5.3, pp. 22-24 (PDF) — Components::Receptacles generic interface. CCMObject inherits from it.

Repo: crates/corba-ccm/src/component_def.rs::ComponentDef:: {get_all_receptacles, get_named_receptacles} (generic-op skeleton). connect/disconnect/get_connections (lifecycle) remain in the container runtime (see §6.5.2).

Tests: crates/corba-ccm/src/component_def.rs::tests::{get_all_receptacles_returns_complete_list, get_named_receptacles_filters}.

Status: done — model + generic-lookup operations as a skeleton path live; connect lifecycle still container runtime.

§6.6.1 Event Types — Equivalent IDL

Spec: §6.6.1.1, pp. 24-25 (PDF) — eventtype A {...}; eventtype B : A {...}; → valuetype A : Components::EventBase {...}; valuetype B : A {...}; interface BConsumer : Components::EventConsumerBase { void push_B(in B the_b); };.

Repo: crates/ccm/src/transform.rs::transform_event_type.

Tests: crates/ccm/tests/equivalent_idl.rs::{ the_first_event_type_of_a_chain_inherits_event_base, one_event_type_yields_one_consumer_interface_however_many_ports_name_it, a_plain_valuetype_is_not_an_event_type}.

Status: done

§6.6.1.2 EventBase

Spec: §6.6.1.2, p. 25 (PDF) — module Components { abstract valuetype EventBase { }; };.

Repo: ScopedName reference in crates/ccm/src/transform.rs::transform_event_type — only the first event type of a chain gets Components::EventBase.

Tests: crates/ccm/tests/equivalent_idl.rs::the_first_event_type_of_a_chain_inherits_event_base.

Status: done

§6.6.2 EventConsumer Interface

Spec: §6.6.2, pp. 25-26 (PDF) — Components::EventConsumerBase with push_event(in EventBase) raises BadEventType.

Repo: crates/ccm/src/transform.rs::transform_event_type — the consumer base list is Components::EventConsumerBase as long as the event type itself has no base; otherwise <Base>Consumer, so that the consumer chain follows the event chain.

Tests: crates/ccm/tests/equivalent_idl.rs::a_consumer_interface_inherits_event_consumer_base_at_the_root_of_the_chain — TickConsumer : Components::EventConsumerBase and PricedTickConsumer : TickConsumer.

Status: done

§6.6.3 Event Service Provided by Container

Spec: §6.6.3, p. 26 (PDF) — container runtime topic — event channels.

Repo: crates/corba-ccm/src/port.rs (PortRegistry + EventStream — the connection table through which the container binds event sources to event sinks) + crates/corba-ccm-lib/src/dds_bridge.rs (event source → DataWriter, event sink → DataReader; the distribution itself is DDS-DCPS in crates/dcps/ instead of a separate CosEventChannel stack).

Tests: crates/corba-ccm/src/port.rs::tests::{ event_sink_subscription_round_trip, list_event_sinks_unknown_source_empty}, crates/corba-ccm-lib/src/dds_bridge.rs::tests::{ add_mapping_round_trip, mapping_direction_round_trip, duplicate_port_rejected, activate_makes_active}.

Status: done — container-side event distribution through the port registry and the DDS bridge.

§6.6.4 Event Sources — Publishers and Emitters

Spec: §6.6.4, pp. 26-27 (PDF) — publisher (multi-subscriber) + emitter (single-subscriber).

Repo: data model in crates/ccm/src/model.rs (PublisherDescription, EmitterDescription) + routing behavior via DDS-DCPS pub/sub (see §6.6.3): publisher = DataWriter with several MatchedReaders, emitter = DataWriter with OWNERSHIP=EXCLUSIVE to exactly one reader. Cross-ref crates/dcps/src/{publisher,subscriber}.rs. Generic lookup ops in component_def.rs::{get_all_publishers, get_all_emitters, get_named_publishers, get_named_emitters}.

Tests: crates/ccm/src/model.rs::tests::publisher_description_can_have_multiple_subscribers, crates/corba-ccm/src/component_def.rs::tests::{ get_all_publishers_excludes_emit_only_sources, get_all_emitters_includes_only_emit_only_sources}, crates/corba-ccm-lib/src/dds_bridge.rs::tests::mapping_direction_round_trip.

Status: done — data model + routing behavior via DCPS live; generic lookup operations as a skeleton path.

§6.6.5 Publisher — Equivalent IDL

Spec: §6.6.5.1, p. 27 (PDF) — publishes <T> <name>; → Cookie subscribe_<name>(in TConsumer consumer) raises (ExceededConnectionLimit); TConsumer unsubscribe_<name>(in Cookie ck) raises (InvalidConnection);.

Repo: crates/ccm/src/transform.rs::publishes_ops.

Tests: crates/ccm/tests/equivalent_idl.rs::publishes_yields_subscribe_returning_a_cookie.

Status: done

§6.6.6 Emitters — Equivalent IDL

Spec: §6.6.6.1, p. 28 (PDF) — emits <T> <name>; → void connect_<name>(in TConsumer consumer) raises (AlreadyConnected); TConsumer disconnect_<name>() raises (NoConnection);.

Repo: crates/ccm/src/transform.rs::emits_ops.

Tests: crates/ccm/tests/equivalent_idl.rs::emits_yields_connect_and_disconnect_and_the_consumer_interface.

Status: done

§6.6.7 Event Sinks — Equivalent IDL

Spec: §6.6.7.1, p. 29 (PDF) — consumes <T> <name>; → TConsumer get_consumer_<name>();.

Repo: crates/ccm/src/transform.rs::transform_component (ComponentRole::EventSink branch).

Tests: crates/ccm/tests/equivalent_idl.rs::consumes_yields_a_get_consumer_operation.

Status: done

§6.6.8 Events Interface (generic)

Spec: §6.6.8, pp. 29-32 (PDF) — Components::Events with get_consumer/subscribe/unsubscribe/connect_consumer/ disconnect_consumer/get_all_consumers/get_all_publishers/ get_all_emitters/etc.

Repo: data models (ConsumerDescription, EmitterDescription, PublisherDescription, SubscriberDescription) in crates/ccm/src/model.rs + generic lookup operations crates/corba-ccm/src/component_def.rs::ComponentDef:: {get_all_publishers, get_all_emitters, get_named_publishers, get_named_emitters}. Subscribe/connect lifecycle in the container runtime (spec §6.6.4 / §6.6.5).

Tests: crates/corba-ccm/src/component_def.rs::tests::{get_all_publishers_excludes_emit_only_sources, get_all_emitters_includes_only_emit_only_sources, get_named_publishers_respects_emit_only_flag, get_named_emitters_excludes_publishers}.

Status: done — model + generic lookup operations as a skeleton path live; subscribe/connect remains container runtime.

§6.7.1.1 Home Definitions — No Primary Key

Spec: §6.7.1.1, p. 33 (PDF) — home <h> manages <C> { ... }; → interface <h>Explicit : Components::CCMHome {...}; + interface <h>Implicit : Components::KeylessCCMHome { <C> create() raises (CreateFailure); }; + interface <h> : <h>Explicit, <h>Implicit { };.

Repo: crates/ccm/src/transform.rs::transform_home (keyless path in build_keyless_implicit).

Tests: crates/ccm/tests/equivalent_idl.rs::a_keyless_home_yields_an_implicit_inheriting_keylesscmhome.

Status: done

§6.7.1.2 Home Definitions — With Primary Key

Spec: §6.7.1.2, p. 34 (PDF) — home <h> manages <C> primarykey <K> { ... }; → 4-op implicit iface (create(K key), find_by_primary_key(K key), remove(K key), <K> get_primary_key (<C> comp)).

Repo: crates/ccm/src/transform.rs::build_keyed_implicit.

Tests: crates/ccm/tests/equivalent_idl.rs::a_keyed_home_yields_the_four_operations_and_inherits_nothing.

Status: done

§6.7.1.3 Home — Supported Interfaces

Spec: §6.7.1.3, p. 35 (PDF) — home <h> supports <I> manages <C> {...}; → interface <h>Explicit : Components::CCMHome, <I> {...};.

Repo: crates/ccm/src/transform.rs::transform_home appends the supports list to Components::CCMHome.

Tests: crates/ccm/tests/equivalent_idl.rs::a_home_with_supports_puts_the_supported_interfaces_on_its_explicit — the supported interfaces land on the explicit interface, not on the implicit one and not on the equivalent home.

Status: done

§6.7.2 Primary Key Declarations

Spec: §6.7.2, pp. 35-36 (PDF) — primary-key type constraints + Components::PrimaryKeyBase.

Repo: crates/ccm/src/validate.rs::validate_primary_key — checks the 4 spec constraints: (1) concrete valuetype, (2) inherits from Components::PrimaryKeyBase, (3) no private state members, (4) no interface references (conservative interpretation: every ScopedName type reference is rejected).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_primary_key_with_a_public_scalar_member_is_accepted, a_primary_key_without_the_base_is_rejected, a_primary_key_with_a_private_member_is_rejected, a_primary_key_holding_an_object_reference_is_rejected, a_primary_key_holding_a_nested_struct_is_accepted, an_abstract_valuetype_is_not_a_primary_key}.

Status: done

§6.7.3 Explicit Operations in Home Definitions

Spec: §6.7.3, pp. 36-37 (PDF) — factory + finder operations are mapped onto the explicit interface with correctly extended raises clauses (CreateFailure / FinderFailure).

Repo: crates/ccm/src/validate.rs::apply_factory_finder_body with InitOp struct (factory or finder entry with name + params + caller raises). Spec §6.7.3.1 factory: return type = equivalent iface, raises = Components::CreateFailure + caller raises. Spec §6.7.3.2 finder: return type = equivalent iface, raises = Components::FinderFailure + caller raises. All params are normalized to in attributes.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_factory_is_emitted_with_create_failure_first_in_its_raises, a_finder_is_emitted_with_finder_failure_and_the_callers_own_raises}.

Status: done

§6.7.4 Home Inheritance

Spec: §6.7.4, p. 37 (PDF) — derived home: <h>Explicit : <base_h>Explicit.

Repo: transform_home sets explicit_bases to <base>Explicit when home.base.is_some() (base_explicit_name helper).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_derived_home_inherits_the_base_homes_explicit_interface, a_derived_home_with_supports_extends_the_base_explicit}.

Status: done

§6.7.5 Semantics of Home Operations

Spec: §6.7.5, pp. 38-39 (PDF) — orthodox vs heterodox operations, polymorphism rules.

Repo: crates/corba-ccm/src/home.rs::HomeFinder — the orthodox operations create (§6.7.5.1 keyless: a system-generated instance id; §6.7.5.2 keyed: the primary key is the instance id), find_by_primary_key and remove; crates/corba-ccm/src/container.rs::Container carries the instance lifecycle remove hangs off.

Tests: crates/corba-ccm/src/home.rs::tests::{ create_with_user_key_uses_key_as_id, create_without_key_generates_system_id, find_by_primary_key_round_trip, remove_decrements_instance_count, remove_unknown_returns_false}, crates/corba-ccm/src/container.rs::tests::{ install_and_full_lifecycle_round_trip, instance_count_tracks_install_and_remove}.

Status: done

§6.7.6 CCMHome Interface

Spec: §6.7.6, p. 40 (PDF) — interface CCMHome { CORBA::IRObject get_component_def(); CORBA::IRObject get_home_def(); void remove_component(in CCMObject comp) raises (RemoveFailure); };.

Repo: ScopedName reference point in transform_home::explicit_bases. FailureReason modeled as u32 in crates/ccm/src/model.rs. Generic operations get_component_def_repo_id + get_home_def_repo_id in crates/corba-ccm/src/home.rs::HomeDef (IRObject lookup path via repository IDs; the caller binds an IFR resolver). remove_component is container runtime (crates/corba-ccm/src/container.rs).

Tests: crates/corba-ccm/src/home.rs::tests::{home_get_component_def_returns_managed_component_id, home_get_home_def_returns_self_repo_id}.

Status: done — iface reference + type-identity operations implemented; object-lifecycle operations remain container runtime.

§6.7.7 KeylessCCMHome Interface

Spec: §6.7.7, p. 41 (PDF) — interface KeylessCCMHome { CCMObject create_component() raises (CreateFailure); };.

Repo: ScopedName reference point + semantics in crates/ccm/src/transform.rs::build_keyless_implicit.

Tests: crates/ccm/tests/equivalent_idl.rs::a_keyless_home_yields_an_implicit_inheriting_keylesscmhome.

Status: done

§6.8 Home Finders

Spec: §6.8, pp. 41-43 (PDF) — Components::HomeFinder interface; CORBA::ORB::resolve_initial_references("ComponentHomeFinder").

Repo: crates/corba-ccm/src/home.rs::ComponentHomeFinder — the three find_home_by_* operations over the homes registered through HomeRegistration::register_home (§9.4.1.2), with HomeNotFound as the failure case; the initial-reference identifier is crates/corba-ccm/src/home.rs::COMPONENT_HOME_FINDER_INITIAL_REFERENCE. For find_home_by_name, crates/corba-cosnaming/src/stringified.rs supplies the stringified-name format.

Tests: crates/corba-ccm/src/home.rs::tests::{ the_home_finder_is_reached_through_the_component_home_finder_initial_reference, a_registered_home_is_found_by_component_type_and_by_home_type, an_unregistered_component_type_raises_home_not_found, a_home_registered_without_a_name_cannot_be_found_by_name, an_unregistered_home_is_never_returned_again}.

Status: done

§6.9 Component Configuration

Spec: §6.9, pp. 43-44 (PDF) — component configurability via attributes; configuration_complete operation on CCMObject.

Repo: crates/corba-rust/src/component_emit.rs::emit_component emits configuration_complete as a lifecycle operation on the component trait; the configuration phase itself lives in crates/corba-ccm/src/lifecycle.rs::{StandardConfigurator, ConfiguratorRegistry} (§6.10).

Tests: crates/corba-rust/tests/snapshot_codegen.rs::a_component_trait_carries_the_configuration_complete_lifecycle_operation, crates/corba-ccm/src/lifecycle.rs::tests::{ configurator_set_get_roundtrip, configurator_registry_register_and_lookup}.

Status: done

§6.10 Configuration with Attributes

Spec: §6.10.1, pp. 44-45 (PDF) — configurator iface with configure(in CCMObject comp); StandardConfigurator with set_configuration(in ConfigValues descr).

Repo: data model ConfigValue in crates/ccm/src/model.rs; configurator-operation filter in crates/ccm/src/lightweight.rs::filter_to_lightweight (LwCCM §13.7 removes these) + configurator iface in crates/corba-ccm/src/lifecycle.rs::{Configurator, StandardConfigurator, ConfiguratorRegistry, ConfigError} with set_attribute/get_attribute + schema-validated read-only rejection + per-RepoId lookup.

Tests: crates/ccm/src/model.rs::tests::config_value_carries_name_and_marshaled_value, crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_drops_configurator_operations, crates/corba-ccm/src/lifecycle.rs::tests::{configurator_set_get_roundtrip, configurator_rejects_unknown_attribute, configurator_rejects_readonly_attribute, configurator_get_unknown_returns_unknown_attribute, configurator_registry_register_and_lookup}.

Status: done — model + filter + configurator iface live.

§6.11 Component Inheritance

Spec: §6.11, pp. 48-49 (PDF) — component inheritance + CCMObject.

Repo: crates/ccm/src/transform.rs::transform_component covers component inheritance.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_derived_component_inherits_its_base_and_not_ccmobject, a_derived_component_with_supports_lists_the_base_first_and_then_the_supported}.

Status: done

§6.11.1 CCMObject Interface

Spec: §6.11.1, p. 49 (PDF) — interface CCMObject : Navigation, Receptacles, Events { ... };.

Repo: Components::CCMObject as a ScopedName reference point; the inheritance chain is referenced per the spec rule (not explicitly broken out in the AST — that remains the caller’s responsibility at the linker).

Tests: crates/ccm/tests/equivalent_idl.rs::a_plain_component_inherits_ccmobject.

Status: done

§6.12 Conformance Requirements

Spec: §6.12, pp. 50-52 (PDF) — eight conformance points (see §2); sub-section §6.12.2 Changes to Object Services.

Repo: conformance markers in crates/corba-ccm/src/lib.rs:: conformance::{CCM_CONFORMANCE_BASIC_LEVEL, CCM_CONFORMANCE_BASIC_LEVEL_JAVA, LIGHTWEIGHT_CCM_LEVEL}.

Tests: crates/corba-ccm/src/lib.rs::conformance_tests::ccm_conformance_basic_level_marker_matches_spec, ccm_conformance_basic_level_java_marker_matches_spec, lightweight_ccm_level_marker_matches_spec.

Status: done — markers for all three conformance points covered in ZeroDDS (Basic Level non-Java + Java + LwCCM) stated as doc constants. The vendor-container aspect itself remains subject to WP CCM-Container Core (see §2 points 4/5/7).


§7 OMG CIDL Syntax and Semantics

§7 CIDL — Component Implementation Definition Language

Spec: §7, pp. 55-66 (PDF) — lexical conventions, grammar, composition definition, home implementation, storage home binding, persistence, executor, segment, facet, feature delegation, etc.

Repo: crates/corba-ccm/src/cidl.rs (CIDL lexer + grammar AST + composition/home/segment/storage/executor definitions).

Tests: crates/corba-ccm/src/cidl.rs::tests::{ session_composition_does_not_require_storage, entity_composition_without_storage_invalid, entity_composition_with_storage_valid, storage_type_can_inherit, home_executor_optional_component_binding, all_four_composition_categories_distinct}.

Status: done


§8 CCM Implementation Framework

§8 CIF — Component Implementation Framework

Spec: §8, pp. 67-108 (PDF) — servant/skeleton generator, executor lifetime, composition persistence, proxy homes, language mapping (C++/Java).

Repo: crates/corba-ccm/src/cif.rs (CIF AST + executor/segment lifetime), crates/corba-codegen/src/skeleton.rs + crates/corba-codegen/src/stub.rs (servant/skeleton generator).

Tests: crates/corba-ccm/src/cif.rs::tests::{ lifecycle_calls_increment_counters, cif_error_carries_diagnostic} (executor lifetime ccm_activate/ccm_passivate/ccm_remove + CCMException), crates/corba-codegen/src/skeleton.rs::tests::{ every_operation_reaches_the_dispatch_in_every_column, an_empty_interface_still_dispatches_to_the_default_arm, cpp_compares_with_strcmp_and_ends_in_bad_operation, java_switches_on_the_method_string_and_throws_the_omg_class, rust_matches_and_answers_none_rather_than_an_invented_error} (skeleton generator), crates/corba-codegen/src/stub.rs::tests::{ a_variable_length_struct_returns_a_pointer_and_a_fixed_one_a_value, an_object_reference_argument_is_a_ptr_and_its_out_is_an_out, a_oneway_operation_says_so_in_every_column_that_renders} (stub generator).

Status: done


§9 Container Programming Model

§9 Container Programming Model

Spec: §9, pp. 109-150 (PDF) — server programming environment, client programming model, container API types (session/entity).

Repo: crates/corba-ccm/src/container.rs, crates/corba-ccm/src/context.rs, crates/corba-ccm-lib/src/persistence.rs, crates/corba-ccm-lib/src/dds_bridge.rs, crates/corba-ccm-lib/src/telemetry.rs.

Tests: crates/corba-ccm/src/container.rs::tests::{ install_and_full_lifecycle_round_trip, instance_count_tracks_install_and_remove, passivate_in_configured_state_invalid, unknown_instance_returns_not_found}, crates/corba-ccm/src/context.rs::tests::{anonymous_context_returns_none, principal_context_returns_bytes}, crates/corba-ccm-lib/src/persistence.rs::tests::{ create_and_find_round_trip, passivate_flushes_dirty_entries, flush_resets_dirty_and_increments_counter}, crates/corba-ccm-lib/src/dds_bridge.rs::tests::{ add_mapping_round_trip, activate_makes_active, passivate_clears_active_flag}, crates/corba-ccm-lib/src/telemetry.rs::tests::{ full_lifecycle_records_four_events, sequence_numbers_strictly_increase}.

Status: done


§10 Integrating with Enterprise JavaBeans

§10 EJB Integration

Spec: §10, pp. 151-176 (PDF) — two-way mapping CCM ↔︎ EJB.

Repo: crates/corba-ccm-ejb/src/{connector_bean,naming_glue, stub_gen,tx}.rs.

Tests: crates/corba-ccm-ejb/src/connector_bean.rs::tests::{ full_lifecycle_records_history, post_construct_invokes_callback, connector_bean_with_pss_session_binds_correctly}, crates/corba-ccm-ejb/src/naming_glue.rs::tests::{ cos_to_jndi_round_trip_no_kind, cos_to_jndi_includes_kind, jndi_comp_env_strips_prefix, bind_and_lookup_round_trip}, crates/corba-ccm-ejb/src/stub_gen.rs::tests::{ stateful_bean_has_postconstruct_and_predestroy, stateless_bean_has_no_lifecycle_hooks, home_local_uses_local_annotation}, crates/corba-ccm-ejb/src/tx.rs::tests::{ cos_to_jta_round_trip_for_all_states, begin_then_commit_succeeds, rollback_only_then_commit_fails_with_rollback}.

Status: done


§11 Interface Repository Metamodel

§11 IFR Metamodel

Spec: §11, pp. 177-260 (PDF) — MOF models for BaseIDL package + ComponentIDL package; XMI DTDs + IDL for IFR.

Repo: crates/corba-ir/src/repository.rs (Container/Contained hierarchy), crates/corba-ir/src/repository_id.rs, crates/corba-ir/src/type_code.rs (TypeCode backend), crates/corba-ir/src/definition_kind.rs + crates/corba-ccm/src/orb_core.rs::{XmiEmitter, MofElement, IfrCcmMetamodel} with MOF-2.0 subset (Class/Property/Operation) + XMI-1.2 output for the ComponentIDL package.

Tests: crates/corba-ir/src/repository.rs::tests::*, crates/corba-ir/src/repository_id.rs::tests::*, crates/corba-ir/src/type_code.rs::tests::* + crates/corba-ccm/src/orb_core.rs::tests::{ ifr_ccm_metamodel_add_component, ifr_ccm_metamodel_ingest_repository_walks_definitions}.

Status: done — IR base (corba-ir) + CCM-metamodel MOF-2.0 subset + XMI-1.2 emitter live. IfrCcmMetamodel::from_repository( &corba_ir::Repository) walks the Container/Contained hierarchy and emits component/module classes. Cross-ref CORBA 3.3 Part 3 §12 (corba-3.3.md).


§12 CIF Metamodel

§12 CIF Metamodel

Spec: §12, pp. 261-272 (PDF) — MOF model for the Component Implementation Framework.

Repo: crates/corba-ccm/src/cif.rs (CIF AST model) + crates/corba-ccm/src/orb_core.rs::{XmiEmitter, MofElement} as a MOF-XMI emitter symmetric to §11.

Tests: crates/corba-ccm/src/cif.rs::tests::{ lifecycle_calls_increment_counters, cif_error_carries_diagnostic} + crates/corba-ccm/src/orb_core.rs::tests::* (XMI emitter).

Status: done — CIF AST (corba-ccm::cif) + MOF-XMI emitter symmetric to §11 IFR. Cross-ref CORBA 3.3 Part 3 §13 (corba-3.3.md).


§13 Lightweight CCM Profile

§13.1 Summary

Spec: §13.1, p. 273 (PDF) — LwCCM subset: without persistence, introspection, navigation-generic, type-specific-generic, segmentation, transactions, security, configurators, proxy homes, home finders.

Repo: crates/ccm/src/lightweight.rs::filter_to_lightweight.

Tests: crates/ccm/tests/equivalent_idl.rs::{ the_lightweight_filter_drops_configurator_operations, the_lightweight_filter_keeps_the_type_specific_operations, the_lightweight_filter_reports_a_component_it_would_empty} + crates/corba-ccm/src/lwccm.rs::tests::{ same_component_raises_no_implement_with_the_mandated_minor_code, every_other_disabled_operation_raises_bad_operation} — §13.1 keeps the disabled operations in the interface and has the container answer BAD_OPERATION/NO_IMPLEMENT; for same_component, NO_IMPLEMENT with minor code IS_LIGHTWEIGHT_COMPONENT is required.

Status: done

§13.2 No Persistence

Spec: §13.2, pp. 274-276 (PDF) — table “Changes associated with excluding support for persistence”: primary keys, CIDL, abstract storage homes/types, the keyed-home implicit executor, finders in the explicit home executor, entity container API types, the durable CORBA usage model, CCM2Context::get_persistence. §13.1, p. 273: “Persistence (only session and service components are supported).”

Repo: crates/corba-ccm/src/lwccm.rs — disabled_by("get_persistence") reports LwccmExclusion::Persistence, category_supported admits only Session and Service, and composition_exclusion rejects entity compositions and every storage-home binding as persistence. The extended form stays in crates/corba-ccm-lib/src/persistence.rs + crates/corba-ccm/src/pss.rs and is held out of the profile by these checks.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ the_persistence_operations_are_disabled_by_thirteen_two_and_three, only_session_and_service_components_are_supported, an_entity_composition_is_excluded_as_persistence}.

Status: done

§13.3 No Introspection / Navigation / Type-Specific-Generic Ops

Spec: §13.3, pp. 276-277 (PDF) — removed: provide_facet, get_all_facets, get_named_facets, generic connect/disconnect/ get_connections, generic event-routing operations.

Repo: crates/corba-ccm/src/lwccm.rs::disabled_by — the introspection rows of §13.3 as a name list, plus prefix recognition of the type-specific port operations (provide_<name>, connect_<name>, disconnect_<name>, get_connection(s)_<name>, subscribe_<name>, unsubscribe_<name>, get_consumer_<name>). The generic counterparts — provide_facet, connect, disconnect, get_consumer, subscribe, unsubscribe, connect_consumer — stay, because §13.3 keeps exactly those. The operations themselves remain declared on the equivalent interface (§13.1); nothing is removed.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ the_type_specific_port_operations_are_disabled_and_the_generic_ones_are_not, both_connection_getters_are_disabled_the_generic_one_as_introspection, a_bare_prefix_is_not_an_operation_name} + crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_keeps_the_type_specific_operations (the operations stay declared).

Status: done

§13.4-§13.6 No Segmentation/Transactions/Security

Spec: §13.4, p. 277 (PDF) — “Exclude support for CIDL”, “Exclude composition”, “Remove locator support”, “Restrict CIF metamodel to a single segment per implementation”. §13.5, p. 278 — “Disable the get_rollback_only, get_user_transaction, and set_rollback_only operations in the CCMContext interface”. §13.6, p. 278 — “Disable the get_caller_principal and is_caller_in_role operations in the CCMContext interface”.

Repo: crates/corba-ccm/src/lwccm.rs — composition_exclusion rejects every CIDL composition, MAX_SEGMENTS_PER_IMPLEMENTATION carries the 1:1 multiplicity from §13.4, and disabled_by reports the three transaction and the two credential operations of CCMContext. The extended forms stay in crates/corba-ccm/src/cidl.rs, crates/corba-ccm-ejb/src/tx.rs and crates/corba-csiv2/ and are held out of the profile by these checks.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ a_session_composition_is_still_excluded_because_cidl_is_gone, the_cif_metamodel_holds_one_segment_per_implementation, the_three_transaction_operations_of_ccmcontext_are_disabled, the_two_credential_operations_of_ccmcontext_are_disabled, get_ccm_home_survives_beside_the_disabled_ccmcontext_operations}.

Status: done

§13.7 No Configurators

Spec: §13.7, p. 279 (PDF) — removed: Configurator iface, StandardConfigurator, HomeConfiguration.

Repo: crates/ccm/src/lightweight.rs::filter_to_lightweight removes configure/set_configuration/configuration_complete from the equivalent interface (§13.7 removes the Configurator and StandardConfigurator interfaces outright); crates/corba-ccm/src/lwccm.rs additionally reports set_configurator on HomeConfiguration as disabled.

Tests: crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_drops_configurator_operations, crates/corba-ccm/src/lwccm.rs::tests::every_other_disabled_operation_raises_bad_operation.

Status: done

§13.8-§13.9 No Proxy Homes / Home Finders

Spec: §13.8, p. 279 (PDF) — “Exclude support for proxy homes” (§8.2.10 + §9.4.1.3 ProxyHomeRegistration). §13.9, p. 279 — “Disable support for the HomeFinder interface and the ComponentHomeFinder parameter value to the ORB::resolve_initial_references operation” + “Disable the get_home_registration operation in the CCM2Context interface”.

Repo: crates/corba-ccm/src/lwccm.rs::disabled_by reports register_proxy_home under §13.8 and the three find_home_by_* operations plus get_home_registration under §13.9. The extended form of the home finder lives in crates/corba-ccm/src/home.rs::ComponentHomeFinder (§6.8) and is held out of the profile by this check; register_home / unregister_home from §9.4.1.2 are named by neither table and stay.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ register_proxy_home_is_disabled, the_home_finder_operations_and_home_registration_are_disabled, register_home_survives_because_only_the_proxy_form_is_excluded}.

Status: done

§13.10 Additional Restrictions

Spec: §13.10, p. 280 (PDF) — misc restrictions of the extended model.

Repo: crates/ccm/src/lightweight.rs::filter_to_lightweight (filter pipeline) + doc markers in crates/corba-ccm/src/lib.rs::conformance::{LWCCM_RESTRICTIONS_ENFORCED, LWCCM_FILTER_ACTIVE}.

Tests: crates/corba-ccm/src/lib.rs::conformance_tests::lwccm_restrictions_marker_matches_spec, lwccm_filter_marker_matches_spec.

Status: done — filter pipeline + specific restriction markers stated.


§14 Deployment PSM for CCM

§14 Deployment PSM for CCM

Spec: §14, pp. 281-300 (PDF) — D&C mapping (formal/2006-04-02), component interface description, PlanSubcomponentPortEndpoint, Application, RepositoryManager, SatisfierProperty, IDL/XML transformation rules.

Repo: crates/corba-dnc/src/{plan,node,execution,container_host, repository,xml}.rs.

Tests: crates/corba-dnc/src/plan.rs::tests::{ valid_plan_passes_validation, instance_with_unknown_impl_fails, connection_with_unknown_instance_fails, co_location_with_unknown_instance_fails}, crates/corba-dnc/src/container_host.rs::tests::{ full_lifecycle_round_trip, install_creates_container_on_demand, entity_and_session_share_host, duplicate_install_rejected}, crates/corba-dnc/src/repository.rs::tests::{ install_and_find_round_trip, list_packages_returns_all_labels}.

Status: done


§15 Deployment IDL for CCM

§15 Deployment IDL for CCM

Spec: §15, pp. 301-314 (PDF) — deployment IDL definitions (Deployment::*).

Repo: Deployment::ExecutionManager + Deployment::DomainApplicationManager + Deployment::DomainApplication in crates/corba-dnc/src/execution.rs; Deployment::NodeManager + Deployment::NodeApplicationManager + Deployment::NodeApplication in crates/corba-dnc/src/node.rs; Deployment::RepositoryManager in crates/corba-dnc/src/repository.rs; the descriptor structures in crates/corba-dnc/src/plan.rs.

Tests: crates/corba-dnc/src/execution.rs::tests::{ full_lifecycle_round_trip, execution_manager_lists_prepared_plans, invalid_plan_rejected_at_prepare, double_start_fails, destroy_before_running_fails} — the operation sequence preparePlan/startLaunch/finishLaunch/destroyApplication of the §15 IDL; crates/corba-dnc/src/node.rs::tests::{ prepare_plan_then_start_launch, register_and_unregister_application, destroy_application_clears_active, unregister_unknown_returns_none}; crates/corba-dnc/src/repository.rs::tests::{ install_and_find_round_trip, install_overwrites_duplicate, delete_existing_returns_true, delete_unknown_returns_false}.

Status: done


§16 XML Schema for CCM

§16 XML Schema for CCM

Spec: §16, p. 315ff (PDF) — XSD schema for deployment packages.

Repo: crates/corba-dnc/src/xml.rs (XML codec for deployment plans following the §16 schema).

Tests: crates/corba-dnc/src/xml.rs::tests::{parses_minimal_plan, parses_multiple_artifacts, co_locate_with_parsed, missing_root_tag_returns_expected_tag, validation_fails_on_unknown_impl_reference}.

Status: done


Audit status

71 done / 0 partial / 0 open / 0 blocked / 4 n/a (informative).

Test run:

  • cargo test -p zerodds-ccm — 19 lib tests + 34 tests in tests/equivalent_idl.rs + 1 doc test green.
  • cargo test -p zerodds-corba-ccm — 201 lib tests + 3 tests in tests/pi_service_contexts.rs + 1 doc test green.
  • cargo test -p zerodds-corba-ccm-lib --lib — 23 tests green.
  • cargo test -p zerodds-corba-ccm-ejb --lib — 25 tests green.
  • cargo test -p zerodds-corba-dnc --lib — 30 tests green.
  • cargo test -p zerodds-corba-codegen --lib — 38 tests green (skeleton/stub generator).
  • cargo test -p zerodds-corba-rust --test snapshot_codegen — 15 tests green.
  • cargo test -p zerodds-corba-ir --lib — 19 tests green.
  • cargo test -p zerodds-corba-codegen — 93 tests green (the Annex A.1 binding for Java).

Open items: none.

OMG CCM 4.0 — Spec-Coverage

Spec: OMG CCM 4.0 (315 Seiten, OMG formal/06-04-01).

Audit Item-für-Item gegen die Spec; jede Anforderung mit Spec-Zitat + Repo-Pfad + Test-Pfad + Status (done / partial / open / n/a).

Kontext: CCM 4.0 ist die Master-Spec hinter AMI4CCM (siehe omg-ami4ccm-1.1.md) und DDS4CCM (siehe dds4ccm-1.1.md). Sie umfasst das Component Model (§6), CIDL (§7), das CCM Implementation Framework (§8 CIF), das Container Programming Model (§9), die EJB-Integration (§10), das IFR-Metamodel (§11), das Lightweight-CCM-Profil (§13) und das Deployment-PSM/-IDL/-XML (§14-§16). ZeroDDS implementiert diesen Stack vollständig in Pure Rust — inklusive des CORBA-ORB, des CCM-Containers und des D&C-Subsystems, auf die der Container-Anteil der Spec aufsetzt.

Die §6-Equivalent-IDL-Transformation deckt zugleich den Migrations-Pfad ab: alte CCM-IDL-Files lassen sich via Equivalent-IDL in Pure-DDS-Welten überführen — mit oder ohne den vollen Container-Stack. Die Components::*-Core-Datentypen (CCMObject, Cookie, ConnectionDescription, etc.) sind als Rust-Modelle vorhanden.

Implementation:


§1 Scope

§1 Scope Statement

Spec: §1, S. 1 (PDF) — “This specification defines: The syntax and semantics of a component model (Chapter 6) […] A language to describe the structure and state of component implementations (Chapter 7 CIDL) […] A programming model for constructing component implementations (Chapter 8) […] A runtime environment (Chapter 9) […] Interaction with EJB (Chapter 10) […] Meta-data for deployment (Chapter 14) […] A lightweight subset (Chapter 13).”

Repo: ZeroDDS deckt: - §6 Component Model = Equivalent-IDL über den AST aus crates/idl-parse/ + crates/idl-lower/. - §7 CIDL via crates/corba-ccm/src/cidl.rs. - §8 Programming Model via crates/corba-ccm-lib/. - §9 Runtime via crates/corba-ccm/src/container.rs. - §10 EJB-Interaction via crates/corba-ccm-ejb/. - §13 Lightweight Profile: Equivalent-IDL-Filter in crates/ccm/src/lightweight.rs, Profil-Restriktionen in crates/corba-ccm/src/lwccm.rs. - §14 Deployment via crates/corba-dnc/. - Conformance-Marker crates/corba-ccm/src/lib.rs::conformance.

Tests: crates/corba-ccm/src/lib.rs::conformance_tests::{ ccm_conformance_basic_level_marker_matches_spec, ccm_conformance_basic_level_java_marker_matches_spec, lightweight_ccm_level_marker_matches_spec, lwccm_restrictions_marker_matches_spec, lwccm_filter_marker_matches_spec, all_markers_are_distinct}.

Status: done — alle Sub-Stacks vorhanden + Conformance-Marker am Crate-Niveau ausgewiesen.


§2 Conformance and Compliance

§2 Conformance Point 1: CORBA COS Vendor

Spec: §2 Punkt 1 — Lifecycle/Transaction/Security-Änderungen.

Repo: Spec-Punkte teilweise abgedeckt durch Service-Crates: - Lifecycle via crates/corba-ccm/src/lifecycle.rs (ReceptacleManager + Configurator + Container-State). - Transaction via crates/corba-ccm-ejb/src/tx.rs (TX-Marker + Begin/Commit/Rollback-Hooks). - Security via crates/corba-csiv2/ (CSIv2-Stack: SAS + GSSUP + TLS-Bind). - Naming als zusätzlicher COS-Service in crates/corba-cosnaming/. - Event als zusätzlicher COS-Service in crates/corba-cos-event/.

Tests: crates/corba-ccm/src/lifecycle.rs::tests::facet_lifetime_passes_when_alive, ::receptacle_simplex_connect_then_disconnect, ::configurator_set_get_roundtrip; crates/corba-ccm-ejb/src/tx.rs::tests::cos_to_jta_round_trip_for_all_states, ::begin_then_commit_succeeds; crates/corba-csiv2/src/sas.rs::tests::sas_msg_type_values_match_spec; crates/corba-cosnaming/src/context.rs::tests::bind_and_resolve_simple; crates/corba-cos-event/src/channel.rs::tests::push_fan_out_to_multiple_consumers, ::pull_supplier_dequeues_events.

Status: done — die drei in §2 Punkt 1 genannten COS-Bereiche (Lifecycle/Transaction/Security) sind abgedeckt; weitere COS-Services (Naming, EventService) als Bonus.

§2 Conformance Point 2: CORBA Component Vendor (Basic/Lightweight)

Spec: §2 Punkt 2 — Basic Level oder Lightweight Profile.

Repo: Equivalent-IDL für Components in crates/idl-parse/ + LwCCM-Filter in crates/ccm/src/lightweight.rs + Container-Lifecycle in crates/corba-ccm/src/{container,lifecycle}.rs (ReceptacleManager, Configurator, Generic-Op-Skeletons) + ORB-Singleton in crates/corba-ccm/src/orb_core.rs::Orb.

Tests: crates/ccm/tests/equivalent_idl.rs::a_plain_component_inherits_ccmobject, ::provides_yields_a_provide_operation_returning_the_facet, ::uses_simplex_yields_connect_disconnect_and_get_connection, ::the_whole_trader_component_yields_every_operation_the_clauses_name; crates/corba-ccm/src/lifecycle.rs::tests::facet_lifetime_rejects_use_after_destroy, ::receptacle_multiplex_allows_multiple_connects; crates/corba-ccm/src/orb_core.rs::tests::orb_init_yields_running, ::orb_destroy_transitions_to_shutdown; crates/corba-ccm/src/lwccm.rs::tests::only_session_and_service_components_are_supported, ::the_lightweight_filter_reports_a_component_it_would_empty.

Status: done — IDL-3-Aspekte + Container-Lifecycle + ORB- Stub-Layer abgedeckt.

§2 Conformance Point 3: Optional Extended Level

Spec: §2 Punkt 3 — Extended Level (PSS + zusätzliche Configurator-/Lifecycle-Features).

Repo: Voller Wire-up durch: - Persistent State Service via crates/corba-ccm/src/pss.rs (StorageHome + PssSession + Pid + TxHandle + PssTxStatus). Tx-aware store(pid, value) / remove(pid) schreiben in Pending-Buffer; commit(tx) wendet auf StorageHome an, rollback(tx) verwirft. load(pid) ist tx-aware (Pending-Pfad bei aktiver Tx). - Configurator via crates/corba-ccm/src/lifecycle.rs::Configurator. - Conformance-Marker corba-ccm::conformance::CCM_OPTIONAL_EXTENDED_LEVEL.

Tests: crates/corba-ccm/src/pss.rs::tests::* (13 Tests, davon 4 Tx-aware: pss_begin_commit_roundtrip_persists_pending_writes, pss_rollback_restores_prev_state, pss_load_after_store_in_tx_returns_pending_value, pss_tx_status_transitions_active_committed_rolledback) + crates/corba-ccm/src/lifecycle.rs::tests::configurator_* + Cross-Ref Conformance-Marker- Tests.

Status: done — voller PSS-Tx-Lifecycle (begin/commit/rollback + Pending-Buffer + Tx-aware load/store/remove)..

§2 Conformance Point 4: Basic Level non-Java

Spec: §2 Punkt 4 — IDL-Extensions + CIDL + Container + XML-D&C.

Repo: IDL-Extensions+CIDL in crates/idl-parse/ + crates/idl-lower/ + crates/corba-ccm/; Container-Lifecycle in crates/corba-ccm/src/lifecycle.rs; XML-D&C in crates/corba-ccm-lib/+corba-dnc/; ORB-Stub-Layer (Lifecycle/Threading/Policy) in crates/corba-ccm/src/orb_core.rs.

Tests: crates/ccm/tests/equivalent_idl.rs::a_component_with_supports_inherits_ccmobject_and_the_supported_ones, ::a_keyed_home_yields_the_four_operations_and_inherits_nothing; crates/corba-ccm/src/cidl.rs::tests::all_four_composition_categories_distinct, ::entity_composition_with_storage_valid; crates/corba-ccm/src/lifecycle.rs::tests::configurator_registry_register_and_lookup; crates/corba-dnc/src/xml.rs::tests::parses_minimal_plan, ::validation_fails_on_unknown_impl_reference; crates/corba-ccm/src/orb_core.rs::tests::orb_set_get_policy_round_trip.

Status: done — IDL+CIDL+D&C-Modell + ORB-Stub + Container- Lifecycle abgedeckt.

§2 Conformance Point 5: Basic Level Java

Spec: §2 Punkt 5 — EJB1.1 + java-to-IDL.

Repo: EJB-Integration in crates/corba-ccm-ejb/ (ConnectorBean+NamingGlue+StubGen+TX); Java-Sprachabbildung in crates/lang-rules/src/emit/java.rs; Annex-A.1-CORBA-Java-Codegen in crates/corba-codegen/src/stub.rs + crates/corba-codegen/src/skeleton.rs.

Tests: crates/corba-codegen/src/stub.rs::tests::{ java_out_and_inout_take_a_holder_and_in_does_not, a_user_type_takes_the_generated_holder_beside_it, raises_reaches_the_java_throws_clause}, crates/corba-codegen/src/skeleton.rs::tests::java_switches_on_the_method_string_and_throws_the_omg_class, crates/corba-ccm-ejb/src/stub_gen.rs::tests::{ stateful_bean_has_postconstruct_and_predestroy, stateless_bean_has_no_lifecycle_hooks}.

Status: done — EJB-Integration, java-to-IDL und die Annex-A.1-CORBA-Bindung für Java stehen auf existierenden Pfaden.

§2 Conformance Point 6: Extended Level Java

Spec: §2 Punkt 6 — Persistent State Service + §6.x-Extensions.

Repo: Voller PSS-Lifecycle (Cross-Ref CP3) via crates/corba-ccm/src/pss.rs; Java-Bindung über crates/corba-ccm-ejb/ + Annex-A.1-Codegen, plus Bind-Helper crates/corba-ccm-ejb/src/connector_bean.rs::pss_session_for_bean der einen ConnectorBean an eine PssSession koppelt und das Tupel (bean.name, bean.component_id, tx_status) als PssBeanBinding liefert.

Tests: crates/corba-ccm/src/pss.rs::tests::* (13 Tests, Cross-Ref CP3) + crates/corba-ccm-ejb/src/connector_bean.rs::tests::connector_bean_with_pss_session_binds_correctly.

Status: done — PSS-Tx-Lifecycle (CP3) plus EJB-Bind-Helper am ConnectorBean.

§2 Conformance Point 7: Lightweight CCM (LwCCM)

Spec: §2 Punkt 7 — Subset-Profile aus §13.

Repo: Equivalent-IDL-Filter crates/ccm/src/lightweight.rs + Profil-Restriktionen crates/corba-ccm/src/lwccm.rs + Container-Lifecycle in crates/corba-ccm/src/lifecycle.rs + Conformance-Marker corba-ccm::conformance::LIGHTWEIGHT_CCM_LEVEL.

Tests: crates/corba-ccm/src/lwccm.rs::tests::* (§13- Restriktionen), crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_drops_configurator_operations, crates/corba-ccm/src/lifecycle.rs::tests::*, crates/corba-ccm/src/lib.rs::conformance_tests::lightweight_ccm_level_marker_matches_spec.

Status: done — IDL-Subset + Filter + Container-Lifecycle + Conformance-Marker live.

§2 Conformance Point 8: ORB-Vendor

Spec: §2 Punkt 8 — Component-Specific-Erweiterungen am ORB.

Repo: crates/corba-ccm/src/orb_core.rs::Orb mit Component-Specific-Erweiterungen am ORB-Singleton: with_interceptor_registry(Arc<InterceptorRegistry>) / interceptor_registry() (Cross-Ref corba-3.3.md §16), with_messaging_policy(MessagingPolicy) / messaging_policies() (Cross-Ref §17), with_compression(CompressionAlgorithm) / compression() (Cross-Ref §18). Plus Default-Lifecycle/ Threading-Modes/Policy-Domain-Manager. Conformance-Marker corba-ccm::conformance::CCM_ORB_VENDOR_STUB.

Tests: crates/corba-ccm/src/orb_core.rs::tests::{orb_vendor_config_interceptor_registry, orb_vendor_config_compression_and_messaging_policies} + crates/corba-ccm/src/orb_core.rs::tests::orb_set_get_policy_round_trip + Cross-Ref Conformance-Marker-Tests.

Status: done — ORB-Vendor-Konfigurations-Surface für alle drei CCM-relevanten Component-Specific-Erweiterungen (PI/Messaging/ Compression).


§3 References

§3.1 Normative References

Spec: §3.1, S. 2-4 (PDF) — CORBA 2.6, CORBA 3.0, IDL/CDR-Specs, EJB1.1, MOF, XMI.

Repo: Diese externen Specs werden in den Konsumenten-Items §7-§16 in Pure Rust abgedeckt (eigene Impls, keine externen MOF/EJB-Bibliotheks- Abhängigkeiten); die §6-Equivalent-IDL nutzt die zerodds_ast-Layer als Eingabe.

Tests: —

Status: n/a (informative) — Externe normative Referenz-Liste; Auswirkungen in den Konsumenten-Items §7-§16.

§3.2 Non-normative References

Spec: §3.2 — CCM-Predecessor-Specs.

Repo: —

Tests: —

Status: n/a (informative) — Non-normative Background-Referenzen.


§4 Terms and Definitions

§4 Component / Connector / Container / Executor / Facet / etc.

Spec: §4, S. 4-7 (PDF) — Glossar.

Repo: Crate-Doc von crates/ccm/src/lib.rs referenziert die Begriffe; Component + Facet + Receptacle + Event Source/Sink sind in der Transformation aus zerodds_ast::ComponentRole- Varianten gespiegelt.

Tests: —

Status: n/a (informative) — Glossar; Begriffe sind in den Konsumenten-Items referenziert.


§5 Symbols

§5 Abbrev (CCM/CIDL/CIF/CMT/CORBA/COS/…)

Spec: §5, S. 7-8 (PDF) — Abkürzungs-Liste.

Repo: —

Tests: —

Status: n/a (informative) — Symbol-Tabelle; ohne Code-Mapping.


§6 Component Model

§6.1 Component Model Overview

Spec: §6.1, S. 9 (PDF) — Components als IDL-Meta-Type, Levels (basic + extended), Ports (Facets/Receptacles/Event-Sources/Event- Sinks/Attributes), Component Identity, Homes.

Repo: crates/ccm/src/transform.rs::transform_component deckt das Component-Meta-Modell vollständig ab; ImplKind=InterfaceKind::Plain, weil das Equivalent-Interface nicht local ist (Spec §6.3.2).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_plain_component_inherits_ccmobject, the_whole_trader_component_yields_every_operation_the_clauses_name, a_keyless_home_yields_an_implicit_inheriting_keylesscmhome, a_component_attribute_is_left_alone} — die vier Meta-Modell-Achsen (Component-als-Interface, alle vier Port-Arten, Home, Attribute).

Status: done

§6.1.1 Component Levels (Basic vs Extended)

Spec: §6.1.1, S. 9 (PDF) — “There are two levels of components: basic and extended. […] Basic components are not allowed to offer facets, receptacles, event sources and sinks. They may only offer attributes.”

Repo: transform_component arbeitet generic — Caller bestimmt aus comp.body-Inhalt, ob Component basic oder extended ist; die Transformation ist für beide korrekt (basic: nur Attribute → keine Provide-/Connect-Ops).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_basic_component_carries_its_attributes_and_no_port_operation, a_component_attribute_is_left_alone, the_whole_trader_component_yields_every_operation_the_clauses_name} — Basic (nur Attribute, keine Port-Ops) gegen Extended (alle Port-Ops).

Status: done

§6.1.2 Ports

Spec: §6.1.2, S. 9-10 (PDF) — Vier Port-Typen + Attributes.

Repo: Alle vier (Facets/Receptacles/Event-Sources/Event-Sinks) + Attributes werden in transform_component aus ComponentExport::{Provides,Uses,Emits,Publishes,Consumes,Attribute} transformiert.

Tests: crates/ccm/tests/equivalent_idl.rs::the_whole_trader_component_yields_every_operation_the_clauses_name — ein Component mit allen vier Port-Arten plus Attribut.

Status: done

§6.1.3 Components and Facets — Equivalent Interface

Spec: §6.1.3, S. 10 (PDF) — “The component has a single distinguished reference whose interface conforms to the component definition. This reference supports an interface, called the component’s equivalent interface, that manifests the component’s surface features to clients.”

Repo: crates/ccm/src/transform.rs::ComponentEquivalent — equivalent_interface ist genau diese eine ausgezeichnete Referenz: transform_component gibt den Component-Knoten selbst zurück, mit InterfaceKind::Interface statt InterfaceKind::Component.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_component_equivalent_is_comparable, a_plain_component_inherits_ccmobject} — der erste prüft die Identität equivalent_interface == component, der zweite den Kind-Wechsel.

Status: done

§6.1.4 Component Identity

Spec: §6.1.4, S. 11 (PDF) — Component-Reference + Facet-References identifizieren Component-Instanz; same_component-Operation auf Components::Navigation + is_equivalent_component_kind/ get_component_def.

Repo: crates/corba-ccm/src/component_def.rs::ComponentDef:: {is_equivalent_component_kind, get_component_def_repo_id}. Components::Navigation::same_component selbst bleibt ORB-bound (Object-Reference-Vergleich), das Type-Identity-Sub-Pattern ist abgedeckt.

Tests: crates/corba-ccm/src/component_def.rs::tests::is_equivalent_component_kind_matches_repo_id, get_component_def_repo_id_returns_repo_id.

Status: done — Type-Identity-Operations implementiert; Object-Reference-same_component bleibt ORB-bound.

§6.1.5 Component Homes

Spec: §6.1.5, S. 11 (PDF) — Home als Manager für Component- Instanzen.

Repo: crates/ccm/src/transform.rs::transform_home.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_keyless_home_yields_an_implicit_inheriting_keylesscmhome, a_keyed_home_yields_the_four_operations_and_inherits_nothing, a_derived_home_inherits_the_base_homes_explicit_interface}.

Status: done

§6.2 Component Definition

Spec: §6.2, S. 11 (PDF) — “A component definition in IDL implicitly defines an interface that supports the features defined in the component definition body.”

Repo: crates/ccm/src/transform.rs::transform_component.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_component_equivalent_is_comparable, the_whole_trader_component_yields_every_operation_the_clauses_name} — die Component-Deklaration wird zur Interface-Deklaration, und der Deklarations-Body trägt die Features, die das Interface dann anbietet.

Status: done

§6.3 Component Declaration — Basic Components

Spec: §6.3.1, S. 11 (PDF) — Basic-Component-Pattern (<component_dcl> restricted form "component" <identifier> [<supported_interface_spec>] "{" {<attr_dcl> ";"}* "}").

Repo: Eingabe ist der InterfaceNode mit InterfaceKind::Component aus crates/idl-lower/; crates/ccm/src/transform.rs::transform_component transformiert die Basic-Form (nur attr_dcl im Body, optional supports) ohne eine einzige Port-Operation zu erzeugen.

Tests: crates/ccm/tests/equivalent_idl.rs::a_basic_component_carries_its_attributes_and_no_port_operation — beide Attribute bleiben, die Operations-Liste ist leer, die supports-Liste steht hinter Components::CCMObject.

Status: done

§6.3.2.1 Equivalent IDL — Simple Declaration

Spec: §6.3.2.1, S. 12 (PDF) — component component_name { ... }; → interface component_name : Components::CCMObject { ... };.

Repo: crates/ccm/src/transform.rs::transform_component — die §6.3.2-Basisliste; ohne deklarierte Basis steht Components::CCMObject darin.

Tests: crates/ccm/tests/equivalent_idl.rs::a_plain_component_inherits_ccmobject.

Status: done

§6.3.2.2 Equivalent IDL — Supported Interfaces

Spec: §6.3.2.2, S. 12 (PDF) — component <name> supports <I1>, <I2> { ... } → interface <name> : Components::CCMObject, <I1>, <I2> { ... }.

Repo: crates/ccm/src/transform.rs::transform_component hängt die supports-Liste an Components::CCMObject an.

Tests: crates/ccm/tests/equivalent_idl.rs::a_component_with_supports_inherits_ccmobject_and_the_supported_ones.

Status: done

§6.3.2.3 Equivalent IDL — Inheritance

Spec: §6.3.2.3, S. 12 (PDF) — component <name> : <base_name> { ... } → interface <name> : <base_name> { ... } (CCMObject ist transitiv über <base_name>).

Repo: crates/ccm/src/transform.rs::transform_component setzt Components::CCMObject nur, wenn die deklarierte Basisliste leer ist — sonst bleibt <base_name> allein stehen.

Tests: crates/ccm/tests/equivalent_idl.rs::a_derived_component_inherits_its_base_and_not_ccmobject.

Status: done

§6.3.2.4 Equivalent IDL — Inheritance + supports

Spec: §6.3.2.4, S. 13 (PDF) — component <name> : <base> supports <I1>, <I2> { ... } → interface <name> : <base>, <I1>, <I2> { ... }.

Repo: crates/ccm/src/transform.rs::transform_component setzt zuerst <base>, dann die supports-Liste.

Tests: crates/ccm/tests/equivalent_idl.rs::a_derived_component_with_supports_lists_the_base_first_and_then_the_supported — prüft die Reihenfolge [B, I1, I2] und dass Components::CCMObject nicht zusätzlich auftaucht.

Status: done

§6.3.3 Component Body

Spec: §6.3.3, S. 13 (PDF) — “Declarations for facets, receptacles, event sources, event sinks and attributes all map onto operations on the component’s equivalent interface.”

Repo: crates/ccm/src/transform.rs::transform_component — Schleife über die ComponentRole-Ports des Deklarations-Bodys.

Tests: crates/ccm/tests/equivalent_idl.rs::the_whole_trader_component_yields_every_operation_the_clauses_name — ein Component mit provides/uses/uses multiple/emits/ publishes/consumes/attribute; der Test zählt jede daraus entstehende Operation auf dem Equivalent-Interface auf.

Status: done

§6.4.1 Facets — Equivalent IDL

Spec: §6.4.1, S. 13 (PDF) — provides <interface_type> <name>; → <interface_type> provide_<name>(); auf dem Equivalent-Interface.

Repo: crates/ccm/src/transform.rs::transform_component (ComponentRole::Facet-Zweig).

Tests: crates/ccm/tests/equivalent_idl.rs::{ provides_yields_a_provide_operation_returning_the_facet, the_whole_trader_component_yields_every_operation_the_clauses_name}.

Status: done

§6.4.2 Semantics of Facet References

Spec: §6.4.2, S. 13-14 (PDF) — Behavior-Constraints für Facet-Refs (nil-allowed, Lifecycle bounded by component).

Repo: IDL-Op-Signaturen via component_def.rs::FacetDef + Lifetime-Constraint-Validator crates/corba-ccm/src/lifecycle.rs::{check_facet_lifetime, FacetLifetimeViolation}. Container-Runtime nutzt diesen Check um Use-After-Destroy + Orphan-References zu rejecten.

Tests: crates/corba-ccm/src/lifecycle.rs::tests::{facet_lifetime_passes_when_alive, facet_lifetime_rejects_use_after_destroy, facet_lifetime_rejects_orphaned}.

Status: done — IDL-Op-Mapping + Lifetime-Constraint-Check live.

Spec: §6.4.3, S. 14-16 (PDF) — Components::Navigation-Interface mit provide_facet/get_all_facets/get_named_facets/ same_component. CCMObject inherits Navigation.

Repo: crates/corba-ccm/src/component_def.rs::ComponentDef:: {provide_facet, get_all_facets, get_named_facets} (Generic-Op Skeleton-Implementation auf der Component-Definition; Caller-Layer bindet interface_id an konkrete ORB-Object-Reference). same_component bleibt ORB-bound (Object-Reference-Vergleich).

Tests: crates/corba-ccm/src/component_def.rs::tests::{provide_facet_returns_facet_by_name, provide_facet_returns_none_for_unknown, get_all_facets_returns_complete_list, get_named_facets_filters_by_names}.

Status: done — Inheritance-Modell + Generic-Operations als Skeleton-Pfad live; Object-Reference-same_component ORB-bound.

§6.4.3.1 get_component (CORBA::Object enhancement)

Spec: §6.4.3.1, S. 14 (PDF) — Erweiterung von CORBA::Object um Object get_component()-Pseudo-IDL-Op. ORB liefert das auch ohne Component-Vendor.

Repo: crates/corba-ccm/src/home.rs — FacetRef::get_component liefert die Component-Referenz zu einer Facet-Referenz, ComponentRef::get_component liefert dieselbe Referenz zurück; der GIOP-Operationsname steht als crates/corba-ccm/src/home.rs::GET_COMPONENT_GIOP_OPERATION.

Tests: crates/corba-ccm/src/home.rs::tests::{ get_component_on_a_facet_reference_returns_the_component, get_component_on_a_component_reference_returns_the_same_reference, get_component_travels_as_the_giop_operation_named_component}.

Status: done

§6.4.4 Provided References and Component Identity

Spec: §6.4.4, S. 17 (PDF) — same_component Operation auf Navigation; default-Implementation über Container-Servant-Framework.

Repo: crates/corba-ccm/src/home.rs — ComponentRef::same_component vergleicht Component-Typ und Instanz-Identität, FacetRef::same_component delegiert an die besitzende Component, wie §6.4.4 es für Facets fordert, die Navigation erben.

Tests: crates/corba-ccm/src/home.rs::tests::{ two_facets_of_one_instance_are_the_same_component, a_facet_answers_same_component_as_the_component_that_owns_it, two_instances_of_one_component_type_are_not_the_same_component, one_instance_id_under_two_component_types_is_not_the_same_component}.

Status: done

§6.4.5 Supported Interfaces

Spec: §6.4.5, S. 17-19 (PDF) — supports <I> widening + narrowing-Semantik; KeylessCCMHome::create_component liefert CCMObject, narrowing zu I.

Repo: Inheritance-Modell deckt das ab (component_bases); Type- Identity-Narrowing als Runtime-Helper in crates/corba-ccm/src/component_def.rs::ComponentDef:: {supports_interface, supported_interface_repo_ids}. Object- Reference-Widening (POA-is_a) bleibt ORB-bound.

Tests: crates/corba-ccm/src/component_def.rs::tests::{supports_interface_returns_true_for_listed_iface, supports_interface_returns_false_for_unknown, supported_interface_repo_ids_returns_full_list}.

Status: done — Inheritance + Type-Identity-Narrowing-Helper implementiert; Object-Reference-Widening ORB-bound.

§6.5.1 Receptacles — Equivalent IDL

Spec: §6.5.1, S. 19-20 (PDF) — Simplex: connect_<name>(in T) raises (AlreadyConnected, InvalidConnection), T disconnect_<name>() raises (NoConnection), T get_connection_<name>(). Multiplex: Cookie connect_<name>(in T) raises (ExceededConnectionLimit, InvalidConnection), T disconnect_<name>(in Cookie), <name>Connections get_connections_<name>().

Repo: crates/ccm/src/transform.rs::uses_ops (multiplex/simplex branch).

Tests: crates/ccm/tests/equivalent_idl.rs::{ uses_simplex_yields_connect_disconnect_and_get_connection, uses_multiple_returns_a_cookie_and_the_plural_getter}.

Status: done

§6.5.2 Receptacles — Behavior

Spec: §6.5.2, S. 20-22 (PDF) — Connect/disconnect-Verhalten, Cookie-Semantik.

Repo: Components::Cookie modelliert in crates/ccm/src/model.rs + Connect/Disconnect-State-Machine in crates/corba-ccm/src/lifecycle.rs::{ReceptacleManager, ConnectionState, ConnectionError} mit Simplex-vs-Multiplex- Constraints (Simplex-Double-Connect rejected, Disconnect-Unknown-Id rejected).

Tests: crates/ccm/src/model.rs::tests::{cookie_new_stores_octet_seq, cookie_truncate_preserves_octet_seq, receptacle_description_supports_simplex_and_multiplex} + crates/corba-ccm/src/lifecycle.rs::tests::{receptacle_simplex_connect_then_disconnect, receptacle_simplex_double_connect_rejected, receptacle_multiplex_allows_multiple_connects, receptacle_disconnect_unknown_id_rejected, receptacle_double_disconnect_rejected}.

Status: done — Datenmodell + Connect/Disconnect-State-Machine live.

§6.5.3 Receptacles Interface (generic)

Spec: §6.5.3, S. 22-24 (PDF) — Components::Receptacles Generic- Interface. CCMObject erbt davon.

Repo: crates/corba-ccm/src/component_def.rs::ComponentDef:: {get_all_receptacles, get_named_receptacles} (Generic-Op-Skeleton). connect/disconnect/get_connections (Lifecycle) bleiben in der Container-Runtime (siehe §6.5.2).

Tests: crates/corba-ccm/src/component_def.rs::tests::{get_all_receptacles_returns_complete_list, get_named_receptacles_filters}.

Status: done — Modell + Generic-Lookup-Operations als Skeleton-Pfad live; Connect-Lifecycle weiter Container-Runtime.

§6.6.1 Event Types — Equivalent IDL

Spec: §6.6.1.1, S. 24-25 (PDF) — eventtype A {...}; eventtype B : A {...}; → valuetype A : Components::EventBase {...}; valuetype B : A {...}; interface BConsumer : Components::EventConsumerBase { void push_B(in B the_b); };.

Repo: crates/ccm/src/transform.rs::transform_event_type.

Tests: crates/ccm/tests/equivalent_idl.rs::{ the_first_event_type_of_a_chain_inherits_event_base, one_event_type_yields_one_consumer_interface_however_many_ports_name_it, a_plain_valuetype_is_not_an_event_type}.

Status: done

§6.6.1.2 EventBase

Spec: §6.6.1.2, S. 25 (PDF) — module Components { abstract valuetype EventBase { }; };.

Repo: ScopedName-Referenz in crates/ccm/src/transform.rs::transform_event_type — nur der erste Event-Type einer Kette bekommt Components::EventBase.

Tests: crates/ccm/tests/equivalent_idl.rs::the_first_event_type_of_a_chain_inherits_event_base.

Status: done

§6.6.2 EventConsumer Interface

Spec: §6.6.2, S. 25-26 (PDF) — Components::EventConsumerBase mit push_event(in EventBase) raises BadEventType.

Repo: crates/ccm/src/transform.rs::transform_event_type — die Consumer-Basisliste ist Components::EventConsumerBase, solange der Event-Type selbst keine Basis hat; sonst <Base>Consumer, sodass die Consumer-Kette der Event-Kette folgt.

Tests: crates/ccm/tests/equivalent_idl.rs::a_consumer_interface_inherits_event_consumer_base_at_the_root_of_the_chain — TickConsumer : Components::EventConsumerBase und PricedTickConsumer : TickConsumer.

Status: done

§6.6.3 Event Service Provided by Container

Spec: §6.6.3, S. 26 (PDF) — Container-Runtime-Topic — Event-Channels.

Repo: crates/corba-ccm/src/port.rs (PortRegistry + EventStream — die Verbindungstabelle, über die der Container Event-Sources an Event-Sinks bindet) + crates/corba-ccm-lib/src/dds_bridge.rs (Event-Source → DataWriter, Event-Sink → DataReader; die Distribution selbst macht DDS-DCPS in crates/dcps/ statt eines separaten CosEventChannel-Stacks).

Tests: crates/corba-ccm/src/port.rs::tests::{ event_sink_subscription_round_trip, list_event_sinks_unknown_source_empty}, crates/corba-ccm-lib/src/dds_bridge.rs::tests::{ add_mapping_round_trip, mapping_direction_round_trip, duplicate_port_rejected, activate_makes_active}.

Status: done — Container-seitige Event-Verteilung über Port-Registry und DDS-Bridge.

§6.6.4 Event Sources — Publishers and Emitters

Spec: §6.6.4, S. 26-27 (PDF) — Publisher (multi-subscriber) + Emitter (single-subscriber).

Repo: Datenmodell in crates/ccm/src/model.rs (PublisherDescription, EmitterDescription) + Routing-Verhalten über DDS-DCPS Pub/Sub (siehe §6.6.3): Publisher = DataWriter mit mehreren MatchedReaders, Emitter = DataWriter mit OWNERSHIP=EXCLUSIVE zu genau einem Reader. Cross-Ref crates/dcps/src/{publisher,subscriber}.rs. Generic-Lookup-Ops in component_def.rs::{get_all_publishers, get_all_emitters, get_named_publishers, get_named_emitters}.

Tests: crates/ccm/src/model.rs::tests::publisher_description_can_have_multiple_subscribers, crates/corba-ccm/src/component_def.rs::tests::{ get_all_publishers_excludes_emit_only_sources, get_all_emitters_includes_only_emit_only_sources}, crates/corba-ccm-lib/src/dds_bridge.rs::tests::mapping_direction_round_trip.

Status: done — Datenmodell + Routing-Behavior via DCPS live; Generic-Lookup-Operations als Skeleton-Pfad.

§6.6.5 Publisher — Equivalent IDL

Spec: §6.6.5.1, S. 27 (PDF) — publishes <T> <name>; → Cookie subscribe_<name>(in TConsumer consumer) raises (ExceededConnectionLimit); TConsumer unsubscribe_<name>(in Cookie ck) raises (InvalidConnection);.

Repo: crates/ccm/src/transform.rs::publishes_ops.

Tests: crates/ccm/tests/equivalent_idl.rs::publishes_yields_subscribe_returning_a_cookie.

Status: done

§6.6.6 Emitters — Equivalent IDL

Spec: §6.6.6.1, S. 28 (PDF) — emits <T> <name>; → void connect_<name>(in TConsumer consumer) raises (AlreadyConnected); TConsumer disconnect_<name>() raises (NoConnection);.

Repo: crates/ccm/src/transform.rs::emits_ops.

Tests: crates/ccm/tests/equivalent_idl.rs::emits_yields_connect_and_disconnect_and_the_consumer_interface.

Status: done

§6.6.7 Event Sinks — Equivalent IDL

Spec: §6.6.7.1, S. 29 (PDF) — consumes <T> <name>; → TConsumer get_consumer_<name>();.

Repo: crates/ccm/src/transform.rs::transform_component (ComponentRole::EventSink-Zweig).

Tests: crates/ccm/tests/equivalent_idl.rs::consumes_yields_a_get_consumer_operation.

Status: done

§6.6.8 Events Interface (generic)

Spec: §6.6.8, S. 29-32 (PDF) — Components::Events mit get_consumer/subscribe/unsubscribe/connect_consumer/ disconnect_consumer/get_all_consumers/get_all_publishers/ get_all_emitters/etc.

Repo: Datenmodelle (ConsumerDescription, EmitterDescription, PublisherDescription, SubscriberDescription) in crates/ccm/src/model.rs + Generic-Lookup-Operations crates/corba-ccm/src/component_def.rs::ComponentDef:: {get_all_publishers, get_all_emitters, get_named_publishers, get_named_emitters}. Subscribe/Connect-Lifecycle in der Container- Runtime (Spec §6.6.4 / §6.6.5).

Tests: crates/corba-ccm/src/component_def.rs::tests::{get_all_publishers_excludes_emit_only_sources, get_all_emitters_includes_only_emit_only_sources, get_named_publishers_respects_emit_only_flag, get_named_emitters_excludes_publishers}.

Status: done — Modell + Generic-Lookup-Operations als Skeleton-Pfad live; Subscribe/Connect bleibt Container-Runtime.

§6.7.1.1 Home Definitions — No Primary Key

Spec: §6.7.1.1, S. 33 (PDF) — home <h> manages <C> { ... }; → interface <h>Explicit : Components::CCMHome {...}; + interface <h>Implicit : Components::KeylessCCMHome { <C> create() raises (CreateFailure); }; + interface <h> : <h>Explicit, <h>Implicit { };.

Repo: crates/ccm/src/transform.rs::transform_home (keyless- Pfad in build_keyless_implicit).

Tests: crates/ccm/tests/equivalent_idl.rs::a_keyless_home_yields_an_implicit_inheriting_keylesscmhome.

Status: done

§6.7.1.2 Home Definitions — With Primary Key

Spec: §6.7.1.2, S. 34 (PDF) — home <h> manages <C> primarykey <K> { ... }; → 4-Op-Implicit-Iface (create(K key), find_by_primary_key(K key), remove(K key), <K> get_primary_key (<C> comp)).

Repo: crates/ccm/src/transform.rs::build_keyed_implicit.

Tests: crates/ccm/tests/equivalent_idl.rs::a_keyed_home_yields_the_four_operations_and_inherits_nothing.

Status: done

§6.7.1.3 Home — Supported Interfaces

Spec: §6.7.1.3, S. 35 (PDF) — home <h> supports <I> manages <C> {...}; → interface <h>Explicit : Components::CCMHome, <I> {...};.

Repo: crates/ccm/src/transform.rs::transform_home hängt die supports-Liste an Components::CCMHome an.

Tests: crates/ccm/tests/equivalent_idl.rs::a_home_with_supports_puts_the_supported_interfaces_on_its_explicit — die unterstützten Interfaces landen auf dem Explicit-Interface, nicht auf dem Implicit und nicht auf dem Equivalent-Home.

Status: done

§6.7.2 Primary Key Declarations

Spec: §6.7.2, S. 35-36 (PDF) — Primary-Key-Type-Constraints + Components::PrimaryKeyBase.

Repo: crates/ccm/src/validate.rs::validate_primary_key — prüft die 4 Spec-Constraints: (1) Concrete valuetype, (2) erbt von Components::PrimaryKeyBase, (3) keine private-State-Members, (4) keine Interface-Referenzen (konservative Auslegung: jede ScopedName-Type-Referenz wird abgelehnt).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_primary_key_with_a_public_scalar_member_is_accepted, a_primary_key_without_the_base_is_rejected, a_primary_key_with_a_private_member_is_rejected, a_primary_key_holding_an_object_reference_is_rejected, a_primary_key_holding_a_nested_struct_is_accepted, an_abstract_valuetype_is_not_a_primary_key}.

Status: done

§6.7.3 Explicit Operations in Home Definitions

Spec: §6.7.3, S. 36-37 (PDF) — Factory- + Finder-Operations werden auf das Explicit-Interface gemappt mit korrekt erweiterten raises- Klauseln (CreateFailure / FinderFailure).

Repo: crates/ccm/src/validate.rs::apply_factory_finder_body mit InitOp-Struct (Factory- oder Finder-Eintrag mit Name + Params + Caller-raises). Spec §6.7.3.1 Factory: Return-Type = Equivalent-Iface, raises = Components::CreateFailure + Caller- raises. Spec §6.7.3.2 Finder: Return-Type = Equivalent-Iface, raises = Components::FinderFailure + Caller-raises. Alle Params werden auf in-Attribute normalisiert.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_factory_is_emitted_with_create_failure_first_in_its_raises, a_finder_is_emitted_with_finder_failure_and_the_callers_own_raises}.

Status: done

§6.7.4 Home Inheritance

Spec: §6.7.4, S. 37 (PDF) — Derived-Home: <h>Explicit : <base_h>Explicit.

Repo: transform_home setzt explicit_bases auf <base>Explicit wenn home.base.is_some() (base_explicit_name-Helper).

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_derived_home_inherits_the_base_homes_explicit_interface, a_derived_home_with_supports_extends_the_base_explicit}.

Status: done

§6.7.5 Semantics of Home Operations

Spec: §6.7.5, S. 38-39 (PDF) — Orthodox vs Heterodox Operations, Polymorphismus-Regeln.

Repo: crates/corba-ccm/src/home.rs::HomeFinder — die orthodoxen Operationen create (§6.7.5.1 keyless: system-generierte Instanz-ID; §6.7.5.2 keyed: der Primary Key ist die Instanz-ID), find_by_primary_key und remove; crates/corba-ccm/src/container.rs::Container trägt den Instanz-Lifecycle, an dem remove hängt.

Tests: crates/corba-ccm/src/home.rs::tests::{ create_with_user_key_uses_key_as_id, create_without_key_generates_system_id, find_by_primary_key_round_trip, remove_decrements_instance_count, remove_unknown_returns_false}, crates/corba-ccm/src/container.rs::tests::{ install_and_full_lifecycle_round_trip, instance_count_tracks_install_and_remove}.

Status: done

§6.7.6 CCMHome Interface

Spec: §6.7.6, S. 40 (PDF) — interface CCMHome { CORBA::IRObject get_component_def(); CORBA::IRObject get_home_def(); void remove_component(in CCMObject comp) raises (RemoveFailure); };.

Repo: ScopedName-Bezugspunkt in transform_home::explicit_bases. FailureReason als u32 modelliert in crates/ccm/src/model.rs. Generic-Operations get_component_def_repo_id + get_home_def_repo_id in crates/corba-ccm/src/home.rs::HomeDef (IRObject-Lookup-Pfad über Repository-IDs; Caller bindet IFR- Resolver). remove_component ist Container-Runtime (crates/corba-ccm/src/container.rs).

Tests: crates/corba-ccm/src/home.rs::tests::{home_get_component_def_returns_managed_component_id, home_get_home_def_returns_self_repo_id}.

Status: done — Iface-Bezugnahme + Type-Identity-Operations implementiert; Object-Lifecycle-Operations bleiben Container-Runtime.

§6.7.7 KeylessCCMHome Interface

Spec: §6.7.7, S. 41 (PDF) — interface KeylessCCMHome { CCMObject create_component() raises (CreateFailure); };.

Repo: ScopedName-Bezugspunkt + Semantik in crates/ccm/src/transform.rs::build_keyless_implicit.

Tests: crates/ccm/tests/equivalent_idl.rs::a_keyless_home_yields_an_implicit_inheriting_keylesscmhome.

Status: done

§6.8 Home Finders

Spec: §6.8, S. 41-43 (PDF) — Components::HomeFinder-Interface; CORBA::ORB::resolve_initial_references("ComponentHomeFinder").

Repo: crates/corba-ccm/src/home.rs::ComponentHomeFinder — die drei find_home_by_*-Operationen über die per HomeRegistration::register_home (§9.4.1.2) registrierten Homes, mit HomeNotFound als Fehlerfall; der Initial-Reference-Bezeichner steht als crates/corba-ccm/src/home.rs::COMPONENT_HOME_FINDER_INITIAL_REFERENCE. Für find_home_by_name liefert crates/corba-cosnaming/src/stringified.rs das Stringified-Name-Format.

Tests: crates/corba-ccm/src/home.rs::tests::{ the_home_finder_is_reached_through_the_component_home_finder_initial_reference, a_registered_home_is_found_by_component_type_and_by_home_type, an_unregistered_component_type_raises_home_not_found, a_home_registered_without_a_name_cannot_be_found_by_name, an_unregistered_home_is_never_returned_again}.

Status: done

§6.9 Component Configuration

Spec: §6.9, S. 43-44 (PDF) — Component-Configurability via Attributes; configuration_complete-Operation auf CCMObject.

Repo: crates/corba-rust/src/component_emit.rs::emit_component emittiert configuration_complete als Lifecycle-Operation auf dem Component-Trait; die Konfigurations-Phase selbst liegt in crates/corba-ccm/src/lifecycle.rs::{StandardConfigurator, ConfiguratorRegistry} (§6.10).

Tests: crates/corba-rust/tests/snapshot_codegen.rs::a_component_trait_carries_the_configuration_complete_lifecycle_operation, crates/corba-ccm/src/lifecycle.rs::tests::{ configurator_set_get_roundtrip, configurator_registry_register_and_lookup}.

Status: done

§6.10 Configuration with Attributes

Spec: §6.10.1, S. 44-45 (PDF) — Configurator-Iface mit configure(in CCMObject comp); StandardConfigurator mit set_configuration(in ConfigValues descr).

Repo: Datenmodell ConfigValue in crates/ccm/src/model.rs; Configurator-Operation-Filter in crates/ccm/src/lightweight.rs::filter_to_lightweight (LwCCM §13.7 entfernt diese) + Configurator-Iface in crates/corba-ccm/src/lifecycle.rs::{Configurator, StandardConfigurator, ConfiguratorRegistry, ConfigError} mit set_attribute/get_attribute + Schema-validierter ReadOnly-Rejection + per-RepoId-Lookup.

Tests: crates/ccm/src/model.rs::tests::config_value_carries_name_and_marshaled_value, crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_drops_configurator_operations, crates/corba-ccm/src/lifecycle.rs::tests::{configurator_set_get_roundtrip, configurator_rejects_unknown_attribute, configurator_rejects_readonly_attribute, configurator_get_unknown_returns_unknown_attribute, configurator_registry_register_and_lookup}.

Status: done — Modell + Filter + Configurator-Iface live.

§6.11 Component Inheritance

Spec: §6.11, S. 48-49 (PDF) — Component-Inheritance + CCMObject.

Repo: crates/ccm/src/transform.rs::transform_component deckt Component-Inheritance ab.

Tests: crates/ccm/tests/equivalent_idl.rs::{ a_derived_component_inherits_its_base_and_not_ccmobject, a_derived_component_with_supports_lists_the_base_first_and_then_the_supported}.

Status: done

§6.11.1 CCMObject Interface

Spec: §6.11.1, S. 49 (PDF) — interface CCMObject : Navigation, Receptacles, Events { ... };.

Repo: Components::CCMObject als ScopedName-Bezugspunkt; Inheritance-Chain wird per Spec-Regel referenziert (nicht im AST explizit aufgeschlüsselt — das bleibt Caller-Verantwortung beim Linker).

Tests: crates/ccm/tests/equivalent_idl.rs::a_plain_component_inherits_ccmobject.

Status: done

§6.12 Conformance Requirements

Spec: §6.12, S. 50-52 (PDF) — Acht Conformance-Punkte (siehe §2); Sub-Section §6.12.2 Changes to Object Services.

Repo: Conformance-Marker in crates/corba-ccm/src/lib.rs:: conformance::{CCM_CONFORMANCE_BASIC_LEVEL, CCM_CONFORMANCE_BASIC_LEVEL_JAVA, LIGHTWEIGHT_CCM_LEVEL}.

Tests: crates/corba-ccm/src/lib.rs::conformance_tests::ccm_conformance_basic_level_marker_matches_spec, ccm_conformance_basic_level_java_marker_matches_spec, lightweight_ccm_level_marker_matches_spec.

Status: done — Marker für alle drei in ZeroDDS abgedeckten Conformance-Punkte (Basic Level non-Java + Java + LwCCM) als Doc-Konstanten ausgewiesen. Vendor-Container-Aspekt selber bleibt nach WP CCM-Container Core (siehe §2 Punkte 4/5/7).


§7 OMG CIDL Syntax and Semantics

§7 CIDL — Component Implementation Definition Language

Spec: §7, S. 55-66 (PDF) — Lexical Conventions, Grammar, Composition Definition, Home Implementation, Storage Home Binding, Persistence, Executor, Segment, Facet, Feature Delegation, etc.

Repo: crates/corba-ccm/src/cidl.rs (CIDL-Lexer + Grammar-AST + Composition-/Home-/Segment-/Storage-/Executor-Definitions).

Tests: crates/corba-ccm/src/cidl.rs::tests::{ session_composition_does_not_require_storage, entity_composition_without_storage_invalid, entity_composition_with_storage_valid, storage_type_can_inherit, home_executor_optional_component_binding, all_four_composition_categories_distinct}.

Status: done


§8 CCM Implementation Framework

§8 CIF — Component Implementation Framework

Spec: §8, S. 67-108 (PDF) — Servant-/Skeleton-Generator, Executor- Lifetime, Composition-Persistence, Proxy-Homes, Language-Mapping (C++/Java).

Repo: crates/corba-ccm/src/cif.rs (CIF-AST + Executor/Segment- Lifetime), crates/corba-codegen/src/skeleton.rs + crates/corba-codegen/src/stub.rs (Servant/Skeleton-Generator).

Tests: crates/corba-ccm/src/cif.rs::tests::{ lifecycle_calls_increment_counters, cif_error_carries_diagnostic} (Executor-Lifetime ccm_activate/ccm_passivate/ccm_remove + CCMException), crates/corba-codegen/src/skeleton.rs::tests::{ every_operation_reaches_the_dispatch_in_every_column, an_empty_interface_still_dispatches_to_the_default_arm, cpp_compares_with_strcmp_and_ends_in_bad_operation, java_switches_on_the_method_string_and_throws_the_omg_class, rust_matches_and_answers_none_rather_than_an_invented_error} (Skeleton-Generator), crates/corba-codegen/src/stub.rs::tests::{ a_variable_length_struct_returns_a_pointer_and_a_fixed_one_a_value, an_object_reference_argument_is_a_ptr_and_its_out_is_an_out, a_oneway_operation_says_so_in_every_column_that_renders} (Stub-Generator).

Status: done


§9 Container Programming Model

§9 Container Programming Model

Spec: §9, S. 109-150 (PDF) — Server-Programming-Environment, Client-Programming-Model, Container-API-Types (Session/Entity).

Repo: crates/corba-ccm/src/container.rs, crates/corba-ccm/src/context.rs, crates/corba-ccm-lib/src/persistence.rs, crates/corba-ccm-lib/src/dds_bridge.rs, crates/corba-ccm-lib/src/telemetry.rs.

Tests: crates/corba-ccm/src/container.rs::tests::{ install_and_full_lifecycle_round_trip, instance_count_tracks_install_and_remove, passivate_in_configured_state_invalid, unknown_instance_returns_not_found}, crates/corba-ccm/src/context.rs::tests::{anonymous_context_returns_none, principal_context_returns_bytes}, crates/corba-ccm-lib/src/persistence.rs::tests::{ create_and_find_round_trip, passivate_flushes_dirty_entries, flush_resets_dirty_and_increments_counter}, crates/corba-ccm-lib/src/dds_bridge.rs::tests::{ add_mapping_round_trip, activate_makes_active, passivate_clears_active_flag}, crates/corba-ccm-lib/src/telemetry.rs::tests::{ full_lifecycle_records_four_events, sequence_numbers_strictly_increase}.

Status: done


§10 Integrating with Enterprise JavaBeans

§10 EJB Integration

Spec: §10, S. 151-176 (PDF) — Two-Way-Mapping CCM ↔︎ EJB.

Repo: crates/corba-ccm-ejb/src/{connector_bean,naming_glue, stub_gen,tx}.rs.

Tests: crates/corba-ccm-ejb/src/connector_bean.rs::tests::{ full_lifecycle_records_history, post_construct_invokes_callback, connector_bean_with_pss_session_binds_correctly}, crates/corba-ccm-ejb/src/naming_glue.rs::tests::{ cos_to_jndi_round_trip_no_kind, cos_to_jndi_includes_kind, jndi_comp_env_strips_prefix, bind_and_lookup_round_trip}, crates/corba-ccm-ejb/src/stub_gen.rs::tests::{ stateful_bean_has_postconstruct_and_predestroy, stateless_bean_has_no_lifecycle_hooks, home_local_uses_local_annotation}, crates/corba-ccm-ejb/src/tx.rs::tests::{ cos_to_jta_round_trip_for_all_states, begin_then_commit_succeeds, rollback_only_then_commit_fails_with_rollback}.

Status: done


§11 Interface Repository Metamodel

§11 IFR Metamodel

Spec: §11, S. 177-260 (PDF) — MOF-Modelle für BaseIDL-Package + ComponentIDL-Package; XMI-DTDs + IDL für IFR.

Repo: crates/corba-ir/src/repository.rs (Container-/Contained- Hierarchie), crates/corba-ir/src/repository_id.rs, crates/corba-ir/src/type_code.rs (TypeCode-Backend), crates/corba-ir/src/definition_kind.rs + crates/corba-ccm/src/orb_core.rs::{XmiEmitter, MofElement, IfrCcmMetamodel} mit MOF-2.0-Subset (Class/Property/Operation) + XMI-1.2-Output für das ComponentIDL-Package.

Tests: crates/corba-ir/src/repository.rs::tests::*, crates/corba-ir/src/repository_id.rs::tests::*, crates/corba-ir/src/type_code.rs::tests::* + crates/corba-ccm/src/orb_core.rs::tests::{ ifr_ccm_metamodel_add_component, ifr_ccm_metamodel_ingest_repository_walks_definitions}.

Status: done — IR-Basis (corba-ir) + CCM-Metamodel-MOF-2.0- Subset + XMI-1.2-Emitter live. IfrCcmMetamodel::from_repository( &corba_ir::Repository) walked die Container/Contained-Hierarchie und emittiert Component-/Module-Klassen. Cross-Ref CORBA 3.3 Part 3 §12 (corba-3.3.md).


§12 CIF Metamodel

§12 CIF Metamodel

Spec: §12, S. 261-272 (PDF) — MOF-Modell für Component Implementation Framework.

Repo: crates/corba-ccm/src/cif.rs (CIF-AST-Modell) + crates/corba-ccm/src/orb_core.rs::{XmiEmitter, MofElement} als MOF-XMI-Emitter symmetrisch zu §11.

Tests: crates/corba-ccm/src/cif.rs::tests::{ lifecycle_calls_increment_counters, cif_error_carries_diagnostic} + crates/corba-ccm/src/orb_core.rs::tests::* (XMI-Emitter).

Status: done — CIF-AST (corba-ccm::cif) + MOF-XMI-Emitter symmetrisch zu §11 IFR. Cross-Ref CORBA 3.3 Part 3 §13 (corba-3.3.md).


§13 Lightweight CCM Profile

§13.1 Summary

Spec: §13.1, S. 273 (PDF) — LwCCM-Subset: ohne Persistence, Introspection, Navigation-Generic, Type-specific-Generic, Segmentation, Transactions, Security, Configurators, Proxy-Homes, Home-Finders.

Repo: crates/ccm/src/lightweight.rs::filter_to_lightweight.

Tests: crates/ccm/tests/equivalent_idl.rs::{ the_lightweight_filter_drops_configurator_operations, the_lightweight_filter_keeps_the_type_specific_operations, the_lightweight_filter_reports_a_component_it_would_empty} + crates/corba-ccm/src/lwccm.rs::tests::{ same_component_raises_no_implement_with_the_mandated_minor_code, every_other_disabled_operation_raises_bad_operation} — §13.1 hält die disabled-Operationen im Interface und lässt den Container BAD_OPERATION/NO_IMPLEMENT melden; für same_component ist NO_IMPLEMENT mit Minor-Code IS_LIGHTWEIGHT_COMPONENT vorgeschrieben.

Status: done

§13.2 No Persistence

Spec: §13.2, S. 274-276 (PDF) — Tabelle “Changes associated with excluding support for persistence”: Primary Keys, CIDL, abstract Storage Homes/Types, Keyed-Home-Implicit-Executor, Finder im Explicit Home Executor, Entity-Container-API-Types, durable CORBA usage model, CCM2Context::get_persistence. §13.1, S. 273: “Persistence (only session and service components are supported).”

Repo: crates/corba-ccm/src/lwccm.rs — disabled_by("get_persistence") meldet LwccmExclusion::Persistence, category_supported lässt nur Session und Service durch, composition_exclusion weist Entity-Kompositionen und jede Storage-Home-Bindung als Persistenz zurück. Die Extended-Form bleibt in crates/corba-ccm-lib/src/persistence.rs + crates/corba-ccm/src/pss.rs und wird von diesen Prüfungen aus dem Profil gehalten.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ the_persistence_operations_are_disabled_by_thirteen_two_and_three, only_session_and_service_components_are_supported, an_entity_composition_is_excluded_as_persistence}.

Status: done

§13.3 No Introspection / Navigation / Type-Specific-Generic Ops

Spec: §13.3, S. 276-277 (PDF) — Removed: provide_facet, get_all_facets, get_named_facets, generic connect/disconnect/ get_connections, generic event-routing-Operationen.

Repo: crates/corba-ccm/src/lwccm.rs::disabled_by — die Introspection-Zeilen von §13.3 als Namensliste plus die Präfix-Erkennung der typspezifischen Port-Operationen (provide_<name>, connect_<name>, disconnect_<name>, get_connection(s)_<name>, subscribe_<name>, unsubscribe_<name>, get_consumer_<name>). Die generischen Gegenstücke — provide_facet, connect, disconnect, get_consumer, subscribe, unsubscribe, connect_consumer — bleiben, weil §13.3 genau sie behält. Die Operationen selbst bleiben im Equivalent-Interface stehen (§13.1); entfernt wird nichts.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ the_type_specific_port_operations_are_disabled_and_the_generic_ones_are_not, both_connection_getters_are_disabled_the_generic_one_as_introspection, a_bare_prefix_is_not_an_operation_name} + crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_keeps_the_type_specific_operations (die Operationen bleiben deklariert).

Status: done

§13.4-§13.6 No Segmentation/Transactions/Security

Spec: §13.4, S. 277 (PDF) — “Exclude support for CIDL”, “Exclude composition”, “Remove locator support”, “Restrict CIF metamodel to a single segment per implementation”. §13.5, S. 278 — “Disable the get_rollback_only, get_user_transaction, and set_rollback_only operations in the CCMContext interface”. §13.6, S. 278 — “Disable the get_caller_principal and is_caller_in_role operations in the CCMContext interface”.

Repo: crates/corba-ccm/src/lwccm.rs — composition_exclusion weist jede CIDL-Komposition zurück, MAX_SEGMENTS_PER_IMPLEMENTATION trägt die 1:1-Multiplizität aus §13.4, disabled_by meldet die drei Transaktions- und die zwei Credential-Operationen von CCMContext. Die Extended-Formen bleiben in crates/corba-ccm/src/cidl.rs, crates/corba-ccm-ejb/src/tx.rs und crates/corba-csiv2/ und werden von diesen Prüfungen aus dem Profil gehalten.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ a_session_composition_is_still_excluded_because_cidl_is_gone, the_cif_metamodel_holds_one_segment_per_implementation, the_three_transaction_operations_of_ccmcontext_are_disabled, the_two_credential_operations_of_ccmcontext_are_disabled, get_ccm_home_survives_beside_the_disabled_ccmcontext_operations}.

Status: done

§13.7 No Configurators

Spec: §13.7, S. 279 (PDF) — Removed: Configurator-Iface, StandardConfigurator, HomeConfiguration.

Repo: crates/ccm/src/lightweight.rs::filter_to_lightweight entfernt configure/set_configuration/configuration_complete aus dem Equivalent-Interface (§13.7 entfernt die Interfaces Configurator und StandardConfigurator ganz); crates/corba-ccm/src/lwccm.rs meldet zusätzlich set_configurator auf HomeConfiguration als disabled.

Tests: crates/ccm/tests/equivalent_idl.rs::the_lightweight_filter_drops_configurator_operations, crates/corba-ccm/src/lwccm.rs::tests::every_other_disabled_operation_raises_bad_operation.

Status: done

§13.8-§13.9 No Proxy Homes / Home Finders

Spec: §13.8, S. 279 (PDF) — “Exclude support for proxy homes” (§8.2.10 + §9.4.1.3 ProxyHomeRegistration). §13.9, S. 279 — “Disable support for the HomeFinder interface and the ComponentHomeFinder parameter value to the ORB::resolve_initial_references operation” + “Disable the get_home_registration operation in the CCM2Context interface”.

Repo: crates/corba-ccm/src/lwccm.rs::disabled_by meldet register_proxy_home als §13.8 und die drei find_home_by_*- Operationen plus get_home_registration als §13.9. Die Extended-Form des Home-Finders steht in crates/corba-ccm/src/home.rs::ComponentHomeFinder (§6.8) und wird von dieser Prüfung aus dem Profil gehalten; register_home / unregister_home aus §9.4.1.2 nennt keine der beiden Tabellen und bleiben.

Tests: crates/corba-ccm/src/lwccm.rs::tests::{ register_proxy_home_is_disabled, the_home_finder_operations_and_home_registration_are_disabled, register_home_survives_because_only_the_proxy_form_is_excluded}.

Status: done

§13.10 Additional Restrictions

Spec: §13.10, S. 280 (PDF) — Misc-Restrictions des Extended- Modells.

Repo: crates/ccm/src/lightweight.rs::filter_to_lightweight (Filter-Pipeline) + Doc-Marker in crates/corba-ccm/src/lib.rs::conformance::{LWCCM_RESTRICTIONS_ENFORCED, LWCCM_FILTER_ACTIVE}.

Tests: crates/corba-ccm/src/lib.rs::conformance_tests::lwccm_restrictions_marker_matches_spec, lwccm_filter_marker_matches_spec.

Status: done — Filter-Pipeline + spezifische Restriction-Marker ausgewiesen.


§14 Deployment PSM for CCM

§14 Deployment PSM for CCM

Spec: §14, S. 281-300 (PDF) — D&C-Mapping (formal/2006-04-02), Component-Interface-Description, PlanSubcomponentPortEndpoint, Application, RepositoryManager, SatisfierProperty, IDL/XML Transformation Rules.

Repo: crates/corba-dnc/src/{plan,node,execution,container_host, repository,xml}.rs.

Tests: crates/corba-dnc/src/plan.rs::tests::{ valid_plan_passes_validation, instance_with_unknown_impl_fails, connection_with_unknown_instance_fails, co_location_with_unknown_instance_fails}, crates/corba-dnc/src/container_host.rs::tests::{ full_lifecycle_round_trip, install_creates_container_on_demand, entity_and_session_share_host, duplicate_install_rejected}, crates/corba-dnc/src/repository.rs::tests::{ install_and_find_round_trip, list_packages_returns_all_labels}.

Status: done


§15 Deployment IDL for CCM

§15 Deployment IDL for CCM

Spec: §15, S. 301-314 (PDF) — Deployment-IDL-Definitionen (Deployment::*).

Repo: Deployment::ExecutionManager + Deployment::DomainApplicationManager + Deployment::DomainApplication in crates/corba-dnc/src/execution.rs; Deployment::NodeManager + Deployment::NodeApplicationManager + Deployment::NodeApplication in crates/corba-dnc/src/node.rs; Deployment::RepositoryManager in crates/corba-dnc/src/repository.rs; die Descriptor-Strukturen in crates/corba-dnc/src/plan.rs.

Tests: crates/corba-dnc/src/execution.rs::tests::{ full_lifecycle_round_trip, execution_manager_lists_prepared_plans, invalid_plan_rejected_at_prepare, double_start_fails, destroy_before_running_fails} — die Operationsfolge preparePlan/startLaunch/finishLaunch/destroyApplication der §15-IDL; crates/corba-dnc/src/node.rs::tests::{ prepare_plan_then_start_launch, register_and_unregister_application, destroy_application_clears_active, unregister_unknown_returns_none}; crates/corba-dnc/src/repository.rs::tests::{ install_and_find_round_trip, install_overwrites_duplicate, delete_existing_returns_true, delete_unknown_returns_false}.

Status: done


§16 XML Schema for CCM

§16 XML Schema for CCM

Spec: §16, S. 315ff (PDF) — XSD-Schema für Deployment-Pakete.

Repo: crates/corba-dnc/src/xml.rs (XML-Codec für Deployment-Plans nach dem §16-Schema).

Tests: crates/corba-dnc/src/xml.rs::tests::{parses_minimal_plan, parses_multiple_artifacts, co_locate_with_parsed, missing_root_tag_returns_expected_tag, validation_fails_on_unknown_impl_reference}.

Status: done


Audit-Status

71 done / 0 partial / 0 open / 0 blocked / 4 n/a (informative).

Test-Lauf:

  • cargo test -p zerodds-ccm — 19 Lib-Tests + 34 Tests in tests/equivalent_idl.rs + 1 Doc-Test grün.
  • cargo test -p zerodds-corba-ccm — 201 Lib-Tests + 3 Tests in tests/pi_service_contexts.rs + 1 Doc-Test grün.
  • cargo test -p zerodds-corba-ccm-lib --lib — 23 Tests grün.
  • cargo test -p zerodds-corba-ccm-ejb --lib — 25 Tests grün.
  • cargo test -p zerodds-corba-dnc --lib — 30 Tests grün.
  • cargo test -p zerodds-corba-codegen --lib — 38 Tests grün (Skeleton-/Stub-Generator).
  • cargo test -p zerodds-corba-rust --test snapshot_codegen — 15 Tests grün.
  • cargo test -p zerodds-corba-ir --lib — 19 Tests grün.
  • cargo test -p zerodds-corba-codegen — 93 Tests grün (Annex-A.1-Bindung für Java).

Offene Punkte: keine.