Hi,
I came across in my view strange behaviour of rules defined with
activation-group and salience. I use this combination to set the
priority of exclusively fired rules "Democracy City Tiles Production"
and "Basic City Tiles Production".
Their definitions:
rule "Democracy City Tiles Production"
dialect "mvel"
ruleflow-group "manageProductions"
activation-group "cityProduction"
salience 5
when
PlayerDTO($owner:id, government=="democracy")
$city:CityDTO(
owner==$owner
,$cityId:id
,$managedTiles:managedTiles
)
accumulate(
TileDTO (
id memberOf $managedTiles
,$foodProd:foodProduction
,$resourcesProd:resourcesProduction
,$tradeProd:tradeProduction
)
@watch(foodProduction,resourcesProduction,tradeProduction)
,$sumFood : sum($foodProd)
,$sumResources : sum($resourcesProd)
,$sumTrade :
sum(($tradeProd<1)?$tradeProd:($tradeProd+1))
)
UpdateCityProduction(cityId==$cityId)
then
modify($city){
setFoodProduction($sumFood)
,setResourcesProduction($sumResources)
,setTradeProduction($sumTrade)
}
end
and
rule "Basic City Tiles Production"
dialect "mvel"
ruleflow-group "manageProductions"
activation-group "cityProduction"
when
PlayerDTO($owner:id)
$city:CityDTO(
owner==$owner
,$cityId:id
,$managedTiles:managedTiles
)
accumulate(
TileDTO (
id memberOf $managedTiles
,$foodProd:foodProduction
,$resourcesProd:resourcesProduction
,$tradeProd:tradeProduction
)
@watch(foodProduction,resourcesProduction,tradeProduction)
,$sumFood : sum($foodProd)
,$sumResources : sum($resourcesProd)
,$sumTrade : sum($tradeProd)
)
UpdateCityProduction(cityId==$cityId)
then
modify($city){
setFoodProduction($sumFood)
,setResourcesProduction($sumResources)
,setTradeProduction($sumTrade)
}
end
But problem occurs when two CityDTO objects are in the session. I would
like to fire one rule for each CityDTO, but the activation-group cancels
all the activations after first is fired. So only one activation in
place of two fires. Here is the log:
==>[BeforeActivationFiredEvent: getActivation()=[[ Democracy City Tiles
Production active=false ] [ [fact
0:12:36803987:36803987:12:DEFAULT:NON_TRAIT:UpdateCityProduction(
cityId=5 )]
[fact
0:16:2083264739:2083264739:16:null:NON_TRAIT:[Ljava.lang.Object;@7c2c18e3]
[fact 0:11:792938926:966:11:DEFAULT:NON_TRAIT:CityDTO [id=5,
name=marefy, cityCentre=null, owner=1, improvements=[],
currentImprovement=null, enabledImprovements=[], homeUnits=[],
currentUnit=null, enabledUnitTypes=[], tradeRoutes=[], managedTiles=[1,
2], size=5, weLoveDay=false, disorder=false, foodProduction=0,
foodConsumption=0, foodSurplus=0, foodStock=0, resourcesProduction=0,
resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0,
corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0,
researchAmount=0, peopleHappy=2, peopleUnhappy=1, peopleContent=1,
peopleEntertainers=0, peopleTaxmen=1, peopleScientists=0,
pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
[fact 0:9:1762763035:99463566:9:DEFAULT:NON_TRAIT:PlayerDTO [id=1,
name=honza, government=democracy, enabledGovernments=null,
currentAdvance=null, advances=null, enabledAdvances=null, treasury=0,
research=0, researchSpent=null, turnsAvailable=null, luxuriesRatio=0,
taxesRatio=0, researchRatio=0]] ] ],
getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl@6a5b07f2]
==>[ActivationCancelledEvent: getCause()=CLEAR, getActivation()=[[ Basic
City Tiles Production active=false ] [ [fact
0:15:807492131:807492131:15:null:NON_TRAIT:[Ljava.lang.Object;@30215a23]
[fact 0:11:792938926:966:11:DEFAULT:NON_TRAIT:CityDTO [id=5,
name=marefy, cityCentre=null, owner=1, improvements=[],
currentImprovement=null, enabledImprovements=[], homeUnits=[],
currentUnit=null, enabledUnitTypes=[], tradeRoutes=[], managedTiles=[1,
2], size=5, weLoveDay=false, disorder=false, foodProduction=0,
foodConsumption=0, foodSurplus=0, foodStock=0, resourcesProduction=0,
resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0,
corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0,
researchAmount=0, peopleHappy=2, peopleUnhappy=1, peopleContent=1,
peopleEntertainers=0, peopleTaxmen=1, peopleScientists=0,
pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
[fact 0:12:36803987:36803987:12:DEFAULT:NON_TRAIT:UpdateCityProduction(
cityId=5 )] ] ],
getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl@6a5b07f2]
==>[ActivationCancelledEvent: getCause()=CLEAR, getActivation()=[[ Basic
City Tiles Production active=false ] [ [fact
0:23:833001332:833001332:23:null:NON_TRAIT:[Ljava.lang.Object;@31a69774]
[fact 0:18:1816369501:968:18:DEFAULT:NON_TRAIT:CityDTO [id=7, name=Brno,
cityCentre=null, owner=1, improvements=[], currentImprovement=null,
enabledImprovements=[], homeUnits=[], currentUnit=null,
enabledUnitTypes=[], tradeRoutes=[], managedTiles=[3, 4], size=1,
weLoveDay=false, disorder=false, foodProduction=0, foodConsumption=0,
foodSurplus=0, foodStock=0, resourcesProduction=0,
resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0,
corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0,
researchAmount=0, peopleHappy=0, peopleUnhappy=0, peopleContent=1,
peopleEntertainers=0, peopleTaxmen=0, peopleScientists=0,
pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
[fact
0:20:1314789527:1314789527:20:DEFAULT:NON_TRAIT:UpdateCityProduction(
cityId=7 )] ] ],
getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl@6a5b07f2]
==>[ActivationCancelledEvent: getCause()=CLEAR, getActivation()=[[
Democracy City Tiles Production active=false ] [ [fact
0:20:1314789527:1314789527:20:DEFAULT:NON_TRAIT:UpdateCityProduction(
cityId=7 )]
[fact
0:19:1857434733:1857434733:19:null:NON_TRAIT:[Ljava.lang.Object;@6eb6346d]
[fact 0:18:1816369501:968:18:DEFAULT:NON_TRAIT:CityDTO [id=7, name=Brno,
cityCentre=null, owner=1, improvements=[], currentImprovement=null,
enabledImprovements=[], homeUnits=[], currentUnit=null,
enabledUnitTypes=[], tradeRoutes=[], managedTiles=[3, 4], size=1,
weLoveDay=false, disorder=false, foodProduction=0, foodConsumption=0,
foodSurplus=0, foodStock=0, resourcesProduction=0,
resourcesConsumption=0, resourcesSurplus=null, tradeProduction=0,
corruption=0, luxuriesAmount=0, luxuriesSpent=0, taxesAmount=0,
researchAmount=0, peopleHappy=0, peopleUnhappy=0, peopleContent=1,
peopleEntertainers=0, peopleTaxmen=0, peopleScientists=0,
pollutionChance=0, improvementsUpkeep=0, unitsSupport=0]]
[fact 0:9:1762763035:99463566:9:DEFAULT:NON_TRAIT:PlayerDTO [id=1,
name=honza, government=democracy, enabledGovernments=null,
currentAdvance=null, advances=null, enabledAdvances=null, treasury=0,
research=0, researchSpent=null, turnsAvailable=null, luxuriesRatio=0,
taxesRatio=0, researchRatio=0]] ] ],
getKnowledgeRuntime()=org.drools.core.impl.StatefulKnowledgeSessionImpl@6a5b07f2]
Is it a bug?
Thanks
Jan