Service Initialization

This functionality enables proxies and skeletons to initialize themselves from the instances database, establishing communication channels.

Static View

The following software units are involved in service initialization:

  • Instance Database Unit: Provides static instance configuration lookup

  • Transceiver Unit (Proxy side): Initializes proxy connections

    (see Proxy/Skeleton Base for its class diagram)

  • Transceiver Unit (Skeleton side): Initializes skeleton connections

    (see Proxy/Skeleton Base)

  • Cluster Connection Unit: Establishes communication channels

' *******************************************************************************
' Copyright (c) 2026 BMW AG
'
' This program and the accompanying materials are made available under the
' terms of the Apache License Version 2.0 which is available at
' https://www.apache.org/licenses/LICENSE-2.0
'
' SPDX-License-Identifier: Apache-2.0
' *******************************************************************************

@startuml

left to right direction
skinparam linetype ortho

package "Communication Core" as service_initialization_core {
  component "Proxy/Skeleton Base" as service_initialization_proxy_skeleton_base
}

package "Communication Infrastructure" as service_initialization_infrastructure {
  component "Instance Database" as service_initialization_instance_database
  component "Cluster Connection" as service_initialization_cluster_connection
}

component "Generated Proxy" as service_initialization_proxy
component "Generated Skeleton" as service_initialization_skeleton

service_initialization_proxy --> service_initialization_proxy_skeleton_base : initFromDb
service_initialization_skeleton --> service_initialization_proxy_skeleton_base : init
service_initialization_proxy_skeleton_base --> service_initialization_instance_database
service_initialization_proxy_skeleton_base --> service_initialization_cluster_connection

@enduml

Service initialization component view

Notes:

  • The instance database is compile-time generated from deployment configuration.

  • Each service instance maps to specific cluster connections.

  • Both proxies and skeletons can have multiple cluster connections based on deployment topology.

  • Initialization validates instance IDs and returns error codes on failure.

Dynamic View

The dynamic view illustrates proxy and skeleton initialization sequences with error handling.

Proxy Initialization

' *******************************************************************************
' Copyright (c) 2026 BMW AG
'
' This program and the accompanying materials are made available under the
' terms of the Apache License Version 2.0 which is available at
' https://www.apache.org/licenses/LICENSE-2.0
'
' SPDX-License-Identifier: Apache-2.0
' *******************************************************************************

@startuml

hide footbox

actor "Generated\nProxy" as generated_proxy
participant "Proxy/Skeleton Base" as proxy_skeleton_base_unit
participant "Instance Database" as instance_database_unit
participant "Cluster Connection" as cluster_connection_unit

activate proxy_skeleton_base_unit
activate instance_database_unit
activate cluster_connection_unit

generated_proxy -> proxy_skeleton_base_unit : initFromInstancesDatabase(instanceId, sourceCluster, dbRange)
proxy_skeleton_base_unit -> proxy_skeleton_base_unit : unsubscribe previous connection
proxy_skeleton_base_unit -> proxy_skeleton_base_unit : iterate through dbRange
proxy_skeleton_base_unit -> instance_database_unit : getInstanceIdsRange()
instance_database_unit --> proxy_skeleton_base_unit : instanceIds[]

alt instance found in database
    proxy_skeleton_base_unit -> instance_database_unit : getProxyConnectionsRange()
    instance_database_unit --> proxy_skeleton_base_unit : connections[]
    proxy_skeleton_base_unit -> proxy_skeleton_base_unit : find connection matching sourceCluster
    alt matching connection found
        proxy_skeleton_base_unit -> cluster_connection_unit : subscribe(proxy, instanceId)
        cluster_connection_unit -> cluster_connection_unit : register proxy in transceivers
        cluster_connection_unit --> proxy_skeleton_base_unit : HRESULT::Ok
        proxy_skeleton_base_unit -> proxy_skeleton_base_unit : store connection reference
        proxy_skeleton_base_unit --> generated_proxy : HRESULT::Ok
    else no matching connection
        proxy_skeleton_base_unit -> proxy_skeleton_base_unit : logError(TransceiverInitializationFailed)
        proxy_skeleton_base_unit --> generated_proxy : HRESULT::TransceiverInitializationFailed
    end
else instance not found
    proxy_skeleton_base_unit -> proxy_skeleton_base_unit : logError(TransceiverInitializationFailed)
    proxy_skeleton_base_unit --> generated_proxy : HRESULT::TransceiverInitializationFailed
end

deactivate proxy_skeleton_base_unit
deactivate instance_database_unit
deactivate cluster_connection_unit

@enduml

Service initialization proxy sequence

Skeleton Initialization

' *******************************************************************************
' Copyright (c) 2026 BMW AG
'
' This program and the accompanying materials are made available under the
' terms of the Apache License Version 2.0 which is available at
' https://www.apache.org/licenses/LICENSE-2.0
'
' SPDX-License-Identifier: Apache-2.0
' *******************************************************************************

@startuml

hide footbox

actor "Generated\nSkeleton" as generated_skeleton
participant "Proxy/Skeleton Base" as proxy_skeleton_base_unit
participant "Instance Database" as instance_database_unit
participant "Cluster Connection" as cluster_connection_unit

activate proxy_skeleton_base_unit
activate instance_database_unit
activate cluster_connection_unit

generated_skeleton -> proxy_skeleton_base_unit : init(instanceId)
proxy_skeleton_base_unit -> proxy_skeleton_base_unit : validate state (must be uninitialized)
proxy_skeleton_base_unit -> instance_database_unit : find instance configuration

alt instance found with client connections
    instance_database_unit --> proxy_skeleton_base_unit : connections[] info
    loop for each connection
        proxy_skeleton_base_unit -> cluster_connection_unit : subscribe(skeleton, instanceId)
        cluster_connection_unit -> cluster_connection_unit : register skeleton in transceivers
        cluster_connection_unit --> proxy_skeleton_base_unit : HRESULT::Ok
    end
    proxy_skeleton_base_unit -> proxy_skeleton_base_unit : setState(initialized)
    proxy_skeleton_base_unit --> generated_skeleton : HRESULT::Ok
else instance found without client connections
    instance_database_unit --> proxy_skeleton_base_unit : empty connections[]
    proxy_skeleton_base_unit -> proxy_skeleton_base_unit : logError(NoClientsAvailable)
    proxy_skeleton_base_unit --> generated_skeleton : HRESULT::NoClientsAvailable
else instance not found
    instance_database_unit --> proxy_skeleton_base_unit : nullptr
    proxy_skeleton_base_unit -> proxy_skeleton_base_unit : logError(TransceiverInitializationFailed)
    proxy_skeleton_base_unit --> generated_skeleton : HRESULT::TransceiverInitializationFailed
end

deactivate proxy_skeleton_base_unit
deactivate instance_database_unit
deactivate cluster_connection_unit

@enduml

Service initialization skeleton sequence