Created
May 17, 2011 14:21
-
-
Save tsurdilo/976557 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sample; | |
import java.util.concurrent.TimeUnit; | |
import org.drools.KnowledgeBase; | |
import org.drools.KnowledgeBaseConfiguration; | |
import org.drools.KnowledgeBaseFactory; | |
import org.drools.builder.KnowledgeBuilder; | |
import org.drools.builder.KnowledgeBuilderError; | |
import org.drools.builder.KnowledgeBuilderErrors; | |
import org.drools.builder.KnowledgeBuilderFactory; | |
import org.drools.builder.ResourceType; | |
import org.drools.common.EventFactHandle; | |
import org.drools.conf.EventProcessingOption; | |
import org.drools.definition.type.FactType; | |
import org.drools.io.ResourceFactory; | |
import org.drools.logger.KnowledgeRuntimeLogger; | |
import org.drools.logger.KnowledgeRuntimeLoggerFactory; | |
import org.drools.runtime.KnowledgeSessionConfiguration; | |
import org.drools.runtime.StatefulKnowledgeSession; | |
import org.drools.runtime.conf.ClockTypeOption; | |
import org.drools.runtime.rule.FactHandle; | |
import org.drools.runtime.rule.WorkingMemoryEntryPoint; | |
import org.drools.time.SessionPseudoClock; | |
/** | |
* This is a sample class to launch a rule. | |
*/ | |
public class DroolsTest { | |
public static final void main(String[] args) { | |
try { | |
// load up the knowledge base | |
KnowledgeBase kbase = readKnowledgeBase(); | |
KnowledgeSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(); | |
config.setOption( ClockTypeOption.get("pseudo") ); | |
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(config, null); | |
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test"); | |
WorkingMemoryEntryPoint eventStream = ksession.getWorkingMemoryEntryPoint( "Event Stream" ); | |
SessionPseudoClock clock = ksession.getSessionClock(); | |
FactType testEventType = kbase.getFactType( "com.sample","TestEvent" ); | |
Object myTestEvent = testEventType.newInstance(); | |
testEventType.set( myTestEvent, "value", "someValue" ); | |
FactHandle eventHandle = eventStream.insert(myTestEvent); | |
ksession.fireAllRules(); | |
clock.advanceTime( 15, TimeUnit.SECONDS ); | |
//this is the test here!! | |
System.out.println( "Should be expired! : " + ((EventFactHandle)eventHandle).isExpired()); | |
System.out.println( "Does the entry point still hold the fact handle? : " + eventStream.getFactHandles().contains(eventHandle)); | |
logger.close(); | |
} catch (Throwable t) { | |
t.printStackTrace(); | |
} | |
} | |
private static KnowledgeBase readKnowledgeBase() throws Exception { | |
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); | |
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL); | |
KnowledgeBuilderErrors errors = kbuilder.getErrors(); | |
if (errors.size() > 0) { | |
for (KnowledgeBuilderError error: errors) { | |
System.err.println(error); | |
} | |
throw new IllegalArgumentException("Could not parse knowledge."); | |
} | |
KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); | |
config.setOption( EventProcessingOption.STREAM ); | |
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(config); | |
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); | |
return kbase; | |
} | |
} | |
********************************************** | |
package com.sample | |
declare TestEvent | |
@role( event ) | |
@expires( 10s ) | |
value : String | |
end | |
rule "TestEventReceived" | |
no-loop | |
when | |
$event : TestEvent ( value != null ) over window:time( 10s ) from entry-point "Event Stream" | |
then | |
System.out.println("****** in consequence *****"); | |
end | |
********************************************** | |
****** in consequence ***** | |
Should be expired! : false | |
Does the entry point still hold the fact handle? : true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment