private JobRequestInstance createJobRequestInstance() { Map<String, Object> data = new HashMap<>(); data.put("businessKey", BUSINESS_KEY); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(PRINT_OUT_COMMAND); jobRequestInstance.setData(data); return jobRequestInstance; }
public String scheduleRequest(String containerId, String payload, String marshallingType) { ClassLoader classLoader = this.getClass().getClassLoader(); JobRequestInstance jobRequest = null; if (containerId != null && !containerId.isEmpty()) { logger.debug("About to unmarshal job request from payload: '{}' using container {} marshaller", payload, containerId); jobRequest = marshallerHelper.unmarshal(containerId, payload, marshallingType, JobRequestInstance.class); // set deployment id which is given by container id jobRequest.getData().put("deploymentId", containerId); classLoader = context.getContainer(containerId).getKieContainer().getClassLoader(); } else { logger.debug("About to unmarshal job request from payload: '{}' using server marshaller", payload); jobRequest = marshallerHelper.unmarshal(payload, marshallingType, JobRequestInstance.class); } Long requestId = null; if(!validateCommand(jobRequest.getCommand(), classLoader)){ throw new IllegalArgumentException("Invalid command type "+jobRequest.getCommand()); } if (jobRequest.getScheduledDate() != null) { logger.debug("Scheduling job at future date '{}' for request {}", jobRequest.getScheduledDate(), jobRequest); requestId = executorService.scheduleRequest(jobRequest.getCommand(), jobRequest.getScheduledDate(), new CommandContext(jobRequest.getData())); } else { logger.debug("Scheduling job at current date '{}' for request {}", new Date(), jobRequest); requestId = executorService.scheduleRequest(jobRequest.getCommand(), new CommandContext(jobRequest.getData())); } // return response String response = marshallerHelper.marshal(marshallingType, requestId); return response; }
public Builder scheduledDate(Date date) { jobRequestInstance.setScheduledDate(date == null ? date : new Date(date.getTime())); return this; }
@Test public void testExecutorServiceDisabling() throws Exception { String command = "invalidCommand"; Map<String, Object> data = new HashMap<String, Object>(); data.put("businessKey", BUSINESS_KEY); Calendar tomorrow = Calendar.getInstance(); tomorrow.add(Calendar.DATE, 1); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(command); jobRequestInstance.setData(data); jobRequestInstance.setScheduledDate(tomorrow.getTime()); // Executing fist command. try { jobServicesClient.scheduleRequest(jobRequestInstance); } catch (Exception e){ assertTrue(e instanceof KieServicesException); assertTrue(e.getMessage().contains("Invalid command type")); } }
jobRequestInstance.setScheduledDate(tomorrow.getTime()); jobRequestInstance.setData(data);
@Test public void testScheduleAndRunJobWithoutData() throws Exception { JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(PRINT_OUT_COMMAND); Long jobId = jobServicesClient.scheduleRequest(jobRequestInstance); assertNotNull(jobId); assertTrue( jobId.longValue() > 0); RequestInfoInstance jobRequest = jobServicesClient.getRequestById(jobId, false, false); assertNotNull(jobRequest); assertEquals(jobId, jobRequest.getId()); assertThat(jobRequest.getStatus(),anyOf( equalTo(STATUS.QUEUED.toString()), equalTo(STATUS.RUNNING.toString()), equalTo(STATUS.DONE.toString()))); assertEquals(PRINT_OUT_COMMAND, jobRequest.getCommandName()); KieServerSynchronization.waitForJobToFinish(jobServicesClient, jobId); jobRequest = jobServicesClient.getRequestById(jobId, false, false); assertNotNull(jobRequest); assertEquals(jobId, jobRequest.getId()); assertEquals(STATUS.DONE.toString(), jobRequest.getStatus()); assertEquals(PRINT_OUT_COMMAND, jobRequest.getCommandName()); }
public Builder data(Map<String, Object> data) { jobRequestInstance.setData(data); return this; } }
public Builder command(String command) { jobRequestInstance.setCommand(command); return this; }
@Override public Long scheduleRequest(String serverTemplateId, String commandName, Date date, Map<String, String> ctx) { JobServicesClient jobClient = getClient(serverTemplateId, JobServicesClient.class); HashMap<String, Object> data = new HashMap<>(); if (ctx != null && !ctx.isEmpty()) { data = new HashMap<String, Object>(ctx); } JobRequestInstance jobRequest = JobRequestInstance.builder() .command(commandName) .data(data) .scheduledDate(date) .build(); return jobClient.scheduleRequest((String)data.get("containerId"), jobRequest); }
@Test public void testScheduleAndRunJobWithWorkItem() throws Exception { JobRequestInstance jobRequestInstance = createJobRequestInstance(); final WorkItemImpl workItem = new WorkItemImpl(); workItem.setId(1); workItem.setName("testWorkItemName"); workItem.setDeploymentId("test-1.0.0"); workItem.setState(1); jobRequestInstance.getData().put("workItem", workItem); Long jobId = jobServicesClient.scheduleRequest(jobRequestInstance); assertNotNull(jobId); assertTrue(jobId.longValue() > 0); KieServerSynchronization.waitForJobToFinish(jobServicesClient, jobId); final RequestInfoInstance jobRequest = jobServicesClient.getRequestById(jobId, true, true); assertNotNull(jobRequest); assertEquals(jobId, jobRequest.getId()); assertEquals(STATUS.DONE.toString(), jobRequest.getStatus()); assertEquals(PRINT_OUT_COMMAND, jobRequest.getCommandName()); assertNotNull(jobRequest.getData().get("workItem")); }
tomorrow.add(Calendar.DATE, 1); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(firstCommand); jobRequestInstance.setData(data); jobRequestInstance.setScheduledDate(tomorrow.getTime()); jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(secondCommand); jobRequestInstance.setData(data); jobRequestInstance.setScheduledDate(tomorrow.getTime());
@BeforeClass public static void buildAndDeployArtifacts() throws Exception { JobServicesClient jsc = createDefaultStaticClient().getServicesClient(JobServicesClient.class); long id = jsc.scheduleRequest(JobRequestInstance.builder().command("org.jbpm.executor.commands.LogCleanupCommand").build()); KieServerSynchronization.waitForJobToFinish(jsc, id, 120000L); KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/definition-project"); kieContainer = KieServices.Factory.get().newKieContainer( releaseId ); createContainer( CONTAINER_ID, releaseId ); }
data.put("businessKey", businessKey); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(command); jobRequestInstance.setData(data);
@Test public void testScheduleSearchByKeyJob() throws Exception { int currentNumberOfRequests = jobServicesClient.getRequestsByBusinessKey(BUSINESS_KEY, 0, 100).size(); Calendar tomorrow = Calendar.getInstance(); tomorrow.add(Calendar.DATE, 1); JobRequestInstance jobRequestInstance = createJobRequestInstance(); jobRequestInstance.setScheduledDate(tomorrow.getTime()); Long jobId = jobServicesClient.scheduleRequest(jobRequestInstance); assertNotNull(jobId); assertTrue(jobId.longValue() > 0); List<RequestInfoInstance> result = jobServicesClient.getRequestsByBusinessKey(BUSINESS_KEY, 0, 100); assertNotNull(result); assertEquals(1 + currentNumberOfRequests, result.size()); List<RequestInfoInstance> queuedJobs = result.stream(). filter(n -> n.getStatus().equals(STATUS.QUEUED.name())).collect(Collectors.toList()); assertNotNull(queuedJobs); assertEquals(1, queuedJobs.size()); RequestInfoInstance expected = createExpectedRequestInfoInstance(jobId, STATUS.QUEUED); RequestInfoInstance queuedJob = queuedJobs.get(0); assertRequestInfoInstance(expected, queuedJob); result = jobServicesClient.getRequestsByBusinessKey(BUSINESS_KEY, Arrays.asList(STATUS.QUEUED.name()), 0, 100); assertNotNull(result); assertEquals(1, result.size()); assertRequestInfoInstance(expected, result.get(0)); jobServicesClient.cancelRequest(jobId); }
@BeforeClass public static void buildAndDeployArtifacts() throws Exception { JobServicesClient jsc = createDefaultStaticClient().getServicesClient(JobServicesClient.class); long id = jsc.scheduleRequest(JobRequestInstance.builder().command("org.jbpm.executor.commands.LogCleanupCommand").build()); KieServerSynchronization.waitForJobToFinish(jsc, id, 120000L); KieServerDeployer.buildAndDeployCommonMavenParent(); KieServerDeployer.buildAndDeployMavenProjectFromResource("/kjars-sources/definition-project"); kieContainer = KieServices.Factory.get().newKieContainer( releaseId ); createContainer( CONTAINER_ID, releaseId ); }
data.put("person", createPersonInstance(USER_JOHN)); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(PRINT_OUT_COMMAND); jobRequestInstance.setData(data);
@Test public void testScheduleSearchByStatusAndCancelJob() { int currentNumberOfCancelled = jobServicesClient.getRequestsByStatus(Collections.singletonList(STATUS.CANCELLED.toString()), 0, 100).size(); Calendar tomorrow = Calendar.getInstance(); tomorrow.add(Calendar.DATE, 1); JobRequestInstance jobRequestInstance = createJobRequestInstance(); jobRequestInstance.setScheduledDate(tomorrow.getTime()); Long jobId = jobServicesClient.scheduleRequest(jobRequestInstance); assertNotNull(jobId); assertTrue( jobId.longValue() > 0); List<String> status = new ArrayList<String>(); status.add(STATUS.QUEUED.toString()); List<RequestInfoInstance> result = jobServicesClient.getRequestsByStatus(status, 0, 100); assertNotNull(result); assertEquals(1, result.size()); RequestInfoInstance jobRequest = result.get(0); RequestInfoInstance expected = createExpectedRequestInfoInstance(jobId, STATUS.QUEUED); assertRequestInfoInstance(expected, jobRequest); assertNotNull(jobRequest.getScheduledDate()); jobServicesClient.cancelRequest(jobId); result = jobServicesClient.getRequestsByStatus(status, 0, 100); assertNotNull(result); assertEquals(0, result.size()); // clear status to search only for canceled status.clear(); status.add(STATUS.CANCELLED.toString()); result = jobServicesClient.getRequestsByStatus(status, 0, 100); assertNotNull(result); assertEquals(1 + currentNumberOfCancelled, result.size()); }
data.put("person", createPersonInstance(USER_JOHN)); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(CUSTOM_COMMAND); jobRequestInstance.setData(data);
@Test public void testScheduleViewAndCancelJob() { Calendar tomorrow = Calendar.getInstance(); tomorrow.add(Calendar.DATE, 1); JobRequestInstance jobRequestInstance = createJobRequestInstance(); jobRequestInstance.setScheduledDate(tomorrow.getTime()); Long jobId = jobServicesClient.scheduleRequest(jobRequestInstance); assertNotNull(jobId); assertTrue( jobId.longValue() > 0); RequestInfoInstance jobRequest = jobServicesClient.getRequestById(jobId, false, false); RequestInfoInstance expected = createExpectedRequestInfoInstance(jobId, STATUS.QUEUED); assertRequestInfoInstance(expected, jobRequest); assertNotNull(jobRequest.getScheduledDate()); jobServicesClient.cancelRequest(jobId); jobRequest = jobServicesClient.getRequestById(jobId, false, false); expected.setStatus(STATUS.CANCELLED.toString()); assertRequestInfoInstance(expected, jobRequest); }
data.put("retries", 0); JobRequestInstance jobRequestInstance = new JobRequestInstance(); jobRequestInstance.setCommand(command); jobRequestInstance.setData(data);