2012-11-17 349 views
1

如何全局變量Drools的無狀態會話設置。全局變量

比方說,兩個線程訪問同一個會話,但設置一個全局變量客戶的ArrayList爲每個線程 新的ArrayList。第二個線程的數組列表替換了全局變量客戶的第一個線程的數組列表。

這似乎從StatelessKnowledgeSession類文檔的情況:

StatelessKnowledgeSessions支持全局,作用域在許多方面。我將首先介紹非命令方式,因爲命令的範圍是特定的執行調用。全局可以通過三種方式解決。 StatelessKnowledgeSession支持getGlobals(),它返回一個Globals實例。這些全局變量是所有執行調用共享,所以要特別小心,在這些情況下可變的全局變量 - 經常執行的呼叫可以在不同的線程同時執行。 Globals還支持委託,這增加了解決全局性的第二種方法。 setGlobal(字符串,對象)的調用實際上將在內部收集集,在這個內部集合標識符將優先提供的委託,如果添加一個。如果在內部集合中找不到標識符,則會檢查委託全局(如果已設置)。

http://docs.jboss.org/jbpm/v5.1/javadocs/org/drools/runtime/StatelessKnowledgeSession.html

對嗎?

回答

0

雖然我不能給你一個完全可靠的答案(因爲我沒有測試過這一點),我會說,你是正確的,因爲

  1. StatelessKnowledgeSession的引擎蓋下,Drools的使用StatefulKnowledgeSession和在有狀態會話,我預料的setGlobal(...)通話將覆蓋從先前調用的值。

  2. 全局都在一個「全局店」舉行;這個全局存儲是特定於會話的,這意味着如果您使用不同的線程同時訪問同一個會話,則一個線程將覆蓋另一個線程的全局存儲 - 最後執行哪個線程的setGlobal(...)