diff options
Diffstat (limited to 'services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java')
-rw-r--r-- | services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java index be294aae7..b9a405b44 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/runtime/impl/EngineWorker.java @@ -20,6 +20,11 @@ package org.onap.policy.apex.service.engine.runtime.impl; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; @@ -55,11 +60,6 @@ import org.onap.policy.apex.service.engine.runtime.EngineServiceEventInterface; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; - /** * The Class EngineWorker encapsulates a core {@link ApexEngine} instance, which runs policies * defined in the {@link org.onap.policy.apex.model.basicmodel.concepts.AxModelAxModel}. Each policy @@ -283,6 +283,7 @@ final class EngineWorker implements EngineService { } // Update the Apex model in the Apex engine + engine.clear(); engine.updateModel(apexModel); LOGGER.debug("engine model {} added to the engine-{}", apexModel.getKey().getId(), engineWorkerKey); @@ -394,9 +395,54 @@ final class EngineWorker implements EngineService { // Interrupt the thread that is handling events toward the engine processorThread.interrupt(); + processorThread = null; // Stop the engine engine.stop(); + + LOGGER.exit(engineKey); + } + + /* + * (non-Javadoc) + * + * @see org.onap.policy.apex.service.engine.runtime.EngineService#clear() + */ + @Override + public void clear() throws ApexException { + clear(this.getKey()); + } + + /* + * (non-Javadoc) + * + * @see + * org.onap.policy.apex.service.engine.runtime.EngineService#clear(org.onap.policy.apex.core. + * model. concepts.AxArtifactKey) + */ + @Override + public void clear(final AxArtifactKey engineKey) throws ApexException { + // Check if the key on the start request is correct + if (!engineWorkerKey.equals(engineKey)) { + LOGGER.warn("engine key " + engineKey.getId() + " does not match the key" + engineWorkerKey.getId() + + " of this engine"); + throw new ApexException("engine key " + engineKey.getId() + " does not match the key" + + engineWorkerKey.getId() + " of this engine"); + } + + if (engine == null) { + LOGGER.error("apex engine for engine key" + engineWorkerKey.getId() + " null"); + throw new ApexException("apex engine for engine key" + engineWorkerKey.getId() + " null"); + } + + // Interrupt the worker to stop its thread + if (processorThread != null && !processorThread.isAlive()) { + LOGGER.warn("apex engine for engine key" + engineWorkerKey.getId() + " is not stopped with state " + + getState()); + return; + } + + // Clear the engine engine.clear(); LOGGER.exit(engineKey); |