@Deployment(resources = {"org/camunda/bpm/engine/test/api/mgmt/timerOnTask.bpmn20.xml"}) public void testDeleteJobThatWasAlreadyAcquired() { ClockUtil.setCurrentTime(new Date()); 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 ClockUtil.setCurrentTime(new Date(ClockUtil.getCurrentTime().getTime() + 7200000L)); // Acquire job by running the acquire command manually ProcessEngineImpl processEngineImpl = (ProcessEngineImpl) processEngine; JobExecutor jobExecutor = processEngineImpl.getProcessEngineConfiguration().getJobExecutor(); AcquireJobsCmd acquireJobsCmd = new AcquireJobsCmd(jobExecutor); CommandExecutor commandExecutor = processEngineImpl.getProcessEngineConfiguration().getCommandExecutorTxRequired(); commandExecutor.execute(acquireJobsCmd); // Try to delete the job. This should fail. try { managementService.deleteJob(timerJob.getId()); fail(); } catch (ProcessEngineException e) { // Exception is expected } // Clean up managementService.executeJob(timerJob.getId()); }
/** * Each test is assumed to clean up all DB content it entered. After a test method executed, this * method scans all tables to see if the DB is completely clean. It throws AssertionFailed in case * the DB is not clean. If the DB is not clean, it is cleaned by performing a create a drop. */ public static void assertAndEnsureCleanDb(ProcessEngine processEngine) { log.fine("verifying that db is clean after test"); Map<String, Long> tableCounts = processEngine.getManagementService().getTableCount(); StringBuilder outputMessage = new StringBuilder(); for (String tableName : tableCounts.keySet()) { if (!TABLENAMES_EXCLUDED_FROM_DB_CLEAN_CHECK.contains(tableName)) { Long count = tableCounts.get(tableName); if (count != 0L) { outputMessage.append(" " + tableName + ": " + count + " record(s) "); } } } if (outputMessage.length() > 0) { outputMessage.insert(0, "DB NOT CLEAN: \n"); log.severe(EMPTY_LINE); log.severe(outputMessage.toString()); ((ProcessEngineImpl) processEngine) .getProcessEngineConfiguration() .getCommandExecutorTxRequired() .execute( new Command<Object>() { public Object execute(CommandContext commandContext) { PersistenceSession persistenceSession = commandContext.getSession(PersistenceSession.class); persistenceSession.dbSchemaDrop(); persistenceSession.dbSchemaCreate(); SchemaOperationsProcessEngineBuild.dbCreateHistoryLevel( commandContext.getDbEntityManager()); return null; } }); throw new AssertionError(outputMessage.toString()); } }