diff options
Diffstat (limited to 'applications/common/src/main')
6 files changed, 47 insertions, 4 deletions
diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePolicyType.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePolicyType.java index 3bbc6ea5..cf9d7a94 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePolicyType.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePolicyType.java @@ -48,6 +48,7 @@ public class MatchablePolicyType { public static final String TOSCA_TYPE_LIST = "list"; public static final String TOSCA_TYPE_MAP = "map"; + //@formatter:off private static final Map<String, Function<ToscaProperty, MatchablePropertyTypeBase<?>>> mapPrimitivesProperty = Map.of( TOSCA_PRIMITIVE_STRING, MatchablePropertyTypeString::new, @@ -65,6 +66,7 @@ public class MatchablePolicyType { TOSCA_PRIMITIVE_BOOLEAN, MatchablePropertyTypeBoolean::new, TOSCA_PRIMITIVE_TIMESTAMP, MatchablePropertyTypeTimestamp::new ); + //@formatter:on ToscaPolicyIdentifier policyId; Map<String, MatchableProperty> matchables = new HashMap<>(); @@ -170,7 +172,7 @@ public class MatchablePolicyType { Function<ToscaEntrySchema, MatchablePropertyTypeBase<?>> function = mapPrimitivesSchema.get(toscaSchema.getType()); if (function != null) { - return new MatchableProperty(property, function.apply(toscaSchema)); // compilation err wants ToscaProperty + return new MatchableProperty(property, function.apply(toscaSchema)); } throw new IllegalArgumentException("Not a primitive " + toscaSchema.getType()); } diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePropertyTypeList.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePropertyTypeList.java index 55fea540..7b19ad47 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePropertyTypeList.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/matchable/MatchablePropertyTypeList.java @@ -23,7 +23,6 @@ package org.onap.policy.pdp.xacml.application.common.matchable; import com.att.research.xacml.api.Identifier; -import java.util.Collection; import java.util.Collections; import java.util.List; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType; @@ -50,7 +49,7 @@ public class MatchablePropertyTypeList extends MatchablePropertyTypeBase<List<Ma @SuppressWarnings("unchecked") @Override public List<MatchablePropertyType<?>> validate(Object value) throws ToscaPolicyConversionException { - if (value instanceof Collection) { + if (value instanceof List) { return (List<MatchablePropertyType<?>>) value; } return Collections.emptyList(); diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/CountRecentOperationsPip.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/CountRecentOperationsPip.java index 4bf87779..f2d79804 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/CountRecentOperationsPip.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/CountRecentOperationsPip.java @@ -62,6 +62,9 @@ public class CountRecentOperationsPip extends StdOnapPip { */ @Override public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException { + if (this.shutdown) { + throw new PIPException("Engine is shutdown"); + } logger.debug("getAttributes requesting attribute {} of type {} for issuer {}", pipRequest.getAttributeId(), pipRequest.getDataTypeId(), pipRequest.getIssuer()); // diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/GetOperationOutcomePip.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/GetOperationOutcomePip.java index 0f970f7e..b269e25a 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/GetOperationOutcomePip.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/operationshistory/GetOperationOutcomePip.java @@ -58,6 +58,9 @@ public class GetOperationOutcomePip extends StdOnapPip { */ @Override public PIPResponse getAttributes(PIPRequest pipRequest, PIPFinder pipFinder) throws PIPException { + if (this.shutdown) { + throw new PIPException("Engine is shutdown"); + } logger.debug("getAttributes requesting attribute {} of type {} for issuer {}", pipRequest.getAttributeId(), pipRequest.getDataTypeId(), pipRequest.getIssuer()); // diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdOnapPip.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdOnapPip.java index ca07f22f..5c99932e 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdOnapPip.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdOnapPip.java @@ -70,6 +70,7 @@ public abstract class StdOnapPip extends StdConfigurableEngine { protected Properties properties; protected EntityManager em; protected String issuer; + protected boolean shutdown = false; public StdOnapPip() { super(); @@ -81,7 +82,14 @@ public abstract class StdOnapPip extends StdConfigurableEngine { } @Override - public void configure(String id, Properties properties) throws PIPException { + public synchronized void configure(String id, Properties properties) throws PIPException { + // + // This most likely will never get called since configure is called + // upon startup. + // + if (this.shutdown) { + throw new PIPException("Engine is shutdown."); + } super.configure(id, properties); logger.info("Configuring historyDb PIP {}", properties); this.properties = properties; @@ -114,6 +122,15 @@ public abstract class StdOnapPip extends StdConfigurableEngine { } } + @Override + public synchronized void shutdown() { + if (this.em != null) { + this.em.close(); + this.em = null; + } + this.shutdown = true; + } + protected String getAttribute(PIPFinder pipFinder, PIPRequest pipRequest) { // // Get the actor value diff --git a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java index 9a8b63fb..ba562b83 100644 --- a/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java +++ b/applications/common/src/main/java/org/onap/policy/pdp/xacml/application/common/std/StdXacmlApplicationServiceProvider.java @@ -283,6 +283,13 @@ public abstract class StdXacmlApplicationServiceProvider implements XacmlApplica PDPEngineFactory factory = getPdpEngineFactory(); PDPEngine engine = factory.newEngine(properties); if (engine != null) { + // + // If there is a previous engine have it shutdown. + // + this.destroyEngine(); + // + // Save it off + // this.pdpEngine = engine; } } catch (FactoryException e) { @@ -290,6 +297,18 @@ public abstract class StdXacmlApplicationServiceProvider implements XacmlApplica } } + protected synchronized void destroyEngine() { + if (this.pdpEngine == null) { + return; + } + try { + this.pdpEngine.shutdown(); + } catch (Exception e) { + LOGGER.warn("Exception thrown when destroying XACML PDP engine.", e); + } + this.pdpEngine = null; + } + /** * Make a decision call. * |