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:
volodymyr-babak 2017-05-30 13:42:28 +03:00
parent 410d197a34
commit f7bbe2136b
5 changed files with 28 additions and 34 deletions

View File

@ -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>

View File

@ -57,8 +57,16 @@ public class ServiceCacheConfiguration {
Config config = new Config(); Config config = new Config();
if (zkEnabled) { if (zkEnabled) {
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false); addZkConfig(config);
}
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()); config.setProperty(GroupProperty.DISCOVERY_SPI_ENABLED.getName(), Boolean.TRUE.toString());
DiscoveryStrategyConfig discoveryStrategyConfig = new DiscoveryStrategyConfig(new ZookeeperDiscoveryStrategyFactory()); DiscoveryStrategyConfig discoveryStrategyConfig = new DiscoveryStrategyConfig(new ZookeeperDiscoveryStrategyFactory());
discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.ZOOKEEPER_URL.key(), zkUrl); discoveryStrategyConfig.addProperty(ZookeeperDiscoveryProperties.ZOOKEEPER_URL.key(), zkUrl);
@ -67,6 +75,7 @@ public class ServiceCacheConfiguration {
config.getNetworkConfig().getJoin().getDiscoveryConfig().addDiscoveryStrategyConfig(discoveryStrategyConfig); 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

View File

@ -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);
} }

View File

@ -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());

View File

@ -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;
} }