提交 06636d3a 编写于 作者: T Tijs Rademakers

More backwards compatibility work

上级 a57b484c
......@@ -39,10 +39,16 @@ public interface Activiti5CompatibilityHandler {
ProcessDefinition getProcessDefinitionByKey(String processDefinitionKey);
void addCandidateStarter(String processDefinitionId, String userId, String groupId);
void deleteCandidateStarter(String processDefinitionId, String userId, String groupId);
void suspendProcessDefinition(String processDefinitionId, String processDefinitionKey, boolean suspendProcessInstances, Date suspensionDate, String tenantId);
void activateProcessDefinition(String processDefinitionId, String processDefinitionKey, boolean activateProcessInstances, Date activationDate, String tenantId);
void setProcessDefinitionCategory(String processDefinitionId, String category);
Deployment deploy(DeploymentBuilderImpl deploymentBuilder);
void setDeploymentCategory(String deploymentId, String category);
......@@ -51,14 +57,28 @@ public interface Activiti5CompatibilityHandler {
ProcessInstance startProcessInstance(String processDefinitionKey, String processDefinitionId, Map<String, Object> variables, String businessKey, String tenantId, String processInstanceName);
void updateBusinessKey(String processInstanceId, String businessKey);
void suspendProcessInstance(String processInstanceId);
void activateProcessInstance(String processInstanceId);
void addIdentityLinkForProcessInstance(String processInstanceId, String userId, String groupId, String identityLinkType);
void deleteIdentityLinkForProcessInstance(String processInstanceId, String userId, String groupId, String identityLinkType);
void deleteProcessInstance(String processInstanceId, String deleteReason);
void completeTask(TaskEntity taskEntity, Map<String, Object> variables, boolean localScope);
void claimTask(String taskId, String userId);
void setTaskDueDate(String taskId, Date dueDate);
void setTaskPriority(String taskId, int priority);
void deleteTask(String taskId, String deleteReason, boolean cascade);
ProcessInstance submitStartFormData(String processDefinitionId, String businessKey, Map<String, String> properties);
void submitTaskFormData(String taskId, Map<String, String> properties, boolean completeTask);
......@@ -67,6 +87,8 @@ public interface Activiti5CompatibilityHandler {
void addIdentityLink(String taskId, String identityId, int identityIdType, String identityType);
void deleteIdentityLink(String taskId, String userId, String groupId, String identityLinkType);
Attachment createAttachment(String attachmentType, String taskId, String processInstanceId, String attachmentName, String attachmentDescription, InputStream content, String url);
void trigger(String executionId, Map<String, Object> processVariables);
......@@ -81,6 +103,10 @@ public interface Activiti5CompatibilityHandler {
void executeJobWithLockAndRetry(JobEntity job);
void deleteJob(String jobId);
void setJobRetries(String jobId, int retries);
void addEventListener(Object listener);
void removeEventListener(Object listener);
......
......@@ -21,9 +21,9 @@ import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.JobNotFoundException;
import org.activiti.engine.ManagementService;
import org.activiti.engine.event.EventLogEntry;
import org.activiti.engine.impl.cmd.CancelJobCmd;
import org.activiti.engine.impl.cmd.CustomSqlExecution;
import org.activiti.engine.impl.cmd.DeleteEventLogEntry;
import org.activiti.engine.impl.cmd.DeleteJobCmd;
import org.activiti.engine.impl.cmd.ExecuteCustomSqlCmd;
import org.activiti.engine.impl.cmd.ExecuteJobsCmd;
import org.activiti.engine.impl.cmd.GetEventLogEntriesCmd;
......@@ -76,7 +76,7 @@ public class ManagementServiceImpl extends ServiceImpl implements ManagementServ
try {
commandExecutor.execute(new ExecuteJobsCmd(jobId));
}
catch(RuntimeException e) {
catch (RuntimeException e) {
if ((e instanceof JobNotFoundException)) {
throw e;
} else {
......@@ -88,7 +88,7 @@ public class ManagementServiceImpl extends ServiceImpl implements ManagementServ
}
public void deleteJob(String jobId) {
commandExecutor.execute(new CancelJobCmd(jobId));
commandExecutor.execute(new DeleteJobCmd(jobId));
}
public void setJobRetries(String jobId, int retries) {
......
......@@ -2178,7 +2178,12 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig
}
public ProcessEngineConfigurationImpl setClock(Clock clock) {
this.clock = clock;
if (this.clock == null) {
this.clock = clock;
} else {
this.clock.setCurrentCalendar(clock.getCurrentCalendar());
}
if (isActiviti5CompatibilityEnabled) {
getActiviti5CompatibilityHandler().setClock(clock);
}
......
......@@ -16,9 +16,11 @@ import java.io.Serializable;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.repository.ProcessDefinition;
/**
......@@ -57,6 +59,12 @@ public class AddIdentityLinkForProcessDefinitionCmd implements Command<Void>, Se
if (processDefinition == null) {
throw new ActivitiObjectNotFoundException("Cannot find process definition with id " + processDefinitionId, ProcessDefinition.class);
}
if (Activiti5Util.isActiviti5ProcessDefinition(commandContext, processDefinition)) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.addCandidateStarter(processDefinitionId, userId, groupId);
return null;
}
processDefinition.addIdentityLink(userId, groupId);
......
......@@ -16,9 +16,11 @@ import java.io.Serializable;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.util.Activiti5Util;
/**
* @author Marcus Klimstra
......@@ -66,6 +68,12 @@ public class AddIdentityLinkForProcessInstanceCmd implements Command<Void>, Seri
if (processInstance == null) {
throw new ActivitiObjectNotFoundException("Cannot find process instance with id " + processInstanceId, ExecutionEntity.class);
}
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, processInstance.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.addIdentityLinkForProcessInstance(processInstanceId, userId, groupId, type);
return null;
}
processInstance.addIdentityLink(userId, groupId, type);
......
package org.activiti.engine.impl.cmd;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.JobEntity;
/**
* Command that dispatches a JOB_CANCELLED event and deletes the job entity.
*/
public class CancelJobCmd extends DeleteJobCmd {
private static final long serialVersionUID = 1L;
public CancelJobCmd(String jobId) {
super(jobId);
}
@Override
public Object execute(CommandContext commandContext) {
JobEntity jobToDelete = getJobToDelete(commandContext);
sendCancelEvent(jobToDelete);
jobToDelete.delete();
return null;
}
private void sendCancelEvent(JobEntity jobToDelete) {
if (Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.JOB_CANCELED, jobToDelete));
}
}
}
......@@ -13,8 +13,10 @@
package org.activiti.engine.impl.cmd;
import org.activiti.engine.ActivitiTaskAlreadyClaimedException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.util.Activiti5Util;
/**
* @author Joram Barrez
......@@ -31,7 +33,12 @@ public class ClaimTaskCmd extends NeedsActiveTaskCmd<Void> {
}
protected Void execute(CommandContext commandContext, TaskEntity task) {
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, task.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.claimTask(taskId, userId);
return null;
}
if (userId != null) {
if (task.getAssignee() != null) {
if (!task.getAssignee().equals(userId)) {
......
......@@ -14,8 +14,10 @@
package org.activiti.engine.impl.cmd;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.task.IdentityLinkType;
/**
......@@ -26,6 +28,9 @@ import org.activiti.engine.task.IdentityLinkType;
public class DeleteIdentityLinkCmd extends NeedsActiveTaskCmd<Void> {
private static final long serialVersionUID = 1L;
public static int IDENTITY_USER = 1;
public static int IDENTITY_GROUP = 2;
protected String userId;
......@@ -65,6 +70,11 @@ public class DeleteIdentityLinkCmd extends NeedsActiveTaskCmd<Void> {
}
protected Void execute(CommandContext commandContext, TaskEntity task) {
if (task.getProcessDefinitionId() != null && Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, task.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.deleteIdentityLink(taskId, userId, groupId, type);
return null;
}
if (IdentityLinkType.ASSIGNEE.equals(type)) {
task.setAssignee(null, true, true);
......
......@@ -17,9 +17,11 @@ import java.io.Serializable;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.repository.ProcessDefinition;
/**
......@@ -58,6 +60,12 @@ public class DeleteIdentityLinkForProcessDefinitionCmd implements Command<Object
if (processDefinition == null) {
throw new ActivitiObjectNotFoundException("Cannot find process definition with id " + processDefinitionId, ProcessDefinition.class);
}
if (Activiti5Util.isActiviti5ProcessDefinition(commandContext, processDefinition)) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.deleteCandidateStarter(processDefinitionId, userId, groupId);
return null;
}
processDefinition.deleteIdentityLink(userId, groupId);
......
......@@ -17,9 +17,11 @@ import java.io.Serializable;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.util.Activiti5Util;
/**
* @author Tijs Rademakers
......@@ -64,6 +66,12 @@ public class DeleteIdentityLinkForProcessInstanceCmd implements Command<Object>,
if (processInstance == null) {
throw new ActivitiObjectNotFoundException("Cannot find process instance with id " + processInstanceId, ExecutionEntity.class);
}
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, processInstance.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.deleteIdentityLinkForProcessInstance(processInstanceId, userId, groupId, type);
return null;
}
processInstance.deleteIdentityLink(userId, groupId, type);
......
......@@ -5,9 +5,14 @@ import java.io.Serializable;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.JobEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.runtime.Job;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -30,11 +35,25 @@ public class DeleteJobCmd implements Command<Object>, Serializable {
public Object execute(CommandContext commandContext) {
JobEntity jobToDelete = getJobToDelete(commandContext);
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, jobToDelete.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.deleteJob(jobToDelete.getId());
return null;
}
sendCancelEvent(jobToDelete);
jobToDelete.delete();
return null;
}
protected void sendCancelEvent(JobEntity jobToDelete) {
if (Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.JOB_CANCELED, jobToDelete));
}
}
protected JobEntity getJobToDelete(CommandContext commandContext) {
if (jobId == null) {
throw new ActivitiIllegalArgumentException("jobId is null");
......@@ -48,10 +67,8 @@ public class DeleteJobCmd implements Command<Object>, Serializable {
throw new ActivitiObjectNotFoundException("No job found with id '" + jobId + "'", Job.class);
}
// We need to check if the job was locked, ie acquired by the job
// acquisition thread
// This happens if the the job was already acquired, but not yet
// executed.
// We need to check if the job was locked, ie acquired by the job acquisition thread
// This happens if the the job was already acquired, but not yet executed.
// In that case, we can't allow to delete the job.
if (job.getLockOwner() != null) {
throw new ActivitiException("Cannot delete job when the job is being executed. Try again later.");
......
......@@ -17,11 +17,13 @@ import java.io.Serializable;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.JobEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.runtime.Job;
/**
......@@ -48,6 +50,13 @@ public class SetJobRetriesCmd implements Command<Void>, Serializable {
public Void execute(CommandContext commandContext) {
JobEntity job = commandContext.getJobEntityManager().findJobById(jobId);
if (job != null) {
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, job.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.setJobRetries(job.getId(), retries);
return null;
}
job.setRetries(retries);
if (commandContext.getEventDispatcher().isEnabled()) {
......
......@@ -14,6 +14,7 @@ package org.activiti.engine.impl.cmd;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti.engine.impl.interceptor.Command;
......@@ -21,6 +22,7 @@ import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.deploy.DeploymentCache;
import org.activiti.engine.impl.persistence.deploy.ProcessDefinitionCacheEntry;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.repository.ProcessDefinition;
/**
......@@ -47,6 +49,12 @@ public class SetProcessDefinitionCategoryCmd implements Command<Void> {
if (processDefinition == null) {
throw new ActivitiObjectNotFoundException("No process definition found for id = '" + processDefinitionId + "'", ProcessDefinition.class);
}
if (Activiti5Util.isActiviti5ProcessDefinition(commandContext, processDefinition)) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.setProcessDefinitionCategory(processDefinitionId, category);
return null;
}
// Update category
processDefinition.setCategory(category);
......
......@@ -21,6 +21,7 @@ import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ExecutionEntityManager;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.runtime.ProcessInstance;
/**
......@@ -56,6 +57,11 @@ public class SetProcessInstanceBusinessKeyCmd implements Command<Void>, Serializ
throw new ActivitiIllegalArgumentException("A process instance id is required, but the provided id " + "'" + processInstanceId + "' " + "points to a child execution of process instance " + "'"
+ processInstance.getProcessInstanceId() + "'. " + "Please invoke the " + getClass().getSimpleName() + " with a root execution id.");
}
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, processInstance.getProcessDefinitionId())) {
commandContext.getProcessEngineConfiguration().getActiviti5CompatibilityHandler().updateBusinessKey(processInstanceId, businessKey);
return null;
}
processInstance.updateProcessBusinessKey(businessKey);
......
......@@ -12,8 +12,10 @@
*/
package org.activiti.engine.impl.cmd;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.util.Activiti5Util;
import java.util.Date;
......@@ -32,6 +34,12 @@ public class SetTaskDueDateCmd extends NeedsActiveTaskCmd<Void> {
}
protected Void execute(CommandContext commandContext, TaskEntity task) {
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, task.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.setTaskDueDate(taskId, dueDate);
return null;
}
task.setDueDate(dueDate, true);
return null;
}
......
......@@ -12,8 +12,10 @@
*/
package org.activiti.engine.impl.cmd;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.util.Activiti5Util;
/**
* @author Joram Barrez
......@@ -30,6 +32,12 @@ public class SetTaskPriorityCmd extends NeedsActiveTaskCmd<Void> {
}
protected Void execute(CommandContext commandContext, TaskEntity task) {
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, task.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.setTaskPriority(taskId, priority);
return null;
}
task.setPriority(priority, true);
return null;
}
......
......@@ -20,6 +20,7 @@ import java.util.Map;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.compatibility.Activiti5CompatibilityHandler;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.impl.ActivitiEventBuilder;
......@@ -28,6 +29,7 @@ import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.CachedEntityMatcher;
import org.activiti.engine.impl.util.Activiti5Util;
import org.activiti.engine.task.Task;
/**
......@@ -118,7 +120,6 @@ public class TaskEntityManager extends AbstractEntityManager<TaskEntity> {
return (TaskEntity) getDbSqlSession().selectById(TaskEntity.class, id);
}
@SuppressWarnings("unchecked")
public List<TaskEntity> findTasksByExecutionId(final String executionId) {
return getList("selectTasksByExecutionId", executionId, new CachedEntityMatcher<TaskEntity>() {
......@@ -193,12 +194,19 @@ public class TaskEntityManager extends AbstractEntityManager<TaskEntity> {
}
public void deleteTask(String taskId, String deleteReason, boolean cascade) {
TaskEntity task = Context.getCommandContext().getTaskEntityManager().findTaskById(taskId);
CommandContext commandContext = Context.getCommandContext();
TaskEntity task = commandContext.getTaskEntityManager().findTaskById(taskId);
if (task != null) {
if (task.getExecutionId() != null) {
throw new ActivitiException("The task cannot be deleted because is part of a running process");
}
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, task.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(commandContext);
activiti5CompatibilityHandler.deleteTask(taskId, deleteReason, cascade);
return;
}
String reason = (deleteReason == null || deleteReason.length() == 0) ? TaskEntity.DELETE_REASON_DELETED : deleteReason;
deleteTask(task, reason, cascade);
......
......@@ -46,10 +46,12 @@ import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Attachment;
import org.activiti5.engine.ProcessEngine;
import org.activiti5.engine.ProcessEngineConfiguration;
import org.activiti5.engine.delegate.event.ActivitiEventListener;
import org.activiti5.engine.impl.asyncexecutor.AsyncJobUtil;
import org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti5.engine.impl.cmd.AddEventListenerCommand;
import org.activiti5.engine.impl.cmd.ExecuteJobsCmd;
import org.activiti5.engine.impl.cmd.RemoveEventListenerCommand;
import org.activiti5.engine.impl.interceptor.Command;
import org.activiti5.engine.impl.interceptor.CommandContext;
......@@ -99,6 +101,30 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
return wrapper;
}
public void addCandidateStarter(String processDefinitionId, String userId, String groupId) {
try {
if (userId != null) {
getProcessEngine().getRepositoryService().addCandidateStarterUser(processDefinitionId, userId);
} else {
getProcessEngine().getRepositoryService().addCandidateStarterGroup(processDefinitionId, groupId);
}
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void deleteCandidateStarter(String processDefinitionId, String userId, String groupId) {
try {
if (userId != null) {
getProcessEngine().getRepositoryService().deleteCandidateStarterUser(processDefinitionId, userId);
} else {
getProcessEngine().getRepositoryService().deleteCandidateStarterGroup(processDefinitionId, groupId);
}
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void suspendProcessDefinition(String processDefinitionId, String processDefinitionKey, boolean suspendProcessInstances, Date suspensionDate, String tenantId) {
try {
if (processDefinitionId != null) {
......@@ -123,6 +149,15 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
}
public void setProcessDefinitionCategory(String processDefinitionId, String category) {
try {
getProcessEngine().getRepositoryService().setProcessDefinitionCategory(processDefinitionId, category);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public Deployment deploy(DeploymentBuilderImpl activiti6DeploymentBuilder) {
try {
DeploymentBuilder deploymentBuilder = getProcessEngine().getRepositoryService().createDeployment();
......@@ -176,7 +211,11 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
public void setDeploymentCategory(String deploymentId, String category) {
getProcessEngine().getRepositoryService().setDeploymentCategory(deploymentId, category);
try {
getProcessEngine().getRepositoryService().setDeploymentCategory(deploymentId, category);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void deleteDeployment(String deploymentId, boolean cascade) {
......@@ -207,16 +246,60 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
}
public void updateBusinessKey(String processInstanceId, String businessKey) {
try {
getProcessEngine().getRuntimeService().updateBusinessKey(processInstanceId, businessKey);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void suspendProcessInstance(String processInstanceId) {
getProcessEngine().getRuntimeService().suspendProcessInstanceById(processInstanceId);
try {
getProcessEngine().getRuntimeService().suspendProcessInstanceById(processInstanceId);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void activateProcessInstance(String processInstanceId) {
getProcessEngine().getRuntimeService().activateProcessInstanceById(processInstanceId);
try {
getProcessEngine().getRuntimeService().activateProcessInstanceById(processInstanceId);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void deleteProcessInstance(String processInstanceId, String deleteReason) {
getProcessEngine().getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);
try {
getProcessEngine().getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void addIdentityLinkForProcessInstance(String processInstanceId, String userId, String groupId, String identityLinkType) {
try {
if (userId != null) {
getProcessEngine().getRuntimeService().addUserIdentityLink(processInstanceId, userId, identityLinkType);
} else {
getProcessEngine().getRuntimeService().addGroupIdentityLink(processInstanceId, groupId, identityLinkType);
}
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void deleteIdentityLinkForProcessInstance(String processInstanceId, String userId, String groupId, String identityLinkType) {
try {
if (userId != null) {
getProcessEngine().getRuntimeService().deleteUserIdentityLink(processInstanceId, userId, identityLinkType);
} else {
getProcessEngine().getRuntimeService().deleteGroupIdentityLink(processInstanceId, groupId, identityLinkType);
}
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void completeTask(TaskEntity taskEntity, Map<String, Object> variables, boolean localScope) {
......@@ -230,6 +313,45 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
}
public void claimTask(String taskId, String userId) {
if (Authentication.getAuthenticatedUserId() != null) {
org.activiti5.engine.impl.identity.Authentication.setAuthenticatedUserId(Authentication.getAuthenticatedUserId());
}
try {
getProcessEngine().getTaskService().claim(taskId, userId);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void setTaskDueDate(String taskId, Date dueDate) {
try {
getProcessEngine().getTaskService().setDueDate(taskId, dueDate);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void setTaskPriority(String taskId, int priority) {
try {
getProcessEngine().getTaskService().setPriority(taskId, priority);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void deleteTask(String taskId, String deleteReason, boolean cascade) {
try {
if (deleteReason != null) {
getProcessEngine().getTaskService().deleteTask(taskId, deleteReason);
} else {
getProcessEngine().getTaskService().deleteTask(taskId, cascade);
}
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public ProcessInstance submitStartFormData(String processDefinitionId, String businessKey, Map<String, String> properties) {
if (Authentication.getAuthenticatedUserId() != null) {
org.activiti5.engine.impl.identity.Authentication.setAuthenticatedUserId(Authentication.getAuthenticatedUserId());
......@@ -258,8 +380,12 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
public void saveTask(TaskEntity task) {
org.activiti5.engine.impl.persistence.entity.TaskEntity activiti5Task = convertToActiviti5TaskEntity(task);
getProcessEngine().getTaskService().saveTask(activiti5Task);
try {
org.activiti5.engine.impl.persistence.entity.TaskEntity activiti5Task = convertToActiviti5TaskEntity(task);
getProcessEngine().getTaskService().saveTask(activiti5Task);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void addIdentityLink(String taskId, String identityId, int identityIdType, String identityType) {
......@@ -270,6 +396,14 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
}
public void deleteIdentityLink(String taskId, String userId, String groupId, String identityLinkType) {
if (userId != null) {
getProcessEngine().getTaskService().deleteCandidateUser(taskId, userId);
} else {
getProcessEngine().getTaskService().deleteGroupIdentityLink(taskId, groupId, identityLinkType);
}
}
public Attachment createAttachment(String attachmentType, String taskId, String processInstanceId, String attachmentName, String attachmentDescription, InputStream content, String url) {
try {
if (Authentication.getAuthenticatedUserId() != null) {
......@@ -343,15 +477,8 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
public void executeJob(Job job) {
if (job == null) return;
final ProcessEngineConfigurationImpl processEngineConfig = (ProcessEngineConfigurationImpl) getProcessEngine().getProcessEngineConfiguration();
final org.activiti5.engine.impl.persistence.entity.JobEntity activity5Job = convertToActiviti5JobEntity((JobEntity) job);
processEngineConfig.getCommandExecutor().execute(new Command<Void>() {
@Override
public Void execute(CommandContext commandContext) {
activity5Job.execute(commandContext);
return null;
}
});
final org.activiti5.engine.impl.persistence.entity.JobEntity activiti5Job = convertToActiviti5JobEntity((JobEntity) job);
processEngineConfig.getCommandExecutor().execute(new ExecuteJobsCmd(activiti5Job));
}
public void executeJobWithLockAndRetry(JobEntity job) {
......@@ -361,6 +488,22 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
AsyncJobUtil.executeJob(activity5Job, processEngineConfig.getCommandExecutor());
}
public void deleteJob(String jobId) {
try {
getProcessEngine().getManagementService().deleteJob(jobId);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void setJobRetries(String jobId, int retries) {
try {
getProcessEngine().getManagementService().setJobRetries(jobId, retries);
} catch (org.activiti5.engine.ActivitiException e) {
handleActivitiException(e);
}
}
public void addEventListener(Object listener) {
if (listener instanceof ActivitiEventListener == false) {
throw new ActivitiException("listener does not implement org.activiti5.engine.delegate.event.ActivitiEventListener interface");
......@@ -380,9 +523,15 @@ public class DefaultActiviti5CompatibilityHandler implements Activiti5Compatibil
}
public void setClock(Clock clock) {
org.activiti5.engine.runtime.Clock activiti5Clock = new org.activiti5.engine.impl.util.DefaultClockImpl();
activiti5Clock.setCurrentCalendar(clock.getCurrentCalendar());
getProcessEngine().getProcessEngineConfiguration().setClock(activiti5Clock);
ProcessEngineConfiguration processEngineConfig = getProcessEngine().getProcessEngineConfiguration();
if (processEngineConfig.getClock() == null) {
org.activiti5.engine.runtime.Clock activiti5Clock = new org.activiti5.engine.impl.util.DefaultClockImpl();
activiti5Clock.setCurrentCalendar(clock.getCurrentCalendar());
getProcessEngine().getProcessEngineConfiguration().setClock(activiti5Clock);
} else {
org.activiti5.engine.runtime.Clock activiti5Clock = processEngineConfig.getClock();
activiti5Clock.setCurrentCalendar(clock.getCurrentCalendar());
}
}
public Object getRawProcessConfiguration() {
......
......@@ -79,7 +79,7 @@ public class ExecuteJobsCmd implements Command<Object>, Serializable {
FailedJobListener failedJobListener = null;
try {
// When transaction is rolled back, decrement retries
failedJobListener = new FailedJobListener(commandContext.getProcessEngineConfiguration().getCommandExecutor(), jobId);
failedJobListener = new FailedJobListener(commandContext.getProcessEngineConfiguration().getCommandExecutor(), job.getId());
commandContext.getTransactionContext().addTransactionListener(
TransactionState.ROLLED_BACK,
failedJobListener
......@@ -107,7 +107,11 @@ public class ExecuteJobsCmd implements Command<Object>, Serializable {
}
// Finally, Throw the exception to indicate the ExecuteJobCmd failed
throw new ActivitiException("Job " + jobId + " failed", exception);
if (exception instanceof ActivitiException == false) {
throw new ActivitiException("Job " + jobId + " failed", exception);
} else {
throw (ActivitiException) exception;
}
} finally {
if (jobExecutorContext != null) {
jobExecutorContext.setCurrentJob(null);
......
......@@ -190,7 +190,7 @@ public class AttachmentEventsTest extends PluggableActivitiTestCase {
}
public void testAttachmentEntityEventsOnHistoricTaskDelete() throws Exception {
if(processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {
if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {
Task task = null;
try {
task = taskService.newTask();
......
......@@ -12,12 +12,12 @@
*/
package org.activiti5.engine.test.api.event;
import org.activiti.engine.delegate.event.ActivitiEntityEvent;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.ActivitiMembershipEvent;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti5.engine.delegate.event.ActivitiEntityEvent;
import org.activiti5.engine.delegate.event.ActivitiEvent;
import org.activiti5.engine.delegate.event.ActivitiEventType;
import org.activiti5.engine.delegate.event.ActivitiMembershipEvent;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
/**
......@@ -27,7 +27,7 @@ import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
*/
public class GroupEventsTest extends PluggableActivitiTestCase {
private TestActivitiEntityEventListener listener;
private TestActiviti6EntityEventListener listener;
/**
* Test create, update and delete events of Groups.
......@@ -94,10 +94,8 @@ public class GroupEventsTest extends PluggableActivitiTestCase {
* Test create, update and delete events of Groups.
*/
public void testGroupMembershipEvents() throws Exception {
TestActivitiEventListener membershipListener = new TestActivitiEventListener();
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
activiti5ProcessConfig.getEventDispatcher().addEventListener(membershipListener);
TestActiviti6EventListener membershipListener = new TestActiviti6EventListener();
processEngineConfiguration.getEventDispatcher().addEventListener(membershipListener);
User user = null;
Group group = null;
......@@ -151,7 +149,7 @@ public class GroupEventsTest extends PluggableActivitiTestCase {
assertNull(event.getProcessInstanceId());
membershipListener.clearEventsReceived();
} finally {
activiti5ProcessConfig.getEventDispatcher().removeEventListener(membershipListener);
processEngineConfiguration.getEventDispatcher().removeEventListener(membershipListener);
if(user != null) {
identityService.deleteUser(user.getId());
}
......@@ -164,10 +162,8 @@ public class GroupEventsTest extends PluggableActivitiTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
listener = new TestActivitiEntityEventListener(Group.class);
activiti5ProcessConfig.getEventDispatcher().addEventListener(listener);
listener = new TestActiviti6EntityEventListener(Group.class);
processEngineConfiguration.getEventDispatcher().addEventListener(listener);
}
@Override
......@@ -175,9 +171,7 @@ public class GroupEventsTest extends PluggableActivitiTestCase {
super.tearDown();
if (listener != null) {
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
activiti5ProcessConfig.getEventDispatcher().removeEventListener(listener);
processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
}
}
}
......@@ -14,13 +14,13 @@ package org.activiti5.engine.test.api.event;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;
import org.activiti5.engine.delegate.event.ActivitiEntityEvent;
import org.activiti5.engine.delegate.event.ActivitiEvent;
import org.activiti5.engine.delegate.event.ActivitiEventType;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
import org.activiti5.engine.task.IdentityLink;
/**
* Test case for all {@link ActivitiEvent}s related to process definitions.
......@@ -130,8 +130,7 @@ public class IdentityLinkEventsTest extends PluggableActivitiTestCase {
public void testTaskIdentityLinks() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.singleResult();
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(task);
// Add identity link
......@@ -220,7 +219,7 @@ public class IdentityLinkEventsTest extends PluggableActivitiTestCase {
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
listener = new TestActivitiEntityEventListener(IdentityLink.class);
listener = new TestActivitiEntityEventListener(org.activiti5.engine.task.IdentityLink.class);
activiti5ProcessConfig.getEventDispatcher().addEventListener(listener);
}
......
......@@ -16,7 +16,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.activiti.engine.impl.util.DefaultClockImpl;
import org.activiti.engine.repository.DeploymentProperties;
import org.activiti.engine.runtime.Clock;
import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.ProcessInstance;
......@@ -41,6 +41,9 @@ public class JobEventsTest extends PluggableActivitiTestCase {
*/
@Deployment
public void testJobEntityEvents() throws Exception {
Clock clock = processEngineConfiguration.getClock();
Date previousTime = clock.getCurrentTime();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJobEvents");
Job theJob = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(theJob);
......@@ -62,7 +65,7 @@ public class JobEventsTest extends PluggableActivitiTestCase {
assertEquals(1, listener.getEventsReceived().size());
event = listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
Job updatedJob = (Job) ((ActivitiEntityEvent) event).getEntity();
org.activiti5.engine.runtime.Job updatedJob = (org.activiti5.engine.runtime.Job) ((ActivitiEntityEvent) event).getEntity();
assertEquals(5, updatedJob.getRetries());
checkEventContext(event, theJob, true);
......@@ -71,7 +74,8 @@ public class JobEventsTest extends PluggableActivitiTestCase {
// Force timer to fire
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
processEngineConfiguration.getClock().setCurrentTime(tomorrow.getTime());
clock.setCurrentCalendar(tomorrow);
processEngineConfiguration.setClock(clock);
waitForJobExecutorToProcessAllJobs(2000, 100);
// Check delete-event has been dispatched
......@@ -91,6 +95,9 @@ public class JobEventsTest extends PluggableActivitiTestCase {
event = listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.JOB_EXECUTION_SUCCESS, event.getType());
checkEventContext(event, theJob, true);
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
}
/**
......@@ -98,14 +105,13 @@ public class JobEventsTest extends PluggableActivitiTestCase {
*/
@Deployment
public void testRepetitionJobEntityEvents() throws Exception {
Clock previousClock = processEngineConfiguration.getClock();
Clock testClock = new DefaultClockImpl();
processEngineConfiguration.setClock(testClock);
Clock clock = processEngineConfiguration.getClock();
Date previousTime = clock.getCurrentTime();
Date now = new Date();
testClock.setCurrentTime(now);
clock.setCurrentTime(now);
processEngineConfiguration.setClock(clock);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testRepetitionJobEvents");
Job theJob = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(theJob);
......@@ -123,28 +129,31 @@ public class JobEventsTest extends PluggableActivitiTestCase {
listener.clearEventsReceived();
try {
waitForJobExecutorToProcessAllJobs(2000, 100);
fail("a new job must be prepared because there are 2 repeats");
}catch (Exception ex){
waitForJobExecutorToProcessAllJobs(2000, 100);
fail("a new job must be prepared because there are 2 repeats");
} catch (Exception ex){
//expected exception because a new job is prepared
}
}
testClock.setCurrentTime(new Date(now.getTime() + 10000L));
clock.setCurrentTime(new Date(now.getTime() + 10000L));
processEngineConfiguration.setClock(clock);
try {
waitForJobExecutorToProcessAllJobs(2000, 100);
fail("a new job must be prepared because there are 2 repeats");
}catch (Exception ex){
} catch (Exception ex){
//expected exception because a new job is prepared
}
testClock.setCurrentTime(new Date(now.getTime() + 20000L));
clock.setCurrentTime(new Date(now.getTime() + 20000L));
processEngineConfiguration.setClock(clock);
try {
waitForJobExecutorToProcessAllJobs(2000, 100);
}catch (Exception ex){
fail("There must be no jobs remaining");
}
testClock.setCurrentTime(new Date(now.getTime() + 30000L));
clock.setCurrentTime(new Date(now.getTime() + 30000L));
processEngineConfiguration.setClock(clock);
try {
waitForJobExecutorToProcessAllJobs(2000, 100);
}catch (Exception ex){
......@@ -159,18 +168,20 @@ public class JobEventsTest extends PluggableActivitiTestCase {
}
}
listener.clearEventsReceived();
processEngineConfiguration.setClock(previousClock);
assertEquals(2, timerFiredCount);
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
}
@Deployment
public void testJobCanceledEventOnBoundaryEvent() throws Exception {
Clock testClock = new DefaultClockImpl();
processEngineConfiguration.setClock(testClock);
Clock clock = processEngineConfiguration.getClock();
Date previousTime = clock.getCurrentTime();
testClock.setCurrentTime(new Date());
clock.setCurrentTime(new Date());
processEngineConfiguration.setClock(clock);
runtimeService.startProcessInstanceByKey("testTimerCancelledEvent");
listener.clearEventsReceived();
......@@ -179,12 +190,14 @@ public class JobEventsTest extends PluggableActivitiTestCase {
taskService.complete(task.getId());
checkEventCount(1, ActivitiEventType.JOB_CANCELED);
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
}
@Deployment(resources = "org/activiti5/engine/test/api/event/JobEventsTest.testJobCanceledEventOnBoundaryEvent.bpmn20.xml")
public void testJobCanceledEventByManagementService() throws Exception {
// GIVEN
processEngineConfiguration.getClock().setCurrentTime(new Date());
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testTimerCancelledEvent");
listener.clearEventsReceived();
......@@ -200,11 +213,19 @@ public class JobEventsTest extends PluggableActivitiTestCase {
public void testJobCanceledEventOnProcessRedeploy() throws Exception {
// GIVEN
// deploy process definition
String deployment1 = repositoryService.createDeployment().addClasspathResource("org/activiti5/engine/test/api/event/JobEventsTest.testTimerFiredForTimerStart.bpmn20.xml").deploy().getId();
String deployment1 = repositoryService.createDeployment()
.addClasspathResource("org/activiti5/engine/test/api/event/JobEventsTest.testTimerFiredForTimerStart.bpmn20.xml")
.deploymentProperty(DeploymentProperties.DEPLOY_AS_ACTIVITI5_PROCESS_DEFINITION, Boolean.TRUE)
.deploy()
.getId();
listener.clearEventsReceived();
// WHEN
String deployment2 = repositoryService.createDeployment().addClasspathResource("org/activiti5/engine/test/api/event/JobEventsTest.testTimerFiredForTimerStart.bpmn20.xml").deploy().getId();
String deployment2 = repositoryService.createDeployment()
.addClasspathResource("org/activiti5/engine/test/api/event/JobEventsTest.testTimerFiredForTimerStart.bpmn20.xml")
.deploymentProperty(DeploymentProperties.DEPLOY_AS_ACTIVITI5_PROCESS_DEFINITION, Boolean.TRUE)
.deploy()
.getId();
// THEN
checkEventCount(1, ActivitiEventType.JOB_CANCELED);
......@@ -225,48 +246,63 @@ public class JobEventsTest extends PluggableActivitiTestCase {
}
/**
* Test TIMER_FIRED event for timer start bpmn event.
*/
@Deployment
public void testTimerFiredForTimerStart() throws Exception {
Clock clock = processEngineConfiguration.getClock();
Date previousTime = clock.getCurrentTime();
// there should be one job after process definition deployment
// Force timer to start the process
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
clock.setCurrentCalendar(tomorrow);
processEngineConfiguration.setClock(clock);
waitForJobExecutorToProcessAllJobs(2000, 200);
// Check Timer fired event has been dispatched
assertEquals(3, listener.getEventsReceived().size());
assertEquals(ActivitiEventType.TIMER_FIRED, listener.getEventsReceived().get(0).getType());
checkEventCount(0, ActivitiEventType.JOB_CANCELED);
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
}
/**
* Test TIMER_FIRED event for timer start bpmn event.
*/
@Deployment
public void testTimerFiredForTimerStart() throws Exception {
// there should be one job after process definition deployment
// Force timer to start the process
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
processEngineConfiguration.getClock().setCurrentTime(tomorrow.getTime());
waitForJobExecutorToProcessAllJobs(2000, 100);
// Check Timer fired event has been dispatched
assertEquals(3, listener.getEventsReceived().size());
assertEquals(ActivitiEventType.TIMER_FIRED, listener.getEventsReceived().get(0).getType());
checkEventCount(0, ActivitiEventType.JOB_CANCELED);
}
/**
* Test TIMER_FIRED event for intermediate timer bpmn event.
*/
@Deployment
public void testTimerFiredForIntermediateTimer() throws Exception {
runtimeService.startProcessInstanceByKey("testTimerFiredForIntermediateTimer");
// Force timer to start the process
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
processEngineConfiguration.getClock().setCurrentTime(tomorrow.getTime());
waitForJobExecutorToProcessAllJobs(2000, 100);
checkEventCount(0, ActivitiEventType.JOB_CANCELED);
checkEventCount(1, ActivitiEventType.TIMER_FIRED);
}
/**
* Test TIMER_FIRED event for intermediate timer bpmn event.
*/
@Deployment
public void testTimerFiredForIntermediateTimer() throws Exception {
Clock clock = processEngineConfiguration.getClock();
Date previousTime = clock.getCurrentTime();
runtimeService.startProcessInstanceByKey("testTimerFiredForIntermediateTimer");
// Force timer to start the process
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
clock.setCurrentCalendar(tomorrow);
processEngineConfiguration.setClock(clock);
waitForJobExecutorToProcessAllJobs(2000, 200);
checkEventCount(0, ActivitiEventType.JOB_CANCELED);
checkEventCount(1, ActivitiEventType.TIMER_FIRED);
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
}
/**
/**
* Test create, update and delete events of jobs entities.
*/
@Deployment
public void testJobEntityEventsException() throws Exception {
Clock clock = processEngineConfiguration.getClock();
Date previousTime = clock.getCurrentTime();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJobEvents");
Job theJob = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult();
assertNotNull(theJob);
......@@ -279,7 +315,8 @@ public class JobEventsTest extends PluggableActivitiTestCase {
// Force timer to fire
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
processEngineConfiguration.getClock().setCurrentTime(tomorrow.getTime());
clock.setCurrentCalendar(tomorrow);
processEngineConfiguration.setClock(clock);
try {
managementService.executeJob(theJob.getId());
fail("Expected exception");
......@@ -312,14 +349,17 @@ public class JobEventsTest extends PluggableActivitiTestCase {
event = listener.getEventsReceived().get(4);
assertEquals(ActivitiEventType.JOB_RETRIES_DECREMENTED, event.getType());
assertEquals(0, ((Job) ((ActivitiEntityEvent) event).getEntity()).getRetries());
assertEquals(0, ((org.activiti5.engine.runtime.Job) ((ActivitiEntityEvent) event).getEntity()).getRetries());
checkEventContext(event, theJob, true);
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
}
protected void checkEventContext(ActivitiEvent event, Job entity, boolean scopeExecutionExpected) {
assertEquals(entity.getProcessInstanceId(), event.getProcessInstanceId());
assertEquals(entity.getProcessDefinitionId(), event.getProcessDefinitionId());
if(scopeExecutionExpected) {
if (scopeExecutionExpected) {
assertEquals(entity.getExecutionId(), event.getExecutionId());
} else {
assertEquals(entity.getProcessInstanceId(), event.getExecutionId());
......@@ -327,8 +367,8 @@ public class JobEventsTest extends PluggableActivitiTestCase {
assertTrue(event instanceof ActivitiEntityEvent);
ActivitiEntityEvent entityEvent = (ActivitiEntityEvent) event;
assertTrue(entityEvent.getEntity() instanceof Job);
assertEquals(entity.getId(), ((Job) entityEvent.getEntity()).getId());
assertTrue(entityEvent.getEntity() instanceof org.activiti5.engine.runtime.Job);
assertEquals(entity.getId(), ((org.activiti5.engine.runtime.Job) entityEvent.getEntity()).getId());
}
@Override
......@@ -336,7 +376,7 @@ public class JobEventsTest extends PluggableActivitiTestCase {
super.setUp();
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
listener = new TestActivitiEntityEventListener(Job.class);
listener = new TestActivitiEntityEventListener(org.activiti5.engine.runtime.Job.class);
activiti5ProcessConfig.getEventDispatcher().addEventListener(listener);
}
......
......@@ -12,10 +12,10 @@
*/
package org.activiti5.engine.test.api.event;
import org.activiti.engine.delegate.event.ActivitiEntityEvent;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.repository.Model;
import org.activiti5.engine.delegate.event.ActivitiEntityEvent;
import org.activiti5.engine.delegate.event.ActivitiEvent;
import org.activiti5.engine.delegate.event.ActivitiEventType;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
/**
......@@ -25,7 +25,7 @@ import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
*/
public class ModelEventsTest extends PluggableActivitiTestCase {
private TestActivitiEntityEventListener listener;
private TestActiviti6EntityEventListener listener;
/**
* Test create, update and delete events of model entities.
......@@ -73,7 +73,7 @@ public class ModelEventsTest extends PluggableActivitiTestCase {
listener.clearEventsReceived();
} finally {
if(model != null && repositoryService.getModel(model.getId()) != null) {
if (model != null && repositoryService.getModel(model.getId()) != null) {
repositoryService.deleteModel(model.getId());
}
}
......@@ -82,10 +82,8 @@ public class ModelEventsTest extends PluggableActivitiTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
listener = new TestActivitiEntityEventListener(Model.class);
activiti5ProcessConfig.getEventDispatcher().addEventListener(listener);
listener = new TestActiviti6EntityEventListener(Model.class);
processEngineConfiguration.getEventDispatcher().addEventListener(listener);
}
@Override
......@@ -93,9 +91,7 @@ public class ModelEventsTest extends PluggableActivitiTestCase {
super.tearDown();
if (listener != null) {
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
activiti5ProcessConfig.getEventDispatcher().removeEventListener(listener);
processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
}
}
}
......@@ -12,14 +12,14 @@
*/
package org.activiti5.engine.test.api.event;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.persistence.entity.TimerEntity;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.test.Deployment;
import org.activiti5.engine.delegate.event.ActivitiEntityEvent;
import org.activiti5.engine.delegate.event.ActivitiEvent;
import org.activiti5.engine.delegate.event.ActivitiEventType;
import org.activiti5.engine.delegate.event.impl.ActivitiEventBuilder;
import org.activiti5.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti5.engine.impl.persistence.entity.TimerEntity;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
/**
......@@ -48,11 +48,11 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertEquals(processDefinition.getId(), ((ProcessDefinition) event.getEntity()).getId());
assertEquals(processDefinition.getId(), ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
assertEquals(processDefinition.getId(), ((ProcessDefinition) event.getEntity()).getId());
assertEquals(processDefinition.getId(), ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getId());
listener.clearEventsReceived();
// Check update event when category is updated
......@@ -62,8 +62,8 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertEquals(processDefinition.getId(), ((ProcessDefinition) event.getEntity()).getId());
assertEquals("test", ((ProcessDefinition) event.getEntity()).getCategory());
assertEquals(processDefinition.getId(), ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getId());
assertEquals("test", ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getCategory());
listener.clearEventsReceived();
// Check update event when suspended/activated
......@@ -72,11 +72,11 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(processDefinition.getId(), ((ProcessDefinition) event.getEntity()).getId());
assertEquals(processDefinition.getId(), ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getId());
assertEquals(ActivitiEventType.ENTITY_SUSPENDED, event.getType());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_ACTIVATED, event.getType());
assertEquals(processDefinition.getId(), ((ProcessDefinition) event.getEntity()).getId());
assertEquals(processDefinition.getId(), ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getId());
listener.clearEventsReceived();
// Check delete event when category is updated
......@@ -88,7 +88,7 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_DELETED, event.getType());
assertEquals(processDefinition.getId(), ((ProcessDefinition) event.getEntity()).getId());
assertEquals(processDefinition.getId(), ((org.activiti5.engine.repository.ProcessDefinition) event.getEntity()).getId());
listener.clearEventsReceived();
}
......@@ -97,11 +97,14 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
*/
@Deployment(resources= {"org/activiti5/engine/test/bpmn/event/timer/StartTimerEventTest.testDurationStartTimerEvent.bpmn20.xml"})
public void testTimerStartEventDeployment() {
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.
createProcessDefinitionQuery().processDefinitionKey("startTimerEventExample").singleResult();
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) activiti5ProcessConfig.getRepositoryService().
createProcessDefinitionQuery().processDefinitionKey("startTimerEventExample").singleResult();
ActivitiEntityEvent processDefinitionCreated = ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, processDefinition);
TimerEntity timer = (TimerEntity) managementService.createJobQuery().singleResult();
TimerEntity timer = (TimerEntity) activiti5ProcessConfig.getManagementService().createJobQuery().singleResult();
ActivitiEntityEvent timerCreated = ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, timer);
assertSequence(processDefinitionCreated, timerCreated);
listener.clearEventsReceived();
......@@ -113,10 +116,12 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
for (int index = 0; index < listener.getEventsReceived().size(); index++) {
ActivitiEvent activitiEvent = listener.getEventsReceived().get(index);
if (isEqual(before, activitiEvent))
if (isEqual(before, activitiEvent)) {
beforeIndex = index;
if (isEqual(after, activitiEvent))
}
if (isEqual(after, activitiEvent)) {
afterIndex = index;
}
}
assertTrue(beforeIndex < afterIndex);
}
......@@ -144,7 +149,7 @@ public class ProcessDefinitionEventsTest extends PluggableActivitiTestCase {
listener = new TestMultipleActivitiEventListener();
listener.setEventClasses(ActivitiEntityEvent.class);
listener.setEntityClasses(ProcessDefinition.class, TimerEntity.class);
listener.setEntityClasses(org.activiti5.engine.repository.ProcessDefinition.class, org.activiti5.engine.impl.persistence.entity.TimerEntity.class);
activiti5ProcessConfig.getEventDispatcher().addEventListener(listener);
}
......
......@@ -60,21 +60,21 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.PROCESS_STARTED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
......@@ -89,14 +89,14 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(ActivitiEventType.ENTITY_SUSPENDED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_ACTIVATED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
......@@ -108,14 +108,14 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(ActivitiEventType.ENTITY_SUSPENDED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_ACTIVATED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
......@@ -125,7 +125,7 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
runtimeService.updateBusinessKey(processInstance.getId(), "thekey");
assertEquals(1, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
......@@ -159,18 +159,18 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.PROCESS_STARTED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getId());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
......@@ -180,26 +180,26 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
event = (ActivitiEntityEvent) listener.getEventsReceived().get(3);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getParentId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getParentId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(4);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
assertEquals(processInstance.getId(), ((ProcessInstance) event.getEntity()).getParentId());
assertEquals(processInstance.getId(), ((org.activiti5.engine.runtime.ProcessInstance) event.getEntity()).getParentId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(5);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertEquals("simpleSubProcess", ((ExecutionEntity) event.getEntity()).getProcessDefinition().getKey());
assertEquals("simpleSubProcess", ((org.activiti5.engine.impl.persistence.entity.ExecutionEntity) event.getEntity()).getProcessDefinition().getKey());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(6);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
assertEquals("simpleSubProcess", ((ExecutionEntity) event.getEntity()).getProcessDefinition().getKey());
assertEquals("simpleSubProcess", ((org.activiti5.engine.impl.persistence.entity.ExecutionEntity) event.getEntity()).getProcessDefinition().getKey());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(7);
assertEquals(ActivitiEventType.PROCESS_STARTED, event.getType());
assertEquals("simpleSubProcess", ((ExecutionEntity) event.getEntity()).getProcessDefinition().getKey());
assertEquals("simpleSubProcess", ((org.activiti5.engine.impl.persistence.entity.ExecutionEntity) event.getEntity()).getProcessDefinition().getKey());
assertTrue(event instanceof ActivitiProcessStartedEvent);
assertEquals(processInstance.getProcessDefinitionId(), ((ActivitiProcessStartedEvent)event).getNestedProcessDefinitionId());
assertEquals(processInstance.getId(), ((ActivitiProcessStartedEvent)event).getNestedProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), ((ActivitiProcessStartedEvent) event).getNestedProcessDefinitionId());
assertEquals(processInstance.getId(), ((ActivitiProcessStartedEvent) event).getNestedProcessInstanceId());
listener.clearEventsReceived();
}
......@@ -507,10 +507,10 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
@Override
public void onEvent(ActivitiEvent event) {
if (event instanceof ActivitiEntityEvent && ProcessInstance.class.isAssignableFrom(((ActivitiEntityEvent) event).getEntity().getClass())) {
// check whether entity in the event is initialized before adding to the list.
assertNotNull(((ExecutionEntity) ((ActivitiEntityEvent) event).getEntity()).getId());
eventsReceived.add(event);
if (event instanceof ActivitiEntityEvent && org.activiti5.engine.runtime.ProcessInstance.class.isAssignableFrom(((ActivitiEntityEvent) event).getEntity().getClass())) {
// check whether entity in the event is initialized before adding to the list.
assertNotNull(((ExecutionEntity) ((ActivitiEntityEvent) event).getEntity()).getId());
eventsReceived.add(event);
} else if (ActivitiEventType.PROCESS_CANCELLED.equals(event.getType()) || ActivitiEventType.ACTIVITY_CANCELLED.equals(event.getType())) {
eventsReceived.add(event);
}
......
......@@ -14,7 +14,6 @@ package org.activiti5.engine.test.api.event;
import java.util.Date;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;
......@@ -48,22 +47,22 @@ public class TaskEventsTest extends PluggableActivitiTestCase {
assertEquals(3, listener.getEventsReceived().size());
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
Task taskFromEvent = (Task) event.getEntity();
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
org.activiti5.engine.task.Task taskFromEvent = (org.activiti5.engine.task.Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertExecutionDetails(event, processInstance);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.TASK_CREATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertExecutionDetails(event, processInstance);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.TASK_CREATED, event.getType());
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
taskFromEvent = (org.activiti5.engine.task.Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertExecutionDetails(event, processInstance);
listener.clearEventsReceived();
listener.clearEventsReceived();
// Update duedate, owner and priority should trigger update-event
taskService.setDueDate(task.getId(), new Date());
......@@ -107,7 +106,7 @@ public class TaskEventsTest extends PluggableActivitiTestCase {
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_COMPLETED, event.getType());
assertExecutionDetails(event, processInstance);
TaskEntity taskEntity = (TaskEntity) event.getEntity();
org.activiti5.engine.impl.persistence.entity.TaskEntity taskEntity = (org.activiti5.engine.impl.persistence.entity.TaskEntity) event.getEntity();
assertNotNull(taskEntity.getDueDate());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_DELETED, event.getType());
......@@ -129,36 +128,35 @@ public class TaskEventsTest extends PluggableActivitiTestCase {
assertEquals(2, listener.getEventsReceived().size());
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_ASSIGNED, event.getType());
assertTrue(event.getEntity() instanceof Task);
Task taskFromEvent = (Task) event.getEntity();
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
org.activiti5.engine.task.Task taskFromEvent = (org.activiti5.engine.task.Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals("kermit", taskFromEvent.getAssignee());
assertExecutionDetails(event, processInstance);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
assertExecutionDetails(event, processInstance);
listener.clearEventsReceived();
// Set assignee through updateTask
task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.singleResult();
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setAssignee("newAssignee");
taskService.saveTask(task);
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_ASSIGNED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
taskFromEvent = (org.activiti5.engine.task.Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals("newAssignee", taskFromEvent.getAssignee());
assertExecutionDetails(event, processInstance);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
assertExecutionDetails(event, processInstance);
listener.clearEventsReceived();
......@@ -167,15 +165,15 @@ public class TaskEventsTest extends PluggableActivitiTestCase {
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_ASSIGNED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
taskFromEvent = (org.activiti5.engine.task.Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals(null, taskFromEvent.getAssignee());
assertExecutionDetails(event, processInstance);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
assertExecutionDetails(event, processInstance);
listener.clearEventsReceived();
}
......@@ -199,144 +197,10 @@ public class TaskEventsTest extends PluggableActivitiTestCase {
assertEquals(1, listener.getEventsReceived().size());
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_DELETED, event.getType());
assertTrue(event.getEntity() instanceof Task);
Task taskFromEvent = (Task) event.getEntity();
assertTrue(event.getEntity() instanceof org.activiti5.engine.task.Task);
org.activiti5.engine.task.Task taskFromEvent = (org.activiti5.engine.task.Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertExecutionDetails(event, processInstance);
try {
task = taskService.newTask();
task.setCategory("123");
task.setDescription("Description");
taskService.saveTask(task);
listener.clearEventsReceived();
// Delete standalone task, only a delete-event should be dispatched
taskService.deleteTask(task.getId());
assertEquals(1, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_DELETED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
} finally {
if(task != null) {
String taskId = task.getId();
task = taskService.createTaskQuery().taskId(taskId).singleResult();
if(task != null) {
// If task still exists, delete it to have a clean DB after test
taskService.deleteTask(taskId);
}
historyService.deleteHistoricTaskInstance(taskId);
}
}
}
/**
* Check all events for tasks not related to a process-instance
*/
public void testStandaloneTaskEvents() throws Exception {
Task task = null;
try {
task = taskService.newTask();
task.setCategory("123");
task.setDescription("Description");
taskService.saveTask(task);
assertEquals(3, listener.getEventsReceived().size());
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
Task taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.TASK_CREATED, event.getType());
listener.clearEventsReceived();
// Update task
taskService.setOwner(task.getId(), "owner");
assertEquals(1, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals("owner", taskFromEvent.getOwner());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
listener.clearEventsReceived();
// Assign task
taskService.setAssignee(task.getId(), "kermit");
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_ASSIGNED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals("kermit", taskFromEvent.getAssignee());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
listener.clearEventsReceived();
// Complete task
taskService.complete(task.getId());
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_COMPLETED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_DELETED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
} finally {
if(task != null) {
String taskId = task.getId();
task = taskService.createTaskQuery().taskId(taskId).singleResult();
if(task != null) {
// If task still exists, delete it to have a clean DB after test
taskService.deleteTask(taskId);
}
historyService.deleteHistoricTaskInstance(taskId);
}
}
}
protected void assertExecutionDetails(ActivitiEvent event, ProcessInstance processInstance) {
......@@ -350,7 +214,7 @@ public class TaskEventsTest extends PluggableActivitiTestCase {
super.setUp();
org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl activiti5ProcessConfig = (org.activiti5.engine.impl.cfg.ProcessEngineConfigurationImpl)
processEngineConfiguration.getActiviti5CompatibilityHandler().getRawProcessConfiguration();
listener = new TestActivitiEntityEventListener(Task.class);
listener = new TestActivitiEntityEventListener(org.activiti5.engine.task.Task.class);
activiti5ProcessConfig.getEventDispatcher().addEventListener(listener);
}
......
/* 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.activiti5.engine.test.api.event;
import org.activiti.engine.delegate.event.ActivitiEntityEvent;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
/**
* Test case for all {@link ActivitiEvent}s related to tasks.
*
* @author Frederik Heremans
*/
public class TaskStandaloneEventsTest extends PluggableActivitiTestCase {
private TestActiviti6EntityEventListener listener;
/**
* Check all events for tasks not related to a process-instance
*/
public void testStandaloneTaskEvents() throws Exception {
Task task = null;
try {
task = taskService.newTask();
task.setCategory("123");
task.setDescription("Description");
taskService.saveTask(task);
assertEquals(3, listener.getEventsReceived().size());
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
Task taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(2);
assertEquals(ActivitiEventType.TASK_CREATED, event.getType());
listener.clearEventsReceived();
// Update task
taskService.setOwner(task.getId(), "owner");
assertEquals(1, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals("owner", taskFromEvent.getOwner());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
listener.clearEventsReceived();
// Assign task
taskService.setAssignee(task.getId(), "kermit");
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_ASSIGNED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertEquals("kermit", taskFromEvent.getAssignee());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
listener.clearEventsReceived();
// Complete task
taskService.complete(task.getId());
assertEquals(2, listener.getEventsReceived().size());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.TASK_COMPLETED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ENTITY_DELETED, event.getType());
assertTrue(event.getEntity() instanceof Task);
taskFromEvent = (Task) event.getEntity();
assertEquals(task.getId(), taskFromEvent.getId());
assertNull(event.getProcessDefinitionId());
assertNull(event.getProcessInstanceId());
assertNull(event.getExecutionId());
} finally {
if(task != null) {
String taskId = task.getId();
task = taskService.createTaskQuery().taskId(taskId).singleResult();
if(task != null) {
// If task still exists, delete it to have a clean DB after test
taskService.deleteTask(taskId);
}
historyService.deleteHistoricTaskInstance(taskId);
}
}
}
protected void assertExecutionDetails(ActivitiEvent event, ProcessInstance processInstance) {
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getId(), event.getExecutionId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
}
@Override
protected void setUp() throws Exception {
super.setUp();
listener = new TestActiviti6EntityEventListener(Task.class);
processEngineConfiguration.getEventDispatcher().addEventListener(listener);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
if (listener != null) {
processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
}
}
}
/* 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.activiti5.engine.test.api.event;
import java.util.ArrayList;
import java.util.List;
import org.activiti.engine.delegate.event.ActivitiEntityEvent;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
public class TestActiviti6EntityEventListener implements ActivitiEventListener {
private List<ActivitiEvent> eventsReceived;
private Class<?> entityClass;
public TestActiviti6EntityEventListener(Class<?> entityClass) {
this.entityClass = entityClass;
eventsReceived = new ArrayList<ActivitiEvent>();
}
public List<ActivitiEvent> getEventsReceived() {
return eventsReceived;
}
public void clearEventsReceived() {
eventsReceived.clear();
}
@Override
public void onEvent(ActivitiEvent event) {
if (event instanceof ActivitiEntityEvent && entityClass.isAssignableFrom(((ActivitiEntityEvent) event).getEntity().getClass())) {
eventsReceived.add(event);
}
}
@Override
public boolean isFailOnException() {
return true;
}
}
/* 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.activiti5.engine.test.api.event;
import java.util.ArrayList;
import java.util.List;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
public class TestActiviti6EventListener implements ActivitiEventListener {
private List<ActivitiEvent> eventsReceived;
public TestActiviti6EventListener() {
eventsReceived = new ArrayList<ActivitiEvent>();
}
public List<ActivitiEvent> getEventsReceived() {
return eventsReceived;
}
public void clearEventsReceived() {
eventsReceived.clear();
}
@Override
public void onEvent(ActivitiEvent event) {
eventsReceived.add(event);
}
@Override
public boolean isFailOnException() {
return false;
}
}
......@@ -22,6 +22,7 @@ import java.util.UUID;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.runtime.Clock;
import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.JobQuery;
import org.activiti.engine.runtime.ProcessInstance;
......@@ -32,7 +33,6 @@ import org.activiti5.engine.impl.interceptor.CommandContext;
import org.activiti5.engine.impl.interceptor.CommandExecutor;
import org.activiti5.engine.impl.persistence.entity.JobEntity;
import org.activiti5.engine.impl.persistence.entity.JobEntityManager;
import org.activiti5.engine.impl.persistence.entity.MessageEntity;
import org.activiti5.engine.impl.persistence.entity.TimerEntity;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
......@@ -48,6 +48,7 @@ public class JobQueryTest extends PluggableActivitiTestCase {
private CommandExecutor commandExecutor;
private TimerEntity timerEntity;
private Date previousTime;
private Date testStartTime;
private Date timerOneFireTime;
private Date timerTwoFireTime;
......@@ -69,6 +70,9 @@ public class JobQueryTest extends PluggableActivitiTestCase {
protected void setUp() throws Exception {
super.setUp();
Clock clock = processEngineConfiguration.getClock();
previousTime = clock.getCurrentTime();
this.commandExecutor = (CommandExecutor) processEngineConfiguration.getActiviti5CompatibilityHandler().getRawCommandExecutor();
deploymentId = repositoryService.createDeployment()
......@@ -81,7 +85,8 @@ public class JobQueryTest extends PluggableActivitiTestCase {
startTime.set(Calendar.MILLISECOND, 0);
Date t1 = startTime.getTime();
processEngineConfiguration.getClock().setCurrentTime(t1);
clock.setCurrentTime(t1);
processEngineConfiguration.setClock(clock);
processInstanceIdOne = runtimeService.startProcessInstanceByKey("timerOnTask").getId();
testStartTime = t1;
......@@ -90,37 +95,35 @@ public class JobQueryTest extends PluggableActivitiTestCase {
// Create proc inst that has timer that will fire on t2 + 1 hour
startTime.add(Calendar.HOUR_OF_DAY, 1);
Date t2 = startTime.getTime(); // t2 = t1 + 1 hour
processEngineConfiguration.getClock().setCurrentTime(t2);
clock.setCurrentTime(t2);
processEngineConfiguration.setClock(clock);
processInstanceIdTwo = runtimeService.startProcessInstanceByKey("timerOnTask").getId();
timerTwoFireTime = new Date(t2.getTime() + ONE_HOUR);
// Create proc inst that has timer that will fire on t3 + 1 hour
startTime.add(Calendar.HOUR_OF_DAY, 1);
Date t3 = startTime.getTime(); // t3 = t2 + 1 hour
processEngineConfiguration.getClock().setCurrentTime(t3);
clock.setCurrentTime(t3);
processEngineConfiguration.setClock(clock);
processInstanceIdThree = runtimeService.startProcessInstanceByKey("timerOnTask").getId();
timerThreeFireTime = new Date(t3.getTime() + ONE_HOUR);
// Create one message
messageId = commandExecutor.execute(new Command<String>() {
public String execute(CommandContext commandContext) {
MessageEntity message = new MessageEntity();
commandContext.getJobEntityManager().send(message);
return message.getId();
}
});
}
@Override
protected void tearDown() throws Exception {
repositoryService.deleteDeployment(deploymentId, true);
commandExecutor.execute(new CancelJobsCmd(messageId));
Clock clock = processEngineConfiguration.getClock();
clock.setCurrentTime(previousTime);
processEngineConfiguration.setClock(clock);
super.tearDown();
}
public void testQueryByNoCriteria() {
JobQuery query = managementService.createJobQuery();
verifyQueryResults(query, 4);
verifyQueryResults(query, 3);
}
public void testQueryByProcessInstanceId() {
......@@ -157,21 +160,21 @@ public class JobQueryTest extends PluggableActivitiTestCase {
public void testQueryByRetriesLeft() {
JobQuery query = managementService.createJobQuery().withRetriesLeft();
verifyQueryResults(query, 4);
verifyQueryResults(query, 3);
setRetries(processInstanceIdOne, 0);
// Re-running the query should give only 3 jobs now, since one job has retries=0
verifyQueryResults(query, 3);
verifyQueryResults(query, 2);
}
public void testQueryByExecutable() {
processEngineConfiguration.getClock().setCurrentTime(new Date(timerThreeFireTime.getTime() + ONE_SECOND)); // all jobs should be executable at t3 + 1hour.1second
JobQuery query = managementService.createJobQuery().executable();
verifyQueryResults(query, 4);
verifyQueryResults(query, 3);
// Setting retries of one job to 0, makes it non-executable
setRetries(processInstanceIdOne, 0);
verifyQueryResults(query, 3);
verifyQueryResults(query, 2);
// Setting the clock before the start of the process instance, makes none of the jobs executable
processEngineConfiguration.getClock().setCurrentTime(testStartTime);
......@@ -183,11 +186,6 @@ public class JobQueryTest extends PluggableActivitiTestCase {
verifyQueryResults(query, 3);
}
public void testQueryByOnlyMessages() {
JobQuery query = managementService.createJobQuery().messages();
verifyQueryResults(query, 1);
}
public void testInvalidOnlyTimersUsage() {
try {
managementService.createJobQuery().timers().messages().list();
......@@ -208,18 +206,18 @@ public class JobQueryTest extends PluggableActivitiTestCase {
verifyQueryResults(query, 2);
query = managementService.createJobQuery().duedateLowerThan(new Date(timerThreeFireTime.getTime() + ONE_SECOND));
verifyQueryResults(query, 4);
verifyQueryResults(query, 3);
}
public void testQueryByDuedateHigherThan() {
JobQuery query = managementService.createJobQuery().duedateHigherThan(testStartTime);
verifyQueryResults(query, 4);
verifyQueryResults(query, 3);
query = managementService.createJobQuery().duedateHigherThan(timerOneFireTime);
verifyQueryResults(query, 3);
verifyQueryResults(query, 2);
query = managementService.createJobQuery().duedateHigherThan(timerTwoFireTime);
verifyQueryResults(query, 2);
verifyQueryResults(query, 1);
query = managementService.createJobQuery().duedateHigherThan(timerThreeFireTime);
verifyQueryResults(query, 0);
......@@ -297,18 +295,18 @@ public class JobQueryTest extends PluggableActivitiTestCase {
public void testQuerySorting() {
// asc
assertEquals(4, managementService.createJobQuery().orderByJobId().asc().count());
assertEquals(4, managementService.createJobQuery().orderByJobDuedate().asc().count());
assertEquals(4, managementService.createJobQuery().orderByExecutionId().asc().count());
assertEquals(4, managementService.createJobQuery().orderByProcessInstanceId().asc().count());
assertEquals(4, managementService.createJobQuery().orderByJobRetries().asc().count());
assertEquals(3, managementService.createJobQuery().orderByJobId().asc().count());
assertEquals(3, managementService.createJobQuery().orderByJobDuedate().asc().count());
assertEquals(3, managementService.createJobQuery().orderByExecutionId().asc().count());
assertEquals(3, managementService.createJobQuery().orderByProcessInstanceId().asc().count());
assertEquals(3, managementService.createJobQuery().orderByJobRetries().asc().count());
// desc
assertEquals(4, managementService.createJobQuery().orderByJobId().desc().count());
assertEquals(4, managementService.createJobQuery().orderByJobDuedate().desc().count());
assertEquals(4, managementService.createJobQuery().orderByExecutionId().desc().count());
assertEquals(4, managementService.createJobQuery().orderByProcessInstanceId().desc().count());
assertEquals(4, managementService.createJobQuery().orderByJobRetries().desc().count());
assertEquals(3, managementService.createJobQuery().orderByJobId().desc().count());
assertEquals(3, managementService.createJobQuery().orderByJobDuedate().desc().count());
assertEquals(3, managementService.createJobQuery().orderByExecutionId().desc().count());
assertEquals(3, managementService.createJobQuery().orderByProcessInstanceId().desc().count());
assertEquals(3, managementService.createJobQuery().orderByJobRetries().desc().count());
// sorting on multiple fields
setRetries(processInstanceIdTwo, 2);
......
......@@ -19,13 +19,14 @@ import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.ActivitiObjectNotFoundException;
import org.activiti.engine.JobNotFoundException;
import org.activiti.engine.impl.persistence.entity.EventSubscriptionEntity;
import org.activiti.engine.management.TableMetaData;
import org.activiti.engine.runtime.Clock;
import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.test.Deployment;
import org.activiti5.engine.impl.cmd.AcquireTimerJobsCmd;
import org.activiti5.engine.impl.interceptor.CommandExecutor;
import org.activiti5.engine.impl.persistence.entity.EventSubscriptionEntity;
import org.activiti5.engine.impl.persistence.entity.JobEntity;
import org.activiti5.engine.impl.test.PluggableActivitiTestCase;
......@@ -57,7 +58,7 @@ public class ManagementServiceTest extends PluggableActivitiTestCase {
managementService.executeJob(null);
fail("ActivitiException expected");
} catch (ActivitiIllegalArgumentException re) {
assertTextPresent("jobId and job is null", re.getMessage());
assertTextPresent("JobId is null", re.getMessage());
}
}
......@@ -216,13 +217,16 @@ public class ManagementServiceTest extends PluggableActivitiTestCase {
@Deployment(resources = { "org/activiti5/engine/test/api/mgmt/timerOnTask.bpmn20.xml" })
public void testDeleteJobThatWasAlreadyAcquired() {
processEngineConfiguration.getClock().setCurrentTime(new Date());
Clock clock = processEngineConfiguration.getClock();
clock.setCurrentTime(new Date());
processEngineConfiguration.setClock(clock);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("timerOnTask");
Job timerJob = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult();
// We need to move time at least one hour to make the timer executable
processEngineConfiguration.getClock().setCurrentTime(new Date(processEngineConfiguration.getClock().getCurrentTime().getTime() + 7200000L));
clock.setCurrentTime(new Date(processEngineConfiguration.getClock().getCurrentTime().getTime() + 7200000L));
processEngineConfiguration.setClock(clock);
// Acquire job by running the acquire command manually
AcquireTimerJobsCmd acquireJobsCmd = new AcquireTimerJobsCmd("testLockOwner", 60000, 5);
......@@ -239,6 +243,9 @@ public class ManagementServiceTest extends PluggableActivitiTestCase {
// Clean up
managementService.executeJob(timerJob.getId());
clock.setCurrentTime(new Date());
processEngineConfiguration.setClock(clock);
}
// https://activiti.atlassian.net/browse/ACT-1816:
......
......@@ -40,6 +40,7 @@ import java.util.Set;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.repository.DeploymentProperties;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ExecutionQuery;
import org.activiti.engine.runtime.ProcessInstance;
......@@ -66,6 +67,7 @@ public class ExecutionQueryTest extends PluggableActivitiTestCase {
repositoryService.createDeployment()
.addClasspathResource("org/activiti5/engine/test/api/runtime/oneTaskProcess.bpmn20.xml")
.addClasspathResource("org/activiti5/engine/test/api/runtime/concurrentExecution.bpmn20.xml")
.deploymentProperty(DeploymentProperties.DEPLOY_AS_ACTIVITI5_PROCESS_DEFINITION, Boolean.TRUE)
.deploy();
concurrentProcessInstanceIds = new ArrayList<String>();
......
......@@ -44,7 +44,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// the service was not invoked:
assertFalse(INVOCATION);
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// the service was invoked
assertTrue(INVOCATION);
......@@ -59,7 +59,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// the listener was not yet invoked:
assertNull(runtimeService.getVariable(pid, "listener"));
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
assertEquals(0, managementService.createJobQuery().count());
}
......@@ -74,7 +74,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// the service was not invoked:
assertFalse(INVOCATION);
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// the service was invoked
assertTrue(INVOCATION);
......@@ -92,7 +92,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// the service was not invoked:
assertFalse(INVOCATION);
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// the service was invoked
assertTrue(INVOCATION);
......@@ -140,7 +140,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
assertEquals(2, managementService.createJobQuery().count());
// let 'max-retires' on the message be reached
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// the service failed: the execution is still sitting in the service task:
Execution execution = runtimeService.createExecutionQuery().singleResult();
......@@ -152,7 +152,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// now the timer triggers:
Context.getProcessEngineConfiguration().getClock().setCurrentTime(new Date(System.currentTimeMillis() + 10000));
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// and we are done:
assertNull(runtimeService.createExecutionQuery().singleResult());
......@@ -171,7 +171,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// the service was not invoked:
assertFalse(INVOCATION);
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// the service was invoked
assertTrue(INVOCATION);
......@@ -187,7 +187,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
assertEquals(1, managementService.createJobQuery().count());
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// both the timer and the message are cancelled
assertEquals(0, managementService.createJobQuery().count());
......@@ -201,7 +201,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
// now there should be one job in the database:
assertEquals(1, managementService.createJobQuery().count());
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// the job is done
assertEquals(0, managementService.createJobQuery().count());
......@@ -248,7 +248,7 @@ public class AsyncTaskTest extends PluggableActivitiTestCase {
String eid = runtimeService.createExecutionQuery().singleResult().getId();
assertNull(runtimeService.getVariable(eid, "invoked"));
waitForJobExecutorToProcessAllJobs(10000L, 100L);
waitForJobExecutorToProcessAllJobs(10000L, 300L);
// and the job is done
assertEquals(0, managementService.createJobQuery().count());
......
......@@ -18,6 +18,7 @@ import java.util.Date;
import java.util.List;
import org.activiti.engine.impl.util.DefaultClockImpl;
import org.activiti.engine.repository.DeploymentProperties;
import org.activiti.engine.runtime.Clock;
import org.activiti.engine.runtime.Job;
import org.activiti.engine.runtime.ProcessInstance;
......@@ -68,8 +69,10 @@ public class StartTimerEventRepeatWithEndExpressionTest extends PluggableActivit
processEngineConfiguration.setClock(testClock);
//deploy the process
repositoryService.createDeployment().addClasspathResource(
"org/activiti5/engine/test/bpmn/event/timer/StartTimerEventRepeatWithEndExpressionTest.testCycleDateStartTimerEvent.bpmn20.xml").deploy();
repositoryService.createDeployment()
.addClasspathResource("org/activiti5/engine/test/bpmn/event/timer/StartTimerEventRepeatWithEndExpressionTest.testCycleDateStartTimerEvent.bpmn20.xml")
.deploymentProperty(DeploymentProperties.DEPLOY_AS_ACTIVITI5_PROCESS_DEFINITION, Boolean.TRUE)
.deploy();
assertEquals(1, repositoryService.createProcessDefinitionQuery().count());
//AFTER DEPLOYMENT
......
......@@ -16,7 +16,7 @@
<endEvent id="theEnd" activiti:async="true">
<extensionElements>
<activiti:executionListener event="start" class="org.activiti.examples.bpmn.executionlistener.ExampleExecutionListenerOne"></activiti:executionListener>
<activiti:executionListener event="start" class="org.activiti5.examples.bpmn.executionlistener.ExampleExecutionListenerOne"></activiti:executionListener>
</extensionElements>
</endEvent>
......
......@@ -14,7 +14,7 @@
<sequenceFlow sourceRef="fork" targetRef="service" />
<sequenceFlow sourceRef="fork" targetRef="join" />
<serviceTask id="service" activiti:class="org.activiti.engine.test.bpmn.async.AsyncService" activiti:async="true" />
<serviceTask id="service" activiti:class="org.activiti5.engine.test.bpmn.async.AsyncService" activiti:async="true" />
<sequenceFlow sourceRef="service" targetRef="join" />
......
......@@ -9,9 +9,9 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="service" />
<serviceTask id="service" activiti:class="org.activiti.engine.test.bpmn.async.AsyncService" activiti:async="true">
<serviceTask id="service" activiti:class="org.activiti5.engine.test.bpmn.async.AsyncService" activiti:async="true">
<extensionElements>
<activiti:executionListener event="start" class="org.activiti.engine.test.bpmn.async.AsyncListener" />
<activiti:executionListener event="start" class="org.activiti5.engine.test.bpmn.async.AsyncListener" />
</extensionElements>
</serviceTask>
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="service" />
<serviceTask id="service" activiti:class="org.activiti.engine.test.bpmn.async.AsyncService" activiti:async="true">
<serviceTask id="service" activiti:class="org.activiti5.engine.test.bpmn.async.AsyncService" activiti:async="true">
<multiInstanceLoopCharacteristics isSequential="true">
<loopCardinality>5</loopCardinality>
</multiInstanceLoopCharacteristics>
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="service" />
<serviceTask id="service" activiti:class="org.activiti.engine.test.bpmn.async.AsyncService" activiti:async="true" />
<serviceTask id="service" activiti:class="org.activiti5.engine.test.bpmn.async.AsyncService" activiti:async="true" />
<sequenceFlow id="flow2" sourceRef="service" targetRef="theEnd" />
......
......@@ -12,7 +12,7 @@
<subProcess id="subProcess">
<startEvent id="subStart" />
<sequenceFlow sourceRef="subStart" targetRef="service" />
<serviceTask id="service" activiti:class="org.activiti.engine.test.bpmn.async.AsyncService" activiti:async="true" />
<serviceTask id="service" activiti:class="org.activiti5.engine.test.bpmn.async.AsyncService" activiti:async="true" />
<sequenceFlow sourceRef="service" targetRef="subEnd" />
<endEvent id="subEnd" />
</subProcess>
......
......@@ -12,8 +12,8 @@
<userTask id="userTask" activiti:async="true">
<extensionElements>
<activiti:executionListener event="start" class="org.activiti.engine.test.bpmn.async.AsyncListener" />
<activiti:taskListener event="create" class="org.activiti.engine.test.bpmn.async.AsyncTaskListener" />
<activiti:executionListener event="start" class="org.activiti5.engine.test.bpmn.async.AsyncListener" />
<activiti:taskListener event="create" class="org.activiti5.engine.test.bpmn.async.AsyncTaskListener" />
</extensionElements>
</userTask>
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<sequenceFlow id="flow4" sourceRef="serviceTask" targetRef="theEnd" />
......
......@@ -12,7 +12,7 @@
<subProcess id="subProcess">
<startEvent id="subProcessStart"/>
<sequenceFlow id="flow2" sourceRef="subProcessStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
</subProcess>
<boundaryEvent id="catchError" attachedToRef="subProcess">
......
......@@ -15,7 +15,7 @@
<subProcess id="subProcess1">
<startEvent id="subProcess1Start"/>
<sequenceFlow id="flow5" sourceRef="subProcess1Start" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
</subProcess>
</subProcess>
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate">
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate">
<multiInstanceLoopCharacteristics isSequential="false">
<loopCardinality>3</loopCardinality>
</multiInstanceLoopCharacteristics>
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate">
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate">
<multiInstanceLoopCharacteristics isSequential="true">
<loopCardinality>3</loopCardinality>
</multiInstanceLoopCharacteristics>
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<boundaryEvent id="catchError" attachedToRef="serviceTask">
<errorEventDefinition />
......
......@@ -9,7 +9,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<boundaryEvent id="catchError" cancelActivity="false" attachedToRef="serviceTask">
<errorEventDefinition />
......
......@@ -12,7 +12,7 @@
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<boundaryEvent id="ignoreError42" attachedToRef="serviceTask">
<errorEventDefinition errorRef="error42" />
......
......@@ -17,7 +17,7 @@
<subProcess id="subProcess1">
<startEvent id="subProcess1Start"/>
<sequenceFlow id="flow5" sourceRef="subProcess1Start" targetRef="serviceTask" />
<serviceTask id="serviceTask" activiti:class="org.activiti.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
<serviceTask id="serviceTask" activiti:class="org.activiti5.engine.test.bpmn.event.error.ThrowBpmnErrorDelegate" />
</subProcess>
<boundaryEvent id="signalEvent" attachedToRef="subProcess1">
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册