]
Mario Fusco updated DROOLS-3089:
--------------------------------
Sprint: 2018 Week 39-41
ThreadSafeTrackableTimeJobFactoryManager for default
----------------------------------------------------
Key: DROOLS-3089
URL:
https://issues.jboss.org/browse/DROOLS-3089
Project: Drools
Issue Type: Enhancement
Components: core engine
Affects Versions: 7.12.0.Final
Reporter: Toshiya Kobayashi
Assignee: Mario Fusco
Priority: Major
Labels: support
By default, TrackableTimeJobFactoryManager is set by SessionConfigurationImpl.
https://github.com/kiegroup/drools/blob/7.11.0.Final/drools-core/src/main...
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-...).
ThreadSafeTrackableTimeJobFactoryManager is bundled for multi-thread use. You can use it
by
Drools 7:
{noformat}
System.setProperty("drools.timerJobFactory",
"thread_safe_trackable");
{noformat}
Drools 6.3+:
{noformat}
KieSessionConfiguration kconf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
((org.drools.core.SessionConfiguration)kconf).setTimerJobFactoryType(
TimerJobFactoryType.THREAD_SAFE_TRACKABLE );
KieSession ksession = kContainer.newKieSession("ksession-name", kconf);
{noformat}
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")