From f95ebd42ebd32fe70f0c6ae2de807df416c55725 Mon Sep 17 00:00:00 2001 From: vidhyasree Date: Wed, 14 Mar 2018 14:31:16 -0400 Subject: [PATCH] ClientLib Support For Multiple Controllers -APPC client library should support multiple controllers -To support MSO added string controllerType Issue-ID: APPC-683 Change-Id: Ief8416cb0912acc26015cb8271432de92a0af7dd Signed-off-by: vidhyasree --- .../api/AppcLifeCycleManagerServiceFactory.java | 23 +++++- .../AppcLifeCycleManagerServiceFactoryImpl.java | 94 +++++++++++++++++++--- .../client/impl/protocol/UEBMessagingService.java | 14 +++- .../client/impl/protocol/UEBPropertiesKeys.java | 7 +- 4 files changed, 115 insertions(+), 23 deletions(-) diff --git a/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/api/AppcLifeCycleManagerServiceFactory.java b/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/api/AppcLifeCycleManagerServiceFactory.java index c0d2daa01..8613f29fa 100644 --- a/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/api/AppcLifeCycleManagerServiceFactory.java +++ b/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/api/AppcLifeCycleManagerServiceFactory.java @@ -9,15 +9,15 @@ * 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. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ @@ -39,6 +39,15 @@ public interface AppcLifeCycleManagerServiceFactory { */ LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, Properties properties) throws AppcClientException; + /** + * Creates a new stateful LCM API given a controller type + * @param context application context parameters + * @param properties configures the behaviour of the LCM + * @return a new stateful LCM API + * @throws AppcClientException in case of problem in instantiation + */ + LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, Properties properties, String controllerType) throws AppcClientException; + /** * performs a shutdown of LCM API. * in case of graceful, will try and execute the remaining requests, otherwise, will force the shutdown right away @@ -46,4 +55,12 @@ public interface AppcLifeCycleManagerServiceFactory { */ void shutdownLifeCycleManager(boolean isForceShutdown); + + /** + * performs a shutdown of LCM API, given a controller type + * in case of graceful, will try and execute the remaining requests, otherwise, will force the shutdown right away + * @param isForceShutdown - boolean. If true to perform force shutdown, other to perform graceful shutdown. + */ + void shutdownLifeCycleManager(boolean isForceShutdown, String controllerType); + } diff --git a/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/impl/business/AppcLifeCycleManagerServiceFactoryImpl.java b/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/impl/business/AppcLifeCycleManagerServiceFactoryImpl.java index b8ab36bbe..400d6c6bd 100644 --- a/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/impl/business/AppcLifeCycleManagerServiceFactoryImpl.java +++ b/appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/impl/business/AppcLifeCycleManagerServiceFactoryImpl.java @@ -9,21 +9,23 @@ * 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. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ package org.onap.appc.client.lcm.impl.business; +import java.util.HashMap; + import org.onap.appc.client.lcm.api.AppcLifeCycleManagerServiceFactory; import org.onap.appc.client.lcm.api.ApplicationContext; import org.onap.appc.client.lcm.api.LifeCycleManagerStateful; @@ -34,28 +36,94 @@ import java.util.Properties; public class AppcLifeCycleManagerServiceFactoryImpl implements AppcLifeCycleManagerServiceFactory { - private LifeCycleManagerStateful lifeCycleManagerStateful; - private LCMRequestProcessor lcmRequestProcessor; + class AppcLifeCycleManagerServiceFactoryImplData { + + private LifeCycleManagerStateful _lifeCycleManagerStateful; + private LCMRequestProcessor _lcmRequestProcessor; + + AppcLifeCycleManagerServiceFactoryImplData(LifeCycleManagerStateful lifeCycleManagerStateful, + LCMRequestProcessor lcmRequestProcessor) { + + _lifeCycleManagerStateful = lifeCycleManagerStateful; + _lcmRequestProcessor = lcmRequestProcessor; + } + + LifeCycleManagerStateful getLifeCycleManagerStateful() { + return _lifeCycleManagerStateful; + } + + LCMRequestProcessor getLCMRequestProcessor() { + return _lcmRequestProcessor; + } + } + + private HashMap lcmMap = new HashMap(); @Override - public synchronized LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, Properties properties) throws AppcClientException{ + public synchronized LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, + Properties properties) throws AppcClientException { + String cType = properties.getProperty("controllerType"); + if (cType == null || cType.length() == 0) + { + cType = "APPC"; + properties.put("controllerType", cType); + } + + AppcLifeCycleManagerServiceFactoryImplData lcmData = lcmMap.get(cType); + LifeCycleManagerStateful lifeCycleManagerStateful = null; + LCMRequestProcessor lcmRequestProcessor = null; + + if (lcmData != null) { + lifeCycleManagerStateful = lcmData.getLifeCycleManagerStateful(); + lcmRequestProcessor = lcmData.getLCMRequestProcessor(); + } + if (lifeCycleManagerStateful == null) { lcmRequestProcessor = new LCMRequestProcessor(context, properties); - lifeCycleManagerStateful = (LifeCycleManagerStateful) Proxy.newProxyInstance(LifeCycleManagerStateful.class.getClassLoader(), new Class[]{LifeCycleManagerStateful.class}, new RPCInvocator(lcmRequestProcessor)); - } - else { + lifeCycleManagerStateful = (LifeCycleManagerStateful) Proxy.newProxyInstance( + LifeCycleManagerStateful.class.getClassLoader(), new Class[] { LifeCycleManagerStateful.class }, + new RPCInvocator(lcmRequestProcessor)); + lcmMap.put(cType, + new AppcLifeCycleManagerServiceFactoryImplData(lifeCycleManagerStateful, lcmRequestProcessor)); + } else { throw new IllegalStateException("already instansiated LifeCycleManagerStateful instance"); } return lifeCycleManagerStateful; } + public LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, + Properties properties, String controllerType) throws AppcClientException { + if (controllerType != null && controllerType.length() != 0) + properties.put("controllerType", controllerType.toUpperCase()); + return createLifeCycleManagerStateful(context, properties); + } + @Override public void shutdownLifeCycleManager(boolean isForceShutdown) { - if(lcmRequestProcessor != null){ - lcmRequestProcessor.shutdown(isForceShutdown); + + shutdownLifeCycleManager(isForceShutdown, "APPC"); + } + + @Override + public void shutdownLifeCycleManager(boolean isForceShutdown, String controllerType) { + if (controllerType == null || controllerType.length() == 0) + controllerType = "APPC"; + else + controllerType = controllerType.toUpperCase(); + + AppcLifeCycleManagerServiceFactoryImplData lcmData = lcmMap.get(controllerType); + LCMRequestProcessor lcmRequestProcessor = null; + + if (lcmData != null) { + lcmRequestProcessor = lcmData.getLCMRequestProcessor(); } - else{ - throw new IllegalStateException("The life cycle manager library wasn't instantiated properly, therefore the shutdown event will not be handled"); + + if (lcmRequestProcessor != null) { + lcmRequestProcessor.shutdown(isForceShutdown); + } else { + throw new IllegalStateException( + "The life cycle manager library wasn't instantiated properly, therefore the shutdown event will not be handled"); } } + } diff --git a/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBMessagingService.java b/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBMessagingService.java index 5c92a008f..0a9e1a630 100644 --- a/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBMessagingService.java +++ b/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBMessagingService.java @@ -9,15 +9,15 @@ * 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. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ @@ -49,11 +49,17 @@ class UEBMessagingService implements MessagingService { @Override @SuppressWarnings("Since15") public void init(Properties props) - throws IOException, GeneralSecurityException, NoSuchFieldException, IllegalAccessException { + throws IOException, GeneralSecurityException, NoSuchFieldException, IllegalAccessException { if (props != null) { String readTopic = props.getProperty(UEBPropertiesKeys.TOPIC_READ); String writeTopic = props.getProperty(UEBPropertiesKeys.TOPIC_WRITE); + String cType = props.getProperty(UEBPropertiesKeys.CONTROLLER_TYPE); + if (cType != null && cType.length()!= 0 && (!cType.equals("APPC"))) + { + readTopic = cType + "-" + readTopic; + writeTopic = cType + "-" + writeTopic; + } String apiKey = props.getProperty(UEBPropertiesKeys.AUTH_USER); String apiSecret = props.getProperty(UEBPropertiesKeys.AUTH_SECRET); String readTimeoutString = props.getProperty(UEBPropertiesKeys.TOPIC_READ_TIMEOUT, DEFAULT_READ_TIMEOUT_MS); diff --git a/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBPropertiesKeys.java b/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBPropertiesKeys.java index 5c1916f2b..81f109a44 100644 --- a/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBPropertiesKeys.java +++ b/appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBPropertiesKeys.java @@ -9,15 +9,15 @@ * 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. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ECOMP is a trademark and service mark of AT&T Intellectual Property. * ============LICENSE_END========================================================= */ @@ -33,4 +33,5 @@ class UEBPropertiesKeys { static final String AUTH_USER = "client.key"; static final String AUTH_SECRET = "client.secret"; static final String HOSTS = "poolMembers"; + static final String CONTROLLER_TYPE = "controllerType"; } -- 2.16.6