Browse Source

JPA improvements.

pull/2185/head
Igor Kulikov 7 years ago
parent
commit
6af9aa0ecb
  1. 2
      application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
  2. 1
      application/src/main/java/org/thingsboard/server/service/executors/ClusterRpcCallbackExecutorService.java
  3. 1
      application/src/main/java/org/thingsboard/server/service/executors/DbCallbackExecutorService.java
  4. 1
      application/src/main/java/org/thingsboard/server/service/executors/ExternalCallExecutorService.java
  5. 2
      application/src/main/java/org/thingsboard/server/service/mail/MailExecutorService.java
  6. 2
      application/src/main/java/org/thingsboard/server/service/script/JsExecutorService.java
  7. 3
      application/src/main/resources/thingsboard.yml
  8. 4
      common/util/src/main/java/org/thingsboard/common/util/AbstractListeningExecutor.java
  9. 6
      common/util/src/main/java/org/thingsboard/common/util/ListeningExecutor.java
  10. 4
      dao/pom.xml
  11. 8
      dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDaoListeningExecutorService.java
  12. 35
      dao/src/main/java/org/thingsboard/server/dao/sql/JpaExecutorService.java
  13. 17
      dao/src/main/java/org/thingsboard/server/dao/sql/audit/JpaAuditLogDao.java
  14. 4
      dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java
  15. 7
      rule-engine/rule-engine-api/pom.xml
  16. 1
      rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java
  17. 1
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java
  18. 1
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
  19. 1
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
  20. 3
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java
  21. 3
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java
  22. 3
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java
  23. 4
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNodeTest.java
  24. 3
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java

2
application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java

@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import io.netty.channel.EventLoopGroup;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.thingsboard.rule.engine.api.ListeningExecutor;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.rule.engine.api.RuleChainTransactionService;
import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcRequest;

1
application/src/main/java/org/thingsboard/server/service/executors/ClusterRpcCallbackExecutorService.java

@ -17,6 +17,7 @@ package org.thingsboard.server.service.executors;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.common.util.AbstractListeningExecutor;
@Component
public class ClusterRpcCallbackExecutorService extends AbstractListeningExecutor {

1
application/src/main/java/org/thingsboard/server/service/executors/DbCallbackExecutorService.java

@ -17,6 +17,7 @@ package org.thingsboard.server.service.executors;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.common.util.AbstractListeningExecutor;
@Component
public class DbCallbackExecutorService extends AbstractListeningExecutor {

1
application/src/main/java/org/thingsboard/server/service/executors/ExternalCallExecutorService.java

@ -17,6 +17,7 @@ package org.thingsboard.server.service.executors;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.common.util.AbstractListeningExecutor;
@Component
public class ExternalCallExecutorService extends AbstractListeningExecutor {

2
application/src/main/java/org/thingsboard/server/service/mail/MailExecutorService.java

@ -17,7 +17,7 @@ package org.thingsboard.server.service.mail;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.server.service.executors.AbstractListeningExecutor;
import org.thingsboard.common.util.AbstractListeningExecutor;
@Component
public class MailExecutorService extends AbstractListeningExecutor {

2
application/src/main/java/org/thingsboard/server/service/script/JsExecutorService.java

@ -17,7 +17,7 @@ package org.thingsboard.server.service.script;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.server.service.executors.AbstractListeningExecutor;
import org.thingsboard.common.util.AbstractListeningExecutor;
@Component
public class JsExecutorService extends AbstractListeningExecutor {

3
application/src/main/resources/thingsboard.yml

@ -351,6 +351,7 @@ spring:
repositories:
enabled: "true"
jpa:
open-in-view: "false"
hibernate:
ddl-auto: "none"
database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}"
@ -536,4 +537,4 @@ swagger:
license:
title: "${SWAGGER_LICENSE_TITLE:Apache License Version 2.0}"
url: "${SWAGGER_LICENSE_URL:https://github.com/thingsboard/thingsboard/blob/master/LICENSE}"
version: "${SWAGGER_VERSION:2.0}"
version: "${SWAGGER_VERSION:2.0}"

4
application/src/main/java/org/thingsboard/server/service/executors/AbstractListeningExecutor.java → common/util/src/main/java/org/thingsboard/common/util/AbstractListeningExecutor.java

@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.service.executors;
package org.thingsboard.common.util;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import org.thingsboard.rule.engine.api.ListeningExecutor;
import org.thingsboard.common.util.ListeningExecutor;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

6
rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ListeningExecutor.java → common/util/src/main/java/org/thingsboard/common/util/ListeningExecutor.java

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.rule.engine.api;
package org.thingsboard.common.util;
import com.google.common.util.concurrent.ListenableFuture;
@ -24,4 +24,8 @@ public interface ListeningExecutor extends Executor {
<T> ListenableFuture<T> executeAsync(Callable<T> task);
default <T> ListenableFuture<T> submit(Callable<T> task) {
return executeAsync(task);
}
}

4
dao/pom.xml

@ -47,6 +47,10 @@
<groupId>org.thingsboard.common</groupId>
<artifactId>dao-api</artifactId>
</dependency>
<dependency>
<groupId>org.thingsboard.common</groupId>
<artifactId>util</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>

8
dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDaoListeningExecutorService.java

@ -17,16 +17,14 @@ package org.thingsboard.server.dao.sql;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PreDestroy;
import java.util.concurrent.Executors;
public abstract class JpaAbstractDaoListeningExecutorService {
protected ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
@Autowired
protected JpaExecutorService service;
@PreDestroy
void onDestroy() {
service.shutdown();
}
}

35
dao/src/main/java/org/thingsboard/server/dao/sql/JpaExecutorService.java

@ -0,0 +1,35 @@
/**
* Copyright © 2016-2019 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.dao.sql;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.thingsboard.common.util.AbstractListeningExecutor;
import org.thingsboard.server.dao.util.SqlDao;
@Component
@SqlDao
public class JpaExecutorService extends AbstractListeningExecutor {
@Value("${spring.datasource.hikari.maximumPoolSize}")
private int poolSize;
@Override
protected int getThreadPollSize() {
return poolSize;
}
}

17
dao/src/main/java/org/thingsboard/server/dao/sql/audit/JpaAuditLogDao.java

@ -53,8 +53,6 @@ import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@SqlDao
public class JpaAuditLogDao extends JpaAbstractDao<AuditLogEntity, AuditLog> implements AuditLogDao {
private ListeningExecutorService insertService = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
@Autowired
private AuditLogRepository auditLogRepository;
@ -68,14 +66,9 @@ public class JpaAuditLogDao extends JpaAbstractDao<AuditLogEntity, AuditLog> imp
return auditLogRepository;
}
@PreDestroy
void onDestroy() {
insertService.shutdown();
}
@Override
public ListenableFuture<Void> saveByTenantId(AuditLog auditLog) {
return insertService.submit(() -> {
return service.submit(() -> {
save(auditLog.getTenantId(), auditLog);
return null;
});
@ -83,22 +76,22 @@ public class JpaAuditLogDao extends JpaAbstractDao<AuditLogEntity, AuditLog> imp
@Override
public ListenableFuture<Void> saveByTenantIdAndEntityId(AuditLog auditLog) {
return insertService.submit(() -> null);
return service.submit(() -> null);
}
@Override
public ListenableFuture<Void> saveByTenantIdAndCustomerId(AuditLog auditLog) {
return insertService.submit(() -> null);
return service.submit(() -> null);
}
@Override
public ListenableFuture<Void> saveByTenantIdAndUserId(AuditLog auditLog) {
return insertService.submit(() -> null);
return service.submit(() -> null);
}
@Override
public ListenableFuture<Void> savePartitionsByTenantId(AuditLog auditLog) {
return insertService.submit(() -> null);
return service.submit(() -> null);
}
@Override

4
dao/src/main/java/org/thingsboard/server/dao/sqlts/AbstractSqlTimeseriesDao.java

@ -70,7 +70,7 @@ public abstract class AbstractSqlTimeseriesDao extends JpaAbstractDaoListeningEx
if (poolSize <= 0) {
poolSize = maximumPoolSize * 4;
}
insertService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(poolSize));
insertService = MoreExecutors.listeningDecorator(Executors.newWorkStealingPool(poolSize));
break;
}
}
@ -127,4 +127,4 @@ public abstract class AbstractSqlTimeseriesDao extends JpaAbstractDaoListeningEx
Aggregation.NONE, DESC_ORDER);
return findAllAsync(tenantId, entityId, findNewLatestQuery);
}
}
}

7
rule-engine/rule-engine-api/pom.xml

@ -48,6 +48,11 @@
<artifactId>dao-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.thingsboard.common</groupId>
<artifactId>util</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
@ -89,4 +94,4 @@
<scope>provided</scope>
</dependency>
</dependencies>
</project>
</project>

1
rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java

@ -18,6 +18,7 @@ package org.thingsboard.rule.engine.api;
import com.datastax.driver.core.ResultSetFuture;
import io.netty.channel.EventLoopGroup;
import org.springframework.data.redis.core.RedisTemplate;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.alarm.Alarm;

1
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/action/TbLogNode.java

@ -16,6 +16,7 @@
package org.thingsboard.rule.engine.action;
import lombok.extern.slf4j.Slf4j;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.plugin.ComponentType;

1
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java

@ -16,6 +16,7 @@
package org.thingsboard.rule.engine.filter;
import lombok.extern.slf4j.Slf4j;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.plugin.ComponentType;

1
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java

@ -16,6 +16,7 @@
package org.thingsboard.rule.engine.filter;
import lombok.extern.slf4j.Slf4j;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.plugin.ComponentType;

3
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/action/TbAlarmNodeTest.java

@ -28,6 +28,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.id.DeviceId;
@ -376,4 +377,4 @@ public class TbAlarmNodeTest {
assertEquals(message, value.getMessage());
}
}
}

3
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsFilterNodeTest.java

@ -26,6 +26,7 @@ import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.id.RuleNodeId;
@ -123,4 +124,4 @@ public class TbJsFilterNodeTest {
assertEquals(expectedClass, value.getClass());
assertEquals(message, value.getMessage());
}
}
}

3
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/filter/TbJsSwitchNodeTest.java

@ -27,6 +27,7 @@ import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.id.RuleNodeId;
@ -105,4 +106,4 @@ public class TbJsSwitchNodeTest {
assertEquals(expectedClass, value.getClass());
assertEquals(message, value.getMessage());
}
}
}

4
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNodeTest.java

@ -25,7 +25,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.thingsboard.rule.engine.api.ListeningExecutor;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
import org.thingsboard.rule.engine.api.TbNodeException;
@ -166,4 +166,4 @@ public class TbChangeOriginatorNodeTest {
node = new TbChangeOriginatorNode();
node.init(null, nodeConfiguration);
}
}
}

3
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/transform/TbTransformMsgNodeTest.java

@ -26,6 +26,7 @@ import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.id.RuleNodeId;
@ -123,4 +124,4 @@ public class TbTransformMsgNodeTest {
assertEquals(expectedClass, value.getClass());
assertEquals(message, value.getMessage());
}
}
}

Loading…
Cancel
Save