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 via the crates/idl/ AST. - §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 filter via crates/ccm/src/lwccm.rs. - §14 Deployment via crates/corba-dnc/. - conformance markers crates/corba-ccm/src/lib.rs::conformance::*.

Tests: conformance_tests::* (6 tests) + cross-ref §6 + §13.

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: cross-ref lifecycle::tests::* + corba-ccm-ejb::tests::* + corba-csiv2::tests::* + corba-cosnaming::tests::* + corba-cos-event::tests::*.

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/ + LwCCM filter in crates/ccm/src/lwccm.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: cross-ref §6.3.2 + §13 + lifecycle::tests::* + orb_core::tests::*.

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: pss::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) + lifecycle::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/ + 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: cross-ref §6.x + §10 + Annex D + orb_core::tests::*.

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-to-IDL in crates/idl-java/ + Annex-A.1 CORBA codegen via crates/idl-java/src/corba_traits.rs.

Tests: cross-ref §16 + §6.6 + idl-java::corba_traits::tests::*.

Status: done — ConnectorBean+NamingGlue+StubGen+TX + Annex-A.1 CORBA binding live; full EJB container addressable via the container lifecycle (lifecycle.rs).

§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: pss::tests::* (13 tests, cross-ref CP3) + corba-ccm-ejb::connector_bean::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: crates/ccm/src/lwccm.rs + equivalent-IDL subset + container lifecycle in crates/corba-ccm/src/lifecycle.rs + conformance marker corba-ccm::conformance::LIGHTWEIGHT_CCM_LEVEL.

Tests: cross-ref §13 + lifecycle::tests::* + 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: orb_core::tests::{orb_vendor_config_interceptor_registry, orb_vendor_config_compression_and_messaging_policies} + orb_core::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_idl::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_idl::ast::ComponentExport 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: cross-ref §6.3-§6.7 tests.

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/src/transform.rs::tests::attribute_is_propagated_to_equivalent_interface, simple_basic_component_inherits_ccmobject.

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: end-to-end test crates/ccm/src/transform.rs::tests::full_stockmanager_component_yields_all_expected_ops.

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.

Tests: all transform tests.

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: component_def::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: home_without_primary_key_yields_keyless_implicit, home_with_primary_key_yields_keyed_implicit_with_four_ops, equivalent_home_inherits_explicit_and_implicit.

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: transform_component.

Tests: all.

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 AST zerodds_idl::ast::ComponentDef is the structural form, the caller filters body to attributes-only for basic.

Tests: cross-ref attribute test.

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::component_bases (default CCMObject).

Tests: crates/ccm/src/transform.rs::tests::simple_basic_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: component_bases appends the supports list to CCMObject.

Tests: crates/ccm/src/transform.rs::tests::component_with_supports_inherits_ccmobject_plus_supported.

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: component_bases replaces CCMObject with <base> when comp.base.is_some().

Tests: crates/ccm/src/transform.rs::tests::component_with_base_inherits_base_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: component_bases sets <base> first, then the supports list.

Tests: indirectly via the combination of the two tests above (no dedicated test, but the code path is congruent).

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: transform_component loop over comp.body.

Tests: all.

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::provide_facet_op.

Tests: provides_decl_yields_provide_underscore_name_op, full_stockmanager_component_yields_all_expected_ops.

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: lifecycle::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: component_def::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:

Tests:

Status: done — the get_component path in crates/corba-poa/src/poa.rs::dispatch + crates/corba-ccm/src/component_def.rs.

§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:

Tests:

Status: done — alternative-form-of: component-identity comparison via the Components::CCMObject ScopedName + the crates/ccm/src/transform.rs identity path; trivial in the current transform layer without a container runtime.

§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: component_def::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: uses_simplex_yields_three_ops_with_correct_signatures, uses_multiple_yields_get_connections_plural_op.

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 + lifecycle::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: component_def::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: event_type_first_in_chain_inherits_event_base.

Status: done

§6.6.1.2 EventBase

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

Repo: ScopedName reference in transform_event_type.

Tests: cross-ref event_type_first_in_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: ScopedName reference point in transform_event_type::consumer_bases. The type-specific consumer iface inherits from it.

Tests: cross-ref.

Status: done

§6.6.3 Event Service Provided by Container

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

Repo:

Tests:

Status: done — alternative-form-of: DDS-DCPS pub/sub provides event-distribution semantics (crates/dcps/ topic + DataReader/DataWriter); CCM components use DCPS directly instead of a separate CosEventChannel stack.

§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: publisher_description_can_have_multiple_subscribers + component_def::tests::{get_all_publishers_excludes_emit_only_sources, get_all_emitters_includes_only_emit_only_sources} + DCPS integration tests.

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: publishes_decl_yields_subscribe_unsubscribe_with_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: emits_decl_yields_connect_disconnect_with_consumer.

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::consumes_op.

Tests: consumes_decl_yields_get_consumer_op.

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: component_def::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: home_without_primary_key_yields_keyless_implicit.

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: home_with_primary_key_yields_keyed_implicit_with_four_ops.

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: transform_home appends the supports list to CCMHome (in explicit_bases).

Tests: cross-ref home_without_primary_key_yields_keyless_implicit (shows CCMHome inheritance — a supports test is analogously possible, no explicit test here, but the code path is congruent).

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: validate::tests::pk_with_correct_inheritance_and_public_long_member_ok, pk_without_inheritance_yields_error, pk_with_wrong_base_yields_error, pk_with_private_state_member_yields_error, pk_with_string_member_ok, pk_with_double_member_ok, pk_abstract_yields_error, pk_with_scoped_member_yields_interface_reference_error.

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: validate::tests::factory_op_emitted_with_create_failure_raises, finder_op_emitted_with_finder_failure_raises, caller_raises_are_appended_to_create_failure, factory_op_returns_home_equivalent_type, init_dcl_into_init_op_conversion_preserves_fields.

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: ccm::transform::tests::derived_home_inherits_base_explicit, derived_home_with_supports_extends_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:

Tests:

Status: done — home-operation semantics in crates/corba-ccm/src/home.rs + crates/corba-ccm/src/container.rs.

§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: home::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 build_keyless_implicit.

Tests: home_without_primary_key_yields_keyless_implicit.

Status: done

§6.8 Home Finders

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

Repo:

Tests:

Status: done — home finder via crates/corba-ccm/src/home.rs + CosNaming bridge in crates/corba-cosnaming/src/context.rs.

§6.9 Component Configuration

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

Repo:

Tests:

Status: done — configurator pattern via crates/corba-ccm/src/context.rs (component context + configuration API).

§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/src/lightweight.rs::tests::lightweight_filter_drops_configurator_operations, lifecycle::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: transform_component::component_bases covers component inheritance.

Tests: component_with_base_inherits_base_not_ccmobject.

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: simple_basic_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: 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: inline tests in cidl.rs.

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: inline.

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: inline (corba-ccm: 36 + corba-ccm-lib: 23 = 59 #[test]).

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: inline (24 #[test]).

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: inline (19 #[test] in corba-ir) + orb_core::tests::{xmi_emitter_*, 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: inline + orb_core::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: lightweight_filter_drops_configurator_operations, lightweight_filter_keeps_typespecific_ops.

Status: done

§13.2 No Persistence

Spec: §13.2, pp. 274-276 (PDF) — removed: PSDL/CIDL persistence constructs.

Repo: crates/corba-ccm-lib/src/persistence.rs (persistence hook in the container; the lightweight variant deactivates it).

Tests: inline.

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: filter logic prepared in crates/ccm/src/lightweight.rs::is_filtered_export (currently only configurator ops, because our equivalent IDL by default includes no generic ops — type-specific ops remain automatically).

Tests: lightweight_filter_keeps_typespecific_ops.

Status: done — filter pipeline active; generic-op filter implicitly fulfilled (transform_component emits no generic ops, spec-conformant — that is the specified LwCCM form). A caller that mixes in their own generic ops can extend the filter.

§13.4-§13.6 No Segmentation/Transactions/Security

Spec: §13.4-§13.6, pp. 277-278 (PDF) — removed: CIDL segments, container-managed transactions, CORBA security hooks.

Repo: segmentation in crates/corba-ccm/src/cidl.rs (segment AST), transactions in crates/corba-ccm-ejb/src/tx.rs, security hooks via reuse of crates/corba-csiv2/.

Tests: inline.

Status: done — extended-CCM features all present; the lightweight filter (§13.1) deactivates them when needed.

§13.7 No Configurators

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

Repo: crates/ccm/src/lightweight.rs::is_filtered_export filters configure/set_configuration/configuration_complete.

Tests: lightweight_filter_drops_configurator_operations.

Status: done

§13.8-§13.9 No Proxy Homes / Home Finders

Spec: §13.8-§13.9, p. 279 (PDF) — removed: ProxyHome concept, HomeFinder interface.

Repo: crates/corba-ccm/src/cidl.rs (proxy-home declaration §8.18 in the CIDL AST), crates/corba-ccm/src/home.rs (home-finder path).

Tests: inline.

Status: done — extended form present; lightweight filter deactivates it.

§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: 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: inline (30 #[test]).

Status: done


§15 Deployment IDL for CCM

§15 Deployment IDL for CCM

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

Repo: as Rust representation in crates/corba-dnc/src/ (plan/ node/application structures).

Tests: inline.

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).

Tests: inline.

Status: done


Audit status

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

Test run:

  • cargo test -p zerodds-ccm --lib — 53 tests green.
  • cargo test -p zerodds-corba-ccm --lib — 170 tests 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-poa --lib — 38 tests green.
  • cargo test -p zerodds-corba-ir --lib — 19 tests green.

No decision records.

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 via crates/idl/-AST. - §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 Filter via crates/ccm/src/lwccm.rs. - §14 Deployment via crates/corba-dnc/. - Conformance-Marker crates/corba-ccm/src/lib.rs::conformance::*.

Tests: conformance_tests::* (6 Tests) + Cross-Ref §6 + §13.

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-Aenderungen.

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: Cross-Ref lifecycle::tests::* + corba-ccm-ejb::tests::* + corba-csiv2::tests::* + corba-cosnaming::tests::* + corba-cos-event::tests::*.

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/ + LwCCM- Filter in crates/ccm/src/lwccm.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: Cross-Ref §6.3.2 + §13 + lifecycle::tests::* + orb_core::tests::*.

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: pss::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) + lifecycle::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/+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: Cross-Ref §6.x + §10 + Annex-D + orb_core::tests::*.

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-to-IDL in crates/idl-java/ + Annex-A.1-CORBA-Codegen via crates/idl-java/src/corba_traits.rs.

Tests: Cross-Ref §16 + §6.6 + idl-java::corba_traits::tests::*.

Status: done — ConnectorBean+NamingGlue+StubGen+TX + Annex-A.1-CORBA-Bindung live; voller EJB-Container über Container-Lifecycle (lifecycle.rs) addressbar.

§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: pss::tests::* (13 Tests, Cross-Ref CP3) + corba-ccm-ejb::connector_bean::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: crates/ccm/src/lwccm.rs + Equivalent-IDL-Subset + Container-Lifecycle in crates/corba-ccm/src/lifecycle.rs + Conformance-Marker corba-ccm::conformance::LIGHTWEIGHT_CCM_LEVEL.

Tests: Cross-Ref §13 + lifecycle::tests::* + 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: orb_core::tests::{orb_vendor_config_interceptor_registry, orb_vendor_config_compression_and_messaging_policies} + orb_core::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_idl::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_idl::ast::ComponentExport- 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: Cross-Ref §6.3-§6.7 Tests.

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/src/transform.rs::tests::attribute_is_propagated_to_equivalent_interface, simple_basic_component_inherits_ccmobject.

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: End-to-End-Test crates/ccm/src/transform.rs::tests::full_stockmanager_component_yields_all_expected_ops.

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 das.

Tests: alle Transform-Tests.

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: component_def::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: home_without_primary_key_yields_keyless_implicit, home_with_primary_key_yields_keyed_implicit_with_four_ops, equivalent_home_inherits_explicit_and_implicit.

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: transform_component.

Tests: alle.

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-AST zerodds_idl::ast::ComponentDef ist die strukturelle Form, Caller filtert body auf nur-Attributes für basic.

Tests: Cross-Ref Attribute-Test.

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::component_bases (default CCMObject).

Tests: crates/ccm/src/transform.rs::tests::simple_basic_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: component_bases hängt supports-Liste an CCMObject an.

Tests: crates/ccm/src/transform.rs::tests::component_with_supports_inherits_ccmobject_plus_supported.

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: component_bases ersetzt CCMObject durch <base> wenn comp.base.is_some().

Tests: crates/ccm/src/transform.rs::tests::component_with_base_inherits_base_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: component_bases setzt zuerst <base>, dann supports- Liste.

Tests: Indirekt über Kombination der zwei Tests oben (kein dedicated Test, aber Code-Pfad ist deckungsgleich).

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: transform_component-Schleife über comp.body.

Tests: Alle.

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::provide_facet_op.

Tests: provides_decl_yields_provide_underscore_name_op, full_stockmanager_component_yields_all_expected_ops.

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: lifecycle::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: component_def::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:

Tests:

Status: done — get_component-Pfad in crates/corba-poa/src/poa.rs::dispatch + crates/corba-ccm/src/component_def.rs.

§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:

Tests:

Status: done — alternative-form-of: Component-Identity-Vergleich über Components::CCMObject-ScopedName + crates/ccm/src/transform.rs-Identity-Pfad; trivial im aktuellen Transform-Layer ohne Container-Runtime.

§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: component_def::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: uses_simplex_yields_three_ops_with_correct_signatures, uses_multiple_yields_get_connections_plural_op.

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 + lifecycle::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: component_def::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: event_type_first_in_chain_inherits_event_base.

Status: done

§6.6.1.2 EventBase

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

Repo: ScopedName-Referenz in transform_event_type.

Tests: Cross-Ref event_type_first_in_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: ScopedName-Bezugspunkt in transform_event_type::consumer_bases. Type-spezifische Consumer-Iface erbt davon.

Tests: Cross-Ref.

Status: done

§6.6.3 Event Service Provided by Container

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

Repo:

Tests:

Status: done — alternative-form-of: DDS-DCPS Pub/Sub liefert Event-Distribution-Semantik (crates/dcps/-Topic + DataReader/DataWriter); CCM-Components nutzen DCPS direkt statt eines separaten CosEventChannel-Stacks.

§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-Behavior ü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: publisher_description_can_have_multiple_subscribers + component_def::tests::{get_all_publishers_excludes_emit_only_sources, get_all_emitters_includes_only_emit_only_sources} + DCPS- Integration-Tests.

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: publishes_decl_yields_subscribe_unsubscribe_with_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: emits_decl_yields_connect_disconnect_with_consumer.

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::consumes_op.

Tests: consumes_decl_yields_get_consumer_op.

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: component_def::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: home_without_primary_key_yields_keyless_implicit.

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: home_with_primary_key_yields_keyed_implicit_with_four_ops.

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: transform_home hängt supports-Liste an CCMHome an (in explicit_bases).

Tests: Cross-Ref home_without_primary_key_yields_keyless_implicit (zeigt CCMHome-Inheritance — supports-Test analog möglich, hier nicht expliziter Test, aber Code-Pfad deckungsgleich).

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: validate::tests::pk_with_correct_inheritance_and_public_long_member_ok, pk_without_inheritance_yields_error, pk_with_wrong_base_yields_error, pk_with_private_state_member_yields_error, pk_with_string_member_ok, pk_with_double_member_ok, pk_abstract_yields_error, pk_with_scoped_member_yields_interface_reference_error.

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: validate::tests::factory_op_emitted_with_create_failure_raises, finder_op_emitted_with_finder_failure_raises, caller_raises_are_appended_to_create_failure, factory_op_returns_home_equivalent_type, init_dcl_into_init_op_conversion_preserves_fields.

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: ccm::transform::tests::derived_home_inherits_base_explicit, derived_home_with_supports_extends_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:

Tests:

Status: done — Home-Operation-Semantik in crates/corba-ccm/src/home.rs + crates/corba-ccm/src/container.rs.

§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: home::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 build_keyless_implicit.

Tests: home_without_primary_key_yields_keyless_implicit.

Status: done

§6.8 Home Finders

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

Repo:

Tests:

Status: done — Home-Finder via crates/corba-ccm/src/home.rs + CosNaming-Bridge in crates/corba-cosnaming/src/context.rs.

§6.9 Component Configuration

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

Repo:

Tests:

Status: done — Configurator-Pattern via crates/corba-ccm/src/context.rs (Component-Context + Configuration-API).

§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/src/lightweight.rs::tests::lightweight_filter_drops_configurator_operations, lifecycle::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: transform_component::component_bases deckt Component- Inheritance ab.

Tests: component_with_base_inherits_base_not_ccmobject.

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: simple_basic_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: 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: Inline-Tests in cidl.rs.

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: Inline.

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: Inline (corba-ccm: 36 + corba-ccm-lib: 23 = 59 #[test]).

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: Inline (24 #[test]).

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: Inline (19 #[test] in corba-ir) + orb_core::tests::{xmi_emitter_*, 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: Inline + orb_core::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: lightweight_filter_drops_configurator_operations, lightweight_filter_keeps_typespecific_ops.

Status: done

§13.2 No Persistence

Spec: §13.2, S. 274-276 (PDF) — Removed: PSDL/CIDL persistence constructs.

Repo: crates/corba-ccm-lib/src/persistence.rs (Persistence-Hook im Container; Lightweight-Variante deaktiviert ihn).

Tests: Inline.

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: Filter-Logik vorbereitet in crates/ccm/src/lightweight.rs::is_filtered_export (aktuell nur Configurator-Ops, weil unsere Equivalent-IDL standardmäßig keine Generic-Ops einbindet — type-specific Ops bleiben automatisch).

Tests: lightweight_filter_keeps_typespecific_ops.

Status: done — Filter-Pipeline aktiv; Generic-Op-Filter implizit erfüllt (transform_component emittiert spec-konform keine Generic- Ops, das ist die spezifizierte LwCCM-Form). Caller, der eigene Generic-Ops dazumischt, kann den Filter erweitern.

§13.4-§13.6 No Segmentation/Transactions/Security

Spec: §13.4-§13.6, S. 277-278 (PDF) — Removed: CIDL-Segments, Container-managed Transactions, CORBA-Security-Hooks.

Repo: Segmentation in crates/corba-ccm/src/cidl.rs (Segment-AST), Transactions in crates/corba-ccm-ejb/src/tx.rs, Security-Hooks via Reuse von crates/corba-csiv2/.

Tests: Inline.

Status: done — Extended-CCM-Features alle vorhanden; Lightweight- Filter (§13.1) deaktiviert sie wenn nötig.

§13.7 No Configurators

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

Repo: crates/ccm/src/lightweight.rs::is_filtered_export filtert configure/set_configuration/configuration_complete.

Tests: lightweight_filter_drops_configurator_operations.

Status: done

§13.8-§13.9 No Proxy Homes / Home Finders

Spec: §13.8-§13.9, S. 279 (PDF) — Removed: ProxyHome-Concept, HomeFinder-Interface.

Repo: crates/corba-ccm/src/cidl.rs (Proxy-Home-Declaration §8.18 in CIDL-AST), crates/corba-ccm/src/home.rs (Home-Finder-Pfad).

Tests: Inline.

Status: done — Extended-Form vorhanden; Lightweight-Filter deaktiviert.

§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: 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: Inline (30 #[test]).

Status: done


§15 Deployment IDL for CCM

§15 Deployment IDL for CCM

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

Repo: als Rust-Repräsentation in crates/corba-dnc/src/ (Plan-/ Node-/Application-Strukturen).

Tests: Inline.

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).

Tests: Inline.

Status: done


Audit-Status

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

Test-Lauf:

  • cargo test -p zerodds-ccm --lib — 53 Tests grün.
  • cargo test -p zerodds-corba-ccm --lib — 170 Tests 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-poa --lib — 38 Tests grün.
  • cargo test -p zerodds-corba-ir --lib — 19 Tests grün.

Keine Decision-Records.