[rules-users] Trying to get Sliding Windows to work

Mark Proctor mproctor at codehaus.org
Thu Apr 2 11:43:05 EDT 2009


Nestor Tarin Burriel wrote:
> Sorry Edson ... I can't declare the fact type with the parameter 
> @role( event ) in guvnor throw creating a declarative model :( could 
> you explain it better?
I don't believe the tooling in Guvnor supports that yet, you'll have to 
use the DRL directly.

Mark
>
> 2009/4/2 Edson Tirelli <tirelli at post.com <mailto:tirelli at post.com>>
>
>
>        Declare your fact type with @role( event ).
>
>     2009/4/2 Nestor Tarin Burriel <nestabur at gmail.com
>     <mailto:nestabur at gmail.com>>
>
>         And how can I create events from guvnor?
>
>         2009/4/2 Edson Tirelli <tirelli at post.com
>         <mailto:tirelli at post.com>>
>
>
>                Need to fix the error message, but it seems you are
>             trying to use the sliding window on regular facts...
>             sliding window only makes sense for events...
>
>                Also, the property you are using to set the event
>             processing mode seems wrong. Check here:
>
>
>             https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/docs/drools-fusion/html/ch02.html#d0e1067
>
>                 []s
>                 Edson
>
>             2009/4/2 nestabur <nestabur at gmail.com
>             <mailto:nestabur at gmail.com>>
>
>
>
>                 Hi All,
>
>                 I'm trying to use sliding windows with guvnor, I
>                 deploy the package in my
>                 rule engine as:
>
>                               Properties props = new Properties();
>                                props.put("url", rulePackagePath);
>                                props.put("eventProcessingMode", "stream");
>
>                                agent = RuleAgent.newRuleAgent(props);
>                                session =
>                 agent.getRuleBase().newStatefulSession();
>
>                 When I insert a fact into the working memory as:
>                                session.insert(fact);
>                                session.fireAllRules();
>
>                 I get the following error:
>
>                 Exception while processing message:
>                 java.lang.ClassCastException:
>                 org.drools.common.DefaultFactHandle cannot be cast to
>                 org.drools.common.EventFactHandle
>                 java.lang.ClassCastException:
>                 org.drools.common.DefaultFactHandle cannot be
>                 cast to org.drools.common.EventFactHandle
>                        at
>                 org.drools.rule.SlidingTimeWindow.updateNextExpiration(SlidingTimeWindow.java:192)
>                        at
>                 org.drools.rule.SlidingTimeWindow.assertRightTuple(SlidingTimeWindow.java:119)
>                        at
>                 org.drools.rule.BehaviorManager.assertRightTuple(BehaviorManager.java:87)
>                        at
>                 org.drools.reteoo.ExistsNode.assertObject(ExistsNode.java:172)
>                        at
>                 org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:366)
>                        at
>                 org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:349)
>                        at
>                 org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:147)
>                        at
>                 org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:42)
>                        at
>                 org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:184)
>                        at
>                 org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:146)
>                        at
>                 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1066)
>                        at
>                 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1022)
>                        at
>                 org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:810)
>                        at
>                 com.s2grupo.triton.service.impl.CorrelatorServiceImpl.insertFact(CorrelatorServiceImpl.java:64)
>                        at
>                 com.s2grupo.triton.jms.impl.JmsMessageListenerImpl.onMessage(JmsMessageListenerImpl.java:67)
>                        at
>                 org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1021)
>                        at
>                 org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:122)
>                        at
>                 org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:192)
>                        at
>                 org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
>                        at
>                 org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
>                        at
>                 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>                        at
>                 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>                        at java.lang.Thread.run(Thread.java:619)
>
>                 What I'm missing? Is it a bug? I'm using the
>                 5.0.0.SNAPSHOT version of
>                 drools.
>
>                 Thanks,
>
>                 NEStor
>
>
>                 ober0n wrote:
>                 >
>                 > Hi Ed, thanks for the quick reply, I will try the
>                 temporal constraints as
>                 > well.
>                 >
>                 > I haven't completed my testing yet but the sliding
>                 windows seems to be
>                 > working. Thanks!
>                 >
>                 > I am getting a strange problem of my program
>                 hanging. It gets all the way
>                 > past my "dispose()" of the StatefulKnowledgeSession
>                 and closing the
>                 > session logger and to the end of my main(). Then it
>                 just sits there. I'm
>                 > thinking it's a bug in my rules but wanted to make
>                 sure this wasn't a
>                 > feature of Streams (maybe some thread kicked off to
>                 accept facts or
>                 > something).
>                 >
>                 > If you could just confirm nothing in Drools fusion
>                 is supposed to continue
>                 > running, that would be great.
>                 >
>                 > Here are the significant snippets of my code:
>                 >               ...
>                 >               WorkingMemoryEntryPoint eventStream =
>                 > ksession.getWorkingMemoryEntryPoint( "EventStream" );
>                 >               ...
>                 >               eventStream.insert(goodbye_message);
>                 >               Thread.sleep(10000);
>                 >               eventStream.insert(hello_message);
>                 >               ksession.fireAllRules();
>                 >               ksession.dispose();
>                 >               logger.close();
>                 >       } catch (Throwable t) {
>                 >               t.printStackTrace();
>                 >       }
>                 > } // end main()  <-- tracing through the code, I get
>                 past the end of
>                 > main() then see a "Source not found." in the Eclipse
>                 debugger which seems
>                 > to be looking for "Thread.exit() line: 604"
>                 >
>                 >
>                 > The updated rule:
>                 >
>                 > declare Message
>                 >     @role( event )
>                 > end
>                 >
>                 > rule "Hello World"
>                 >       when
>                 >               Message( status == Message.HELLO )
>                 from entry-point "EventStream"
>                 >               exists(Message( status ==
>                 Message.GOODBYE ) over window:time( 4s )  from
>                 > entry-point "EventStream")
>                 >       then
>                 >
>                 >
>                 System.out.println("**************************************************");
>                 >               System.out.println( "There was a
>                 GOODBYE message near the HELLO
>                 > message." );
>                 >
>                 >
>                 System.out.println("**************************************************");
>                 > end
>                 >
>                 > Thanks.
>                 >
>                 >
>                 > Edson Tirelli-3 wrote:
>                 >>
>                 >>     Although your rule should work, the best way to
>                 write your rule would
>                 >> be
>                 >> using temporal constraints instead of sliding windows:
>                 >>
>                 >> rule "Goodbye before Hello World"
>                 >>        when
>                 >>                $m : Message( status == Message.HELLO )
>                 >>                exists( Message( status ==
>                 Message.GOODBYE, this
>                 >> before[0s,3s] $m ) )
>                 >>        then
>                 >>                System.out.println( "There was a
>                 GOODBYE message before
>                 >> the
>                 >> HELLO
>                 >> message." );
>                 >> end
>                 >>
>                 >>     Using "before" operator is not only much
>                 cheaper (in terms of used
>                 >> resources) than sliding windows, but it also allow
>                 the engine to reason
>                 >> over
>                 >> the temporal constraints looking for special cases,
>                 like when you use
>                 >> negative patterns.
>                 >>
>                 >>     I will look further into your case to check if
>                 I missed anything on
>                 >> the
>                 >> sliding windows support, but using STREAM mode
>                 should work.
>                 >>
>                 >>     If you can open a JIRA for me to raise a
>                 compilation error when
>                 >> compiling sliding windows using CLOUD mode, I
>                 appreciate. This will allow
>                 >> you to follow up my progress.
>                 >>
>                 >>     []s
>                 >>     Edson
>                 >>
>                 >>
>                 >> 2009/3/30 ober0n <lili339 at hotmail.com
>                 <mailto:lili339 at hotmail.com>>
>                 >>
>                 >>>
>                 >>> Hi Ed, no need to apologize, you have been
>                 invaluable in my first steps
>                 >>> towards Drooling :-D so thanks for all your help,
>                 it is GREATLY
>                 >>> appreciated
>                 >>> :clap:.
>                 >>>
>                 >>> We have a few scenarios in mind but aren't really
>                 implementing them yet,
>                 >>> just trying to see if sliding windows works the
>                 way we think it does. In
>                 >>> the
>                 >>> simple rule I wrote above, I basically want to
>                 check if two facts are
>                 >>> temporally close.
>                 >>>
>                 >>> Yes, you are correct. I didn't pay enough
>                 attention to the manual and
>                 >>> didn't
>                 >>> use STREAM mode to enter in my facts. I will use
>                 the manual insertion
>                 >>> process found in "Example 2.10. Inserting facts
>                 into an entry point" of
>                 >>> section "2.3. Streams Support" to update my code.
>                 And, I will update my
>                 >>> rule
>                 >>> to specify a "from entry-point <Specific Stream>".
>                 >>>
>                 >>> Also, could you comment on the simple rule I am
>                 using? Does it look like
>                 >>> it
>                 >>> should work after I do the updates? Or is my logic
>                 incorrect?
>                 >>>
>                 >>> Thanks again.
>                 >>>
>                 >>>
>                 >>>
>                 >>>   Ober0n,
>                 >>>
>                 >>>   Sorry for the delay on answering. I am on a trip
>                 with limited internet
>                 >>> connection.
>                 >>>   I am interested in your experience with the
>                 sliding windows, since the
>                 >>> tests are working. Maybe it is a scenario not
>                 covered by the tests.
>                 >>>
>                 >>>   In any case, what is probably happening is that
>                 you are not
>                 >>> configuring
>                 >>> the engine to work in STREAM mode. The default
>                 mode is CLOUD and it does
>                 >>> not
>                 >>> support sliding windows. It seems the engine is
>                 silently failing in this
>                 >>> case, when the compiler raise an error to warn the
>                 user.
>                 >>>
>                 >>>    I just committed some docs on this subject:
>                 >>>
>                 >>>
>                 >>>
>                 https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/docs/drools-fusion/html/ch02.html#d0e1067
>                 >>>
>                 >>>    (plz, wait for hudson to rebuild the docs or
>                 build docs yourself).
>                 >>>
>                 >>>    Feedback welcome. I will complement the sliding
>                 window docs.
>                 >>>
>                 >>>    []s
>                 >>>    Edson
>                 >>>
>                 >>> 2009/3/29 ober0n <lili339 at hotmail.com
>                 <mailto:lili339 at hotmail.com>>
>                 >>>
>                 >>> >
>                 >>> > Still trying to get sliding windows to work
>                 (basing my code off of the
>                 >>> > Eclipse supplied "Hello World" example). I don't
>                 think I fully
>                 >>> understand
>                 >>> > how it works yet so I'm trying to simplify
>                 things even further by
>                 >>> writing
>                 >>> > a
>                 >>> > simple rule that is meant to say:
>                 >>> >
>                 >>> > if (current_message = "Hello" AND exists(
>                 goodbye_message within
>                 >>> > sliding_window(3 seconds) ))
>                 >>> > then print("There was a GOODBYE message before
>                 the HELLO message." )
>                 >>> >
>                 >>> > In other words: This rule should fire if the
>                 current Hello World
>                 >>> message
>                 >>> > was
>                 >>> > preceeded within 3 seconds by a goodbye message.
>                 >>> >
>                 >>> >
>                 >>> >
>                 >>>
>                 ---------------------------------------------------------------------------------------------------
>                 >>> > I wrote a new rule for this:
>                 >>> >
>                 >>> > declare Message
>                 >>> >    @role( event )
>                 >>> > end
>                 >>> >
>                 >>> > rule "Goodbye before Hello World"
>                 >>> >        when
>                 >>> >                Message( status == Message.HELLO )
>                 >>> >                exists( Message( status ==
>                 Message.GOODBYE ) over
>                 >>> > window:time( 3s ) )
>                 >>> >        then
>                 >>> >                System.out.println( "There was a
>                 GOODBYE message before
>                 >>> the
>                 >>> > HELLO
>                 >>> > message." );
>                 >>> > end
>                 >>> >
>                 >>> >
>                 >>> >
>                 >>>
>                 ---------------------------------------------------------------------------------------------------
>                 >>> >
>                 >>> > To send the messages: (ksession is a
>                 StatefulKnowledgeSession)
>                 >>> >
>                 >>> >                        ...
>                 >>> >                      
>                  ksession.insert(goodbye_message);
>                 >>> >                        ksession.fireAllRules();
>                 >>> >
>                 >>> >                        Thread.sleep(5000);
>                 >>> >
>                 >>> >                      
>                  ksession.insert(hello_message);
>                 >>> >                        ksession.fireAllRules();
>                 >>> >                        ...
>                 >>> >
>                 >>> >
>                 >>>
>                 ---------------------------------------------------------------------------------------------------
>                 >>> >
>                 >>> > I expect to get nothing back since I sent the
>                 Hello message 5 seconds
>                 >>> > after
>                 >>> > the goodbye message (outside the sliding window
>                 of 3 seconds). But,
>                 >>> for
>                 >>> > some
>                 >>> > reason the rule fires and I get one:
>                 >>> >
>                 >>> > "There was a GOODBYE message before the HELLO
>                 message."
>                 >>> >
>                 >>> > Any help would be greatly appreciated.
>                 >>> >
>                 >>> > Thanks!
>                 >>> > --
>                 >>> > View this message in context:
>                 >>> >
>                 >>>
>                 http://www.nabble.com/Trying-to-get-Sliding-Windows-to-work-tp22735051p22770318.html
>                 >>> > Sent from the drools - user mailing list archive
>                 at Nabble.com.
>                 >>> >
>                 >>> > _______________________________________________
>                 >>> > rules-users mailing list
>                 >>> > rules-users at lists.jboss.org
>                 <mailto:rules-users at lists.jboss.org>
>                 >>> > https://lists.jboss.org/mailman/listinfo/rules-users
>                 >>> >
>                 >>>
>                 >>>
>                 >>>
>                 >>> --
>                 >>>  Edson Tirelli
>                 >>>  JBoss Drools Core Development
>                 >>>  JBoss, a division of Red Hat @ www.jboss.com
>                 <http://www.jboss.com>
>                 >>>
>                 >>> _______________________________________________
>                 >>> rules-users mailing list
>                 >>> rules-users at lists.jboss.org
>                 <mailto:rules-users at lists.jboss.org>
>                 >>> https://lists.jboss.org/mailman/listinfo/rules-users
>                 >>>
>                 >>>
>                 >>>
>                 >>> --
>                 >>> View this message in context:
>                 >>>
>                 http://www.nabble.com/Trying-to-get-Sliding-Windows-to-work-tp22735051p22785711.html
>                 >>> Sent from the drools - user mailing list archive
>                 at Nabble.com.
>                 >>>
>                 >>> _______________________________________________
>                 >>> rules-users mailing list
>                 >>> rules-users at lists.jboss.org
>                 <mailto:rules-users at lists.jboss.org>
>                 >>> https://lists.jboss.org/mailman/listinfo/rules-users
>                 >>>
>                 >>
>                 >>
>                 >>
>                 >> --
>                 >>  Edson Tirelli
>                 >>  JBoss Drools Core Development
>                 >>  JBoss, a division of Red Hat @ www.jboss.com
>                 <http://www.jboss.com>
>                 >>
>                 >> _______________________________________________
>                 >> rules-users mailing list
>                 >> rules-users at lists.jboss.org
>                 <mailto:rules-users at lists.jboss.org>
>                 >> https://lists.jboss.org/mailman/listinfo/rules-users
>                 >>
>                 >>
>                 >
>                 >
>
>                 --
>                 View this message in context:
>                 http://www.nabble.com/Trying-to-get-Sliding-Windows-to-work-tp22735051p22844999.html
>                 Sent from the drools - user mailing list archive at
>                 Nabble.com.
>
>                 _______________________________________________
>                 rules-users mailing list
>                 rules-users at lists.jboss.org
>                 <mailto:rules-users at lists.jboss.org>
>                 https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
>             -- 
>              Edson Tirelli
>              JBoss Drools Core Development
>              JBoss, a division of Red Hat @ www.jboss.com
>             <http://www.jboss.com>
>
>             _______________________________________________
>             rules-users mailing list
>             rules-users at lists.jboss.org
>             <mailto:rules-users at lists.jboss.org>
>             https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>         _______________________________________________
>         rules-users mailing list
>         rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>         https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
>     -- 
>      Edson Tirelli
>      JBoss Drools Core Development
>      JBoss, a division of Red Hat @ www.jboss.com <http://www.jboss.com>
>
>     _______________________________________________
>     rules-users mailing list
>     rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090402/18e1540e/attachment.html 


More information about the rules-users mailing list