[ 
https://issues.apache.org/jira/browse/CAMEL-25791?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-25791 started by Federico Mariani.
------------------------------------------------
> camel-state-store - Add a backend factory option to create one 
> KeyValueRepository per store name
> ------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25791
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25791
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Federico Mariani
>            Assignee: Federico Mariani
>            Priority: Minor
>
> h2. Problem
> When no {{backend}} option is set on a {{state-store}} endpoint, 
> {{StateStoreComponent}} picks the backend in two ways:
> * a single {{KeyValueRepository}} bean from the registry, which is then 
> shared by *every* store name, or
> * a new {{MemoryKeyValueRepository}} per store name.
> There is no way to get one dedicated (non in-memory) backend per store name 
> without setting {{backend=#...}} on every endpoint. It also means that 
> integrations can only plug in a backend by registering a global 
> {{KeyValueRepository}} bean. The Aggregate, Idempotent Consumer and Cache 
> EIPs also auto-discover that bean through {{findSingleByType}}, which changes 
> their behaviour (for example an {{optimisticLocking()}} aggregator then fails 
> to start).
> This came up while reviewing the Spring Cache adapter for camel-spring-boot 
> (CAMEL-24757, apache/camel-spring-boot#2046), where {{state-store:myStore}} 
> should map to the Spring cache {{myStore}}.
> h2. Proposal
> Add a {{StateStoreBackendFactory}} functional interface ({{KeyValueRepository 
> createBackend(String storeName)}}) and an autowired {{backendFactory}} 
> component option on {{StateStoreComponent}}.
> Resolution order for an endpoint:
> # explicit endpoint {{backend}}
> # {{backendFactory}} (called once per store name, the component starts/stops 
> the created backend; returning {{null}} falls through)
> # a single {{KeyValueRepository}} from the registry
> # {{MemoryKeyValueRepository}}
> Since the option is autowired, a runtime only needs to register a 
> {{StateStoreBackendFactory}} bean. The EIPs are unaffected because it is not 
> a {{KeyValueRepository}}.
> _Claude Code on behalf of Federico Mariani_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to