From 7f535078ef80a7b7efa3e3325bfccb994fbd00e8 Mon Sep 17 00:00:00 2001 From: "Christopher Lott (cl778h)" Date: Thu, 31 Aug 2017 15:16:38 -0400 Subject: Rename packages to org.onap in 1.4.0-SNAPSHOT 19 - remove openecomp 72 - remediate Sonar scan issues 79 - removed unwanted left menu under Report 90 - apply approved license text Issue: PORTAL-19, PORTAL-72, PORTAL-79, PORTAL-90 Change-Id: I41a0ef5fba623d2242574bd15f2d9fb8029a496c Signed-off-by: Christopher Lott (cl778h) --- .../core/objectcache/jcs/JCSCacheManager.java | 204 +++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 ecomp-sdk/epsdk-core/src/main/java/org/onap/portalsdk/core/objectcache/jcs/JCSCacheManager.java (limited to 'ecomp-sdk/epsdk-core/src/main/java/org/onap/portalsdk/core/objectcache/jcs/JCSCacheManager.java') diff --git a/ecomp-sdk/epsdk-core/src/main/java/org/onap/portalsdk/core/objectcache/jcs/JCSCacheManager.java b/ecomp-sdk/epsdk-core/src/main/java/org/onap/portalsdk/core/objectcache/jcs/JCSCacheManager.java new file mode 100644 index 00000000..f169754f --- /dev/null +++ b/ecomp-sdk/epsdk-core/src/main/java/org/onap/portalsdk/core/objectcache/jcs/JCSCacheManager.java @@ -0,0 +1,204 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the “License”); + * you may not use this software 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. + * + * Unless otherwise specified, all documentation contained herein is licensed + * under the Creative Commons License, Attribution 4.0 Intl. (the “License”); + * you may not use this documentation except in compliance with the License. + * You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation + * 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. + * + * ============LICENSE_END============================================ + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.portalsdk.core.objectcache.jcs; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.Vector; + +import javax.annotation.PostConstruct; +import javax.servlet.ServletContext; + +import org.apache.jcs.JCS; +import org.apache.jcs.access.exception.CacheException; +import org.apache.jcs.engine.CacheConstants; +import org.apache.jcs.engine.behavior.IElementAttributes; +import org.apache.jcs.engine.control.CompositeCacheManager; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.objectcache.AbstractCacheManager; +import org.onap.portalsdk.core.service.DataAccessService; +import org.onap.portalsdk.core.util.SystemProperties; +import org.springframework.web.context.ServletContextAware; + +public abstract class JCSCacheManager extends AbstractCacheManager implements CacheConstants, ServletContextAware { + + private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(JCSCacheManager.class); + + public static String LOOKUP_OBJECT_CACHE_NAME = "lookUpObjectCache"; + public static String JCS_CONFIG_FILE_PATH = "cache_config_file_path"; + public static String CACHE_LOAD_ON_STARTUP = "cache_load_on_startup"; + public static String CACHE_PROPERTY_VALUE_TRUE = "true"; + public static String CACHE_CONTROL_SWITCH_ON = "1"; + public static String CACHE_CONTROL_SWITCH_OFF = "0"; + public static String CACHE_CONTROL_SWITCH = "cache_switch"; + + private static JCS lookUpCache; + private ServletContext servletContext; + + private Properties cacheConfigProperties = null; + private final Vector jscManagedCacheList = new Vector(); + + private DataAccessService dataAccessService; + + public JCSCacheManager() { + super(); + jscManagedCacheList.add(LOOKUP_OBJECT_CACHE_NAME); + } + + @PostConstruct + public void configure() throws IOException { + super.configure(); + + String jcsConfigFilePath = SystemProperties.getProperty(JCS_CONFIG_FILE_PATH); + // getProperty throws if the key is missing; but check anyhow. + if (jcsConfigFilePath == null || jcsConfigFilePath.length() == 0) + throw new IOException("configure: failed to get value for config property " + JCS_CONFIG_FILE_PATH); + InputStream jcsConfigInputStream = getServletContext().getResourceAsStream(jcsConfigFilePath); + if (jcsConfigInputStream == null) + throw new IOException("configure: failed to open stream for config property " + JCS_CONFIG_FILE_PATH + + " with name " + jcsConfigFilePath); + logger.debug(EELFLoggerDelegate.debugLogger, + "configure: loading cache properties from classpath resource {} ", jcsConfigFilePath); + Properties p = new Properties(); + p.load(jcsConfigInputStream); + jcsConfigInputStream.close(); + + CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance(); + ccm.configure(p); + setCacheConfigProperties(p); + + try { + initializeLookUpCache(); + } catch (CacheException ce) { + throw new IOException("configure: failed to initialize lookup cache", ce); + } + + } + + private void initializeLookUpCache() throws CacheException { + lookUpCache = JCS.getInstance(LOOKUP_OBJECT_CACHE_NAME); + + JCSCacheEventHandler eventHandler = new JCSCacheEventHandler(); + IElementAttributes elementAttributes = lookUpCache.getDefaultElementAttributes(); + + elementAttributes.addElementEventHandler(eventHandler); + + lookUpCache.setDefaultElementAttributes(elementAttributes); + + if (CACHE_PROPERTY_VALUE_TRUE.equalsIgnoreCase(SystemProperties.getProperty(CACHE_LOAD_ON_STARTUP))) { + loadDataOnStartUp(); + } + } + + public Object getObject(String key) { + if (CACHE_CONTROL_SWITCH_ON.equalsIgnoreCase(SystemProperties.getProperty(CACHE_CONTROL_SWITCH))) { + if (lookUpCache == null) + return null; + else + return lookUpCache.get(key); + } else + return null; + } + + public void putObject(String key, Object objectToCache) { + try { + if (CACHE_CONTROL_SWITCH_ON.equalsIgnoreCase(SystemProperties.getProperty(CACHE_CONTROL_SWITCH))) { + if (lookUpCache != null) { + lookUpCache.put(key, objectToCache); + } + } + } catch (CacheException ce) { + logger.error(EELFLoggerDelegate.errorLogger, "putObject: failed to put the object with key " + key, ce); + } + } + + public void clearCache(String region) { + try { + if (region.equals(LOOKUP_OBJECT_CACHE_NAME)) + lookUpCache.clear(); + } catch (CacheException ce) { + logger.error(EELFLoggerDelegate.errorLogger, + "clearCache: failed to clear the cache for the region " + region, ce); + } + } + + public void clearCache() { + clearCache(LOOKUP_OBJECT_CACHE_NAME); + } + + private void loadDataOnStartUp() { + loadLookUpCache(); + } + + public abstract void loadLookUpCache(); + + public void refreshLookUpCache() { + clearCache(LOOKUP_OBJECT_CACHE_NAME); + loadLookUpCache(); + } + + public Properties getCacheConfigProperties() { + return cacheConfigProperties; + } + + public void setCacheConfigProperties(Properties cacheConfigProperties) { + this.cacheConfigProperties = cacheConfigProperties; + } + + public Vector getJscManagedCacheList() { + return jscManagedCacheList; + } + + public DataAccessService getDataAccessService() { + return dataAccessService; + } + + public void setDataAccessService(DataAccessService dataAccessService) { + this.dataAccessService = dataAccessService; + } + + public ServletContext getServletContext() { + return servletContext; + } + + public void setServletContext(ServletContext servletContext) { + this.servletContext = servletContext; + } + +} -- cgit 1.2.3-korg