@Test public void testInvalidQuery() { QueryDefinition query = new QueryDefinition(); query.setName("invalidQuery"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("this is an invalid query"); query.setTarget("CUSTOM"); try { assertClientException( () -> queryClient.registerQuery(query), 500, "Can't get metadata on specified data set: invalidQuery"); assertClientException( () -> queryClient.getQuery(query.getName()), 404, "Could not find query definition with name \"" + query.getName() + "\"", "Query invalidQuery not found"); } catch (Throwable e) { try { queryClient.unregisterQuery(query.getName()); } catch (KieServicesException ex) { // expected in case the query wasn't registered } throw e; } }
.map( dataSetDef -> QueryDefinition.builder() .name(dataSetDef.getUUID()) .expression(((SQLDataSetDef) dataSetDef).getDbSQL())
protected static SqlQueryDefinition build(KieServerRegistry context, QueryDefinition queryDefinition) { SqlQueryDefinition actualDefinition = new SqlQueryDefinition(queryDefinition.getName(), queryDefinition.getSource()); actualDefinition.setExpression(queryDefinition.getExpression()); actualDefinition.setTarget(org.jbpm.services.api.query.model.QueryDefinition.Target.valueOf(queryDefinition.getTarget())); return actualDefinition; } }
private QueryDefinition createErrorsQueryDefinition() { String queryExpression = "select * from ExecutionErrorInfo where ERROR_ACK = 0"; QueryDefinition query = new QueryDefinition(); query.setName("unAckErrors"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression(queryExpression); query.setTarget("CUSTOM"); return query; }
protected void registerQueriesWithRetry(String serverTemplateId, String serverInstanceId, Set<QueryDefinition> queryDefinitions) throws Exception{ long waitLimit = 5 * 60 * 1000; // default 5 min long elapsed = 0; QueryServicesClient queryClient = kieServerIntegration.getAdminServerClient(serverTemplateId).getServicesClient(QueryServicesClient.class); while (elapsed < waitLimit) { try { Iterator<QueryDefinition> definitionIt = queryDefinitions.iterator(); while (definitionIt.hasNext()) { QueryDefinition definition = definitionIt.next(); queryClient.replaceQuery(definition); LOGGER.info("Query definition {} (type {}) successfully registered on kie server '{}'", definition.getName(), definition.getTarget(), serverInstanceId); // remove successfully stored definition to avoid duplicated reads in case of intermediate error definitionIt.remove(); } event.fire(new KieServerDataSetRegistered(serverInstanceId, serverTemplateId)); return; } catch (KieServicesException | KieServerHttpRequestException e) { // unable to register, might still be booting Thread.sleep(500); elapsed += 500; // get admin client with forced check of endpoints as they might have been banned (marked as failed) queryClient = kieServerIntegration.getAdminServerClientCheckEndpoints(serverTemplateId).getServicesClient(QueryServicesClient.class); LOGGER.debug("Cannot reach KIE Server, elapsed time while waiting '{}', max time '{}' error {}", elapsed, waitLimit, e.getMessage()); } } }
protected void loadAndRegisterQueryDefinitions(InputStream qdStream, org.kie.server.api.marshalling.Marshaller marshaller, String containerId) throws IOException { if (qdStream != null) { String qdString = IOUtils.toString(qdStream, Charset.forName("UTF-8")); try { QueryDefinition[] queryDefinitionList = marshaller.unmarshall(qdString, QueryDefinition[].class); List<String> queries = new ArrayList<>(); Arrays.asList(queryDefinitionList).forEach(qd -> { queryService.replaceQuery(QueryDataServiceBase.build(context, qd)); queries.add(qd.getName()); logger.debug("Registered '{}' query from container '{}' successfully", qd.getName(), containerId); }); if (containerId != null) { containerQueries.put(containerId, queries); } } catch (MarshallingException e) { logger.error("Error when unmarshalling query definitions from stream.", e); } } }
QueryDefinition query = new QueryDefinition(); query.setName("allProcessInstances"); query.setSource("${org.kie.server.persistence.ds}"); query.setExpression("select * from ProcessInstanceLog where status = 1"); query.setTarget("PROCESS"); try { QueryDefinition registeredQuery = queries.stream().filter(q -> q.getName().equals("allProcessInstances")).findFirst().orElse(null); assertNotNull(registeredQuery); assertEquals(query.getName(), registeredQuery.getName()); assertEquals(query.getSource(), registeredQuery.getSource()); assertEquals(query.getExpression(), registeredQuery.getExpression()); assertEquals(query.getTarget(), registeredQuery.getTarget()); registeredQuery = queryClient.getQuery(query.getName()); assertEquals(query.getName(), registeredQuery.getName()); assertEquals(query.getSource(), registeredQuery.getSource()); assertEquals(query.getExpression(), registeredQuery.getExpression()); assertEquals(query.getTarget(), registeredQuery.getTarget()); List<ProcessInstance> instances = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_PI, 0, 10, ProcessInstance.class); assertNotNull(instances); assertEquals(5, instances.size()); queryClient.unregisterQuery(query.getName());
QueryDefinition queryDefinition = QueryDefinition.builder() .name(dataSetLookup.getDataSetUUID()) .source(def.getDataSource()) QueryServicesClient instanceQueryClient = client.getServicesClient(QueryServicesClient.class); QueryDefinition registered = instanceQueryClient.replaceQuery(queryDefinition); if (registered.getColumns() != null) { for (Entry<String, String> entry : registered.getColumns().entrySet()) { if (def.getColumnById(entry.getKey()) == null) { def.addColumn(entry.getKey(),
public Builder name(String name) { definition.setName(name); return this; }
@Override public QueryDefinition replaceQuery(QueryDefinition queryDefinition) { QueryDefinition result = null; if (config.isRest()) { Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(QUERY_NAME, queryDefinition.getName()); result = makeHttpPutRequestAndCreateCustomResponse(build(loadBalancer.getUrl(), QUERY_DEF_URI + "/" + REPLACE_QUERY_DEF_PUT_URI, valuesMap), queryDefinition, QueryDefinition.class, new HashMap<String, String>()); } else { CommandScript script = new CommandScript(Collections.singletonList((KieServerCommand) new DescriptorCommand("QueryDataService", "replaceQuery", serialize(queryDefinition), marshaller.getFormat().getType(), new Object[]{queryDefinition.getName()}))); ServiceResponse<QueryDefinition> response = (ServiceResponse<QueryDefinition>) executeJmsCommand(script, DescriptorCommand.class.getName(), "BPM").getResponses().get(0); throwExceptionOnFailure(response); if (shouldReturnWithNullResponse(response)) { return null; } result = response.getResult(); } return result; }
QueryDefinition query = new QueryDefinition(); query.setName("getTasksByState"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("select * from AuditTaskImpl where status = 'Reserved'"); query.setTarget("CUSTOM"); try { List<TaskInstance> tasks = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_TASK, 0, 10, TaskInstance.class); assertNotNull(tasks); assertEquals(1, tasks.size()); Long taskId = tasks.get(0).getId(); query.setExpression("select * from AuditTaskImpl where status = 'InProgress'"); assertEquals(query.getName(), replaced.getName()); assertEquals(query.getSource(), replaced.getSource()); assertEquals(query.getExpression(), replaced.getExpression()); assertEquals(query.getTarget(), replaced.getTarget()); assertNotNull(replaced.getColumns()); assertEquals(replaced.getColumns().size(), 18); tasks = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_TASK, 0, 10, TaskInstance.class); assertNotNull(tasks); assertEquals(0, tasks.size()); tasks = queryClient.query(query.getName(), QueryServicesClient.QUERY_MAP_TASK, 0, 10, TaskInstance.class); assertNotNull(tasks); assertEquals(1, tasks.size());
public QueryDefinition registerQuery(String queryName, String payload, String marshallingType) throws QueryAlreadyRegisteredException { logger.debug("About to unmarshal queryDefinition from payload: '{}'", payload); QueryDefinition queryDefinition = marshallerHelper.unmarshal(payload, marshallingType, QueryDefinition.class); queryDefinition.setName(queryName); SqlQueryDefinition actualDefinition = build(context, queryDefinition); logger.debug("Built sql query definition for {} with content {}", queryName, actualDefinition); queryService.registerQuery(actualDefinition); return convertQueryDefinition(actualDefinition); }
private QueryDefinition getTasksWithPotentialOwnerQueryDefinition() { final QueryDefinition query = new QueryDefinition(); query.setName("getAllTasks"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("select ti.taskId, ti.activationTime, ti.actualOwner, ti.createdBy, ti.createdOn, ti.deploymentId, ti.description, ti.dueDate, ti.name, ti.parentId, ti.priority, ti.processId, ti.processInstanceId, ti.processSessionId, ti.status, ti.workItemId, oe.id, eo.entity_id from AuditTaskImpl ti left join PeopleAssignments_PotOwners po on ti.taskId = po.task_id left join OrganizationalEntity oe on po.entity_id = oe.id left join PeopleAssignments_ExclOwners eo on ti.taskId = eo.task_id"); query.setTarget("PO_TASK"); return query; }
private void assertKjarOneQuery(QueryDefinition registeredQuery) { Assertions.assertThat(registeredQuery).isNotNull(); Assertions.assertThat(registeredQuery.getName()).isEqualTo(KJAR_ONE_REGISTERED_QUERY); Assertions.assertThat(registeredQuery.getSource()).isEqualTo("${org.kie.server.persistence.ds}"); Assertions.assertThat(registeredQuery.getExpression()).isEqualTo("select * from ProcessInstanceLog"); Assertions.assertThat(registeredQuery.getTarget()).isEqualTo("PROCESS"); }
@Override public QueryDefinition registerQuery(QueryDefinition queryDefinition) { QueryDefinition result = null; if (config.isRest()) { Map<String, Object> valuesMap = new HashMap<String, Object>(); valuesMap.put(QUERY_NAME, queryDefinition.getName()); result = makeHttpPostRequestAndCreateCustomResponse(build(loadBalancer.getUrl(), QUERY_DEF_URI + "/" + CREATE_QUERY_DEF_POST_URI, valuesMap), queryDefinition, QueryDefinition.class); } else { CommandScript script = new CommandScript(Collections.singletonList((KieServerCommand) new DescriptorCommand("QueryDataService", "registerQuery", serialize(queryDefinition), marshaller.getFormat().getType(), new Object[]{queryDefinition.getName()}))); ServiceResponse<QueryDefinition> response = (ServiceResponse<QueryDefinition>) executeJmsCommand(script, DescriptorCommand.class.getName(), "BPM").getResponses().get(0); throwExceptionOnFailure(response); if (shouldReturnWithNullResponse(response)) { return null; } result = response.getResult(); } return result; }
.map( dataSetDef -> QueryDefinition.builder() .name(dataSetDef.getUUID()) .expression(((SQLDataSetDef) dataSetDef).getDbSQL())
public QueryDefinition replaceQuery(String queryName, String payload, String marshallingType) { logger.debug("About to unmarshal queryDefinition from payload: '{}'", payload); QueryDefinition queryDefinition = marshallerHelper.unmarshal(payload, marshallingType, QueryDefinition.class); queryDefinition.setName(queryName); SqlQueryDefinition actualDefinition = build(context, queryDefinition); logger.debug("Built sql query definition for {} with content {}", queryName, actualDefinition); queryService.replaceQuery(actualDefinition); return convertQueryDefinition(actualDefinition); }
protected QueryDefinition getProcessInstanceWithVariablesQueryDefinition() { final QueryDefinition query = new QueryDefinition(); query.setName("allProcessInstancesWithVars"); query.setSource(System.getProperty("org.kie.server.persistence.ds", "jdbc/jbpm-ds")); query.setExpression("select pil.*, v.variableId, v.value " + "from ProcessInstanceLog pil " + "inner join (select vil.processInstanceId ,vil.variableId, max(vil.ID) maxvilid from VariableInstanceLog vil " + "group by vil.processInstanceId, vil.variableId) x on (x.processInstanceId = pil.processInstanceId) " + "inner join VariableInstanceLog v " + "on (v.variableId = x.variableId and v.id = x.maxvilid and v.processInstanceId = pil.processInstanceId) " + "where pil.status = 1"); query.setTarget("CUSTOM"); return query; }
private void assertKjarOneUpdatedQuery(QueryDefinition registeredQuery) { Assertions.assertThat(registeredQuery).isNotNull(); Assertions.assertThat(registeredQuery.getName()).isEqualTo(KJAR_ONE_UPDATED_FIRST_REGISTERED_QUERY); Assertions.assertThat(registeredQuery.getSource()).isEqualTo("${org.kie.server.persistence.ds}"); Assertions.assertThat(registeredQuery.getExpression()).isEqualTo("select * from NodeInstanceLog"); Assertions.assertThat(registeredQuery.getTarget()).isEqualTo("CUSTOM"); }