0
在OptaPlanner求解短語期間,我希望更新一個全局變量。全局變量的更改將修改我的下一個規則驗證。如何在OptaPlanner中聲明非靜態全局變量
Result.java
package com.domain;
public static boolean status;
...
...
Sample.drl
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder;
import com.domain.Result;
global HardSoftScoreHolder scoreHolder;
rule "Sample Rule"
when
$PlanningEntity:PlanningEntity()
then
somelogic($PlanningEntity);
if(Result.status){
scoreHolder.addHardConstraintMatch(kcontext, -500);
}
end
function void somelogic(PlanningEntity planningEntity){
if(condition 1...){
Result.status = true;
}else if(condition 2...){
Result.status = false;
}else{
//Do Nothing
}
}
我的問題:
我怎樣才能宣佈每解決屆靜態全局變量。 (爲了避免多個用戶在同一時間執行OptaPlanner求解器)。
但是,這些Drools會話是否都會成爲一個用戶會話的一部分(即執行Java應用程序)?因此,不會有那種交叉火力OP似乎害怕。 - 順便說一句,Drools參考手冊甚至沒有聲明在同一個Java程序中運行的會話之間共享全局變量(但我以某種方式記住了它)。 – laune 2015-04-06 14:01:40
optaplanner中使用的每個drools會話都需要擁有它自己的全局實例(除非它是一個線程安全的記錄器(或者其他的它只作爲接收器,從不作爲源),創建這些實例需要通過回調,因爲optaplanner可能產生它所需的任何數量的drools會話(儘管目前它只在正常執行中產生1個) – 2015-04-06 20:14:25
是否可以使用影子變量或將變量添加到opta-planner中的工作內存(就像分數保持器一樣) ?????????????????????????????????????????????????????????????????????????????????????????????????????????? 「在規則和更新事實... – 2015-04-07 04:53:41