This is an automated email from the ASF dual-hosted git repository.
mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 1eee5deda4 [KIE-1662] Make KieServiceLoader cache thread-safe (#6177)
1eee5deda4 is described below
commit 1eee5deda4b574ef04ef2cf7d5e58269c38f39fd
Author: Mario Fusco <[email protected]>
AuthorDate: Tue Dec 3 10:15:58 2024 +0100
[KIE-1662] Make KieServiceLoader cache thread-safe (#6177)
* [KIE-1662] Make KieServiceLoader cache thread-safe
* wip
* wip
---
.../java/org/kie/api/internal/utils/KieServiceLoader.java | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git
a/kie-api/src/main/java/org/kie/api/internal/utils/KieServiceLoader.java
b/kie-api/src/main/java/org/kie/api/internal/utils/KieServiceLoader.java
index 82ae6d55a9..8df4d8dd78 100644
--- a/kie-api/src/main/java/org/kie/api/internal/utils/KieServiceLoader.java
+++ b/kie-api/src/main/java/org/kie/api/internal/utils/KieServiceLoader.java
@@ -18,9 +18,9 @@
*/
package org.kie.api.internal.utils;
-import java.util.HashMap;
import java.util.Map;
import java.util.ServiceLoader;
+import java.util.concurrent.ConcurrentHashMap;
import static org.kie.api.internal.utils.KieService.UNDEFINED;
@@ -28,7 +28,9 @@ public class KieServiceLoader {
static final KieServiceLoader INSTANCE = new KieServiceLoader();
- private final Map<String, KieService> serviceCache = new HashMap<>();
+ private static final KieService DUMMY_SERIVCE = new KieService() {};
+
+ private final Map<String, KieService> serviceCache = new
ConcurrentHashMap<>();
private KieServiceLoader() {}
@@ -38,11 +40,14 @@ public class KieServiceLoader {
<T extends KieService> T lookup(Class<T> serviceClass, String tag) {
String serviceKey = serviceClass.getName() + ":" + tag;
- if (serviceCache.containsKey(serviceKey)) {
- return (T) serviceCache.get(serviceKey);
+
+ T cachedService = (T) serviceCache.get(serviceKey);
+ if (cachedService != null) {
+ return cachedService == DUMMY_SERIVCE ? null : cachedService;
}
+
T loadedService = load(serviceClass, tag);
- serviceCache.put(serviceKey, load(serviceClass, tag));
+ serviceCache.put(serviceKey, loadedService == null ? DUMMY_SERIVCE :
loadedService);
return loadedService;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]