I'll rewrite the rule and give you feedback tomorrow.
"would you be interested in doing some research and see if/how theyimpact performance and rule authoring?" - No problem. It would be a
pleasure for me to help.-markus2014-02-25 17:22 GMT+01:00 Davide Sottara <dsotty@gmail.com>:
The "after 20 facts or so" makes me think that some constraint behaves differently when jitted
(constraints are jitted lazily, to go from interpreted to compiled mode, only when they are used
often enough).
In fact, there was a bug that was fixed a few days ago regarding a different behavior of "contains".
The interpreted version would work as String.contains, while the compiled version would work
as Collection.contains - or vice versa, I don't remember right now.
Unfortunately, the fix can't be backported to 5.5.0.Final.
Can you try to rewrite constraints like :into
_name:catalog['name'] not contains 'Timer'
_name:catalog['name'], ! ((String) catalog['name']).contains( 'Timer' )
and see if the situation improves?
On a totally unrelated topic...
I have also noticed that you have a very peculiar data model..
we developed traits in 5.6 and 6.x to deal with relational models like yours..
would you be interested in doing some research and see if/how they
impact performance and rule authoring?
Davide
On 02/25/2014 02:31 PM, Markus Schneider wrote:
The reason why I've activated the logging was that some rules are not fired after inserting a special
amount of facts - in my case exactly 20.
Some more details here:
I work on an Event Correlation & Analysis OSS solution that's based on Grails & Drools 5.5.0-Final.
I'm using a stateful knowledge session and only call dispose() when the app is stopped - but all facts
are retracted. The functional testing works fine but as I've mentioned it before when I run the integration
testing it fails, because rules are not fired ('ClearAlertRule' is not fired) when I insert more than 20 facts.
I saw the errors in the drools log but I didn't know if they were relevant for my problem here.
I've attached two picts which document the right and the wrong behavior of the rule processing
- also I've listed the rules of my rulebase.
Has anybody an idea?
Cheers,
-markus
//------------------------------
rule 'UpdateAlertRule'
//------------------------------
dialect 'mvel'
salience 900
no-loop
when
_event : Event(eventClass == "Event",
_name:catalog['name'],
_category:catalog['category'],
_severity:catalog['severity'],
_state:catalog['state'],
_source:catalog['source'],
_subSource:catalog['subSource'],
_origin:catalog['origin'],
_subOrigin:catalog['subOrigin'],
_owner:catalog['owner'],
_description:catalog['description'],
_selector:("from Alert where " +
"name='" + catalog['name'] + "' " +
"and severity='" + catalog['severity'] + "' " +
"and not state='Closed'"
)
)
eval(isDuplicate(_event,"UpdateAlertRule",_selector) == true)
then
System.out.println("UpdateAlertRule is processed.")
EntityBuilder entityBuilder = new EntityBuilder();
entityBuilder.addProperty("modifiedBy","UpdateAlertRule");
entityBuilder.addProperty("counter",1);
AlertHandler alertHandler = new AlertHandler(entityBuilder.getProperties(),_selector);
alertHandler.update();
RuleLogHandler ruleLogHandler = new RuleLogHandler();
ruleLogHandler.create("UpdateAlertRule",_name);
end
//------------------------------
rule 'ClearAlertRule'
//------------------------------
dialect 'mvel'
salience 800
no-loop
when
_event : Event(eventClass == "Event",
_name:catalog['name'] contains 'Info',
_category:catalog['category'],
_severity:catalog['severity'] == 'Harmless',
_state:catalog['state'],
_source:catalog['source'],
_subSource:catalog['subSource'],
_origin:catalog['origin'],
_subOrigin:catalog['subOrigin'],
_owner:catalog['owner'],
_description:catalog['description'],
_selector:("from Alert where " +
"name like '%Error'" +
"and not severity='Harmless'" +
"and not state='Closed'"
)
)
then
System.out.println("ClearAlertRule is processed.")
EntityBuilder entityBuilder = new EntityBuilder();
entityBuilder.addProperty("modifiedBy","ClearAlertRule")
entityBuilder.addProperty("state","Closed");
AlertHandler alertHandler = new AlertHandler(entityBuilder.getProperties(),_selector);
alertHandler.update();
RuleLogHandler ruleLogHandler = new RuleLogHandler();
ruleLogHandler.create("ClearAlertRule",_name);
end
//------------------------------
rule 'CreateAlertRule'
//------------------------------
dialect 'mvel'
salience 700
no-loop
when
_event : Event(eventClass == "Event",
_name:catalog['name'],
_category:catalog['category'],
_severity:catalog['severity'],
_priority:catalog['priority'],
_state:catalog['state'],
_source:catalog['source'],
_subSource:catalog['subSource'],
_origin:catalog['origin'],
_subOrigin:catalog['subOrigin'],
_owner:catalog['owner'],
_description:catalog['description'],
_selector:("from Alert where " +
"name='" + catalog['name'] + "' " +
"and severity='" + catalog['severity'] + "' " +
"and not state='Closed'"
)
)
eval(isDuplicate(_event,"CreateAlertRule",_selector) == false)
then
System.out.println("CreateAlertRule is processed.");
EntityBuilder entityBuilder = new EntityBuilder();
entityBuilder.addProperty("modifiedBy","CreateAlertRule");
entityBuilder.addProperty("name",_name);
entityBuilder.addProperty("category",_category);
entityBuilder.addProperty("severity",_severity);
entityBuilder.addProperty("priority",_priority);
entityBuilder.addProperty("state",_state);
entityBuilder.addProperty("source",_source);
entityBuilder.addProperty("subSource",_subSource);
entityBuilder.addProperty("origin",_origin);
entityBuilder.addProperty("subOrigin",_subOrigin);
entityBuilder.addProperty("owner",_owner);
entityBuilder.addProperty("description",_description);
AlertHandler alertHandler = new AlertHandler(entityBuilder.getProperties(),_selector);
alertHandler.create();
RuleLogHandler ruleLogHandler = new RuleLogHandler();
ruleLogHandler.create("CreateAlertRule",_name);
end
//------------------------------
rule 'EventRetractionRule'
//------------------------------
dialect 'mvel'
salience 1
no-loop
when
_event : Event(eventClass == "Event",
_name:catalog['name'] not contains 'Timer'
)
then
System.out.println("EventRetractionRule is processed.");
retract(_event);
RuleLogHandler ruleLogHandler = new RuleLogHandler();
ruleLogHandler.create("EventRetractionRule",_name);
end
2014-02-25 14:00 GMT+01:00 Markus Schneider <markus.schneider73@gmail.com>:
-markusHi Davide,
thank you for the fast response. I've defined an DebugAgendaEventListener as it's described here:
Drools Docu 5.5.0-Final/Section 7.2/HelloWorld example.
http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html/index.html
Where can I find any docu about the config of the DebugAgendaEventListener?
Cheers,
2014-02-25 12:59 GMT+01:00 Davide Sottara <dsotty@gmail.com>:
You likely have configured a DebugAgendaEventListener, which logs agenda events (rules activated, fired, etc..)
on the standard error rather than the standard output. If you want a different behavior, remove the listener
and implement one of your own.
These are not errors anyway.
Davide
On 02/25/2014 09:40 AM, Markus Schneider wrote:
Do I have a serious problem here?Hi list,I see the following error msg in my drools log but I don't know how to interpret this.
Has anybody a clue?
Thanks in advance.
Cheers,
-markus
| Error ==>[AfterActivationFiredEvent: getActivation()=[Activation rule=UpdateAlertRule, act#=37, salience=900, tuple=[fact 0:19:184363445:184363445:19:DEFAULT:rapideca.plugins.rbm.entity.Event : 19]
], getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@6dd4ab87]
| Error ==>[BeforeActivationFiredEvent: getActivation()=[Activation rule=EventRetractionRule, act#=36, salience=1, tuple=[fact 0:19:184363445:184363445:19:DEFAULT:rapideca.plugins.rbm.entity.Event : 19]
], getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@6dd4ab87]
EventRetractionRule is processed.
| Error ==>[ObjectRetractedEventImpl: getFactHandle()=[fact 0:19:184363445:184363445:19:DEFAULT:rapideca.plugins.rbm.entity.Event : 19], getOldObject()=rapideca.plugins.rbm.entity.Event : 19, getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@6dd4ab87, getPropagationContext()=PropagationContextImpl [activeActivations=0, dormantActivations=2, entryPoint=EntryPoint::DEFAULT, factHandle=[fact 0:19:184363445:184363445:19:DEFAULT:rapideca.plugins.rbm.entity.Event : 19], leftTuple=[fact 0:19:184363445:184363445:19:DEFAULT:rapideca.plugins.rbm.entity.Event : 19]
, originOffset=-1, propagationNumber=40, rule=[Rule name=EventRetractionRule, agendaGroup=MAIN, salience=1, no-loop=true], type=1]]
2014-02-25 08:59:03,524 [eventQueueReceiverJmsListenerContainer-1] INFO log.RuleLogHandler - RuleLog with id: 38 was successfully saved.
| Error ==>[AfterActivationFiredEvent: getActivation()=[Activation rule=EventRetractionRule, act#=36, salience=1, tuple=[fact 0:-1:184363445:184363445:19:null:null]
], getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl@6dd4ab87]
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users