From d426d0c0adadc2f2e6951207c8bcc0227c19db16 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Thu, 10 Aug 2017 19:51:20 +0300 Subject: [PATCH 1/2] Fixed Time page link query for SQL database. --- .../actors/service/DefaultActorService.java | 6 +-- .../server/dao/sql/event/JpaBaseEventDao.java | 37 ++++++------- .../dao/sql/relation/JpaRelationDao.java | 53 ++++++++----------- 3 files changed, 42 insertions(+), 54 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java b/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java index 3ebe905133..7bc254b237 100644 --- a/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java +++ b/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java @@ -130,10 +130,8 @@ public class DefaultActorService implements ActorService { @Override public void process(SessionAwareMsg msg) { - if (msg instanceof SessionAwareMsg) { - log.debug("Processing session aware msg: {}", msg); - sessionManagerActor.tell(msg, ActorRef.noSender()); - } + log.debug("Processing session aware msg: {}", msg); + sessionManagerActor.tell(msg, ActorRef.noSender()); } @Override diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java index 581464393c..9bf8265e74 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java @@ -102,7 +102,7 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) { - Specification timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id"); + Specification timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id"); Specification fieldsSpec = getEntityFieldsSpec(tenantId, entityId, eventType); Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC; Pageable pageable = new PageRequest(0, pageLink.getLimit(), sortDirection, ID_PROPERTY); @@ -129,26 +129,23 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao getEntityFieldsSpec(UUID tenantId, EntityId entityId, String eventType) { - return new Specification() { - @Override - public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) { - List predicates = new ArrayList(); - if (tenantId != null) { - Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("tenantId"), UUIDConverter.fromTimeUUID(tenantId)); - predicates.add(tenantIdPredicate); - } - if (entityId != null) { - Predicate entityTypePredicate = criteriaBuilder.equal(root.get("entityType"), entityId.getEntityType()); - predicates.add(entityTypePredicate); - Predicate entityIdPredicate = criteriaBuilder.equal(root.get("entityId"), UUIDConverter.fromTimeUUID(entityId.getId())); - predicates.add(entityIdPredicate); - } - if (eventType != null) { - Predicate eventTypePredicate = criteriaBuilder.equal(root.get("eventType"), eventType); - predicates.add(eventTypePredicate); - } - return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); + return (root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if (tenantId != null) { + Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("tenantId"), UUIDConverter.fromTimeUUID(tenantId)); + predicates.add(tenantIdPredicate); } + if (entityId != null) { + Predicate entityTypePredicate = criteriaBuilder.equal(root.get("entityType"), entityId.getEntityType()); + predicates.add(entityTypePredicate); + Predicate entityIdPredicate = criteriaBuilder.equal(root.get("entityId"), UUIDConverter.fromTimeUUID(entityId.getId())); + predicates.add(entityIdPredicate); + } + if (eventType != null) { + Predicate eventTypePredicate = criteriaBuilder.equal(root.get("eventType"), eventType); + predicates.add(eventTypePredicate); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); }; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java index 389348b407..16aabac0cc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java @@ -160,43 +160,36 @@ public class JpaRelationDao extends JpaAbstractDaoListeningExecutorService imple @Override public ListenableFuture> findRelations(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType childType, TimePageLink pageLink) { - Specification timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "toId"); + Specification timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "toId"); Specification fieldsSpec = getEntityFieldsSpec(from, relationType, typeGroup, childType); - Pageable pageable = new PageRequest(0, pageLink.getLimit(), - new Sort( - new Order(ASC, "relationTypeGroup"), - new Order(ASC, "relationType"), - new Order(ASC, "toType")) - ); + Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC; + Pageable pageable = new PageRequest(0, pageLink.getLimit(), sortDirection, "toId"); return service.submit(() -> DaoUtil.convertDataList(relationRepository.findAll(where(timeSearchSpec).and(fieldsSpec), pageable).getContent())); } private Specification getEntityFieldsSpec(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType childType) { - return new Specification() { - @Override - public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) { - List predicates = new ArrayList<>(); - if (from != null) { - Predicate fromIdPredicate = criteriaBuilder.equal(root.get("fromId"), UUIDConverter.fromTimeUUID(from.getId())); - predicates.add(fromIdPredicate); - Predicate fromEntityTypePredicate = criteriaBuilder.equal(root.get("fromType"), from.getEntityType().name()); - predicates.add(fromEntityTypePredicate); - } - if (relationType != null) { - Predicate relationTypePredicate = criteriaBuilder.equal(root.get("relationType"), relationType); - predicates.add(relationTypePredicate); - } - if (typeGroup != null) { - Predicate typeGroupPredicate = criteriaBuilder.equal(root.get("relationTypeGroup"), typeGroup.name()); - predicates.add(typeGroupPredicate); - } - if (childType != null) { - Predicate childTypePredicate = criteriaBuilder.equal(root.get("toType"), childType.name()); - predicates.add(childTypePredicate); - } - return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + return (root, criteriaQuery, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if (from != null) { + Predicate fromIdPredicate = criteriaBuilder.equal(root.get("fromId"), UUIDConverter.fromTimeUUID(from.getId())); + predicates.add(fromIdPredicate); + Predicate fromEntityTypePredicate = criteriaBuilder.equal(root.get("fromType"), from.getEntityType().name()); + predicates.add(fromEntityTypePredicate); } + if (relationType != null) { + Predicate relationTypePredicate = criteriaBuilder.equal(root.get("relationType"), relationType); + predicates.add(relationTypePredicate); + } + if (typeGroup != null) { + Predicate typeGroupPredicate = criteriaBuilder.equal(root.get("relationTypeGroup"), typeGroup.name()); + predicates.add(typeGroupPredicate); + } + if (childType != null) { + Predicate childTypePredicate = criteriaBuilder.equal(root.get("toType"), childType.name()); + predicates.add(childTypePredicate); + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); }; } } From f5f186e47ad59a693be43a1c1c455db894b1c27c Mon Sep 17 00:00:00 2001 From: xiaojizhong Date: Fri, 11 Aug 2017 09:47:46 +0800 Subject: [PATCH 2/2] Fix to the process of SessionAwareMsg and SessionCtrlMsg of SessionManagerAactor's OnReceive --- .../server/actors/session/SessionManagerActor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java b/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java index 9f8084bff0..f9b54a82c8 100644 --- a/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java +++ b/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java @@ -50,7 +50,9 @@ public class SessionManagerActor extends ContextAwareActor { @Override public void onReceive(Object msg) throws Exception { - if (msg instanceof SessionAwareMsg) { + if (msg instanceof SessionCtrlMsg) { + onSessionCtrlMsg((SessionCtrlMsg) msg); + } else if (msg instanceof SessionAwareMsg) { forwardToSessionActor((SessionAwareMsg) msg); } else if (msg instanceof SessionTerminationMsg) { onSessionTermination((SessionTerminationMsg) msg); @@ -58,8 +60,6 @@ public class SessionManagerActor extends ContextAwareActor { onTermination((Terminated) msg); } else if (msg instanceof SessionTimeoutMsg) { onSessionTimeout((SessionTimeoutMsg) msg); - } else if (msg instanceof SessionCtrlMsg) { - onSessionCtrlMsg((SessionCtrlMsg) msg); } else if (msg instanceof ClusterEventMsg) { broadcast(msg); }