forked from community/device-mgt-core
Merge pull request #948 from geethkokila/master
Adding the certificate caching to improve performancerevert-70aa11f8
commit
42836a0704
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you 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.
|
||||
*/
|
||||
|
||||
|
||||
package org.wso2.carbon.certificate.mgt.core.cache;
|
||||
|
||||
import org.wso2.carbon.certificate.mgt.core.dto.CertificateResponse;
|
||||
|
||||
/**
|
||||
* This interface for caching the certificates.
|
||||
*/
|
||||
|
||||
public interface CertificateCacheManager {
|
||||
|
||||
void addCertificateBySerial(String serialNumber, CertificateResponse certificate) ;
|
||||
|
||||
void addCertificateByCN(String commonName, CertificateResponse certificate) ;
|
||||
|
||||
CertificateResponse getCertificateBySerial(String serialNumber) ;
|
||||
|
||||
CertificateResponse getCertificateByCN(String commonName) ;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you 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.
|
||||
*/
|
||||
|
||||
|
||||
package org.wso2.carbon.certificate.mgt.core.cache.impl;
|
||||
|
||||
import org.wso2.carbon.certificate.mgt.core.cache.CertificateCacheManager;
|
||||
import org.wso2.carbon.certificate.mgt.core.dto.CertificateResponse;
|
||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
||||
import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig;
|
||||
|
||||
import javax.cache.Cache;
|
||||
import javax.cache.CacheConfiguration;
|
||||
import javax.cache.CacheManager;
|
||||
import javax.cache.Caching;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CertificateCacheManagerImpl implements CertificateCacheManager {
|
||||
|
||||
public static final String CERTIFICATE_CACHE_MANAGER = "CERTIFICATE_CACHE_MANAGER";
|
||||
public static final String CERTIFICATE_CACHE = "CERTIFICATE_CACHE";
|
||||
private static boolean isCertificateCacheInitialized = false;
|
||||
private static String SERIAL_PRE = "S_";
|
||||
private static String COMMON_NAME_PRE = "C_";
|
||||
|
||||
private static CertificateCacheManager certificateCacheManager;
|
||||
|
||||
|
||||
private CertificateCacheManagerImpl() {
|
||||
}
|
||||
|
||||
public static CertificateCacheManager getInstance() {
|
||||
if (certificateCacheManager == null) {
|
||||
synchronized (CertificateCacheManagerImpl.class) {
|
||||
if (certificateCacheManager == null) {
|
||||
certificateCacheManager = new CertificateCacheManagerImpl();
|
||||
}
|
||||
}
|
||||
}
|
||||
return certificateCacheManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCertificateBySerial(String serialNumber, CertificateResponse certificate) {
|
||||
CertificateCacheManagerImpl.getCertificateCache().put(SERIAL_PRE + serialNumber, certificate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCertificateByCN(String commonName, CertificateResponse certificate) {
|
||||
CertificateCacheManagerImpl.getCertificateCache().put(COMMON_NAME_PRE + commonName, certificate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CertificateResponse getCertificateBySerial(String serialNumber) {
|
||||
return CertificateCacheManagerImpl.getCertificateCache().get(SERIAL_PRE + serialNumber);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CertificateResponse getCertificateByCN(String commonName) {
|
||||
return CertificateCacheManagerImpl.getCertificateCache().get(COMMON_NAME_PRE + commonName);
|
||||
}
|
||||
|
||||
|
||||
private static CacheManager getCacheManager() {
|
||||
return Caching.getCacheManagerFactory().getCacheManager(CertificateCacheManagerImpl.CERTIFICATE_CACHE_MANAGER);
|
||||
}
|
||||
|
||||
public static Cache<String, CertificateResponse> getCertificateCache() {
|
||||
DeviceManagementConfig config = DeviceConfigurationManager.getInstance().getDeviceManagementConfig();
|
||||
CacheManager manager = getCacheManager();
|
||||
Cache<String, CertificateResponse> certificateCache = null;
|
||||
if (config.getDeviceCacheConfiguration().isEnabled()) {
|
||||
if (!isCertificateCacheInitialized) {
|
||||
initializeCertificateCache();
|
||||
}
|
||||
if (manager != null) {
|
||||
certificateCache = manager.<String, CertificateResponse>getCache(CertificateCacheManagerImpl.CERTIFICATE_CACHE);
|
||||
} else {
|
||||
certificateCache = Caching.getCacheManager(CertificateCacheManagerImpl.CERTIFICATE_CACHE_MANAGER).
|
||||
<String, CertificateResponse>getCache(CertificateCacheManagerImpl.CERTIFICATE_CACHE);
|
||||
}
|
||||
}
|
||||
return certificateCache;
|
||||
}
|
||||
|
||||
public static void initializeCertificateCache() {
|
||||
DeviceManagementConfig config = DeviceConfigurationManager.getInstance().getDeviceManagementConfig();
|
||||
int certificateCacheExpiry = config.getCertificateCacheConfiguration().getExpiryTime();
|
||||
CacheManager manager = getCacheManager();
|
||||
if (config.getCertificateCacheConfiguration().isEnabled()) {
|
||||
if (!isCertificateCacheInitialized) {
|
||||
isCertificateCacheInitialized = true;
|
||||
if (manager != null) {
|
||||
if (certificateCacheExpiry > 0) {
|
||||
manager.<String, CertificateResponse>createCacheBuilder(CertificateCacheManagerImpl.CERTIFICATE_CACHE).
|
||||
setExpiry(CacheConfiguration.ExpiryType.MODIFIED, new CacheConfiguration.Duration(TimeUnit.SECONDS,
|
||||
certificateCacheExpiry)).setExpiry(CacheConfiguration.ExpiryType.ACCESSED, new CacheConfiguration.
|
||||
Duration(TimeUnit.SECONDS, certificateCacheExpiry)).setStoreByValue(true).build();
|
||||
} else {
|
||||
manager.<String, CertificateResponse>getCache(CertificateCacheManagerImpl.CERTIFICATE_CACHE);
|
||||
}
|
||||
} else {
|
||||
if (certificateCacheExpiry > 0) {
|
||||
Caching.getCacheManager().
|
||||
<String, CertificateResponse>createCacheBuilder(CertificateCacheManagerImpl.CERTIFICATE_CACHE).
|
||||
setExpiry(CacheConfiguration.ExpiryType.MODIFIED, new CacheConfiguration.Duration(TimeUnit.SECONDS,
|
||||
certificateCacheExpiry)).setExpiry(CacheConfiguration.ExpiryType.ACCESSED, new CacheConfiguration.
|
||||
Duration(TimeUnit.SECONDS, certificateCacheExpiry)).setStoreByValue(true).build();
|
||||
} else {
|
||||
Caching.getCacheManager().<String, CertificateResponse>getCache(CertificateCacheManagerImpl.CERTIFICATE_CACHE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you 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.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.core.config.cache;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "CertificateCacheConfiguration")
|
||||
public class CertificateCacheConfiguration {
|
||||
|
||||
private boolean isEnabled;
|
||||
private int expiryTime;
|
||||
|
||||
@XmlElement(name = "Enable", required = true)
|
||||
public boolean isEnabled() {
|
||||
return isEnabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
isEnabled = enabled;
|
||||
}
|
||||
|
||||
@XmlElement(name = "ExpiryTime", required = true)
|
||||
public int getExpiryTime() {
|
||||
return expiryTime;
|
||||
}
|
||||
|
||||
public void setExpiryTime(int expiryTime) {
|
||||
this.expiryTime = expiryTime;
|
||||
}
|
||||
}
|
Loading…
Reference in new issue