09-25-2015 04:11 AM
Fehler beim Starten des Workflowprozesses WiedervorlageNachrichtAnVIMorg.activiti.engine.ActivitiOptimisticLockingException: ByteArrayEntity[id=165438, name=var-ValueMap, size=5534] was updated by another transaction concurrently
Wrapped by: com.godyo.p5.resources.exceptions.P4ServerException: [org.activiti.engine.ActivitiOptimisticLockingException] ByteArrayEntity[id=165438, name=var-ValueMap, size=5534] was updated by another transaction concurrently
                at org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:620) ~[na:na]
                at org.activiti.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:502) ~[na:na]
                at org.activiti.engine.impl.interceptor.CommandContext.flushSessions(CommandContext.java:175) ~[na:na]
                at org.activiti.engine.impl.interceptor.CommandContext.close(CommandContext.java:122) ~[na:na]
                at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:66) ~[na:na]
                at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:47) ~[na:na]
                at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) ~[na:na]
                at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:45) ~[na:na]
                at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31) ~[na:na]
                at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40) ~[na:na]
                at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35) ~[na:na]
                at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:70) ~[na:na]
                at com.godyo.p5.server.workflow.ActivitiWorkflowService.createProcessInstance(ActivitiWorkflowService.java:60) ~[na:na]
                at com.godyo.p5.server.workflow.starter.WorkflowStartJob.run(WorkflowStartJob.java:47) ~[na:na]
                at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) [org.eclipse.core.jobs_3.5.200.v20120521-2346.jar:na]
 
select count(*) from act_ru_execution where proc_def_id_ like 'Wie%' and is_active_ = 1;
public class SimpleSelectService implements JavaDelegate {
                private Expression resultName;
                @Override
                public void execute(final DelegateExecution execution) throws Exception {
                        // do database stuff and fill Map<String, Object> map
                               execution.setVariable(resultName.getValue(execution).toString(), map);
                }
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.Expression;
import org.activiti.engine.delegate.JavaDelegate;
import org.activiti.engine.runtime.ProcessInstance;
public class NewestProcessService implements JavaDelegate {
                private static class ProcessFilter {
                               private final DelegateExecution execution;
                               private final List<String> keys;
                               public ProcessFilter(final DelegateExecution execution, final List<String> keys) {
                                               this.execution = execution;
                                               this.keys = keys;
                               }
                               public boolean isNewestProcess() {
                                               return filterByStartTime(filterByPrimaryKey(getSiblingProcesses())).isEmpty();
                               }
                               private List<ProcessInstance> filterByStartTime(final List<ProcessInstance> processes) {
                                               final Date ownStartTime = (Date) execution.getVariable("StartTime");
                                               final List<ProcessInstance> filteredProcesses = new ArrayList<>();
                                               for (final ProcessInstance process : processes) {
                                                               final Date startTime = (Date) execution.getEngineServices().getRuntimeService()
                                                                                              .getVariables(process.getProcessInstanceId()).get("StartTime");
                                                               if (ownStartTime.getTime() < startTime.getTime()) {
                                                                              filteredProcesses.add(process);
                                                               }
                                               }
                                               return filteredProcesses;
                               }
                               @SuppressWarnings("unchecked")
                               private List<ProcessInstance> filterByPrimaryKey(final List<ProcessInstance> processes) {
                                               final Map<String, Object> ownValueMap = (Map<String, Object>) execution.getVariable("ValueMap");
                                               final List<ProcessInstance> filteredProcesses = new ArrayList<>();
                                               for (final ProcessInstance process : processes) {
                                                               final Map<String, Object> valueMap = (Map<String, Object>) execution.getEngineServices()
                                                                                              .getRuntimeService().getVariables(process.getProcessInstanceId()).get("ValueMap");
                                                               boolean same = true;
                                                               for (final String key : keys) {
                                                                              if (!valueMap.get(key).equals(ownValueMap.get(key))) {
                                                                                              same = false;
                                                                                              break;
                                                                              }
                                                               }
                                                               if (same) {
                                                                              filteredProcesses.add(process);
                                                               }
                                               }
                                               return filteredProcesses;
                               }
                               private List<ProcessInstance> getSiblingProcesses() {
                                               final String ownDefinitionId = execution.getProcessDefinitionId();
                                               return execution.getEngineServices().getRuntimeService().createProcessInstanceQuery()
                                                                              .processDefinitionId(ownDefinitionId).list();
                               }
                }
                private Expression keys;
                private Expression targetVariable;
                @Override
                public void execute(final DelegateExecution execution) throws Exception {
                               final List<String> keyList = Arrays.asList(keys.getValue(execution).toString().split(","));
                               final boolean isNewest = new ProcessFilter(execution, keyList).isNewestProcess();
                               final String variable = targetVariable.getValue(execution).toString();
                               execution.setVariable(variable, isNewest ? "yes" : "no");
                }
}
					
				
			
			
				
			
			
			
			
			
			
			
		09-25-2015 10:47 AM
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.