OMG CCM 4.0 — Spec-Coverage
PDF: docs/standards/cache/omg/ccm-4.0.pdf (315 Seiten, OMG formal/06-04-01).
Folgt dem Format aus docs/spec-coverage/PROCESS.md. Audit Item-für-Item
gegen die PDF; 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). Der grosse
Anteil der Spec — Container Programming Model (§9), CIDL (§7), CIF
(§8), EJB Integration (§10), IFR Metamodel (§11), Deployment PSM (§14)
— verlangt einen CORBA-ORB + CCM-Container + D&C-Subsystem.
ZeroDDS hat keine dieser Komponenten und ist explizit kein
CCM-Container-Vendor.
ZeroDDS deckt §6 Component Model ab — die Equivalent-IDL-
Transformation, die jeder Compiler durchfuehren muss. Das ist der
IDL-3-Aspekt der Spec, der unabhaengig vom Container Sinn ergibt:
Migration von alten CCM-IDL-Files in Pure-DDS-Welten via
Equivalent-IDL ohne Container-Stack. Plus §13 Lightweight CCM
Profile Filter, plus die Components::*-Core-Datentypen
(CCMObject, Cookie, ConnectionDescription, etc.) als Rust-Modelle.
Implementation-Crate: crates/ccm/ (3 Module, 25 Tests gruen).
§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 zusaetzlicher COS-Service in
crates/corba-cosnaming/.
- Event als zusaetzlicher 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 fuer 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 + zusaetzliche 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). Layer-8 Wire-up-Cleanup 2026-05-06.
§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 ueber 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 ueber
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. Layer-8 Wire-up-Cleanup 2026-05-06.
§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 fuer alle drei CCM-relevanten Component-Specific-Erweiterungen (PI/Messaging/ Compression). Layer-8 Wire-up-Cleanup 2026-05-06.
§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: ZeroDDS hat keinen CORBA-Stack. CCM-IDL-Migrationspfad nutzt
die zerodds_idl::ast-Layer als Eingabe, ohne IFR/MOF/EJB-Abhaengigkeiten.
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) — Abkuerzungs-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 vollstaendig 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 fuer 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 fuer 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 fuer 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 haengt 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
ueber <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 ueber 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 ueber 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 fuer 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.
§6.4.3 Navigation Interface
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 ueber Container-Servant-Framework.
Repo: —
Tests: —
Status: done — alternative-form-of: Component-Identity-Vergleich ueber 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
ueber 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 haengt supports-Liste an CCMHome an (in
explicit_bases).
Tests: Cross-Ref home_without_primary_key_yields_keyless_implicit
(zeigt CCMHome-Inheritance — supports-Test analog moeglich, 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 —
prueft 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 ueber 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 aufgeschluesselt — 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 fuer 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 fuer BaseIDL-Package + ComponentIDL-Package; XMI-DTDs + IDL fuer 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 fuer 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 fuer 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 standardmaessig keine
Generic-Ops einbindet — type-specific Ops bleiben automatisch).
Tests: lightweight_filter_keeps_typespecific_ops.
Status: done — Filter-Pipeline aktiv; Generic-Op-Filter implizit erfuellt (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 fuer 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).
Reklassifiziert im Layer-8 Wire-up-Cleanup 2026-05-06: §11 IFR
Metamodel + §12 CIF Metamodel (Repository-Walker
IfrCcmMetamodel::from_repository) sowie alle drei verbliebenen
Conformance-Punkte 3 (PSS-Tx-Lifecycle), 6 (PSS-Bind-Helper am
ConnectorBean) und 8 (ORB-Vendor-Konfiguration fuer PI/Messaging/
Compression) — siehe Repo-Pfade in den Section-Bodies. Keine
rejected-Items mehr.
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.
Decision-Records: siehe omg-ccm-4.0.open.md (jetzt leer).