X-Git-Url: https://gerrit.onap.org/r/gitweb?p=policy%2Fengine.git;a=blobdiff_plain;f=BRMSGateway%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fbrms%2Fapi%2FBrmsGateway.java;h=093bf4baed70f7c87ad7f205b87d5de860b79355;hp=d12178319763f71b3b0b8e63eb915d906313533b;hb=dc6697bc577a5ba1d423ca2e1a3b604528461479;hpb=a9de6d45f97b3229cb14e164c791715a3dfed026 diff --git a/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java b/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java index d12178319..093bf4bae 100644 --- a/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java +++ b/BRMSGateway/src/main/java/org/onap/policy/brms/api/BrmsGateway.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017, 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,6 +20,7 @@ package org.onap.policy.brms.api; +import java.util.concurrent.CountDownLatch; import org.onap.policy.api.NotificationScheme; import org.onap.policy.api.PolicyEngine; import org.onap.policy.api.PolicyException; @@ -31,29 +32,51 @@ import org.onap.policy.xacml.api.XACMLErrorConstants; * BRMSGateway: This application acts as the Gateway interface between the PDP XACML and PDP Drools. * The listens for BRMS based policies and pushes them to the specified Policy Repository, from * where the PDP Drools reads the Rule Jar. - * + * * @version 0.1 */ -class BrmsGateway { +public class BrmsGateway { private static final Logger logger = FlexLogger.getLogger(BrmsGateway.class); private static final String CONFIGFILE = "config.properties"; private static PolicyEngine policyEngine = null; + // may be overridden by junit tests + private static Factory factory = new Factory(); + private BrmsGateway() { // Default private constructor } + /** + * Main method. + * @param args The path to the configuration file is the only allowed optional argument + * @throws Exception on BRMS Gateway errors + */ public static void main(final String[] args) throws Exception { + // The configuration file containing the configuration for the BRMS Gateway + String configFile = CONFIGFILE; + + // Check if a configuration file has been specified as a parameter + if (args.length == 1) { + configFile = args[0]; + } + else if (args.length > 1) { + String errorString = "usage: " + BrmsGateway.class.getCanonicalName() + " [configFile]"; + logger.error(errorString); + throw new PolicyException(errorString); + } + // Initialize Handler. logger.info("Initializing BRMS Handler"); BrmsHandler brmsHandler = null; try { - brmsHandler = new BrmsHandler(CONFIGFILE); + brmsHandler = factory.makeBrmsHandler(configFile); } catch (final PolicyException e) { - logger.error("Check your property file: " + e.getMessage(), e); - System.exit(1); + String errorString = "Check your property file: " + e.getMessage(); + logger.error(errorString); + throw new PolicyException(errorString); } // Set Handler with Auto Notification and initialize policyEngine @@ -62,25 +85,38 @@ class BrmsGateway { policyEngine = new PolicyEngine(CONFIGFILE, NotificationScheme.AUTO_ALL_NOTIFICATIONS, brmsHandler); } catch (final Exception e) { logger.error(XACMLErrorConstants.ERROR_UNKNOWN + "Error while Initializing Policy Engine " + e.getMessage(), - e); + e); } // Keep Running.... + CountDownLatch latch = new CountDownLatch(1); final Runnable runnable = () -> { - while (true) { - try { - Thread.sleep(30000); - } catch (final InterruptedException e) { - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Thread Exception " + e.getMessage()); - Thread.currentThread().interrupt(); - } + try { + // wait until interrupted + latch.await(); + } catch (final InterruptedException e) { + logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Thread Exception " + e.getMessage()); + Thread.currentThread().interrupt(); } }; - final Thread thread = new Thread(runnable); + final Thread thread = factory.makeThread(runnable); thread.start(); } public static PolicyEngine getPolicyEngine() { return policyEngine; } + + /** + * Factory to provide various data. May be overridden by junit tests. + */ + public static class Factory { + public BrmsHandler makeBrmsHandler(String configFile) throws PolicyException { + return new BrmsHandler(configFile); + } + + public Thread makeThread(Runnable runnable) { + return new Thread(runnable); + } + } }