Commit 7841d1172470e83bc80d5406be7b576e5d7e43f4
1 parent
3ddf1466
Tenant/Device profiles cache support.
Showing
7 changed files
with
116 additions
and
23 deletions
@@ -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 |