Fixed cache functionality. Moved annotation from interface to classes because of Spring bug https://jira.spring.io/browse/SPR-15271
This commit is contained in:
parent
410d197a34
commit
f7bbe2136b
@ -60,10 +60,6 @@
|
|||||||
<groupId>org.postgresql</groupId>
|
<groupId>org.postgresql</groupId>
|
||||||
<artifactId>postgresql</artifactId>
|
<artifactId>postgresql</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework</groupId>
|
|
||||||
<artifactId>spring-test</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
@ -177,10 +173,6 @@
|
|||||||
<groupId>com.h2database</groupId>
|
<groupId>com.h2database</groupId>
|
||||||
<artifactId>h2</artifactId>
|
<artifactId>h2</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|||||||
@ -57,16 +57,25 @@ public class ServiceCacheConfiguration {
|
|||||||
Config config = new Config();
|
Config config = new Config();
|
||||||
|
|
||||||
if (zkEnabled) {
|
if (zkEnabled) {
|
||||||
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
|
addZkConfig(config);
|
||||||
|
|
||||||
config.setProperty(GroupProperty.DISCOVERY_SPI_ENABLED.getName(), Boolean.TRUE.toString());
|
|
||||||
DiscoveryStrategyConfig discoveryStrategyConfig = new DiscoveryStrategyConfig(new ZookeeperDiscoveryStrategyFactory());
|
|
||||||
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.ZOOKEEPER_URL.key(), zkUrl);
|
|
||||||
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.ZOOKEEPER_PATH.key(), zkDir);
|
|
||||||
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.GROUP.key(), HAZELCAST_CLUSTER_NAME);
|
|
||||||
config.getNetworkConfig().getJoin().getDiscoveryConfig().addDiscoveryStrategyConfig(discoveryStrategyConfig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.addMapConfig(createDeviceCredentialsCacheConfig());
|
||||||
|
|
||||||
|
return Hazelcast.newHazelcastInstance(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addZkConfig(Config config) {
|
||||||
|
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
|
||||||
|
config.setProperty(GroupProperty.DISCOVERY_SPI_ENABLED.getName(), Boolean.TRUE.toString());
|
||||||
|
DiscoveryStrategyConfig discoveryStrategyConfig = new DiscoveryStrategyConfig(new ZookeeperDiscoveryStrategyFactory());
|
||||||
|
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.ZOOKEEPER_URL.key(), zkUrl);
|
||||||
|
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.ZOOKEEPER_PATH.key(), zkDir);
|
||||||
|
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.GROUP.key(), HAZELCAST_CLUSTER_NAME);
|
||||||
|
config.getNetworkConfig().getJoin().getDiscoveryConfig().addDiscoveryStrategyConfig(discoveryStrategyConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MapConfig createDeviceCredentialsCacheConfig() {
|
||||||
MapConfig deviceCredentialsCacheConfig = new MapConfig(CacheConstants.DEVICE_CREDENTIALS_CACHE);
|
MapConfig deviceCredentialsCacheConfig = new MapConfig(CacheConstants.DEVICE_CREDENTIALS_CACHE);
|
||||||
deviceCredentialsCacheConfig.setTimeToLiveSeconds(cacheDeviceCredentialsTTL);
|
deviceCredentialsCacheConfig.setTimeToLiveSeconds(cacheDeviceCredentialsTTL);
|
||||||
deviceCredentialsCacheConfig.setEvictionPolicy(EvictionPolicy.LRU);
|
deviceCredentialsCacheConfig.setEvictionPolicy(EvictionPolicy.LRU);
|
||||||
@ -75,9 +84,7 @@ public class ServiceCacheConfiguration {
|
|||||||
cacheDeviceCredentialsMaxSizeSize,
|
cacheDeviceCredentialsMaxSizeSize,
|
||||||
MaxSizeConfig.MaxSizePolicy.valueOf(cacheDeviceCredentialsMaxSizePolicy))
|
MaxSizeConfig.MaxSizePolicy.valueOf(cacheDeviceCredentialsMaxSizePolicy))
|
||||||
);
|
);
|
||||||
config.addMapConfig(deviceCredentialsCacheConfig);
|
return deviceCredentialsCacheConfig;
|
||||||
|
|
||||||
return Hazelcast.newHazelcastInstance(config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
@ -15,25 +15,18 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.dao.device;
|
package org.thingsboard.server.dao.device;
|
||||||
|
|
||||||
import org.springframework.cache.annotation.CacheEvict;
|
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
|
||||||
import org.thingsboard.server.common.data.id.DeviceId;
|
import org.thingsboard.server.common.data.id.DeviceId;
|
||||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||||
|
|
||||||
import static org.thingsboard.server.common.data.CacheConstants.DEVICE_CREDENTIALS_CACHE;
|
|
||||||
|
|
||||||
public interface DeviceCredentialsService {
|
public interface DeviceCredentialsService {
|
||||||
|
|
||||||
DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId);
|
DeviceCredentials findDeviceCredentialsByDeviceId(DeviceId deviceId);
|
||||||
|
|
||||||
@Cacheable(cacheNames = DEVICE_CREDENTIALS_CACHE, unless="#result == null")
|
|
||||||
DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId);
|
DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId);
|
||||||
|
|
||||||
@CacheEvict(cacheNames = DEVICE_CREDENTIALS_CACHE, keyGenerator="previousDeviceCredentialsId", beforeInvocation = true)
|
|
||||||
DeviceCredentials updateDeviceCredentials(DeviceCredentials deviceCredentials);
|
DeviceCredentials updateDeviceCredentials(DeviceCredentials deviceCredentials);
|
||||||
|
|
||||||
DeviceCredentials createDeviceCredentials(DeviceCredentials deviceCredentials);
|
DeviceCredentials createDeviceCredentials(DeviceCredentials deviceCredentials);
|
||||||
|
|
||||||
@CacheEvict(cacheNames = DEVICE_CREDENTIALS_CACHE, key="#deviceCredentials.credentialsId")
|
|
||||||
void deleteDeviceCredentials(DeviceCredentials deviceCredentials);
|
void deleteDeviceCredentials(DeviceCredentials deviceCredentials);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,8 @@ package org.thingsboard.server.dao.device;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.cache.annotation.CacheEvict;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.thingsboard.server.common.data.Device;
|
import org.thingsboard.server.common.data.Device;
|
||||||
@ -28,6 +30,7 @@ import org.thingsboard.server.dao.EncryptionUtil;
|
|||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.service.DataValidator;
|
import org.thingsboard.server.dao.service.DataValidator;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.common.data.CacheConstants.DEVICE_CREDENTIALS_CACHE;
|
||||||
import static org.thingsboard.server.dao.service.Validator.validateId;
|
import static org.thingsboard.server.dao.service.Validator.validateId;
|
||||||
import static org.thingsboard.server.dao.service.Validator.validateString;
|
import static org.thingsboard.server.dao.service.Validator.validateString;
|
||||||
|
|
||||||
@ -49,6 +52,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Cacheable(cacheNames = DEVICE_CREDENTIALS_CACHE, unless="#result == null")
|
||||||
public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) {
|
public DeviceCredentials findDeviceCredentialsByCredentialsId(String credentialsId) {
|
||||||
log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId);
|
log.trace("Executing findDeviceCredentialsByCredentialsId [{}]", credentialsId);
|
||||||
validateString(credentialsId, "Incorrect credentialsId " + credentialsId);
|
validateString(credentialsId, "Incorrect credentialsId " + credentialsId);
|
||||||
@ -56,6 +60,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@CacheEvict(cacheNames = DEVICE_CREDENTIALS_CACHE, keyGenerator="previousDeviceCredentialsId", beforeInvocation = true)
|
||||||
public DeviceCredentials updateDeviceCredentials(DeviceCredentials deviceCredentials) {
|
public DeviceCredentials updateDeviceCredentials(DeviceCredentials deviceCredentials) {
|
||||||
return saveOrUpdare(deviceCredentials);
|
return saveOrUpdare(deviceCredentials);
|
||||||
}
|
}
|
||||||
@ -82,6 +87,7 @@ public class DeviceCredentialsServiceImpl implements DeviceCredentialsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@CacheEvict(cacheNames = DEVICE_CREDENTIALS_CACHE, key="#deviceCredentials.credentialsId")
|
||||||
public void deleteDeviceCredentials(DeviceCredentials deviceCredentials) {
|
public void deleteDeviceCredentials(DeviceCredentials deviceCredentials) {
|
||||||
log.trace("Executing deleteDeviceCredentials [{}]", deviceCredentials);
|
log.trace("Executing deleteDeviceCredentials [{}]", deviceCredentials);
|
||||||
deviceCredentialsDao.removeById(deviceCredentials.getUuidId());
|
deviceCredentialsDao.removeById(deviceCredentials.getUuidId());
|
||||||
|
|||||||
@ -15,13 +15,9 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.dao.service;
|
package org.thingsboard.server.dao.service;
|
||||||
|
|
||||||
import com.datastax.driver.core.utils.UUIDs;
|
|
||||||
import com.hazelcast.core.HazelcastInstance;
|
import com.hazelcast.core.HazelcastInstance;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.junit.After;
|
import org.junit.*;
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.springframework.aop.framework.Advised;
|
import org.springframework.aop.framework.Advised;
|
||||||
import org.springframework.aop.support.AopUtils;
|
import org.springframework.aop.support.AopUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -56,7 +52,7 @@ public class DeviceCredentialsCacheTest extends AbstractServiceTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private HazelcastInstance hazelcastInstance;
|
private HazelcastInstance hazelcastInstance;
|
||||||
|
|
||||||
private UUID deviceId = UUIDs.timeBased();
|
private UUID deviceId = UUID.randomUUID();
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
@ -115,7 +111,7 @@ public class DeviceCredentialsCacheTest extends AbstractServiceTest {
|
|||||||
|
|
||||||
when(deviceCredentialsDao.findByDeviceId(deviceId)).thenReturn(createDummyDeviceCredentialsEntity(CREDENTIALS_ID_1));
|
when(deviceCredentialsDao.findByDeviceId(deviceId)).thenReturn(createDummyDeviceCredentialsEntity(CREDENTIALS_ID_1));
|
||||||
|
|
||||||
UUID deviceCredentialsId = UUIDs.timeBased();
|
UUID deviceCredentialsId = UUID.randomUUID();
|
||||||
when(deviceCredentialsDao.findById(deviceCredentialsId)).thenReturn(createDummyDeviceCredentialsEntity(CREDENTIALS_ID_1));
|
when(deviceCredentialsDao.findById(deviceCredentialsId)).thenReturn(createDummyDeviceCredentialsEntity(CREDENTIALS_ID_1));
|
||||||
when(deviceService.findDeviceById(new DeviceId(deviceId))).thenReturn(new Device());
|
when(deviceService.findDeviceById(new DeviceId(deviceId))).thenReturn(new Device());
|
||||||
|
|
||||||
@ -140,7 +136,7 @@ public class DeviceCredentialsCacheTest extends AbstractServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DeviceCredentials createDummyDeviceCredentialsEntity(String deviceCredentialsId) {
|
private DeviceCredentials createDummyDeviceCredentialsEntity(String deviceCredentialsId) {
|
||||||
DeviceCredentials result = new DeviceCredentials(new DeviceCredentialsId(UUIDs.timeBased()));
|
DeviceCredentials result = new DeviceCredentials(new DeviceCredentialsId(UUID.randomUUID()));
|
||||||
result.setCredentialsId(deviceCredentialsId);
|
result.setCredentialsId(deviceCredentialsId);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user