How to configure kie-server (or kie-wb) for rules based on timer

324 views
Skip to first unread message

Domengie Jean

unread,
Oct 19, 2016, 9:44:12 AM10/19/16
to Drools Setup
Hi,

First, i'm sorry for my english level.

I'm beginner with drools but with help of tuto "Installing KIE Server and Workgench on same server" (thank's to Maciej Swiderski), I'have installed on my workstation kie-server et kie-wb 6.4.0.Final and Wildfly 8.2.1.Final.

I'have create with success a new project and deploye it.

I'have create two rules (see below). When I use for the first time the REST command  (see below) i found in log file of wildfly server the message :  2016-10-19 15:14:36,897 INFO  [stdout] (default task-22) c est charge, but after 1 minute nothing new. But if I reused the command, I found in log file 2016-10-19 15:14:57,311 INFO  [stdout] (default task-50) coucou ... and a each command use.

Can you help me....

Also, I can't find a documentation with the detail of rest command (other than jboss !!!)

Thank you for your help

POST  http://localhost:8080/kie-server/services/rest/server/containers/instances/monTest

HEAD
    Content-Type : application/xml
    Accept : application/xml
    Authorization : Basic...
   X-Kie-ContentType : XSTREAM

BODY
<batch-execution lookup="defaultKieSession">
    <fire-all-rules/>
</batch-execution>

RULES

package jdo.monprojetcron;

rule "test"
    timer (cron:0/5 * * * * ?)
    when
        eval(true)
    then
        System.out.println("coucou ... ");
end

rule "ctrl"
    when
        eval(true)
    then
        System.out.println("c est charge ");
end






Maciej Swiderski

unread,
Oct 19, 2016, 1:05:02 PM10/19/16
to drools...@googlegroups.com
eval(True) will be executed only once as rule engine will fire the rule after it actually was activated but if you have only eval(true) the the activation happens once and that’s why.

Moreover for the timer based rule I believe you need to use stateful session - that can be declared in kmodue.xml via project editor.

Maciej
--
You received this message because you are subscribed to the Google Groups "Drools Setup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to drools-setup...@googlegroups.com.
To post to this group, send email to drools...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/drools-setup/49f1acf6-2a31-4cf4-919c-9b041ade88d2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Message has been deleted

Domengie Jean

unread,
Oct 20, 2016, 3:22:02 PM10/20/16
to Drools Setup
Thank you for your reply. I will do tests and I will make a return

Domengie Jean

unread,
Oct 27, 2016, 11:08:30 AM10/27/16
to Drools Setup
Hi,

I have configured the stateful session

<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <kbase name="maBase" default="false" eventProcessingMode="stream" equalsBehavior="identity">
    <ksession name="maSession" type="stateful" default="false" clockType="realtime"/>
  </kbase>
</kmodule>

My rules are

package jdo.projetreporting;

import jdo.projetreporting.Entite;

rule "timetest"

    timer (cron:0/5 * * * * ?)
    when
        $e: Entite(enseigne == "un nom")
    then
        System.out.println("delanchement de la regle");
end

rule "controle"
    when
        eval(true)
    then
        System.out.println("chargement des regles...");
end

I insert object on kie-server (via batch execution with POSTMAN) --> OK,
I send to kie-server batch execution with fire all rules and I see in log file the line create by the rule "controle" (2016-10-27 16:50:15,181 INFO  [stdout] (default task-58) chargement des regles...) but nothing for the rule "timetest" (i thing is normal),
After 5 seconds nothing in the log file,
I send new command fire all rules and I see in log file line create by the rule "timetest" 2016-10-27 16:52:57,879 INFO  [stdout] (default task-49) delanchement de la regle,
If i send new fire all rules :
     beford 5 seconds nothing in log file,
     after 5 seconds it's ok.
if i waiting 1 minute and after send new fire all rules command i have only one trace and not a trace for each 5 seconds.

I have read on drools documentation (2.11.2 Automatically firing timed rule in passive mode) :

"Now it is possible to change this default behavior by configuring the KieSession with a TimedRuleExectionOption"


But i don't say how to change this parameters in kie-workbench ?

 I have searched on this forum and on iternet but I don't find

I have you suggestion ?

Thank for your help (and support my english)



Le mercredi 19 octobre 2016 15:44:12 UTC+2, Domengie Jean a écrit :

Maciej Swiderski

unread,
Oct 27, 2016, 1:44:57 PM10/27/16
to drools...@googlegroups.com
you can pass it as system property:
-Ddrools.timedRuleExection=true

Maciej
--
You received this message because you are subscribed to the Google Groups "Drools Setup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to drools-setup...@googlegroups.com.
To post to this group, send email to drools...@googlegroups.com.

Domengie Jean

unread,
Oct 28, 2016, 6:28:21 AM10/28/16
to Drools Setup
Hi,

Thank you for your help Maciej, It works .... :)


JBoss documentation is very light especially for a beginner. Does it exist, to your knowledge, documentation (user and developer) more complete somewhere? I have to work monitoring project for controle business and technics process and Drools allow me to detect cases of anomaly or error. And without good doc, the work will hard...

Jean


Le mercredi 19 octobre 2016 15:44:12 UTC+2, Domengie Jean a écrit :

Maciej Swiderski

unread,
Oct 28, 2016, 1:27:14 PM10/28/16
to drools...@googlegroups.com
Besides the official documentation you could search for some tutorials on the net, but don’t think there are very details though might be good starting points. 

I’d like to recommend recently published user guide that can be found on the web site: http://www.drools.org/learn/documentation.html (the gitbook)

Maciej
--
You received this message because you are subscribed to the Google Groups "Drools Setup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to drools-setup...@googlegroups.com.
To post to this group, send email to drools...@googlegroups.com.

swapnil irabatti

unread,
Dec 1, 2017, 9:29:10 AM12/1/17
to Drools Setup
I am also facing the same issue I have stateful session mentioned in kmodule.xml as below:

<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         
xmlns="http://jboss.org/kie/6.0.0/kmodule">
         
<kbase name="maBase" default="true" eventProcessingMode="stream" equalsBehavior="identity">
   
<ksession name="rpsContainer" type="stateful" default="true" clockType="realtime"/>
 
</kbase>
   
</kmodule>

I have a rule:


rule
'hello'
timer
( int: 0m 15s )
when
 
then
 
System.out.println("Hello your rules got triggred");
end

a command to start the wildfly
D:\softwares\wildfly-10.1.0.Final\bin>standalone.sh --server-config=standalone-full.xml  -Dorg.kie.server.id=wildfly-kieserver -Dorg.kie.server.location=http://localhost:8081/kie-server/serv
ices/rest/server -Dorg.jbpm.var.log.length=20000 -Dorg.kie.server.persistence.ds=java:jboss/jdbc/MySQLDS -Dorg.kie.server.persistence.dialect=org.hibernate.dialect.MySQL5Dialect -Dorg.kie.de
ployment.desc.location=file:C:\Users\swapnil\.m2\repository\org\rulesengine\redpine-signals\0.0.3-SNAPSHOT/deployment-descriptor.xml -Ddrools.timedRuleExection=true
I am facing the same thing as @Domengie Jean faced. Rule only get trigger after 15seconds if the fact is fired. My requirement is, the rule should fire every 15 seconds but it's not happing as expected.

As u mentioned, If I use -Ddrools.timedRuleExection=true I am getting an error:

Caused by: java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
       at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:164)
       at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newKieSession(KnowledgeStoreServiceImpl.java:67)
       at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newKieSession(KnowledgeStoreServiceImpl.java:36)
       at org.kie.internal.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:121)
       at org.jbpm.runtime.manager.impl.factory.JPASessionFactory.newKieSession(JPASessionFactory.java:43)
       at org.jbpm.runtime.manager.impl.PerRequestRuntimeManager$PerRequestInitializer.initKieSession(PerRequestRuntimeManager.java:213)
       at org.jbpm.runtime.manager.impl.RuntimeEngineImpl.getKieSession(RuntimeEngineImpl.java:72)
       at org.jbpm.runtime.manager.impl.tx.TransactionAwareSchedulerServiceInterceptor.getEnvironment(TransactionAwareSchedulerServiceInterceptor.java:146)
       at org.jbpm.runtime.manager.impl.tx.TransactionAwareSchedulerServiceInterceptor.getTransactionManager(TransactionAwareSchedulerServiceInterceptor.java:125)
       at org.jbpm.runtime.manager.impl.tx.TransactionAwareSchedulerServiceInterceptor.internalSchedule(TransactionAwareSchedulerServiceInterceptor.java:66)
       at org.jbpm.services.ejb.timer.EjbSchedulerService.scheduleJob(EjbSchedulerService.java:69)
       at org.jbpm.process.core.timer.impl.GlobalTimerService.scheduleJob(GlobalTimerService.java:101)
       at org.jbpm.process.core.timer.impl.RegisteredTimerServiceDelegate.scheduleJob(RegisteredTimerServiceDelegate.java:63)
       at org.drools.core.phreak.PhreakTimerNode.scheduleTimer(PhreakTimerNode.java:312)
       at org.drools.core.phreak.PhreakTimerNode.scheduleLeftTuple(PhreakTimerNode.java:235)
       at org.drools.core.phreak.PhreakTimerNode.doLeftInserts(PhreakTimerNode.java:112)
       at org.drools.core.phreak.PhreakTimerNode.doNode(PhreakTimerNode.java:87)
       at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:402)
       at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:333)
       at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:169)
       at org.drools.core.phreak.AddRemoveRule.forceFlushLeftTuple(AddRemoveRule.java:676)
       at org.drools.core.phreak.AddRemoveRule.flushLeftTupleIfNecessary(AddRemoveRule.java:636)
       at org.drools.core.reteoo.LeftInputAdapterNode.doInsertSegmentMemory(LeftInputAdapterNode.java:226)
       at org.drools.core.reteoo.LeftInputAdapterNode.doInsertObject(LeftInputAdapterNode.java:211)
       at org.drools.core.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:170)
       at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:70)
       at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:320)
       at org.drools.core.reteoo.ObjectTypeNode.assertInitialFact(ObjectTypeNode.java:284)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.initInitialFact(StatefulKnowledgeSessionImpl.java:754)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.initInitialFact(StatefulKnowledgeSessionImpl.java:740)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.bindRuleBase(StatefulKnowledgeSessionImpl.java:391)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.<init>(StatefulKnowledgeSessionImpl.java:331)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.<init>(StatefulKnowledgeSessionImpl.java:276)
       at org.drools.core.common.PhreakWorkingMemoryFactory.createWorkingMemory(PhreakWorkingMemoryFactory.java:43)
       at org.drools.core.impl.KnowledgeBaseImpl.newKieSession(KnowledgeBaseImpl.java:350)
       at org.drools.persistence.PersistableRunner.initNewKnowledgeSession(PersistableRunner.java:137)
       at org.drools.persistence.PersistableRunner.<init>(PersistableRunner.java:104)
       at sun.reflect.GeneratedConstructorAccessor258.newInstance(Unknown Source)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
       at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:150)
       at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newKieSession(KnowledgeStoreServiceImpl.java:67)
       at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newKieSession(KnowledgeStoreServiceImpl.java:36)
       at org.kie.internal.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:121)
       at org.jbpm.runtime.manager.impl.factory.JPASessionFactory.newKieSession(JPASessionFactory.java:43)
       at org.jbpm.runtime.manager.impl.PerRequestRuntimeManager$PerRequestInitializer.initKieSession(PerRequestRuntimeManager.java:213)
       at org.jbpm.runtime.manager.impl.RuntimeEngineImpl.getKieSession(RuntimeEngineImpl.java:72)
       at org.jbpm.runtime.manager.impl.tx.TransactionAwareSchedulerServiceInterceptor.getEnvironment(TransactionAwareSchedulerServiceInterceptor.java:146)
       at org.jbpm.runtime.manager.impl.tx.TransactionAwareSchedulerServiceInterceptor.getTransactionManager(TransactionAwareSchedulerServiceInterceptor.java:125)
       at org.jbpm.runtime.manager.impl.tx.TransactionAwareSchedulerServiceInterceptor.internalSchedule(TransactionAwareSchedulerServiceInterceptor.java:66)
       at org.jbpm.services.ejb.timer.EjbSchedulerService.scheduleJob(EjbSchedulerService.java:69)
       at org.jbpm.process.core.timer.impl.GlobalTimerService.scheduleJob(GlobalTimerService.java:101)
       at org.jbpm.process.core.timer.impl.RegisteredTimerServiceDelegate.scheduleJob(RegisteredTimerServiceDelegate.java:63)
       at org.drools.core.phreak.PhreakTimerNode.scheduleTimer(PhreakTimerNode.java:312)
       at org.drools.core.phreak.PhreakTimerNode.scheduleLeftTuple(PhreakTimerNode.java:235)
       at org.drools.core.phreak.PhreakTimerNode.doLeftInserts(PhreakTimerNode.java:112)
       at org.drools.core.phreak.PhreakTimerNode.doNode(PhreakTimerNode.java:87)
       at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:402)
       at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:333)
       at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:169)
       at org.drools.core.phreak.AddRemoveRule.forceFlushLeftTuple(AddRemoveRule.java:676)
       at org.drools.core.phreak.AddRemoveRule.flushLeftTupleIfNecessary(AddRemoveRule.java:636)
       at org.drools.core.reteoo.LeftInputAdapterNode.doInsertSegmentMemory(LeftInputAdapterNode.java:226)
       at org.drools.core.reteoo.LeftInputAdapterNode.doInsertObject(LeftInputAdapterNode.java:211)
       at org.drools.core.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:170)
       at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:70)
       at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:320)
       at org.drools.core.reteoo.ObjectTypeNode.assertInitialFact(ObjectTypeNode.java:284)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.initInitialFact(StatefulKnowledgeSessionImpl.java:754)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.initInitialFact(StatefulKnowledgeSessionImpl.java:740)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.bindRuleBase(StatefulKnowledgeSessionImpl.java:391)
       at org.drools.core.impl.StatefulKnowledgeSessionImpl.<init>(StatefulKnowledgeSessionImpl.java:331)
       at org.drools.core.imp


@Maciej can you suggest me what else I should do or am I missing anything?
Thanks

Reply all
Reply to author
Forward
0 new messages