/**
*
*/
package org.activiti.engine.test.jobexecutor;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.CommandExecutor;
import org.activiti.engine.impl.persistence.entity.MessageEntity;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.Job;
/**
* @author Tom Baeyens
*/
public class JobExecutorCmdExceptionTest extends PluggableActivitiTestCase {
protected TweetExceptionHandler tweetExceptionHandler = new TweetExceptionHandler();
private CommandExecutor commandExecutor;
public void setUp() throws Exception {
processEngineConfiguration.getJobHandlers().put(tweetExceptionHandler.getType(), tweetExceptionHandler);
this.commandExecutor = processEngineConfiguration.getCommandExecutor();
}
public void tearDown() throws Exception {
processEngineConfiguration.getJobHandlers().remove(tweetExceptionHandler.getType());
}
public void testJobCommandsWith2Exceptions() {
commandExecutor.execute(new Command<String>() {
public String execute(CommandContext commandContext) {
MessageEntity message = createTweetExceptionMessage();
commandContext.getJobEntityManager().send(message);
return message.getId();
}
});
Job job = managementService.createJobQuery().singleResult();
assertEquals(3, job.getRetries());
try {
managementService.executeJob(job.getId());
fail("exception expected");
} catch (Exception e) {
// exception expected;
}
job = managementService.createJobQuery().singleResult();
assertEquals(2, job.getRetries());
try {
managementService.executeJob(job.getId());
fail("exception expected");
} catch (Exception e) {
// exception expected;
}
job = managementService.createJobQuery().singleResult();
assertEquals(1, job.getRetries());
managementService.executeJob(job.getId());
}
public void testJobCommandsWith3Exceptions() {
tweetExceptionHandler.setExceptionsRemaining(3);
commandExecutor.execute(new Command<String>() {
public String execute(CommandContext commandContext) {
MessageEntity message = createTweetExceptionMessage();
commandContext.getJobEntityManager().send(message);
return message.getId();
}
});
Job job = managementService.createJobQuery().singleResult();
assertEquals(3, job.getRetries());
try {
managementService.executeJob(job.getId());
fail("exception expected");
} catch (Exception e) {
// exception expected;
}
job = managementService.createJobQuery().singleResult();
assertEquals(2, job.getRetries());
try {
managementService.executeJob(job.getId());
fail("exception expected");
} catch (Exception e) {
// exception expected;
}
job = managementService.createJobQuery().singleResult();
assertEquals(1, job.getRetries());
try {
managementService.executeJob(job.getId());
fail("exception expected");
} catch (Exception e) {
// exception expected;
}
job = managementService.createJobQuery().singleResult();
assertEquals(0, job.getRetries());
managementService.deleteJob(job.getId());
}
protected MessageEntity createTweetExceptionMessage() {
MessageEntity message = new MessageEntity();
message.setJobHandlerType("tweet-exception");
return message;
}
}