未验证 提交 bcdbdcd1 编写于 作者: M Miguel Ruiz 提交者: GitHub

Merge pull request #3037 from Activiti/dev-mruiz-AAE-76

Fetching only process definitions from latest version
package org.activiti.api.runtime.model.impl;
import org.activiti.api.process.model.Deployment;
public class DeploymentImpl implements Deployment {
String id;
String name;
Integer version;
String projectReleaseVersion;
public void setName(String name) {
this.name = name;
}
public void setVersion(Integer version) {
this.version = version;
}
public void setProjectReleaseVersion(String projectReleaseVersion) {
this.projectReleaseVersion = projectReleaseVersion;
}
@Override
public String getName() {
return name;
}
@Override
public Integer getVersion() {
return version;
}
@Override
public String getProjectReleaseVersion() {
return projectReleaseVersion;
}
@Override
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
package org.activiti.api.process.model;
public interface Deployment {
String getId();
String getName();
Integer getVersion();
String getProjectReleaseVersion();
}
......@@ -19,6 +19,7 @@ package org.activiti.api.process.runtime;
import java.util.List;
import org.activiti.api.model.shared.model.VariableInstance;
import org.activiti.api.process.model.Deployment;
import org.activiti.api.process.model.ProcessDefinition;
import org.activiti.api.process.model.ProcessDefinitionMeta;
import org.activiti.api.process.model.ProcessInstance;
......@@ -129,4 +130,6 @@ public interface ProcessRuntime {
void receive(ReceiveMessagePayload messagePayload);
ProcessInstance start(StartMessagePayload messagePayload);
Deployment selectLatestDeployment();
}
......@@ -117,6 +117,7 @@ import org.activiti.runtime.api.impl.RuntimeSignalPayloadEventListener;
import org.activiti.runtime.api.impl.VariableNameValidator;
import org.activiti.runtime.api.impl.VariablesMappingProvider;
import org.activiti.runtime.api.message.ReceiveMessagePayloadEventListener;
import org.activiti.runtime.api.model.impl.APIDeploymentConverter;
import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter;
import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter;
import org.activiti.runtime.api.model.impl.APIVariableInstanceConverter;
......@@ -173,6 +174,7 @@ public class ProcessRuntimeAutoConfiguration {
ProcessSecurityPoliciesManager securityPoliciesManager,
APIProcessInstanceConverter processInstanceConverter,
APIVariableInstanceConverter variableInstanceConverter,
APIDeploymentConverter apiDeploymentConverter,
ProcessRuntimeConfiguration processRuntimeConfiguration,
ApplicationEventPublisher eventPublisher,
ProcessVariablesPayloadValidator processVariablesValidator) {
......@@ -182,6 +184,7 @@ public class ProcessRuntimeAutoConfiguration {
securityPoliciesManager,
processInstanceConverter,
variableInstanceConverter,
apiDeploymentConverter,
processRuntimeConfiguration,
eventPublisher,
processVariablesValidator);
......@@ -254,6 +257,12 @@ public class ProcessRuntimeAutoConfiguration {
return new APIProcessInstanceConverter();
}
@Bean
@ConditionalOnMissingBean
public APIDeploymentConverter apiDeploymentConverter(){
return new APIDeploymentConverter();
}
@Bean
@ConditionalOnMissingBean
public ProcessRuntimeConfiguration processRuntimeConfiguration(@Autowired(required = false) List<ProcessRuntimeEventListener<?>> processRuntimeEventListeners,
......
......@@ -18,8 +18,10 @@ package org.activiti.runtime.api.impl;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.activiti.api.model.shared.model.VariableInstance;
import org.activiti.api.process.model.Deployment;
import org.activiti.api.process.model.ProcessDefinition;
import org.activiti.api.process.model.ProcessDefinitionMeta;
import org.activiti.api.process.model.ProcessInstance;
......@@ -52,7 +54,9 @@ import org.activiti.core.common.spring.security.policies.SecurityPolicyAccess;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.runtime.api.model.impl.APIDeploymentConverter;
import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter;
import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter;
import org.activiti.runtime.api.model.impl.APIVariableInstanceConverter;
......@@ -74,6 +78,8 @@ public class ProcessRuntimeImpl implements ProcessRuntime {
private final APIVariableInstanceConverter variableInstanceConverter;
private final APIDeploymentConverter deploymentConverter;
private final ProcessRuntimeConfiguration configuration;
private final ProcessSecurityPoliciesManager securityPoliciesManager;
......@@ -88,6 +94,7 @@ public class ProcessRuntimeImpl implements ProcessRuntime {
ProcessSecurityPoliciesManager securityPoliciesManager,
APIProcessInstanceConverter processInstanceConverter,
APIVariableInstanceConverter variableInstanceConverter,
APIDeploymentConverter deploymentConverter,
ProcessRuntimeConfiguration configuration,
ApplicationEventPublisher eventPublisher,
ProcessVariablesPayloadValidator processVariablesValidator) {
......@@ -97,6 +104,7 @@ public class ProcessRuntimeImpl implements ProcessRuntime {
this.securityPoliciesManager = securityPoliciesManager;
this.processInstanceConverter = processInstanceConverter;
this.variableInstanceConverter = variableInstanceConverter;
this.deploymentConverter = deploymentConverter;
this.configuration = configuration;
this.eventPublisher = eventPublisher;
this.processVariablesValidator = processVariablesValidator;
......@@ -146,8 +154,21 @@ public class ProcessRuntimeImpl implements ProcessRuntime {
if (getProcessDefinitionsPayload.hasDefinitionKeys()) {
processDefinitionQuery.processDefinitionKeys(getProcessDefinitionsPayload.getProcessDefinitionKeys());
}
return new PageImpl<>(processDefinitionConverter.from(processDefinitionQuery.list()),
Math.toIntExact(processDefinitionQuery.count()));
List<org.activiti.engine.repository.ProcessDefinition> currentVersionDefinitions = filterCurrentVersionDefinitions(processDefinitionQuery.list());
return new PageImpl<>(processDefinitionConverter.from(currentVersionDefinitions),
Math.toIntExact(processDefinitionQuery.count()));
}
private List<org.activiti.engine.repository.ProcessDefinition> filterCurrentVersionDefinitions (List<org.activiti.engine.repository.ProcessDefinition> allDefinitions){
int currentVersion = selectLatestDeployment().getVersion();
return allDefinitions
.stream()
.filter(processDefinition -> processDefinition.getAppVersion() == null ||
processDefinition.getAppVersion().equals(currentVersion))
//we fetch possible unversioned definitions from different types of deployments
.collect(Collectors.toList());
}
@Override
......@@ -400,4 +421,13 @@ public class ProcessRuntimeImpl implements ProcessRuntime {
return processDefinition;
}
@Override
public Deployment selectLatestDeployment(){
return deploymentConverter.from(
repositoryService
.createDeploymentQuery()
.singleResult()
);
}
}
package org.activiti.runtime.api.model.impl;
import org.activiti.api.process.model.Deployment;
import org.activiti.api.runtime.model.impl.DeploymentImpl;
public class APIDeploymentConverter extends ListConverter<org.activiti.engine.repository.Deployment, Deployment>
implements ModelConverter<org.activiti.engine.repository.Deployment, Deployment>{
@Override
public Deployment from(org.activiti.engine.repository.Deployment internalDeployment){
DeploymentImpl deployment = new DeploymentImpl();
deployment.setId(internalDeployment.getId());
deployment.setName(internalDeployment.getName());
deployment.setVersion(internalDeployment.getVersion());
deployment.setProjectReleaseVersion(internalDeployment.getProjectReleaseVersion());
return deployment;
}
}
......@@ -63,6 +63,7 @@ public class ProcessRuntimeImplTest {
null,
null,
null,
null,
null));
doReturn(true).when(securityPoliciesManager).canWrite("processDefinitionKey");
......
......@@ -16,6 +16,7 @@ package org.activiti.engine.impl;
import java.io.Serializable;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.CommandExecutor;
......@@ -197,6 +198,25 @@ public class DeploymentQueryImpl extends AbstractQuery<DeploymentQuery, Deployme
return commandContext.getDeploymentEntityManager().findDeploymentsByQueryCriteria(this, page);
}
@Override
public Deployment executeSingleResult(CommandContext commandContext){
Deployment deployment = commandContext.getDeploymentEntityManager().selectLatestDeployment("SpringAutoDeployment");
if (deployment != null){
return deployment;
} else {
List<Deployment> results = executeList(commandContext, null);
if (results.size() == 1) {
return results.get(0);
} else if (results.size() > 1) {
throw new ActivitiException("Query return " + results.size() + " results instead of max 1");
}
return null;
}
}
// getters ////////////////////////////////////////////////////////
public String getDeploymentId() {
......
......@@ -40,4 +40,6 @@ public interface DeploymentEntityManager extends EntityManager<DeploymentEntity>
void deleteDeployment(String deploymentId, boolean cascade);
Deployment selectLatestDeployment(String deploymentName);
}
\ No newline at end of file
......@@ -348,5 +348,9 @@ public class DeploymentEntityManagerImpl extends AbstractEntityManager<Deploymen
public void setDeploymentDataManager(DeploymentDataManager deploymentDataManager) {
this.deploymentDataManager = deploymentDataManager;
}
@Override
public Deployment selectLatestDeployment (String deploymentName){
return deploymentDataManager.selectLatestDeployment(deploymentName);
}
}
......@@ -37,4 +37,6 @@ public interface DeploymentDataManager extends DataManager<DeploymentEntity> {
long findDeploymentCountByNativeQuery(Map<String, Object> parameterMap);
Deployment selectLatestDeployment(String deploymentName);
}
......@@ -79,5 +79,10 @@ public class MybatisDeploymentDataManager extends AbstractDataManager<Deployment
public long findDeploymentCountByNativeQuery(Map<String, Object> parameterMap) {
return (Long) getDbSqlSession().selectOne("selectDeploymentCountByNativeQuery", parameterMap);
}
@Override
public Deployment selectLatestDeployment(String deploymentName){
return (Deployment) getDbSqlSession().selectOne("selectLatestDeployment", deploymentName);
}
}
......@@ -15,6 +15,7 @@ package org.activiti.engine.repository;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.api.internal.Internal;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.query.Query;
/**
......
......@@ -21,8 +21,8 @@
#{deployment.key, jdbcType=VARCHAR},
#{deployment.tenantId, jdbcType=VARCHAR},
#{deployment.deploymentTime, jdbcType=TIMESTAMP}),
#{version, jdbcType=INTEGER},
#{projectReleaseVersion, jdbcType=VARCHAR}
#{deployment.version, jdbcType=INTEGER},
#{deployment.projectReleaseVersion, jdbcType=VARCHAR}
</foreach>
</insert>
......@@ -36,8 +36,8 @@
#{deployment.key, jdbcType=VARCHAR},
#{deployment.tenantId, jdbcType=VARCHAR},
#{deployment.deploymentTime, jdbcType=TIMESTAMP}),
#{version, jdbcType=INTEGER},
#{projectReleaseVersion, jdbcType=VARCHAR}
#{deployment.version, jdbcType=INTEGER},
#{deployment.projectReleaseVersion, jdbcType=VARCHAR}
</foreach>
SELECT * FROM dual
</insert>
......@@ -160,6 +160,13 @@
select * from ${prefix}ACT_RE_DEPLOYMENT where ID_ = #{id, jdbcType=VARCHAR}
</select>
<select id="selectLatestDeployment" parameterType="string" resultMap="deploymentResultMap">
select * from ${prefix}ACT_RE_DEPLOYMENT
where VERSION_ = (select max(VERSION_) from ${prefix}ACT_RE_DEPLOYMENT)
and NAME_ = #{name, jdbcType=VARCHAR}
and PROJECT_RELEASE_VERSION_ IS NOT NULL
</select>
<!-- mysql specific -->
<select id="selectDeploymentsByQueryCriteria" databaseId="mysql" parameterType="org.activiti.engine.impl.DeploymentQueryImpl" resultMap="deploymentResultMap">
${limitBefore}
......
......@@ -3,6 +3,7 @@ package org.activiti.spring.boot;
import org.activiti.core.common.project.model.ProjectManifest;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -45,6 +46,10 @@ public class ApplicationUpgradeIT {
assertThat(deployment2.getProjectReleaseVersion()).isEqualTo("17");
assertThat(deployment2.getVersion()).isEqualTo(2);
repositoryService.deleteDeployment(deployment1.getId());
repositoryService.deleteDeployment(deployment2.getId());
}
}
......@@ -14,6 +14,7 @@ import org.activiti.engine.RuntimeService;
import org.activiti.runtime.api.impl.ProcessAdminRuntimeImpl;
import org.activiti.runtime.api.impl.ProcessRuntimeImpl;
import org.activiti.runtime.api.impl.ProcessVariablesPayloadValidator;
import org.activiti.runtime.api.model.impl.APIDeploymentConverter;
import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter;
import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter;
import org.activiti.runtime.api.model.impl.APIVariableInstanceConverter;
......@@ -75,6 +76,10 @@ public class HistoryConfigurationTest {
@Autowired
private ProcessCleanUpUtil processCleanUpUtil;
@Autowired
private APIDeploymentConverter deploymentConverter;
@After
public void cleanUp(){
processCleanUpUtil.cleanUpWithAdmin();
......@@ -90,6 +95,7 @@ public class HistoryConfigurationTest {
securityPoliciesManager,
processInstanceConverter,
variableInstanceConverter,
deploymentConverter,
configuration,
eventPublisher,
processVariablesValidator));
......
......@@ -8,6 +8,7 @@ import static org.assertj.core.api.Assertions.catchThrowable;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import org.activiti.api.process.model.Deployment;
import org.activiti.api.process.model.ProcessDefinition;
import org.activiti.api.process.model.ProcessInstance;
import org.activiti.api.process.model.builders.ProcessPayloadBuilder;
......@@ -24,6 +25,7 @@ import org.activiti.engine.RuntimeService;
import org.activiti.runtime.api.impl.ProcessAdminRuntimeImpl;
import org.activiti.runtime.api.impl.ProcessRuntimeImpl;
import org.activiti.runtime.api.impl.ProcessVariablesPayloadValidator;
import org.activiti.runtime.api.model.impl.APIDeploymentConverter;
import org.activiti.runtime.api.model.impl.APIProcessDefinitionConverter;
import org.activiti.runtime.api.model.impl.APIProcessInstanceConverter;
import org.activiti.runtime.api.model.impl.APIVariableInstanceConverter;
......@@ -78,6 +80,9 @@ public class ProcessRuntimeIT {
@Autowired
private APIVariableInstanceConverter variableInstanceConverter;
@Autowired
private APIDeploymentConverter deploymentConverter;
@Autowired
ProcessVariablesPayloadValidator processVariablesValidator;
......@@ -111,6 +116,7 @@ public class ProcessRuntimeIT {
securityPoliciesManager,
processInstanceConverter,
variableInstanceConverter,
deploymentConverter,
configuration,
eventPublisher,
processVariablesValidator));
......@@ -691,4 +697,29 @@ public class ProcessRuntimeIT {
assertThat(result.getAppVersion()).isEqualTo("1");
}
@Test
public void should_selectLatestDeployment(){
securityUtil.logInAs("user");
Deployment deployment = processRuntime.selectLatestDeployment();
assertThat(deployment.getVersion()).isEqualTo(1);
assertThat(deployment.getProjectReleaseVersion()).isEqualTo("1");
assertThat(deployment.getName()).isEqualTo("SpringAutoDeployment");
}
@Test
public void should_OnlyProcessDefinitionsFromLatestVersionRetrieved(){
securityUtil.logInAs("user");
Deployment deployment = processRuntime.selectLatestDeployment();
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0,
50));
assertThat(processDefinitionPage.getContent().stream().filter(c -> c.getKey().equals(SUPER_PROCESS)))
.extracting(ProcessDefinition::getAppVersion)
.containsOnly(deployment.getVersion().toString());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册