Commit 7841d1172470e83bc80d5406be7b576e5d7e43f4

Authored by Igor Kulikov
1 parent 3ddf1466

Tenant/Device profiles cache support.

@@ -372,6 +372,12 @@ caffeine: @@ -372,6 +372,12 @@ caffeine:
372 securitySettings: 372 securitySettings:
373 timeToLiveInMinutes: 1440 373 timeToLiveInMinutes: 1440
374 maxSize: 0 374 maxSize: 0
  375 + tenantProfiles:
  376 + timeToLiveInMinutes: 1440
  377 + maxSize: 0
  378 + deviceProfiles:
  379 + timeToLiveInMinutes: 1440
  380 + maxSize: 0
375 381
376 redis: 382 redis:
377 # standalone or cluster 383 # standalone or cluster
@@ -793,4 +799,4 @@ management: @@ -793,4 +799,4 @@ management:
793 web: 799 web:
794 exposure: 800 exposure:
795 # Expose metrics endpoint (use value 'prometheus' to enable prometheus metrics). 801 # Expose metrics endpoint (use value 'prometheus' to enable prometheus metrics).
796 - include: '${METRICS_ENDPOINTS_EXPOSE:info}'  
  802 + include: '${METRICS_ENDPOINTS_EXPOSE:info}'
@@ -24,4 +24,6 @@ public class CacheConstants { @@ -24,4 +24,6 @@ public class CacheConstants {
24 public static final String ENTITY_VIEW_CACHE = "entityViews"; 24 public static final String ENTITY_VIEW_CACHE = "entityViews";
25 public static final String CLAIM_DEVICES_CACHE = "claimDevices"; 25 public static final String CLAIM_DEVICES_CACHE = "claimDevices";
26 public static final String SECURITY_SETTINGS_CACHE = "securitySettings"; 26 public static final String SECURITY_SETTINGS_CACHE = "securitySettings";
  27 + public static final String TENANT_PROFILE_CACHE = "tenantProfiles";
  28 + public static final String DEVICE_PROFILE_CACHE = "deviceProfiles";
27 } 29 }
@@ -19,6 +19,9 @@ import lombok.extern.slf4j.Slf4j; @@ -19,6 +19,9 @@ import lombok.extern.slf4j.Slf4j;
19 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
20 import org.hibernate.exception.ConstraintViolationException; 20 import org.hibernate.exception.ConstraintViolationException;
21 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.cache.Cache;
  23 +import org.springframework.cache.CacheManager;
  24 +import org.springframework.cache.annotation.Cacheable;
22 import org.springframework.stereotype.Service; 25 import org.springframework.stereotype.Service;
23 import org.thingsboard.server.common.data.DeviceProfile; 26 import org.thingsboard.server.common.data.DeviceProfile;
24 import org.thingsboard.server.common.data.EntityInfo; 27 import org.thingsboard.server.common.data.EntityInfo;
@@ -35,6 +38,10 @@ import org.thingsboard.server.dao.service.Validator; @@ -35,6 +38,10 @@ import org.thingsboard.server.dao.service.Validator;
35 import org.thingsboard.server.dao.tenant.TenantDao; 38 import org.thingsboard.server.dao.tenant.TenantDao;
36 import org.thingsboard.server.dao.util.mapping.JacksonUtil; 39 import org.thingsboard.server.dao.util.mapping.JacksonUtil;
37 40
  41 +import java.util.Arrays;
  42 +import java.util.Collections;
  43 +
  44 +import static org.thingsboard.server.common.data.CacheConstants.DEVICE_PROFILE_CACHE;
38 import static org.thingsboard.server.dao.service.Validator.validateId; 45 import static org.thingsboard.server.dao.service.Validator.validateId;
39 46
40 @Service 47 @Service
@@ -50,6 +57,10 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -50,6 +57,10 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
50 @Autowired 57 @Autowired
51 private TenantDao tenantDao; 58 private TenantDao tenantDao;
52 59
  60 + @Autowired
  61 + private CacheManager cacheManager;
  62 +
  63 + @Cacheable(cacheNames = DEVICE_PROFILE_CACHE, key = "{#deviceProfileId}")
53 @Override 64 @Override
54 public DeviceProfile findDeviceProfileById(TenantId tenantId, DeviceProfileId deviceProfileId) { 65 public DeviceProfile findDeviceProfileById(TenantId tenantId, DeviceProfileId deviceProfileId) {
55 log.trace("Executing findDeviceProfileById [{}]", deviceProfileId); 66 log.trace("Executing findDeviceProfileById [{}]", deviceProfileId);
@@ -57,6 +68,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -57,6 +68,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
57 return deviceProfileDao.findById(tenantId, deviceProfileId.getId()); 68 return deviceProfileDao.findById(tenantId, deviceProfileId.getId());
58 } 69 }
59 70
  71 + @Cacheable(cacheNames = DEVICE_PROFILE_CACHE, key = "{'info', #deviceProfileId}")
60 @Override 72 @Override
61 public EntityInfo findDeviceProfileInfoById(TenantId tenantId, DeviceProfileId deviceProfileId) { 73 public EntityInfo findDeviceProfileInfoById(TenantId tenantId, DeviceProfileId deviceProfileId) {
62 log.trace("Executing findDeviceProfileById [{}]", deviceProfileId); 74 log.trace("Executing findDeviceProfileById [{}]", deviceProfileId);
@@ -79,6 +91,13 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -79,6 +91,13 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
79 throw t; 91 throw t;
80 } 92 }
81 } 93 }
  94 + Cache cache = cacheManager.getCache(DEVICE_PROFILE_CACHE);
  95 + cache.evict(Collections.singletonList(savedDeviceProfile.getId()));
  96 + cache.evict(Arrays.asList("info", savedDeviceProfile.getId()));
  97 + if (savedDeviceProfile.isDefault()) {
  98 + cache.evict(Arrays.asList("default", savedDeviceProfile.getTenantId()));
  99 + cache.evict(Arrays.asList("default", "info", savedDeviceProfile.getTenantId()));
  100 + }
82 return savedDeviceProfile; 101 return savedDeviceProfile;
83 } 102 }
84 103
@@ -86,8 +105,19 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -86,8 +105,19 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
86 public void deleteDeviceProfile(TenantId tenantId, DeviceProfileId deviceProfileId) { 105 public void deleteDeviceProfile(TenantId tenantId, DeviceProfileId deviceProfileId) {
87 log.trace("Executing deleteDeviceProfile [{}]", deviceProfileId); 106 log.trace("Executing deleteDeviceProfile [{}]", deviceProfileId);
88 Validator.validateId(deviceProfileId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId); 107 Validator.validateId(deviceProfileId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId);
  108 + DeviceProfile deviceProfile = deviceProfileDao.findById(tenantId, deviceProfileId.getId());
  109 + if (deviceProfile != null && deviceProfile.isDefault()) {
  110 + throw new DataValidationException("Deletion of Default Device Profile is prohibited!");
  111 + }
  112 + this.removeDeviceProfile(tenantId, deviceProfileId);
  113 + }
  114 +
  115 + private void removeDeviceProfile(TenantId tenantId, DeviceProfileId deviceProfileId) {
89 deleteEntityRelations(tenantId, deviceProfileId); 116 deleteEntityRelations(tenantId, deviceProfileId);
90 deviceProfileDao.removeById(tenantId, deviceProfileId.getId()); 117 deviceProfileDao.removeById(tenantId, deviceProfileId.getId());
  118 + Cache cache = cacheManager.getCache(DEVICE_PROFILE_CACHE);
  119 + cache.evict(Collections.singletonList(deviceProfileId.getId()));
  120 + cache.evict(Arrays.asList("info", deviceProfileId.getId()));
91 } 121 }
92 122
93 @Override 123 @Override
@@ -116,9 +146,10 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -116,9 +146,10 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
116 deviceProfile.setName("Default"); 146 deviceProfile.setName("Default");
117 deviceProfile.setDescription("Default device profile"); 147 deviceProfile.setDescription("Default device profile");
118 deviceProfile.setProfileData(JacksonUtil.OBJECT_MAPPER.createObjectNode()); 148 deviceProfile.setProfileData(JacksonUtil.OBJECT_MAPPER.createObjectNode());
119 - return deviceProfileDao.save(tenantId, deviceProfile); 149 + return saveDeviceProfile(deviceProfile);
120 } 150 }
121 151
  152 + @Cacheable(cacheNames = DEVICE_PROFILE_CACHE, key = "{'default', #tenantId}")
122 @Override 153 @Override
123 public DeviceProfile findDefaultDeviceProfile(TenantId tenantId) { 154 public DeviceProfile findDefaultDeviceProfile(TenantId tenantId) {
124 log.trace("Executing findDefaultDeviceProfile tenantId [{}]", tenantId); 155 log.trace("Executing findDefaultDeviceProfile tenantId [{}]", tenantId);
@@ -126,6 +157,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -126,6 +157,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
126 return deviceProfileDao.findDefaultDeviceProfile(tenantId); 157 return deviceProfileDao.findDefaultDeviceProfile(tenantId);
127 } 158 }
128 159
  160 + @Cacheable(cacheNames = DEVICE_PROFILE_CACHE, key = "{'default', 'info', #tenantId}")
129 @Override 161 @Override
130 public EntityInfo findDefaultDeviceProfileInfo(TenantId tenantId) { 162 public EntityInfo findDefaultDeviceProfileInfo(TenantId tenantId) {
131 log.trace("Executing findDefaultDeviceProfileInfo tenantId [{}]", tenantId); 163 log.trace("Executing findDefaultDeviceProfileInfo tenantId [{}]", tenantId);
@@ -139,17 +171,28 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -139,17 +171,28 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
139 Validator.validateId(deviceProfileId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId); 171 Validator.validateId(deviceProfileId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId);
140 DeviceProfile deviceProfile = deviceProfileDao.findById(tenantId, deviceProfileId.getId()); 172 DeviceProfile deviceProfile = deviceProfileDao.findById(tenantId, deviceProfileId.getId());
141 if (!deviceProfile.isDefault()) { 173 if (!deviceProfile.isDefault()) {
  174 + Cache cache = cacheManager.getCache(DEVICE_PROFILE_CACHE);
142 deviceProfile.setDefault(true); 175 deviceProfile.setDefault(true);
143 DeviceProfile previousDefaultDeviceProfile = findDefaultDeviceProfile(tenantId); 176 DeviceProfile previousDefaultDeviceProfile = findDefaultDeviceProfile(tenantId);
  177 + boolean changed = false;
144 if (previousDefaultDeviceProfile == null) { 178 if (previousDefaultDeviceProfile == null) {
145 deviceProfileDao.save(tenantId, deviceProfile); 179 deviceProfileDao.save(tenantId, deviceProfile);
146 - return true; 180 + changed = true;
147 } else if (!previousDefaultDeviceProfile.getId().equals(deviceProfile.getId())) { 181 } else if (!previousDefaultDeviceProfile.getId().equals(deviceProfile.getId())) {
148 previousDefaultDeviceProfile.setDefault(false); 182 previousDefaultDeviceProfile.setDefault(false);
149 deviceProfileDao.save(tenantId, previousDefaultDeviceProfile); 183 deviceProfileDao.save(tenantId, previousDefaultDeviceProfile);
150 deviceProfileDao.save(tenantId, deviceProfile); 184 deviceProfileDao.save(tenantId, deviceProfile);
151 - return true; 185 + cache.evict(Collections.singletonList(previousDefaultDeviceProfile.getId()));
  186 + cache.evict(Arrays.asList("info", previousDefaultDeviceProfile.getId()));
  187 + changed = true;
  188 + }
  189 + if (changed) {
  190 + cache.evict(Collections.singletonList(deviceProfile.getId()));
  191 + cache.evict(Arrays.asList("info", deviceProfile.getId()));
  192 + cache.evict(Arrays.asList("default", tenantId));
  193 + cache.evict(Arrays.asList("default", "info", tenantId));
152 } 194 }
  195 + return changed;
153 } 196 }
154 return false; 197 return false;
155 } 198 }
@@ -195,7 +238,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D @@ -195,7 +238,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
195 238
196 @Override 239 @Override
197 protected void removeEntity(TenantId tenantId, DeviceProfile entity) { 240 protected void removeEntity(TenantId tenantId, DeviceProfile entity) {
198 - deleteDeviceProfile(tenantId, new DeviceProfileId(entity.getUuidId())); 241 + removeDeviceProfile(tenantId, entity.getId());
199 } 242 }
200 }; 243 };
201 244
@@ -19,6 +19,9 @@ import lombok.extern.slf4j.Slf4j; @@ -19,6 +19,9 @@ import lombok.extern.slf4j.Slf4j;
19 import org.apache.commons.lang3.StringUtils; 19 import org.apache.commons.lang3.StringUtils;
20 import org.hibernate.exception.ConstraintViolationException; 20 import org.hibernate.exception.ConstraintViolationException;
21 import org.springframework.beans.factory.annotation.Autowired; 21 import org.springframework.beans.factory.annotation.Autowired;
  22 +import org.springframework.cache.Cache;
  23 +import org.springframework.cache.CacheManager;
  24 +import org.springframework.cache.annotation.Cacheable;
22 import org.springframework.stereotype.Service; 25 import org.springframework.stereotype.Service;
23 import org.thingsboard.server.common.data.EntityInfo; 26 import org.thingsboard.server.common.data.EntityInfo;
24 import org.thingsboard.server.common.data.TenantProfile; 27 import org.thingsboard.server.common.data.TenantProfile;
@@ -33,6 +36,10 @@ import org.thingsboard.server.dao.service.PaginatedRemover; @@ -33,6 +36,10 @@ import org.thingsboard.server.dao.service.PaginatedRemover;
33 import org.thingsboard.server.dao.service.Validator; 36 import org.thingsboard.server.dao.service.Validator;
34 import org.thingsboard.server.dao.util.mapping.JacksonUtil; 37 import org.thingsboard.server.dao.util.mapping.JacksonUtil;
35 38
  39 +import java.util.Arrays;
  40 +import java.util.Collections;
  41 +
  42 +import static org.thingsboard.server.common.data.CacheConstants.TENANT_PROFILE_CACHE;
36 import static org.thingsboard.server.dao.service.Validator.validateId; 43 import static org.thingsboard.server.dao.service.Validator.validateId;
37 44
38 @Service 45 @Service
@@ -44,6 +51,10 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -44,6 +51,10 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
44 @Autowired 51 @Autowired
45 private TenantProfileDao tenantProfileDao; 52 private TenantProfileDao tenantProfileDao;
46 53
  54 + @Autowired
  55 + private CacheManager cacheManager;
  56 +
  57 + @Cacheable(cacheNames = TENANT_PROFILE_CACHE, key = "{#tenantProfileId}")
47 @Override 58 @Override
48 public TenantProfile findTenantProfileById(TenantId tenantId, TenantProfileId tenantProfileId) { 59 public TenantProfile findTenantProfileById(TenantId tenantId, TenantProfileId tenantProfileId) {
49 log.trace("Executing findTenantProfileById [{}]", tenantProfileId); 60 log.trace("Executing findTenantProfileById [{}]", tenantProfileId);
@@ -51,6 +62,7 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -51,6 +62,7 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
51 return tenantProfileDao.findById(tenantId, tenantProfileId.getId()); 62 return tenantProfileDao.findById(tenantId, tenantProfileId.getId());
52 } 63 }
53 64
  65 + @Cacheable(cacheNames = TENANT_PROFILE_CACHE, key = "{'info', #tenantProfileId}")
54 @Override 66 @Override
55 public EntityInfo findTenantProfileInfoById(TenantId tenantId, TenantProfileId tenantProfileId) { 67 public EntityInfo findTenantProfileInfoById(TenantId tenantId, TenantProfileId tenantProfileId) {
56 log.trace("Executing findTenantProfileInfoById [{}]", tenantProfileId); 68 log.trace("Executing findTenantProfileInfoById [{}]", tenantProfileId);
@@ -73,6 +85,13 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -73,6 +85,13 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
73 throw t; 85 throw t;
74 } 86 }
75 } 87 }
  88 + Cache cache = cacheManager.getCache(TENANT_PROFILE_CACHE);
  89 + cache.evict(Collections.singletonList(savedTenantProfile.getId()));
  90 + cache.evict(Arrays.asList("info", savedTenantProfile.getId()));
  91 + if (savedTenantProfile.isDefault()) {
  92 + cache.evict(Collections.singletonList("default"));
  93 + cache.evict(Arrays.asList("default", "info"));
  94 + }
76 return savedTenantProfile; 95 return savedTenantProfile;
77 } 96 }
78 97
@@ -80,8 +99,19 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -80,8 +99,19 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
80 public void deleteTenantProfile(TenantId tenantId, TenantProfileId tenantProfileId) { 99 public void deleteTenantProfile(TenantId tenantId, TenantProfileId tenantProfileId) {
81 log.trace("Executing deleteTenantProfile [{}]", tenantProfileId); 100 log.trace("Executing deleteTenantProfile [{}]", tenantProfileId);
82 validateId(tenantId, INCORRECT_TENANT_PROFILE_ID + tenantProfileId); 101 validateId(tenantId, INCORRECT_TENANT_PROFILE_ID + tenantProfileId);
  102 + TenantProfile tenantProfile = tenantProfileDao.findById(tenantId, tenantProfileId.getId());
  103 + if (tenantProfile != null && tenantProfile.isDefault()) {
  104 + throw new DataValidationException("Deletion of Default Tenant Profile is prohibited!");
  105 + }
  106 + this.removeTenantProfile(tenantId, tenantProfileId);
  107 + }
  108 +
  109 + private void removeTenantProfile(TenantId tenantId, TenantProfileId tenantProfileId) {
83 deleteEntityRelations(tenantId, tenantProfileId); 110 deleteEntityRelations(tenantId, tenantProfileId);
84 tenantProfileDao.removeById(tenantId, tenantProfileId.getId()); 111 tenantProfileDao.removeById(tenantId, tenantProfileId.getId());
  112 + Cache cache = cacheManager.getCache(TENANT_PROFILE_CACHE);
  113 + cache.evict(Collections.singletonList(tenantProfileId.getId()));
  114 + cache.evict(Arrays.asList("info", tenantProfileId.getId()));
85 } 115 }
86 116
87 @Override 117 @Override
@@ -115,12 +145,14 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -115,12 +145,14 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
115 return defaultTenantProfile; 145 return defaultTenantProfile;
116 } 146 }
117 147
  148 + @Cacheable(cacheNames = TENANT_PROFILE_CACHE, key = "{'default'}")
118 @Override 149 @Override
119 public TenantProfile findDefaultTenantProfile(TenantId tenantId) { 150 public TenantProfile findDefaultTenantProfile(TenantId tenantId) {
120 log.trace("Executing findDefaultTenantProfile"); 151 log.trace("Executing findDefaultTenantProfile");
121 return tenantProfileDao.findDefaultTenantProfile(tenantId); 152 return tenantProfileDao.findDefaultTenantProfile(tenantId);
122 } 153 }
123 154
  155 + @Cacheable(cacheNames = TENANT_PROFILE_CACHE, key = "{'default', 'info'}")
124 @Override 156 @Override
125 public EntityInfo findDefaultTenantProfileInfo(TenantId tenantId) { 157 public EntityInfo findDefaultTenantProfileInfo(TenantId tenantId) {
126 log.trace("Executing findDefaultTenantProfileInfo"); 158 log.trace("Executing findDefaultTenantProfileInfo");
@@ -133,17 +165,28 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -133,17 +165,28 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
133 validateId(tenantId, INCORRECT_TENANT_PROFILE_ID + tenantProfileId); 165 validateId(tenantId, INCORRECT_TENANT_PROFILE_ID + tenantProfileId);
134 TenantProfile tenantProfile = tenantProfileDao.findById(tenantId, tenantProfileId.getId()); 166 TenantProfile tenantProfile = tenantProfileDao.findById(tenantId, tenantProfileId.getId());
135 if (!tenantProfile.isDefault()) { 167 if (!tenantProfile.isDefault()) {
  168 + Cache cache = cacheManager.getCache(TENANT_PROFILE_CACHE);
136 tenantProfile.setDefault(true); 169 tenantProfile.setDefault(true);
137 TenantProfile previousDefaultTenantProfile = findDefaultTenantProfile(tenantId); 170 TenantProfile previousDefaultTenantProfile = findDefaultTenantProfile(tenantId);
  171 + boolean changed = false;
138 if (previousDefaultTenantProfile == null) { 172 if (previousDefaultTenantProfile == null) {
139 tenantProfileDao.save(tenantId, tenantProfile); 173 tenantProfileDao.save(tenantId, tenantProfile);
140 - return true; 174 + changed = true;
141 } else if (!previousDefaultTenantProfile.getId().equals(tenantProfile.getId())) { 175 } else if (!previousDefaultTenantProfile.getId().equals(tenantProfile.getId())) {
142 previousDefaultTenantProfile.setDefault(false); 176 previousDefaultTenantProfile.setDefault(false);
143 tenantProfileDao.save(tenantId, previousDefaultTenantProfile); 177 tenantProfileDao.save(tenantId, previousDefaultTenantProfile);
144 tenantProfileDao.save(tenantId, tenantProfile); 178 tenantProfileDao.save(tenantId, tenantProfile);
145 - return true; 179 + cache.evict(Collections.singletonList(previousDefaultTenantProfile.getId()));
  180 + cache.evict(Arrays.asList("info", previousDefaultTenantProfile.getId()));
  181 + changed = true;
  182 + }
  183 + if (changed) {
  184 + cache.evict(Collections.singletonList(tenantProfile.getId()));
  185 + cache.evict(Arrays.asList("info", tenantProfile.getId()));
  186 + cache.evict(Collections.singletonList("default"));
  187 + cache.evict(Arrays.asList("default", "info"));
146 } 188 }
  189 + return changed;
147 } 190 }
148 return false; 191 return false;
149 } 192 }
@@ -180,7 +223,7 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T @@ -180,7 +223,7 @@ public class TenantProfileServiceImpl extends AbstractEntityService implements T
180 223
181 @Override 224 @Override
182 protected void removeEntity(TenantId tenantId, TenantProfile entity) { 225 protected void removeEntity(TenantId tenantId, TenantProfile entity) {
183 - deleteTenantProfile(tenantId, new TenantProfileId(entity.getUuidId())); 226 + removeTenantProfile(tenantId, entity.getId());
184 } 227 }
185 }; 228 };
186 229
@@ -71,9 +71,7 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest { @@ -71,9 +71,7 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest {
71 savedDeviceProfile.setName("New device profile"); 71 savedDeviceProfile.setName("New device profile");
72 deviceProfileService.saveDeviceProfile(savedDeviceProfile); 72 deviceProfileService.saveDeviceProfile(savedDeviceProfile);
73 DeviceProfile foundDeviceProfile = deviceProfileService.findDeviceProfileById(tenantId, savedDeviceProfile.getId()); 73 DeviceProfile foundDeviceProfile = deviceProfileService.findDeviceProfileById(tenantId, savedDeviceProfile.getId());
74 - Assert.assertEquals(foundDeviceProfile.getName(), savedDeviceProfile.getName());  
75 -  
76 - deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile.getId()); 74 + Assert.assertEquals(savedDeviceProfile.getName(), foundDeviceProfile.getName());
77 } 75 }
78 76
79 @Test 77 @Test
@@ -83,8 +81,7 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest { @@ -83,8 +81,7 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest {
83 DeviceProfile foundDeviceProfile = deviceProfileService.findDeviceProfileById(tenantId, savedDeviceProfile.getId()); 81 DeviceProfile foundDeviceProfile = deviceProfileService.findDeviceProfileById(tenantId, savedDeviceProfile.getId());
84 Assert.assertNotNull(foundDeviceProfile); 82 Assert.assertNotNull(foundDeviceProfile);
85 Assert.assertEquals(savedDeviceProfile, foundDeviceProfile); 83 Assert.assertEquals(savedDeviceProfile, foundDeviceProfile);
86 - deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile.getId());  
87 - } 84 + }
88 85
89 @Test 86 @Test
90 public void testFindDeviceProfileInfoById() { 87 public void testFindDeviceProfileInfoById() {
@@ -94,7 +91,6 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest { @@ -94,7 +91,6 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest {
94 Assert.assertNotNull(foundDeviceProfileInfo); 91 Assert.assertNotNull(foundDeviceProfileInfo);
95 Assert.assertEquals(savedDeviceProfile.getId(), foundDeviceProfileInfo.getId()); 92 Assert.assertEquals(savedDeviceProfile.getId(), foundDeviceProfileInfo.getId());
96 Assert.assertEquals(savedDeviceProfile.getName(), foundDeviceProfileInfo.getName()); 93 Assert.assertEquals(savedDeviceProfile.getName(), foundDeviceProfileInfo.getName());
97 - deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile.getId());  
98 } 94 }
99 95
100 @Test 96 @Test
@@ -131,8 +127,6 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest { @@ -131,8 +127,6 @@ public class BaseDeviceProfileServiceTest extends AbstractServiceTest {
131 defaultDeviceProfile = deviceProfileService.findDefaultDeviceProfile(tenantId); 127 defaultDeviceProfile = deviceProfileService.findDefaultDeviceProfile(tenantId);
132 Assert.assertNotNull(defaultDeviceProfile); 128 Assert.assertNotNull(defaultDeviceProfile);
133 Assert.assertEquals(savedDeviceProfile2.getId(), defaultDeviceProfile.getId()); 129 Assert.assertEquals(savedDeviceProfile2.getId(), defaultDeviceProfile.getId());
134 - deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile1.getId());  
135 - deviceProfileService.deleteDeviceProfile(tenantId, savedDeviceProfile2.getId());  
136 } 130 }
137 131
138 @Test(expected = DataValidationException.class) 132 @Test(expected = DataValidationException.class)
@@ -61,7 +61,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest { @@ -61,7 +61,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest {
61 TenantProfile foundTenantProfile = tenantProfileService.findTenantProfileById(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 61 TenantProfile foundTenantProfile = tenantProfileService.findTenantProfileById(TenantId.SYS_TENANT_ID, savedTenantProfile.getId());
62 Assert.assertEquals(foundTenantProfile.getName(), savedTenantProfile.getName()); 62 Assert.assertEquals(foundTenantProfile.getName(), savedTenantProfile.getName());
63 63
64 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 64 + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID);
65 } 65 }
66 66
67 @Test 67 @Test
@@ -71,7 +71,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest { @@ -71,7 +71,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest {
71 TenantProfile foundTenantProfile = tenantProfileService.findTenantProfileById(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 71 TenantProfile foundTenantProfile = tenantProfileService.findTenantProfileById(TenantId.SYS_TENANT_ID, savedTenantProfile.getId());
72 Assert.assertNotNull(foundTenantProfile); 72 Assert.assertNotNull(foundTenantProfile);
73 Assert.assertEquals(savedTenantProfile, foundTenantProfile); 73 Assert.assertEquals(savedTenantProfile, foundTenantProfile);
74 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 74 + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID);
75 } 75 }
76 76
77 @Test 77 @Test
@@ -82,7 +82,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest { @@ -82,7 +82,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest {
82 Assert.assertNotNull(foundTenantProfileInfo); 82 Assert.assertNotNull(foundTenantProfileInfo);
83 Assert.assertEquals(savedTenantProfile.getId(), foundTenantProfileInfo.getId()); 83 Assert.assertEquals(savedTenantProfile.getId(), foundTenantProfileInfo.getId());
84 Assert.assertEquals(savedTenantProfile.getName(), foundTenantProfileInfo.getName()); 84 Assert.assertEquals(savedTenantProfile.getName(), foundTenantProfileInfo.getName());
85 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 85 + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID);
86 } 86 }
87 87
88 @Test 88 @Test
@@ -93,7 +93,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest { @@ -93,7 +93,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest {
93 TenantProfile foundDefaultTenantProfile = tenantProfileService.findDefaultTenantProfile(TenantId.SYS_TENANT_ID); 93 TenantProfile foundDefaultTenantProfile = tenantProfileService.findDefaultTenantProfile(TenantId.SYS_TENANT_ID);
94 Assert.assertNotNull(foundDefaultTenantProfile); 94 Assert.assertNotNull(foundDefaultTenantProfile);
95 Assert.assertEquals(savedTenantProfile, foundDefaultTenantProfile); 95 Assert.assertEquals(savedTenantProfile, foundDefaultTenantProfile);
96 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 96 + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID);
97 } 97 }
98 98
99 @Test 99 @Test
@@ -105,7 +105,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest { @@ -105,7 +105,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest {
105 Assert.assertNotNull(foundDefaultTenantProfileInfo); 105 Assert.assertNotNull(foundDefaultTenantProfileInfo);
106 Assert.assertEquals(savedTenantProfile.getId(), foundDefaultTenantProfileInfo.getId()); 106 Assert.assertEquals(savedTenantProfile.getId(), foundDefaultTenantProfileInfo.getId());
107 Assert.assertEquals(savedTenantProfile.getName(), foundDefaultTenantProfileInfo.getName()); 107 Assert.assertEquals(savedTenantProfile.getName(), foundDefaultTenantProfileInfo.getName());
108 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile.getId()); 108 + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID);
109 } 109 }
110 110
111 @Test 111 @Test
@@ -126,8 +126,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest { @@ -126,8 +126,7 @@ public class BaseTenantProfileServiceTest extends AbstractServiceTest {
126 defaultTenantProfile = tenantProfileService.findDefaultTenantProfile(TenantId.SYS_TENANT_ID); 126 defaultTenantProfile = tenantProfileService.findDefaultTenantProfile(TenantId.SYS_TENANT_ID);
127 Assert.assertNotNull(defaultTenantProfile); 127 Assert.assertNotNull(defaultTenantProfile);
128 Assert.assertEquals(savedTenantProfile2.getId(), defaultTenantProfile.getId()); 128 Assert.assertEquals(savedTenantProfile2.getId(), defaultTenantProfile.getId());
129 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile1.getId());  
130 - tenantProfileService.deleteTenantProfile(TenantId.SYS_TENANT_ID, savedTenantProfile2.getId()); 129 + tenantProfileService.deleteTenantProfiles(TenantId.SYS_TENANT_ID);
131 } 130 }
132 131
133 @Test(expected = DataValidationException.class) 132 @Test(expected = DataValidationException.class)
@@ -30,6 +30,12 @@ caffeine.specs.entityViews.maxSize=100000 @@ -30,6 +30,12 @@ caffeine.specs.entityViews.maxSize=100000
30 caffeine.specs.claimDevices.timeToLiveInMinutes=1440 30 caffeine.specs.claimDevices.timeToLiveInMinutes=1440
31 caffeine.specs.claimDevices.maxSize=100000 31 caffeine.specs.claimDevices.maxSize=100000
32 32
  33 +caffeine.specs.tenantProfiles.timeToLiveInMinutes=1440
  34 +caffeine.specs.tenantProfiles.maxSize=100000
  35 +
  36 +caffeine.specs.deviceProfiles.timeToLiveInMinutes=1440
  37 +caffeine.specs.deviceProfiles.maxSize=100000
  38 +
33 redis.connection.host=localhost 39 redis.connection.host=localhost
34 redis.connection.port=6379 40 redis.connection.port=6379
35 redis.connection.db=0 41 redis.connection.db=0