Skip to content

Commit 9b4ffb2

Browse files
committed
Consume Caffeine Jandex index to register classes for reflection
1 parent 84cc29e commit 9b4ffb2

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

bom/application/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@
126126
<json-smart.version>2.3</json-smart.version>
127127
<infinispan.version>11.0.4.Final</infinispan.version>
128128
<infinispan.protostream.version>4.3.4.Final</infinispan.protostream.version>
129-
<caffeine.version>2.8.5</caffeine.version>
129+
<caffeine.version>2.8.6</caffeine.version>
130130
<netty.version>4.1.49.Final</netty.version>
131131
<reactive-streams.version>1.0.3</reactive-streams.version>
132132
<jboss-logging.version>3.4.1.Final</jboss-logging.version>

extensions/caffeine/deployment/src/main/java/io/quarkus/caffeine/deployment/CaffeineProcessor.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,29 @@
1111
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
1212

1313
public class CaffeineProcessor {
14-
private static final String CACHE_LOADER_CLASS_NAME = "com.github.benmanes.caffeine.cache.CacheLoader";
15-
private static final DotName CACHE_LOADER_NAME = DotName.createSimple(CACHE_LOADER_CLASS_NAME);
14+
15+
private static final DotName BOUNDED_LOCAL_CACHE_NAME = DotName
16+
.createSimple("com.github.benmanes.caffeine.cache.BoundedLocalCache");
17+
private static final DotName NODE_NAME = DotName.createSimple("com.github.benmanes.caffeine.cache.Node");
18+
private static final DotName CACHE_LOADER_NAME = DotName.createSimple("com.github.benmanes.caffeine.cache.CacheLoader");
1619

1720
@BuildStep
18-
ReflectiveClassBuildItem cacheClasses() throws IOException {
19-
//todo: how to we want to handle this? There are a lot of different cache classes
20-
return new ReflectiveClassBuildItem(false, false,
21-
"com.github.benmanes.caffeine.cache.SSLMS",
22-
"com.github.benmanes.caffeine.cache.SILMS",
23-
"com.github.benmanes.caffeine.cache.PSMS",
24-
"com.github.benmanes.caffeine.cache.PDMS",
25-
"com.github.benmanes.caffeine.cache.SSMS",
26-
"com.github.benmanes.caffeine.cache.SSLA",
27-
"com.github.benmanes.caffeine.cache.PSA");
21+
void cacheClasses(CombinedIndexBuildItem combinedIndex,
22+
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) throws IOException {
23+
reflectiveClass.produce(new ReflectiveClassBuildItem(true, false,
24+
combinedIndex.getIndex().getAllKnownSubclasses(BOUNDED_LOCAL_CACHE_NAME).stream()
25+
.map(ci -> ci.name().toString())
26+
.toArray(String[]::new)));
27+
28+
reflectiveClass.produce(new ReflectiveClassBuildItem(true, false,
29+
combinedIndex.getIndex().getAllKnownSubclasses(NODE_NAME).stream()
30+
.map(ci -> ci.name().toString())
31+
.toArray(String[]::new)));
2832
}
2933

3034
@BuildStep
3135
void cacheLoaders(CombinedIndexBuildItem combinedIndex, BuildProducer<ReflectiveClassBuildItem> reflectiveClasses) {
32-
reflectiveClasses.produce(new ReflectiveClassBuildItem(true, false, CACHE_LOADER_CLASS_NAME));
36+
reflectiveClasses.produce(new ReflectiveClassBuildItem(true, false, CACHE_LOADER_NAME.toString()));
3337

3438
for (ClassInfo info : combinedIndex.getIndex().getAllKnownImplementors(CACHE_LOADER_NAME)) {
3539
reflectiveClasses.produce(new ReflectiveClassBuildItem(true, false, info.name().toString()));

integration-tests/cache/src/main/resources/application.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:test
33
quarkus.hibernate-orm.dialect=org.hibernate.dialect.H2Dialect
44
quarkus.hibernate-orm.database.generation=drop-and-create
55
quarkus.hibernate-orm.sql-load-script=import.sql
6+
7+
# configure the cache
8+
quarkus.cache.caffeine."forest".expire-after-write=10M

0 commit comments

Comments
 (0)