메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

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());
}

}

번호 제목 날짜 조회 수
261 [AD(LADP)] CDP1.7에서 AD및 Kerberos를 연동해도 각 노드에 os account, os group은 생성되어야 하지만 SSSD서비스를 이용하면 직접 생성될 필요가 없다. 2022.06.10 373
260 이미지 관리 오픈소스 목록 2018.03.11 373
259 SPARQL의 유형, SPARQL 만들기등에 대한 설명 2016.02.18 373
258 CentOS에서 리눅스(Linux) 포트 열기, 방화벽 설정/해제 등. 2016.03.14 371
257 [Dovecot] -ERR [SYS/PERM] Permission denied 2017.06.13 367
256 hbase가 기동시키는 zookeeper에서 받아드리는 ip가 IPv6로 사용되는 경우가 있는데 이를 IPv4로 강제적용하는 방법 2015.05.08 363
255 kafka 0.9.0.1버젼의 producer와 kafka버젼이 0.10.0.1인 consumer가 서로 대화하는 모습 2016.08.18 361
254 Query Status: Sender xxx.xxx.xxx.xxx timed out waiting for receiver fragment instance: 1234:cdsf, dest node: 10 의 오류 원인및 대응방안 2021.11.03 360
253 Collections.sort를 이용한 List<Map<String, String>>형태의 데이타 정렬 소스 2016.12.15 360
252 How-to: Build a Complex Event Processing App on Apache Spark and Drools file 2016.10.31 360
251 journalnode노드 기동시 "should be an absolute path"가 발생하고 기동되지 않을 경우 확인사항 2016.09.22 360
250 ?a는 모두 표시하면서 ?b와 비교하여 ?a=?b는 표시하고 ?a!=?b 인경우는 ""로 구성된 결과 집합을 구하는 경우 file 2016.01.29 360
249 Runtime.getRuntime().exec(cmd) sample 소스 2015.11.19 359
248 Cloudera가 사용하는 서비스별 디렉토리 2018.03.29 358
247 gradle을 이용하여 jar파일 생성시 provided속성을 지정할 수 있게 설정하는 방법 2016.08.09 358
246 특정 단계의 commit상태로 만들기(이렇게 하면 중간에 반영된 모든 commit를 history가 삭제된다) 2016.11.17 357
245 [MemoryLeak분석]다수의 MongoCleaner 쓰레드가 Sleep상태에 있으면서 Full GC가 계속 발생되는 문제 해결방법 file 2017.01.11 355
244 centos에 sbt 0.13.5 설치 2016.05.30 354
243 ntp시간 맞추기 2018.09.12 350
242 Kafka의 API중 Consumer.createJavaConsumerConnector()를 이용하고 다수의 thread를 생성하여 Kafka broker의 topic에 접근하여 데이타를 가져오고 처리하는 예제 소스 2017.04.26 346
위로