use of org.kie.api.event.rule.MatchCreatedEvent in project drools by kiegroup.
the class Misc2Test method testMatchingEventsInStreamMode.
@Test
public void testMatchingEventsInStreamMode() {
// DROOLS-338
String drl = "import org.drools.compiler.integrationtests.Misc2Test.SimpleEvent\n" + "declare SimpleEvent\n" + " @role(event)\n" + "end\n" + "\n" + "rule \"RuleA\"\n" + "salience 5\n" + "when\n" + " $f : SimpleEvent( )\n" + "then\n" + " delete ($f);\n" + "end\n" + "\n" + "rule \"RuleB\"\n" + "when\n" + " $f : SimpleEvent( )\n" + "then\n" + "end\n";
KieBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kconf.setOption(EventProcessingOption.STREAM);
KieBase kbase = loadKnowledgeBaseFromString(kconf, drl);
KieSession ksession = kbase.newKieSession();
final AtomicInteger i = new AtomicInteger(0);
ksession.addEventListener(new DefaultAgendaEventListener() {
public void matchCreated(MatchCreatedEvent event) {
i.incrementAndGet();
}
public void matchCancelled(MatchCancelledEvent event) {
i.decrementAndGet();
}
});
ksession.insert(new SimpleEvent());
ksession.fireAllRules();
assertEquals(1, i.get());
}
use of org.kie.api.event.rule.MatchCreatedEvent in project drools by kiegroup.
the class Misc2Test method testLockOnActive2.
@Test
public void testLockOnActive2() {
// the modify changes the hashcode of TradeHeader
// this forces the 'from' to think it's new. This results in an insert and a delete propagation from the 'from'
// With Property Reactivity enabled by default this also required adding a @watch(*) annotation
String drl = "" + "package org.drools.test; \n" + "import org.drools.compiler.integrationtests.Misc2Test.TradeBooking;\n" + "import org.drools.compiler.integrationtests.Misc2Test.TradeHeader;\n" + "rule \"Rule1\" \n" + "lock-on-active true\n" + "salience 1 \n" + "when\n" + " $booking: TradeBooking() @watch(*) \n" + " $trade: TradeHeader() from $booking.getTrade()\n" + "then\n" + " $trade.setAction(\"New\");\n" + " modify($booking) {}\n" + "end;\n" + "\n" + "rule \"Rule2\"\n" + "when\n" + " $booking: TradeBooking( ) @watch(*) \n" + " $trade: Object( ) from $booking.getTrade()\n" + "then\n" + "end";
KieBase kb = loadKnowledgeBaseFromString(drl);
KieSession ks = kb.newKieSession();
final List created = new ArrayList();
final List cancelled = new ArrayList();
final List fired = new ArrayList();
ks.addEventListener(new DefaultAgendaEventListener() {
public void matchCreated(MatchCreatedEvent event) {
created.add(event.getMatch().getRule().getName());
}
public void matchCancelled(MatchCancelledEvent event) {
cancelled.add(event.getMatch().getRule().getName());
}
public void afterMatchFired(AfterMatchFiredEvent event) {
fired.add(event.getMatch().getRule().getName());
}
});
ks.fireAllRules();
TradeBooking tb = new TradeBookingImpl(new TradeHeaderImpl());
ks.insert(tb);
assertEquals(2, ks.fireAllRules());
assertEquals(3, created.size());
assertEquals(1, cancelled.size());
assertEquals(2, fired.size());
assertEquals("Rule1", created.get(0));
assertEquals("Rule1", created.get(1));
assertEquals("Rule2", created.get(2));
assertEquals("Rule1", cancelled.get(0));
assertEquals("Rule1", fired.get(0));
assertEquals("Rule2", fired.get(1));
}
use of org.kie.api.event.rule.MatchCreatedEvent in project drools by kiegroup.
the class AgendaEventSupportTest method testAgendaEventListener.
// public void testIsSerializable() {
// assertTrue( Serializable.class.isAssignableFrom( AgendaEventSupport.class ) );
// }
@Test
@Ignore
public void testAgendaEventListener() throws Exception {
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
// create a simple package with one rule to test the events
InternalKnowledgePackage pkg = new KnowledgePackageImpl("org.drools.test");
final RuleImpl rule = new RuleImpl("test1");
rule.setEager(true);
rule.setAgendaGroup("test group");
final ClassObjectType cheeseObjectType = new ClassObjectType(Cheese.class);
final Pattern pattern = new Pattern(0, cheeseObjectType);
pkg.setClassFieldAccessorCache(new ClassFieldAccessorCache(Thread.currentThread().getContextClassLoader()));
pkg.getClassFieldAccessorStore().setEagerWire(true);
final ClassFieldReader extractor = pkg.getClassFieldAccessorStore().getReader(Cheese.class, "type");
final FieldValue field = FieldFactory.getInstance().getFieldValue("cheddar");
final MvelConstraint constraint = new MvelConstraintTestUtil("type == \"cheddar\"", field, extractor);
pattern.addConstraint(constraint);
rule.addPattern(pattern);
rule.setConsequence(new Consequence() {
public void evaluate(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory) throws Exception {
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
}
public void writeExternal(ObjectOutput out) throws IOException {
}
public String getName() {
// TODO Auto-generated method stub
return null;
}
});
pkg.addRule(rule);
kbase.addPackages(Collections.singleton(pkg));
// create a new working memory and add an AgendaEventListener
KieSession ksession = kbase.newKieSession();
final List agendaList = new ArrayList();
final AgendaEventListener agendaEventListener = new AgendaEventListener() {
public void matchCancelled(MatchCancelledEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void matchCreated(MatchCreatedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void afterMatchFired(AfterMatchFiredEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void agendaGroupPopped(AgendaGroupPoppedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void agendaGroupPushed(AgendaGroupPushedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void beforeMatchFired(BeforeMatchFiredEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void beforeRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void afterRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void beforeRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
public void afterRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
assertNotNull(event.getKieRuntime());
agendaList.add(event);
}
};
ksession.addEventListener(agendaEventListener);
assertEquals(1, ksession.getAgendaEventListeners().size());
// assert the cheese fact
final Cheese cheddar = new Cheese("cheddar", 15);
FactHandle cheddarHandle = ksession.insert(cheddar);
InternalAgenda agenda = (InternalAgenda) ksession.getAgenda();
agenda.evaluateEagerList();
// should be one MatchCreatedEvent
assertEquals(1, agendaList.size());
MatchCreatedEvent createdEvent = (MatchCreatedEvent) agendaList.get(0);
assertSame(cheddarHandle, createdEvent.getMatch().getFactHandles().toArray()[0]);
// clear the agenda to check CLEAR events occur
ksession.getAgenda().clear();
MatchCancelledEvent cancelledEvent = (MatchCancelledEvent) agendaList.get(1);
assertEquals(MatchCancelledCause.CLEAR, cancelledEvent.getCause());
agendaList.clear();
// update results in an MatchCreatedEvent
cheddar.setPrice(14);
ksession.update(cheddarHandle, cheddar);
agenda.evaluateEagerList();
assertEquals(1, agendaList.size());
createdEvent = (MatchCreatedEvent) agendaList.get(0);
assertSame(cheddarHandle, createdEvent.getMatch().getFactHandles().toArray()[0]);
agendaList.clear();
// update should not result in cancelation+activation events
cheddar.setPrice(14);
ksession.update(cheddarHandle, cheddar);
assertEquals(0, agendaList.size());
// cancelledEvent = (ActivationCancelledEvent) agendaList.get( 0 );
// assertEquals( ActivationCancelledCause.WME_MODIFY, cancelledEvent.getCause() );
// assertSame( cheddarHandle,
// cancelledEvent.getActivation().toFactHandles().toArray()[0] );
// createdEvent = (ActivationCreatedEvent) agendaList.get( 1 );
// assertSame( cheddarHandle,
// createdEvent.getActivation().toFactHandles().toArray()[0] );
// agendaList.clear();
// retract results in a ActivationCancelledEvent, note the object is not resolveable now as it no longer exists
ksession.retract(cheddarHandle);
assertEquals(1, agendaList.size());
cancelledEvent = (MatchCancelledEvent) agendaList.get(0);
// invalidated handles no longer set the object to null
assertNotNull(((InternalFactHandle) cancelledEvent.getMatch().getFactHandles().toArray()[0]).getObject());
// re-assert the fact so we can test the agenda group events
cheddarHandle = ksession.insert(cheddar);
agendaList.clear();
// setFocus results in an AgendaGroupPushedEvent
ksession.getAgenda().getAgendaGroup("test group").setFocus();
assertEquals(1, agendaList.size());
final AgendaGroupPushedEvent pushedEvent = (AgendaGroupPushedEvent) agendaList.get(0);
assertEquals("test group", pushedEvent.getAgendaGroup().getName());
agendaList.clear();
// fireAllRules results in a BeforeActivationFiredEvent and an AfterActivationFiredEvent
// the AgendaGroup becomes empty, which results in a popped event.
ksession.fireAllRules();
assertEquals(3, agendaList.size());
final BeforeMatchFiredEvent beforeEvent = (BeforeMatchFiredEvent) agendaList.get(0);
assertSame(cheddarHandle, beforeEvent.getMatch().getFactHandles().toArray()[0]);
final AfterMatchFiredEvent afterEvent = (AfterMatchFiredEvent) agendaList.get(1);
assertSame(cheddarHandle, afterEvent.getMatch().getFactHandles().toArray()[0]);
final AgendaGroupPoppedEvent poppedEvent = (AgendaGroupPoppedEvent) agendaList.get(2);
assertEquals("test group", poppedEvent.getAgendaGroup().getName());
}
use of org.kie.api.event.rule.MatchCreatedEvent in project drools by kiegroup.
the class SequentialTest method testEvents.
@Test
public void testEvents() throws Exception {
String str = "";
str += "package org.drools.compiler.test\n";
str += "import org.drools.compiler.Message\n";
str += "rule \"Hello World\"\n";
str += "when\n";
str += " Message( )\n";
str += "then\n";
str += " System.out.println( drools.getKieRuntime() );\n";
str += "end\n";
KieBase kbase = loadKnowledgeBaseFromString(kconf, str);
StatelessKieSession ksession = createStatelessKnowledgeSession(kbase);
final List list = new ArrayList();
ksession.addEventListener(new AgendaEventListener() {
public void matchCancelled(MatchCancelledEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void matchCreated(MatchCreatedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void afterMatchFired(AfterMatchFiredEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void agendaGroupPopped(AgendaGroupPoppedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void agendaGroupPushed(AgendaGroupPushedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void beforeMatchFired(BeforeMatchFiredEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void beforeRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void afterRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void beforeRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void afterRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
});
ksession.addEventListener(new RuleRuntimeEventListener() {
public void objectInserted(ObjectInsertedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void objectDeleted(ObjectDeletedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
public void objectUpdated(ObjectUpdatedEvent event) {
assertNotNull(event.getKieRuntime());
list.add(event);
}
});
ksession.execute(new Message("help"));
assertEquals(4, list.size());
}
Aggregations