From 3c2a7c4614ed0b925a7ac9d0c2ff4907c89e6b51 Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Tue, 12 Sep 2017 19:05:37 +0800 Subject: [PATCH] modify drools engine Issue-ID: HOLMES-47 Change-Id: I30272a90f776edb11c9a4e3d399025440a40c02f Signed-off-by: Shiwei Tian --- .../onap/holmes/engine/manager/DroolsEngine.java | 91 +------------ .../holmes/engine/manager/DroolsEngineTest.java | 149 ++------------------- 2 files changed, 11 insertions(+), 229 deletions(-) diff --git a/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java b/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java index 5d1f442..b23dde0 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/manager/DroolsEngine.java @@ -16,7 +16,6 @@ package org.onap.holmes.engine.manager; -import java.io.Serializable; import java.io.StringReader; import java.util.HashSet; import java.util.List; @@ -24,17 +23,7 @@ import java.util.Locale; import java.util.Set; import javax.annotation.PostConstruct; import javax.inject.Inject; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.Session; import lombok.extern.slf4j.Slf4j; -import org.apache.activemq.ActiveMQConnectionFactory; -import org.apache.activemq.command.ActiveMQObjectMessage; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseConfiguration; import org.drools.KnowledgeBaseFactory; @@ -47,13 +36,10 @@ import org.drools.io.Resource; import org.drools.io.ResourceFactory; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; -import org.glassfish.hk2.api.IterableProvider; import org.jvnet.hk2.annotations.Service; +import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.engine.request.DeployRuleRequest; import org.onap.holmes.common.api.entity.CorrelationRule; -import org.onap.holmes.common.api.stat.Alarm; -import org.onap.holmes.common.config.MQConfig; -import org.onap.holmes.common.constant.AlarmConst; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.ExceptionUtil; import org.onap.holmes.engine.wrapper.RuleMgtWrapper; @@ -69,34 +55,18 @@ public class DroolsEngine { private KnowledgeBase kbase; private KnowledgeBaseConfiguration kconf; private StatefulKnowledgeSession ksession; - @Inject - private IterableProvider mqConfigProvider; - private ConnectionFactory connectionFactory; @PostConstruct private void init() { try { - // 1. start engine + // start engine start(); - // 2. start mq listener - registerAlarmTopicListener(); } catch (Exception e) { log.error("Failed to start the service: " + e.getMessage(), e); throw ExceptionUtil.buildExceptionResponse("Failed to start the drools engine!"); } } - private void registerAlarmTopicListener() { - String brokerURL = - "tcp://" + mqConfigProvider.get().brokerIp + ":" + mqConfigProvider.get().brokerPort; - connectionFactory = new ActiveMQConnectionFactory(mqConfigProvider.get().brokerUsername, - mqConfigProvider.get().brokerPassword, brokerURL); - - AlarmMqMessageListener listener = new AlarmMqMessageListener(); - listener.receive(); - } - - private void start() throws CorrelationException { log.info("Drools Engine Initialize Beginning..."); @@ -219,7 +189,7 @@ public class DroolsEngine { } } - public void putRaisedIntoStream(Alarm raiseAlarm) { + public void putRaisedIntoStream(VesAlarm raiseAlarm) { FactHandle factHandle = this.ksession.getFactHandle(raiseAlarm); if (factHandle != null) { this.ksession.retract(factHandle); @@ -228,59 +198,4 @@ public class DroolsEngine { this.ksession.fireAllRules(); } - class AlarmMqMessageListener implements MessageListener { - - private Connection connection = null; - private Session session = null; - private Destination destination = null; - private MessageConsumer consumer = null; - - private void initialize() throws JMSException { - connection = connectionFactory.createConnection(); - session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - destination = session.createTopic(AlarmConst.MQ_TOPIC_NAME_ALARM); - consumer = session.createConsumer(destination); - connection.start(); - } - - public void receive() { - try { - initialize(); - consumer.setMessageListener(this); - } catch (JMSException e) { - log.error("Failed to connect to the MQ service : " + e.getMessage(), e); - try { - close(); - } catch (JMSException e1) { - log.error("Failed close connection " + e1.getMessage(), e1); - } - } - } - - public void onMessage(Message arg0) { - ActiveMQObjectMessage objectMessage = (ActiveMQObjectMessage) arg0; - try { - Serializable object = objectMessage.getObject(); - - if (object instanceof Alarm) { - Alarm alarm = (Alarm) object; - putRaisedIntoStream(alarm); - } - } catch (JMSException e) { - log.error("Failed get object : " + e.getMessage(), e); - } - } - - private void close() throws JMSException { - if (consumer != null) { - consumer.close(); - } - if (session != null) { - session.close(); - } - if (connection != null) { - connection.close(); - } - } - } } diff --git a/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java b/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java index 5487177..885b5e4 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/manager/DroolsEngineTest.java @@ -16,38 +16,25 @@ package org.onap.holmes.engine.manager; -import static org.easymock.EasyMock.anyBoolean; import static org.easymock.EasyMock.anyInt; -import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.expect; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Locale; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MessageConsumer; -import javax.jms.Session; -import javax.jms.Topic; -import org.apache.activemq.command.ActiveMQObjectMessage; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseConfiguration; import org.drools.KnowledgeBaseFactory; import org.drools.conf.EventProcessingOption; import org.drools.runtime.StatefulKnowledgeSession; -import org.easymock.EasyMock; -import org.glassfish.hk2.api.IterableProvider; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.onap.holmes.common.api.stat.VesAlarm; import org.onap.holmes.engine.request.DeployRuleRequest; import org.onap.holmes.common.api.entity.CorrelationRule; -import org.onap.holmes.common.api.stat.Alarm; -import org.onap.holmes.common.config.MQConfig; import org.onap.holmes.common.constant.AlarmConst; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.engine.wrapper.RuleMgtWrapper; @@ -71,9 +58,6 @@ public class DroolsEngineTest { private StatefulKnowledgeSession ksession; - private IterableProvider mqConfigProvider; - - private ConnectionFactory connectionFactory; private DroolsEngine droolsEngine; @@ -88,32 +72,24 @@ public class DroolsEngineTest { this.ksession = kbase.newStatefulKnowledgeSession(); ruleMgtWrapper = PowerMock.createMock(RuleMgtWrapper.class); - mqConfigProvider = PowerMock.createMock(IterableProvider.class); - connectionFactory = PowerMock.createMock(ConnectionFactory.class); Whitebox.setInternalState(droolsEngine, "ruleMgtWrapper", ruleMgtWrapper); - Whitebox.setInternalState(droolsEngine, "mqConfigProvider", mqConfigProvider); + Whitebox.setInternalState(droolsEngine, "kconf", kconf); Whitebox.setInternalState(droolsEngine, "kbase", kbase); Whitebox.setInternalState(droolsEngine, "ksession", ksession); - Whitebox.setInternalState(droolsEngine, "connectionFactory", connectionFactory); PowerMock.resetAll(); } @Test public void init() throws Exception { - MQConfig mqConfig = new MQConfig(); - mqConfig.brokerIp = "127.0.0.1"; - mqConfig.brokerPort = 4567; - mqConfig.brokerUsername = "admin"; - mqConfig.brokerPassword = "admin"; + List rules = new ArrayList(); CorrelationRule rule = new CorrelationRule(); rule.setContent("content"); rules.add(rule); - expect(mqConfigProvider.get()).andReturn(mqConfig).anyTimes(); expect(ruleMgtWrapper.queryRuleByEnable(anyInt())).andReturn(rules); PowerMock.replayAll(); @@ -189,128 +165,19 @@ public class DroolsEngineTest { droolsEngine.compileRule(content, locale); } - @Test public void putRaisedIntoStream_facthandle_is_null() { - Alarm raiseAlarm = new Alarm(); + VesAlarm raiseAlarm = new VesAlarm(); + raiseAlarm.setVersion((long) 245235); droolsEngine.putRaisedIntoStream(raiseAlarm); droolsEngine.putRaisedIntoStream(raiseAlarm); } @Test public void putRaisedIntoStream_factHandle_is_not_null() { - droolsEngine.putRaisedIntoStream(new Alarm()); - } - - - @Test - public void listener_receive() throws JMSException { - DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener(); - - Connection connection = PowerMock.createMock(Connection.class); - Session session = PowerMock.createMock(Session.class); - Destination destination = PowerMock.createMock(Topic.class); - MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class); - - Whitebox.setInternalState(listener, "connection", connection); - Whitebox.setInternalState(listener, "session", session); - Whitebox.setInternalState(listener, "destination", destination); - Whitebox.setInternalState(listener, "consumer", consumer); - - PowerMock.reset(); - - expect(connectionFactory.createConnection()).andReturn(connection); - connection.start(); - expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session); - expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination); - expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer); - consumer.setMessageListener(listener); - - PowerMock.replayAll(); - - listener.receive(); - - PowerMock.verifyAll(); - } - - @Test - public void listener_exception() throws JMSException { - DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener(); - - Connection connection = PowerMock.createMock(Connection.class); - Session session = PowerMock.createMock(Session.class); - Destination destination = PowerMock.createMock(Topic.class); - MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class); - - Whitebox.setInternalState(listener, "connection", connection); - Whitebox.setInternalState(listener, "session", session); - Whitebox.setInternalState(listener, "destination", destination); - Whitebox.setInternalState(listener, "consumer", consumer); - - PowerMock.reset(); - - expect(connectionFactory.createConnection()).andReturn(connection); - connection.start(); - expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session); - expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination); - expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer); - consumer.setMessageListener(listener); - EasyMock.expectLastCall().andThrow(new JMSException("")); - - consumer.close(); - session.close(); - connection.close(); - - PowerMock.replayAll(); - - listener.receive(); - - PowerMock.verifyAll(); - } - - @Test - public void listener_close_exception() throws JMSException { - DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener(); - - Connection connection = PowerMock.createMock(Connection.class); - Session session = PowerMock.createMock(Session.class); - Destination destination = PowerMock.createMock(Topic.class); - MessageConsumer consumer = PowerMock.createMock(MessageConsumer.class); - - Whitebox.setInternalState(listener, "connection", connection); - Whitebox.setInternalState(listener, "session", session); - Whitebox.setInternalState(listener, "destination", destination); - Whitebox.setInternalState(listener, "consumer", consumer); - - PowerMock.reset(); - - expect(connectionFactory.createConnection()).andReturn(connection); - connection.start(); - expect(connection.createSession(anyBoolean(), anyInt())).andReturn(session); - expect(session.createTopic(anyObject(String.class))).andReturn((Topic) destination); - expect(session.createConsumer(anyObject(Destination.class))).andReturn(consumer); - consumer.setMessageListener(listener); - EasyMock.expectLastCall().andThrow(new JMSException("")); - - consumer.close(); - EasyMock.expectLastCall().andThrow(new JMSException("")); - - PowerMock.replayAll(); - - listener.receive(); - - PowerMock.verifyAll(); - } - - @Test - public void listener_on_message() throws JMSException { - DroolsEngine.AlarmMqMessageListener listener = droolsEngine.new AlarmMqMessageListener(); - Alarm alarm = new Alarm(); - alarm.setAlarmKey("alarmKey"); - ActiveMQObjectMessage objectMessage = new ActiveMQObjectMessage(); - objectMessage.setObject(alarm); - - listener.onMessage(objectMessage); + VesAlarm raiseAlarm = new VesAlarm(); + raiseAlarm.setVersion((long) 245235); + droolsEngine.putRaisedIntoStream(raiseAlarm); } @Test -- 2.16.6