[
https://issues.apache.org/jira/browse/OFBIZ-6747?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17620413#comment-17620413
]
Jacques Le Roux commented on OFBIZ-6747:
----------------------------------------
Finally, I has a serious look at UtilCache.
I wrote above:
bq. CLHM is only used in 2 places: UtilCache and ServiceDispatcher classes.
Moreover in UtilCache it's only really used OOTB by
EntityPerformanceTest.groovy.
Actually last sentence is wrong. CLHM in UtilCache is OOTB only used by
UtilCacheTests class.
I traced it back. CLHM was put in UtilCache by Adam more than 10 years ago. I
guess he used it on his side. It's not used OOTB apart that. And we have a
problem with UtilCacheTests, because we can't cast Caffeine to a Map without
using its asMap() method. So we get the errors below when running tests with
OFBIZ-6747.patch applied, when all the rest is OK.
{noformat}
> Task :test
org.apache.ofbiz.base.util.cache.UtilCacheTests > testCreateUtilCache FAILED
java.lang.ClassCastException at UtilCacheTests.java:216
org.apache.ofbiz.base.util.cache.UtilCacheTests > testPutIfAbsent FAILED
java.lang.ClassCastException at UtilCacheTests.java:184
org.apache.ofbiz.base.util.cache.UtilCacheTests > testPutIfAbsentAndGet FAILED
java.lang.ClassCastException at UtilCacheTests.java:184
org.apache.ofbiz.base.util.cache.UtilCacheTests > testExpire FAILED
java.lang.ClassCastException at UtilCacheTests.java:184
org.apache.ofbiz.base.util.cache.UtilCacheTests > testSimple FAILED
java.lang.ClassCastException at UtilCacheTests.java:184
org.apache.ofbiz.base.util.cache.UtilCacheTests > testChangeMemSize FAILED
java.lang.ClassCastException at UtilCacheTests.java:184
for UtilCacheTests to
{noformat}
Only for these specific cases we would need to create a UtilCacheAsMap class to
set the inner memoryTable as a Map using asMap() method.
Let's summarize the OOTB situation: because of maxInMemory parameter, UtilCache
never uses CLHM (Caffeine in our case) but in UtilCacheTests
Here are the options:
# Using Caffeine, we create a specific UtilCacheAsMap class, only to satisfy
UtilCacheTests
# We remove both CLHM from UtilCache and UtilCacheTests
# We let things as they are
# is complicated for no OOTB gains, and I guess even for users (Adam no longer
seems to worry about OFBiz)
# is cleaner but needs some work and could annoy some old users migration
# seems the best option to me
Here is the patch [^OFBIZ-6747.patch]
> Replace ConcurrentLinkedHashMap by Caffeine
> -------------------------------------------
>
> Key: OFBIZ-6747
> URL: https://issues.apache.org/jira/browse/OFBIZ-6747
> Project: OFBiz
> Issue Type: Improvement
> Components: framework/base, framework/service
> Affects Versions: Upcoming Branch
> Reporter: Ben Manes
> Assignee: Jacques Le Roux
> Priority: Minor
> Fix For: Upcoming Branch
>
> Attachments: OFBIZ-6747.patch
>
>
> Similar to OFBIZ-3779, please consider upgrading the library used by
> [UtilCache|https://github.com/apache/ofbiz/blob/trunk/framework/base/src/main/java/org/apache/ofbiz/base/util/cache/UtilCache.java]
> (v1.2). The current version is 1.4.2 and is the last major release planned.
> The preferable alternative would be to upgrade to
> [Caffeine|https://github.com/ben-manes/caffeine]. This is a Java 8 rewrite
> based on what I've learned since developing CLHM and Guava's cache. As
> expected it provides [superior
> performance|https://github.com/ben-manes/caffeine/wiki/Benchmarks]. It also
> provides a [near
> optimal|https://github.com/ben-manes/caffeine/wiki/Efficiency] eviction
> policy.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)