Declare your fact type with @role( event ). 2009/4/2 Nestor Tarin Burriel <[email protected]>
> And how can I create events from guvnor? > > 2009/4/2 Edson Tirelli <[email protected]> > > >> 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 <[email protected]> >> >> >>> >>> 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 <[email protected]> >>> >> >>> >>> >>> >>> 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 <[email protected]> >>> >>> >>> >>> > >>> >>> > 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 >>> >>> > [email protected] >>> >>> > 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 >>> >>> [email protected] >>> >>> 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 >>> >>> [email protected] >>> >>> 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 >>> >> [email protected] >>> >> 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 >>> [email protected] >>> 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 >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > _______________________________________________ > rules-users mailing list > [email protected] > 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 [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
