]
Mario Fusco updated DROOLS-3089:
--------------------------------
Fix Version/s: 7.13.0.Final
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
Fix For: 7.13.0.Final
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")