-
Enhancement
-
Resolution: Done
-
Major
-
7.12.0.Final
-
2018 Week 39-41
-
NEW
-
NEW
By default, TrackableTimeJobFactoryManager is set by SessionConfigurationImpl.
If users access a ksession via multiple threads, it would potentially hit a HashMap concurrency issue (e.g. https://stackoverflow.com/questions/22944918/why-does-the-code-hang-with-hashmap-put-from-multiple-threads).
ThreadSafeTrackableTimeJobFactoryManager is bundled for multi-thread use. You can use it by
Drools 7:
System.setProperty("drools.timerJobFactory", "thread_safe_trackable");
Drools 6.3+:
KieSessionConfiguration kconf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(); ((org.drools.core.SessionConfiguration)kconf).setTimerJobFactoryType( TimerJobFactoryType.THREAD_SAFE_TRACKABLE ); KieSession ksession = kContainer.newKieSession("ksession-name", kconf);
However, it's better to make ThreadSafeTrackableTimeJobFactoryManager default because "Suddenly hitting an issue in production" is significant than "small overhead by ConcurrentHashMap". (Generally, users are not very conscious about "it is accessed by multi-threads or not")
- is incorporated by
-
RHDM-759 ThreadSafeTrackableTimeJobFactoryManager for default
- Closed