Class AxonServerTenantEventStorageEngineFactory
- All Implemented Interfaces:
MultiTenantAwareComponent,TenantEventStorageEngineFactory,DescribableComponent
TenantEventStorageEngineFactory, building one EventStorageEngine
per tenant against that tenant's Axon Server context.
Axon Server's engine is not its own SnapshotStore and does not resolve snapshots while sourcing, so
MultiTenantEventStorageEngine complements it with
that tenant's
snapshot store. This factory only builds the engine.
Engines are created lazily and cached, and evicted on tenant removal, by a TenantScopedCache this factory
holds. Following the tenant lifecycle is delegated to that cache through MultiTenantAwareComponent. The
underlying connection is owned by the connection manager, which disconnects it on tenant removal, so eviction only
drops the stale engine and a re-added tenant rebuilds a fresh one.
- Since:
- 5.3.0
- Author:
- Jakob Hatzl, Laura Devriendt
-
Constructor Summary
ConstructorsConstructorDescriptionAxonServerTenantEventStorageEngineFactory(Configuration configuration) Constructs anAxonServerTenantEventStorageEngineFactorybuilding per-tenant engines from the givenconfiguration. -
Method Summary
Modifier and TypeMethodDescriptionvoiddescribeTo(ComponentDescriptor descriptor) Describe the properties ofthis DescribableComponentwith the givendescriptor.engineFor(TenantDescriptor tenant) Returns theEventStorageEngineof the giventenant.registerAndStartTenant(TenantDescriptor tenantDescriptor) Registers the giventenantDescriptoras a known tenant with this multi-tenant aware component.registerTenant(TenantDescriptor tenantDescriptor) Registers the giventenantDescriptoras a known tenant with this multi-tenant aware component.
-
Constructor Details
-
AxonServerTenantEventStorageEngineFactory
Constructs anAxonServerTenantEventStorageEngineFactorybuilding per-tenant engines from the givenconfiguration.- Parameters:
configuration- the configuration used to construct each tenant's Axon Server event storage engine
-
-
Method Details
-
engineFor
Description copied from interface:TenantEventStorageEngineFactoryReturns theEventStorageEngineof the giventenant.- Specified by:
engineForin interfaceTenantEventStorageEngineFactory- Parameters:
tenant- the tenant to return the event storage engine for- Returns:
- the tenant's
EventStorageEngine
-
registerTenant
Description copied from interface:MultiTenantAwareComponentRegisters the giventenantDescriptoras a known tenant with this multi-tenant aware component.The caller must retain the returned
Registrationand cancel it when the tenant is removed, since releasing the component's per-tenant resources rides on that cancellation.- Specified by:
registerTenantin interfaceMultiTenantAwareComponent- Parameters:
tenantDescriptor- TheTenantDescriptorto register with this component.- Returns:
- A
Registrationused to deregister the giventenantDescriptor.
-
registerAndStartTenant
Description copied from interface:MultiTenantAwareComponentRegisters the giventenantDescriptoras a known tenant with this multi-tenant aware component. If applicable, this task will construct a tenant segment and start it.- Specified by:
registerAndStartTenantin interfaceMultiTenantAwareComponent- Parameters:
tenantDescriptor- TheTenantDescriptorto register with this component.- Returns:
- A
Registrationused to deregister the giventenantDescriptor.
-
describeTo
Description copied from interface:DescribableComponentDescribe the properties ofthis DescribableComponentwith the givendescriptor.Components should call the appropriate
describePropertymethods on the descriptor to register their properties. The descriptor is responsible for determining how these properties are formatted and structured in the final output.Best Practices: As a general rule, all relevant fields of a
DescribableComponentimplementation should be described in this method. However, developers have discretion to include only the fields that make sense in the context. Not every field may be meaningful for description purposes, especially internal implementation details. Furthermore, components might want to expose different information based on their current state. The final decision on what properties to include lies with the person implementing thedescribeTomethod, who should focus on providing information that is useful for understanding the component's configuration and state.Example implementation:
public void describeTo(ComponentDescriptor descriptor) { descriptor.describeProperty("name", this.name); descriptor.describeProperty("enabled", this.enabled); descriptor.describeProperty("configuration", this.configuration); // A nested component descriptor.describeProperty("handlers", this.eventHandlers); // A collection }- Specified by:
describeToin interfaceDescribableComponent- Parameters:
descriptor- The component descriptor to describethis DescribableComponentn its properties in.
-