Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
----------------CustomAgendaEventListener.java -------------------------------
package com.gooper.drool_test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.drools.core.event.ActivationCancelledEvent;
import org.drools.core.event.ActivationCreatedEvent;
import org.drools.core.event.AfterActivationFiredEvent;
import org.drools.core.event.BeforeActivationFiredEvent;
import org.kie.api.event.rule.AfterMatchFiredEvent;
import org.kie.api.event.rule.AgendaEventListener;
import org.kie.api.event.rule.AgendaGroupPoppedEvent;
import org.kie.api.event.rule.AgendaGroupPushedEvent;
import org.kie.api.event.rule.BeforeMatchFiredEvent;
import org.kie.api.event.rule.MatchCancelledEvent;
import org.kie.api.event.rule.MatchCreatedEvent;
import org.kie.api.event.rule.RuleFlowGroupActivatedEvent;
import org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent;
import org.kie.api.runtime.rule.Match;
import org.kie.api.definition.rule.Rule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*
* 룰에 매칭되면 발생되는 엑티베이션 객체에 대한 작업(이전값 혹은 현재값)
*/
public class CustomAgendaEventListener implements AgendaEventListener {
private static final Logger logger = LoggerFactory.getLogger(CustomAgendaEventListener.class);
private List<Match> matchList = new ArrayList<Match>();
// drools 5.x버젼에 존재하던 메서드
/*
public void activationCancelled(ActivationCancelledEvent event) {
logger.info("activation Cancelled : "+event.getActivation());
}
public void activationCreated(ActivationCreatedEvent event) {
logger.info("Activation Created: "+event.getActivation());
}
public void beforeActivationFired(BeforeActivationFiredEvent event) {
logger.info("Before Activation fired: "+event.getActivation());
}
public void afterActivationFired(AfterActivationFiredEvent event) {
logger.info("After Activation fired: "+event.getActivation());
}
*/
@Override
public void agendaGroupPopped(AgendaGroupPoppedEvent event) {
logger.info("Agenda Group Popped: "+event.getAgendaGroup());
}
@Override
public void agendaGroupPushed(AgendaGroupPushedEvent event) {
logger.info("Agenda Group Pushed: "+event.getAgendaGroup());
}
@Override
public void afterMatchFired(AfterMatchFiredEvent event) {
Rule rule = event.getMatch().getRule();
String ruleName = rule.getName();
Map<String, Object> ruleMetaDataMap = rule.getMetaData();
matchList.add(event.getMatch());
StringBuilder sb = new StringBuilder("Rule fired: " + ruleName);
if (ruleMetaDataMap.size() > 0) {
sb.append("n With [" + ruleMetaDataMap.size() + "] meta-data:");
for (String key : ruleMetaDataMap.keySet()) {
sb.append("n key=" + key + ", value="
+ ruleMetaDataMap.get(key));
}
}
logger.debug(sb.toString());
}
@Override
public void afterRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
logger.info("getRuleFlowGroup : "+event.getRuleFlowGroup());
}
public void reset() {
matchList.clear();
}
public final List<Match> getMatchList() {
return matchList;
}
public String matchsToString() {
if (matchList.size() == 0) {
return "No matchs occurred.";
} else {
StringBuilder sb = new StringBuilder("Matchs: ");
for (Match match : matchList) {
sb.append("n rule: ").append(match.getRule().getName());
}
return sb.toString();
}
}
@Override
public void afterRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
logger.info("RuleFlowGroup Deactivated : "+event.getRuleFlowGroup());
}
@Override
public void beforeMatchFired(BeforeMatchFiredEvent event) {
logger.info("Before Match Fired : "+event.getMatch());
}
@Override
public void beforeRuleFlowGroupActivated(RuleFlowGroupActivatedEvent event) {
logger.info("Before RuleFlowGroup Activated : "+event.getRuleFlowGroup());
}
@Override
public void beforeRuleFlowGroupDeactivated(RuleFlowGroupDeactivatedEvent event) {
logger.info("Before RuleFlowGroup Deactivated : "+event.getRuleFlowGroup());
}
@Override
public void matchCancelled(MatchCancelledEvent event) {
logger.info("Match Cancelled : "+event.getMatch());
}
@Override
public void matchCreated(MatchCreatedEvent event) {
logger.info("Match Created : "+event.getMatch());
}
}
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
11 | How-to: Build a Complex Event Processing App on Apache Spark and Drools | 2016.10.31 | 548 |
10 | 슬라이딩 윈도우 예제 | 2016.07.28 | 296 |
9 | 거침없이 배우는 Drools 책의 샘플소스 | 2016.07.22 | 1508 |
8 | drools를 이용한 로그,rule matching등의 테스트 java프로그램 | 2016.07.21 | 294 |
7 | ServerInfo객체파일 | 2016.07.21 | 1168 |
6 | drools에서 drl관련 로그를 기록하기 위한 클래스 파일 | 2016.07.21 | 882 |
5 | 워킹 메모리에 대한 정보를 처리하는 클래스 파일 | 2016.07.21 | 955 |
4 | 커리 변경 이벤트를 처리하기 위한 구현클래스 | 2016.07.21 | 883 |
» | 룰에 매칭되면 발생되는 엑티베이션 객체에 대한 작업(이전값 혹은 현재값)을 처리하는 클래스 파일 | 2016.07.21 | 466 |
2 | 실시간 쿼리 변환 모니터링(팩트내 필드값의 변경사항을 실시간으로 추적함)하는 테스트 java 프로그램 | 2016.07.21 | 212 |
1 | Drools 6.0 - 비즈니스 룰 기반으로 간단한 룰 애플리케이션 만들기 | 2016.07.18 | 1047 |