Claus Ibsen created CAMEL-26237:
-----------------------------------
Summary: camel-ehcache - without a cacheManager each endpoint URI
builds its own CacheManager, so a GET does not find what a PUT on another
endpoint stored
Key: CAMEL-26237
URL: https://issues.apache.org/jira/browse/CAMEL-26237
Project: Camel
Issue Type: Bug
Components: camel-ehcache
Reporter: Claus Ibsen
Fix For: 4.24.0
Found while adding the catalog body types of ehcache (CAMEL-24961, PR #28397).
h4. 1. Each endpoint URI has its own CacheManager
{{EhcacheEndpoint.doStart}} (main 2a465aa4814c, line 70) calls
{{EhcacheComponent.createCacheManager}}, which without {{cacheManager}},
{{cacheManagerConfiguration}} or {{configurationUri}} returns a new
{{CacheManager}} for each call (line 113; the other branches share one through
{{managers.computeIfAbsent}}). So {{ehcache:x}} and {{ehcache:x?action=GET}}
are two caches named x: a GET does not find what the other endpoint stored.
Checked on 4.24.0-SNAPSHOT with the default Ehcache setup and with an XML
configuration.
Proposed: share the default CacheManager per component, as the configured
branches do.
h4. 2. A consumer on a cache without configuration gets no events
Without a cache configuration {{EhcacheManager.getCache}} (lines 115-122) falls
back to a {{UserManagedCache}}, and the listener the consumer registers on it
({{EhcacheConsumer}} line 58) never gets an event, without a warning. Checked
on 4.24.0-SNAPSHOT with the default Ehcache setup and with an XML configuration.
Proposed: create a managed cache with the default configuration instead, or
fail (or warn) when a consumer gets a UserManagedCache.
h4. 3. PUT, PUT_IF_ABSENT and REPLACE with no body store the Camel message
{{EhcacheProducer.getValue}} (line 168) calls {{message.getBody(Object.class)}}
when there is no {{CamelEhcacheValue}} header; with a null body this converts
the message itself, so the cache stores the {{DefaultMessage}} object instead
of failing. Checked on 4.24.0-SNAPSHOT with the default Ehcache setup and with
an XML configuration.
Proposed: use {{getBody()}} for Object, and fail when the value is null.
h4. 4. valueType without keyType: "keyType cannot be null"
{{EhcacheManager.getCache}} (lines 89-98) falls back to Object only when both
types are null, so {{valueType}} without {{keyType}} fails with a
NullPointerException "keyType cannot be null". Checked on 4.24.0-SNAPSHOT with
the default Ehcache setup and with an XML configuration.
Proposed: default each type to Object (or the configured type) on its own.
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)