2014-09-12 41 views
3

我們在我們的項目中使用了Drools kieSessions。許多線程可以創建新的kieSession。有時線程會在創建會話時掛起。因此,問題:是newKieSession線程安全的?

首先

  1. 是kieContainer.newKieSession線程安全的操作?
  2. 懸掛的原因可能是一個骯髒的文字或閱讀kie會議的集合或類似的東西?

回答

2

正如我在實踐中檢驗

newKieSession 

是不是線程安全的操作。

+0

我剛剛檢查了版本6.2.0.Final和6.3.0.Final - 它仍然不是線程安全的。參考:https://docs.jboss.org/jbpm/v6.3/javadocs/org/kie/api/KieBase.html#newKieSession() – 2015-12-15 11:23:36

+0

你鏈接到KieBase類,而不是KieContainer .. – Sebastian 2016-02-16 16:20:45

+0

@Eugene確實你發現什麼不是線程安全的?我試圖從規則評估中分離kie模塊/基本/會話/規則配置,並保持這些活動互斥(通過ReentrantReadWriteLock)。因此,只有寫入線程可以創建新的kieContainers,而所有規則評估(只讀)訪問kieContainer非同步(使用'newKieSession','newStatelessKieSession'方法)..我發佈下面的答案.. – Sebastian 2016-02-16 16:52:32

1

我在drools文檔中找不到任何明確的聲明,但我的理解是KieContainer是線程安全的,甚至足夠智能(有點默默地/神奇地)更新自己(或者更確切地說它包含的KieBases)。

對於所有的實際目的(調試/閱讀源代碼),我認爲所有的KieContainer.newStatelessKieSession()KieContainer.newKieSession()方法都是線程安全的。

我不是100%肯定的updateToVersion()updateDependencyToVersion()方法以及是否通過並聯這些作品與KieContainer.newStatelessKieSession()newKieSession()方法改變紀伊容器。

在我們的應用程序中,我們設法從規則評估(使用newKieSession等方法)中修改規則(以及模塊,基礎,會話及其配置)的邏輯,到目前爲止似乎沒有問題,但我想了解你是如何得出結論的,它不是線程安全的。