Declare your fact type with @role( event ).
2009/4/2 Nestor Tarin Burriel <nestabur(a)gmail.com>
And how can I create events from guvnor?
2009/4/2 Edson Tirelli <tirelli(a)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/t...
>
> []s
> Edson
>
> 2009/4/2 nestabur <nestabur(a)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(a)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/t...
>> >>>
>> >>> (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(a)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-tp22735051p22...
>> >>> > Sent from the drools - user mailing list archive at
Nabble.com.
>> >>> >
>> >>> > _______________________________________________
>> >>> > rules-users mailing list
>> >>> > rules-users(a)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
>> >>>
>> >>> _______________________________________________
>> >>> rules-users mailing list
>> >>> rules-users(a)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-tp22735051p22...
>> >>> Sent from the drools - user mailing list archive at
Nabble.com.
>> >>>
>> >>> _______________________________________________
>> >>> rules-users mailing list
>> >>> rules-users(a)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
>> >>
>> >> _______________________________________________
>> >> rules-users mailing list
>> >> rules-users(a)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-tp22735051p22...
>> Sent from the drools - user mailing list archive at
Nabble.com.
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)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
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @