package com.sctrcd.qzr.services; import org.kie.api.definition.rule.Rule; import org.kie.api.event.rule.AfterMatchFiredEvent; import org.kie.api.event.rule.AgendaEventListener; import org.kie.api.event.rule.DefaultAgendaEventListener; import org.springframework.messaging.simp.SimpMessagingTemplate; import com.sctrcd.qzr.web.resources.AgendaEventMessage; /** * This is an {@link AgendaEventListener}, which will listen to a rules runtime * session for any rule activations. Every time a rule matches, this will * publish the name of the rule on to a Stomp message broker, using the * {@link SimpMessagingTemplate}. * * @author Stephen Masters */ public class PublishingAgendaEventListener extends DefaultAgendaEventListener { private final SimpMessagingTemplate template; public PublishingAgendaEventListener(SimpMessagingTemplate template) { this.template = template; } /** * Whenever a rule's LHS matches and causes the rule to activate, this * method will publish the name of that rule to the Stomp message broker, * using the {@link SimpMessagingTemplate}. */ @Override public void afterMatchFired(AfterMatchFiredEvent event) { Rule rule = event.getMatch().getRule(); System.out.println("Publishing: " + rule.getName()); AgendaEventMessage msg = new AgendaEventMessage(rule.getName()); this.template.convertAndSend("/queue/agendaevents/", msg); } }