diff --git a/data-index/data-index-storage/data-index-storage-jpa-common/pom.xml b/data-index/data-index-storage/data-index-storage-jpa-common/pom.xml index d9d262ac0f..d730218276 100644 --- a/data-index/data-index-storage/data-index-storage-jpa-common/pom.xml +++ b/data-index/data-index-storage/data-index-storage-jpa-common/pom.xml @@ -48,7 +48,7 @@ org.kie.kogito - persistence-commons-jpa + persistence-commons-jpa-base org.mapstruct diff --git a/data-index/data-index-storage/data-index-storage-jpa/pom.xml b/data-index/data-index-storage/data-index-storage-jpa/pom.xml index d5b70212bf..7e52547f18 100644 --- a/data-index/data-index-storage/data-index-storage-jpa/pom.xml +++ b/data-index/data-index-storage/data-index-storage-jpa/pom.xml @@ -42,14 +42,19 @@ data-index-storage-jpa-common - io.quarkus - quarkus-test-h2 - test + org.kie.kogito + persistence-commons-jpa io.quarkus quarkus-jdbc-h2 + + + io.quarkus + quarkus-test-h2 + test + org.kie.kogito data-index-storage-api diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.33.0__data_index_create.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.33.0__data_index_create.sql index 5d315351da..564a9c72e9 100644 --- a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.33.0__data_index_create.sql +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.33.0__data_index_create.sql @@ -43,16 +43,16 @@ create table jobs id varchar(255) not null, callback_endpoint varchar(255), endpoint varchar(255), - execution_counter NUMBER(10), + execution_counter integer, expiration_time timestamp, last_update timestamp, node_instance_id varchar(255), - priority NUMBER(10), + priority integer, process_id varchar(255), process_instance_id varchar(255), - repeat_interval NUMBER(19), - repeat_limit NUMBER(10), - retries NUMBER(10), + repeat_interval bigint, + repeat_limit integer, + retries integer, root_process_id varchar(255), root_process_instance_id varchar(255), scheduled_id varchar(255), @@ -97,8 +97,8 @@ create table processes root_process_id varchar(255), root_process_instance_id varchar(255), start_time timestamp, - state NUMBER(10), - variables blob, + state integer, + variables varbinary(max), CONSTRAINT processes_pk PRIMARY KEY (id), CONSTRAINT processes_variables_json CHECK (variables IS JSON) ); @@ -124,10 +124,10 @@ create table tasks completed timestamp, description varchar(255), endpoint varchar(255), - inputs blob, + inputs varbinary(max), last_update timestamp, name varchar(255), - outputs blob, + outputs varbinary(max), priority varchar(255), process_id varchar(255), process_instance_id varchar(255), diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.44.0__data_index_definitions.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.44.0__data_index_definitions.sql index 96b2ec5f08..4f361d57c1 100644 --- a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.44.0__data_index_definitions.sql +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.44.0__data_index_definitions.sql @@ -19,28 +19,28 @@ create table definitions ( - id varchar2(255 char) not null, - version varchar2(255 char) not null, - name varchar2(255 char), - source blob, - type varchar2(255 char), - endpoint varchar2(255 char), + id varchar2(255) not null, + version varchar2(255) not null, + name varchar2(255), + source bytea, + type varchar2(255), + endpoint varchar2(255), primary key (id, version) ); create table definitions_addons ( - process_id varchar2(255 char) not null, - process_version varchar2(255 char) not null, - addon varchar2(255 char) not null, + process_id varchar2(255) not null, + process_version varchar2(255) not null, + addon varchar2(255) not null, primary key (process_id, process_version, addon) ); create table definitions_roles ( - process_id varchar2(255 char) not null, - process_version varchar2(255 char) not null, - role varchar2(255 char) not null, + process_id varchar2(255) not null, + process_version varchar2(255) not null, + role varchar2(255) not null, primary key (process_id, process_version, role) ); @@ -57,4 +57,4 @@ alter table definitions_roles on delete cascade; alter table processes - add version varchar2(255 char); \ No newline at end of file + add column version varchar2(255); \ No newline at end of file diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.0__data_index_node_definitions.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.0__data_index_node_definitions.sql index ee98614a4e..7bce973a34 100644 --- a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.0__data_index_node_definitions.sql +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.0__data_index_node_definitions.sql @@ -19,22 +19,22 @@ create table definitions_nodes ( - id varchar2(255 char) not null, - name varchar2(255 char), - type varchar2(255 char), - unique_id varchar2(255 char), - process_id varchar2(255 char) not null, - process_version varchar2(255 char) not null, + id varchar2(255) not null, + name varchar2(255), + type varchar2(255), + unique_id varchar2(255), + process_id varchar2(255) not null, + process_version varchar2(255) not null, primary key (id, process_id, process_version) ); create table definitions_nodes_metadata ( - node_id varchar2(255 char) not null, - process_id varchar2(255 char) not null, - process_version varchar2(255 char) not null, - value varchar2(255 char), - key varchar2(255 char) not null, + node_id varchar2(255) not null, + process_id varchar2(255) not null, + process_version varchar2(255) not null, + value varchar2(255), + key varchar2(255) not null, primary key (node_id, process_id, process_version, key) ); diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.2__data_index_definitions_add_collums.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.2__data_index_definitions_add_colums.sql similarity index 78% rename from data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.2__data_index_definitions_add_collums.sql rename to data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.2__data_index_definitions_add_colums.sql index 00ec3ce934..8abae1b55a 100644 --- a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.2__data_index_definitions_add_collums.sql +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.2__data_index_definitions_add_colums.sql @@ -19,18 +19,18 @@ create table definitions_annotations ( - value varchar2(255 char) not null, - process_id varchar2(255 char) not null, - process_version varchar2(255 char) not null, + value varchar2(255) not null, + process_id varchar2(255) not null, + process_version varchar2(255) not null, primary key (value, process_id, process_version) ); create table definitions_metadata ( - process_id varchar2(255 char) not null, - process_version varchar2(255 char) not null, - value varchar2(255 char), - key varchar2(255 char) not null, + process_id varchar2(255) not null, + process_version varchar2(255) not null, + value varchar2(255), + key varchar2(255) not null, primary key (process_id, process_version, key) ); @@ -47,5 +47,5 @@ alter table definitions_metadata on delete cascade; alter table definitions - add (description varchar2(255 char)); + add (description varchar2(255)); diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.3__add_fk_index.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.3__add_fk_index.sql new file mode 100644 index 0000000000..c8cc1c3a6c --- /dev/null +++ b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.3__add_fk_index.sql @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create index idx_attachments_tid on attachments(task_id); +create index idx_comments_tid on comments(task_id); +create index idx_definitions_addons_pid_pv on definitions_addons(process_id, process_version); +create index idx_definitions_annotations_pid_pv on definitions_annotations(process_id, process_version); +create index idx_definitions_metadata_pid_pv on definitions_metadata(process_id, process_version); +create index idx_definitions_nodes_pid_pv on definitions_nodes(process_id, process_version); +create index idx_definitions_nodes_metadata_pid_pv on definitions_nodes_metadata(process_id, process_version); +create index idx_definitions_roles_pid_pv on definitions_roles(process_id, process_version); +create index idx_milestones_piid on milestones(process_instance_id); +create index idx_nodes_piid on nodes(process_instance_id); +create index idx_processes_addons_pid on processes_addons(process_id); +create index idx_processes_roles_pid on processes_roles(process_id); +create index idx_tasks_admin_groups_tid on tasks_admin_groups(task_id); +create index idx_tasks_admin_users_tid on tasks_admin_users(task_id); +create index idx_tasks_excluded_users_tid on tasks_excluded_users(task_id); +create index idx_tasks_potential_groups_tid on tasks_potential_groups(task_id); +create index idx_tasks_potential_users_tid on tasks_potential_users(task_id); diff --git a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.3__increase_varchar_length.sql b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.4__increase_varchar_length.sql similarity index 100% rename from data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.3__increase_varchar_length.sql rename to data-index/data-index-storage/data-index-storage-jpa/src/main/resources/db/migration/V1.45.0.4__increase_varchar_length.sql diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java index b291feb5dc..8dcd70904c 100644 --- a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/ProcessDefinitionRegister.java @@ -71,7 +71,7 @@ private Function, ProcessDefinition> mapProcessDefinition(Set pd.setId(p.id()); pd.setName(p.name()); pd.setVersion(p.version()); - pd.setType(pd.getType()); + pd.setType(p.type()); pd.setAddons(addons); // See ProcessInstanceEventBatch.buildSource pd.setEndpoint(endpoint + "/" + (p.id().contains(".") ? p.id().substring(p.id().lastIndexOf('.') + 1) : p.id())); diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/deployment/pom.xml b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/deployment/pom.xml new file mode 100644 index 0000000000..0fadc66e68 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/deployment/pom.xml @@ -0,0 +1,70 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-persistence-jpa-deployment + Kogito Apps :: Kogito Addons Quarkus Data Index Persistence JPA :: Deployment + + + org.kie + kogito-addons-quarkus-data-index-persistence-common-deployment + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa + + + io.quarkus + quarkus-flyway-deployment + + + io.quarkus + quarkus-hibernate-orm-panache-deployment + + + io.quarkus + quarkus-jdbc-h2-deployment + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${version.io.quarkus} + + + + + + + diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/persistence/deployment/JPASQLDataIndexPersistenceProcessor.java b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/persistence/deployment/JPASQLDataIndexPersistenceProcessor.java new file mode 100644 index 0000000000..ef3d052f69 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/persistence/deployment/JPASQLDataIndexPersistenceProcessor.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.kie.kogito.addons.quarkus.data.index.persistence.deployment; + +import io.quarkus.deployment.annotations.BuildProducer; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.nativeimage.NativeImageResourcePatternsBuildItem; +import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild; + +public class JPASQLDataIndexPersistenceProcessor extends AbstractKogitoAddonsQuarkusDataIndexPersistenceProcessor { + + private static final String FEATURE = "kogito-addons-quarkus-data-index-persistence-jpa"; + + @BuildStep + public FeatureBuildItem feature() { + return new FeatureBuildItem(FEATURE); + } + + @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class) + public void addNativeResources(BuildProducer resources) { + resources.produce(new NativeImageResourcePatternsBuildItem.Builder().includeGlob("sql/*.sql").build()); + } + +} diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/pom.xml b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/pom.xml new file mode 100644 index 0000000000..dc97fc4543 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/pom.xml @@ -0,0 +1,130 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-persistence-jpa-integration-tests-process + Kogito Apps :: Kogito Addons Quarkus Data Index Persistence JPA :: Integration Tests :: Process + + + + org.jbpm + jbpm-quarkus + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jackson + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa + + + org.kie + kie-addons-quarkus-persistence-jdbc + + + org.kie + kie-addons-quarkus-process-svg + + + io.quarkus + quarkus-agroal + + + io.quarkus + quarkus-jdbc-h2 + + + org.assertj + assertj-core + test + + + io.quarkus + quarkus-test-h2 + test + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-deployment + ${project.version} + pom + test + + + * + * + + + + + + + + io.quarkus + quarkus-maven-plugin + ${version.io.quarkus} + + + + build + + + + + + + + + native + + + native + + + + native + **/*IT.java + + + + diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/META-INF/processSVG/hello.svg b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/META-INF/processSVG/hello.svg new file mode 100644 index 0000000000..716974fb87 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/META-INF/processSVG/hello.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/application.properties b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/application.properties new file mode 100644 index 0000000000..d9cdfadcd3 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/application.properties @@ -0,0 +1,34 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +kogito.service.url=http://localhost:8080 +kogito.persistence.type=jdbc +quarkus.flyway.migrate-at-start=true + +quarkus.datasource.db-kind=h2 +quarkus.datasource.username=kogito +quarkus.datasource.jdbc.url=jdbc:h2:mem:default;NON_KEYWORDS=VALUE,KEY + +# Not using Keycloak Dev service in test +quarkus.keycloak.devservices.enabled=false + +# Security +quarkus.oidc.enabled=false +quarkus.oidc.tenant-enabled=false +quarkus.oidc.auth-server-url=none diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/hello.bpmn b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/hello.bpmn new file mode 100644 index 0000000000..939c411bbd --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/main/resources/hello.bpmn @@ -0,0 +1,47 @@ + + + + + + + + + _9FD38FF8-A530-41E7-8EA0-E1F71353CBB3 + + + _9FD38FF8-A530-41E7-8EA0-E1F71353CBB3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _hT2oIPJzEDuE8tm0q8uK_w + _hT2oIPJzEDuE8tm0q8uK_w + + \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexPersistenceTest.java b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexPersistenceTest.java new file mode 100644 index 0000000000..5c3e306d09 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-process/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexPersistenceTest.java @@ -0,0 +1,113 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.kie.kogito.addons.quarkus.data.index.it; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage; +import org.kie.kogito.index.jpa.storage.ProcessInstanceEntityStorage; +import org.kie.kogito.index.model.ProcessDefinition; +import org.kie.kogito.index.model.ProcessDefinitionKey; +import org.kie.kogito.index.model.ProcessInstance; + +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.h2.H2DatabaseTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; + +import jakarta.inject.Inject; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; + +@QuarkusTest +@QuarkusTestResource(H2DatabaseTestResource.class) +class JPAQuarkusAddonDataIndexPersistenceTest { + + @Inject + ProcessDefinitionEntityStorage processDefinitionEntityStorage; + + @Inject + ProcessInstanceEntityStorage processInstanceEntityStorage; + + static { + RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); + } + + @Test + void testDataIndexAddon() { + + String processDefId = "hello"; + String version = "1.0"; + + ProcessDefinition definition = processDefinitionEntityStorage.get(new ProcessDefinitionKey(processDefId, version)); + + Assertions.assertThat(definition) + .isNotNull() + .hasFieldOrPropertyWithValue("id", processDefId) + .hasFieldOrPropertyWithValue("version", version) + .hasFieldOrPropertyWithValue("name", processDefId) + .hasFieldOrPropertyWithValue("type", "BPMN") + .hasFieldOrProperty("description") + .hasFieldOrProperty("source") + .hasFieldOrProperty("addons") + .hasFieldOrProperty("roles") + .hasFieldOrProperty("endpoint") + .hasFieldOrProperty("nodes"); + + Assertions.assertThat(definition.getSource()) + .isNotBlank(); + + Assertions.assertThat(definition.getAddons()) + .hasSize(3) + .contains("jdbc-persistence", "process-svg", "source-files"); + + Assertions.assertThat(definition.getNodes()) + .hasSize(2); + + String processInstanceId = given() + .contentType(ContentType.JSON) + .accept(ContentType.JSON) + .post("/hello") + .then() + .statusCode(201) + .body("id", is(notNullValue())) + .extract().path("id"); + + Assertions.assertThat(processInstanceId) + .isNotBlank(); + + ProcessInstance instance = processInstanceEntityStorage.get(processInstanceId); + + Assertions.assertThat(instance) + .isNotNull() + .hasFieldOrPropertyWithValue("id", processInstanceId) + .hasFieldOrPropertyWithValue("processId", processDefId) + .hasFieldOrPropertyWithValue("processName", processDefId) + .hasFieldOrPropertyWithValue("version", version) + .hasFieldOrPropertyWithValue("state", 2) + .hasFieldOrProperty("nodes") + .hasFieldOrProperty("start") + .hasFieldOrProperty("end") + .hasFieldOrProperty("lastUpdate"); + } + +} diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/pom.xml b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/pom.xml new file mode 100644 index 0000000000..d231cf9861 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/pom.xml @@ -0,0 +1,129 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-persistence-jpa-integration-tests-sw + Kogito Apps :: Kogito Addons Quarkus Data Index Persistence JPA :: Integration Tests :: SW + + + + org.apache.kie.sonataflow + sonataflow-quarkus + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jackson + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa + + + org.kie + kie-addons-quarkus-persistence-jdbc + + + org.kie + kie-addons-quarkus-source-files + + + io.quarkus + quarkus-agroal + + + io.quarkus + quarkus-jdbc-h2 + + + io.quarkus + quarkus-test-h2 + test + + + org.kie.kogito + data-index-test-utils + test + + + org.kie.kogito + kogito-test-utils + + + org.assertj + assertj-core + test + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-deployment + ${project.version} + pom + test + + + * + * + + + + + + + + io.quarkus + quarkus-maven-plugin + ${version.io.quarkus} + + + + build + + + + + + + + + native + + + native + + + + native + **/*IT.java + + + + diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/main/resources/application.properties b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/main/resources/application.properties new file mode 100644 index 0000000000..d2d4bcade6 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/main/resources/application.properties @@ -0,0 +1,35 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +kogito.persistence.type=jdbc +kogito.service.url=http://localhost:8080 + +quarkus.flyway.migrate-at-start=true +quarkus.flyway.baseline-on-migrate=true + +quarkus.datasource.db-kind=h2 +quarkus.datasource.username=kogito +quarkus.datasource.jdbc.url=jdbc:h2:mem:default;NON_KEYWORDS=VALUE,KEY + +quarkus.devservices.enabled=false + +# Security +quarkus.oidc.enabled=false +quarkus.oidc.tenant-enabled=false +quarkus.oidc.auth-server-url=none \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/main/resources/greet.sw.json b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/main/resources/greet.sw.json new file mode 100644 index 0000000000..a849f440e1 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/main/resources/greet.sw.json @@ -0,0 +1,71 @@ +{ + "id": "greet", + "version": "1.0", + "name": "Greeting workflow", + "expressionLang": "jsonpath", + "description": "JSON based greeting workflow", + "start": "ChooseOnLanguage", + "functions": [ + { + "name": "greetFunction", + "type": "custom", + "operation": "sysout" + }, + { + "name": "isEnglish", + "type": "expression", + "operation" : "$.[?(@.language == 'English')]" + } + ], + "states": [ + { + "name": "ChooseOnLanguage", + "type": "switch", + "dataConditions": [ + { + "condition": "fn:isEnglish", + "transition": "GreetInEnglish" + }, + { + "condition": "${ $.[?(@.language == 'Spanish')] }", + "transition": "GreetInSpanish" + } + ], + "defaultCondition": { + "transition": "GreetInEnglish" + } + }, + { + "name": "GreetInEnglish", + "type": "inject", + "data": { + "greeting": "Hello from JSON Workflow," + }, + "transition": "GreetPerson" + }, + { + "name": "GreetInSpanish", + "type": "inject", + "data": { + "greeting": "Saludos desde JSON Workflow," + }, + "transition": "GreetPerson" + }, + { + "name": "GreetPerson", + "type": "operation", + "actions": [ + { + "name": "greetAction", + "functionRef": { + "refName": "greetFunction", + "arguments": { + "message": "$.greeting $.name" + } + } + } + ], + "end": true + } + ] +} \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexPersistenceTest.java b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexPersistenceTest.java new file mode 100644 index 0000000000..aa173cee8b --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/integration-tests-sw/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexPersistenceTest.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.kie.kogito.addons.quarkus.data.index.it; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.kie.kogito.index.jpa.storage.ProcessDefinitionEntityStorage; +import org.kie.kogito.index.jpa.storage.ProcessInstanceEntityStorage; +import org.kie.kogito.index.model.ProcessDefinition; +import org.kie.kogito.index.model.ProcessDefinitionKey; +import org.kie.kogito.index.model.ProcessInstance; + +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.h2.H2DatabaseTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; + +import jakarta.inject.Inject; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; + +@QuarkusTest +@QuarkusTestResource(H2DatabaseTestResource.class) +class JPAQuarkusAddonDataIndexPersistenceTest { + + static { + RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); + } + + @Inject + ProcessDefinitionEntityStorage processDefinitionEntityStorage; + + @Inject + ProcessInstanceEntityStorage processInstanceEntityStorage; + + @Test + void testDataIndexAddon() { + String processDefId = "greet"; + String version = "1.0"; + + ProcessDefinition definition = processDefinitionEntityStorage.get(new ProcessDefinitionKey(processDefId, version)); + + Assertions.assertThat(definition) + .isNotNull() + .hasFieldOrPropertyWithValue("id", processDefId) + .hasFieldOrPropertyWithValue("version", version) + .hasFieldOrPropertyWithValue("name", "Greeting workflow") + .hasFieldOrPropertyWithValue("type", "SW") + .hasFieldOrProperty("description") + .hasFieldOrProperty("source") + .hasFieldOrProperty("addons") + .hasFieldOrProperty("roles") + .hasFieldOrProperty("endpoint") + .hasFieldOrProperty("nodes"); + + Assertions.assertThat(definition.getSource()) + .isNotBlank(); + + Assertions.assertThat(definition.getAddons()) + .hasSize(3) + .contains("jdbc-persistence", "source-files", "cloudevents"); + + Assertions.assertThat(definition.getNodes()) + .hasSize(12); + + String processInstanceId = given() + .contentType(ContentType.JSON) + .accept(ContentType.JSON) + .body("{\"workflowdata\" : {\"name\" : \"John\", \"language\":\"English\"}}").when() + .post("/greet") + .then() + .statusCode(201) + .body("workflowdata.greeting", is("Hello from JSON Workflow,")) + .extract().path("id"); + + Assertions.assertThat(processInstanceId) + .isNotBlank(); + + ProcessInstance instance = processInstanceEntityStorage.get(processInstanceId); + + Assertions.assertThat(instance) + .isNotNull() + .hasFieldOrPropertyWithValue("id", processInstanceId) + .hasFieldOrPropertyWithValue("processId", processDefId) + .hasFieldOrPropertyWithValue("processName", "Greeting workflow") + .hasFieldOrPropertyWithValue("version", version) + .hasFieldOrPropertyWithValue("state", 2) + .hasFieldOrProperty("nodes") + .hasFieldOrProperty("start") + .hasFieldOrProperty("end") + .hasFieldOrProperty("lastUpdate"); + } + +} diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/pom.xml b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/pom.xml new file mode 100644 index 0000000000..e2efc62015 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/pom.xml @@ -0,0 +1,46 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-persistence + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-persistence-jpa-parent + pom + + Kogito Apps :: Kogito Addons Quarkus Data Index Persistence JPA + + + org.kie.kogito.index.quarkus.data.index.persistence.jpa + + + + deployment + runtime + integration-tests-process + integration-tests-sw + + + diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/pom.xml b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/pom.xml new file mode 100644 index 0000000000..a15db88680 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/pom.xml @@ -0,0 +1,81 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-persistence-jpa + Kogito Apps :: Kogito Addons Quarkus Data Index Persistence JPA :: Runtime + + + org.kie + kogito-addons-quarkus-data-index-persistence-common-runtime + + + io.quarkus + quarkus-flyway + + + org.kie.kogito + data-index-storage-jpa + + + + + + io.quarkus + quarkus-extension-maven-plugin + ${version.io.quarkus} + + + compile + + extension-descriptor + + + ${project.groupId}:${project.artifactId}-deployment:${project.version} + + org.kie.kogito.data-index.persistence + + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${version.io.quarkus} + + + + + + + diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 0000000000..9c8c26914b --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,35 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +name: Kogito Data Index Persistence JPA Quarkus Add-On +description: Add-On to colocate the Data Index Persistence (JPA) in your application. +metadata: + keywords: + - data-index + - kogito + - processes + - workflows + - tasks + - jobs + - BPMN + - JPA + guide: https://quarkus.io/guides/kogito + categories: + - "business-automation" + status: "stable" \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/src/main/resources/application.properties b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/src/main/resources/application.properties new file mode 100644 index 0000000000..472da84431 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-jpa/runtime/src/main/resources/application.properties @@ -0,0 +1,27 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +#Data Index +kogito.apps.persistence.type=jdbc + +#Hibernate +quarkus.hibernate-orm.jdbc.timezone=UTC +quarkus.hibernate-orm.physical-naming-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy +quarkus.flyway.locations=classpath:db/migration +quarkus.flyway.repair-at-start=true \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index-persistence/pom.xml b/data-index/kogito-addons-quarkus-data-index-persistence/pom.xml index d4cb56a63f..23f142e140 100644 --- a/data-index/kogito-addons-quarkus-data-index-persistence/pom.xml +++ b/data-index/kogito-addons-quarkus-data-index-persistence/pom.xml @@ -36,6 +36,7 @@ kogito-addons-quarkus-data-index-persistence-common kogito-addons-quarkus-data-index-persistence-postgresql + kogito-addons-quarkus-data-index-persistence-jpa kogito-addons-quarkus-data-index-persistence-infinispan kogito-addons-quarkus-data-index-persistence-mongodb diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/AbstractKogitoAddonsQuarkusDataIndexProcessor.java b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/AbstractKogitoAddonsQuarkusDataIndexProcessor.java index c6235729b6..6a319765a7 100644 --- a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/AbstractKogitoAddonsQuarkusDataIndexProcessor.java +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/AbstractKogitoAddonsQuarkusDataIndexProcessor.java @@ -43,6 +43,12 @@ public abstract class AbstractKogitoAddonsQuarkusDataIndexProcessor extends OneO private static final String QUARKUS_HTTP_PORT = "quarkus.http.port"; private static final String KOGITO_SERVICE_URL_PROP = "kogito.service.url"; private static final String KOGITO_DATA_INDEX_PROP = "kogito.data-index.url"; + /** + * Skips the setting of the default kogito.data-index.url from the runtime url. + * This is convenient in scenarios like the dev-ui executing in k8s where want it to set this url using window + * location instead. Must be explicitly set to true to take effect. + */ + private static final String SKIP_DEFAULT_DATA_INDEX_URL_PROP = "kogito.data-index-addons.skip-default-data-index-url"; AbstractKogitoAddonsQuarkusDataIndexProcessor() { super(KogitoCapability.SERVERLESS_WORKFLOW, KogitoCapability.PROCESSES); @@ -50,12 +56,15 @@ public abstract class AbstractKogitoAddonsQuarkusDataIndexProcessor extends OneO @BuildStep(onlyIf = IsDevelopment.class) public void buildDefaultDataIndexURLSystemProperty(BuildProducer systemProperties) { - // Setting a default `kogito.data-index.url` accordingly to the runtime url. - String dataIndexUrl = ConfigProvider.getConfig().getOptionalValue(KOGITO_SERVICE_URL_PROP, String.class).orElseGet(() -> { - Integer port = ConfigProvider.getConfig().getOptionalValue(QUARKUS_HTTP_PORT, Integer.class).orElse(8080); - return "http://localhost:" + port; - }); - systemProperties.produce(new SystemPropertyBuildItem(KOGITO_DATA_INDEX_PROP, dataIndexUrl)); + boolean skipDefaultDataIndexUrl = ConfigProvider.getConfig().getOptionalValue(SKIP_DEFAULT_DATA_INDEX_URL_PROP, Boolean.class).orElse(false); + if (!skipDefaultDataIndexUrl) { + // Setting a default `kogito.data-index.url` accordingly to the runtime url. + String dataIndexUrl = ConfigProvider.getConfig().getOptionalValue(KOGITO_SERVICE_URL_PROP, String.class).orElseGet(() -> { + Integer port = ConfigProvider.getConfig().getOptionalValue(QUARKUS_HTTP_PORT, Integer.class).orElse(8080); + return "http://localhost:" + port; + }); + systemProperties.produce(new SystemPropertyBuildItem(KOGITO_DATA_INDEX_PROP, dataIndexUrl)); + } } @BuildStep(onlyIf = IsDevelopment.class) diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/pom.xml b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/pom.xml new file mode 100644 index 0000000000..9b04a7dcd6 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/pom.xml @@ -0,0 +1,83 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-jpa-deployment + Kogito Apps :: Kogito Addons Quarkus Data Index JPA :: Deployment + + + org.kie + kogito-addons-quarkus-data-index-common-deployment + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-deployment + + + org.kie + kogito-addons-quarkus-data-index-jpa + + + io.quarkus + quarkus-vertx-deployment + + + io.quarkus + quarkus-vertx-graphql-deployment + + + io.quarkus + quarkus-hibernate-orm-panache-deployment + + + io.quarkus + quarkus-reactive-routes-deployment + + + io.quarkus + quarkus-junit5-internal + test + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${version.io.quarkus} + + + + + + + diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/JPADataIndexProcessor.java b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/JPADataIndexProcessor.java new file mode 100644 index 0000000000..538c9d2f89 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/java/org/kie/kogito/addons/quarkus/data/index/deployment/JPADataIndexProcessor.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.kie.kogito.addons.quarkus.data.index.deployment; + +import java.util.List; + +import io.quarkus.deployment.IsDevelopment; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.SystemPropertyBuildItem; +import io.quarkus.devui.spi.page.CardPageBuildItem; +import io.quarkus.devui.spi.page.Page; + +public class JPADataIndexProcessor extends AbstractKogitoAddonsQuarkusDataIndexProcessor { + + private static final String FEATURE = "kogito-addons-quarkus-data-index-jpa"; + + @BuildStep + public FeatureBuildItem feature() { + return new FeatureBuildItem(FEATURE); + } + + @BuildStep(onlyIf = { IsDevelopment.class }) + CardPageBuildItem createDevUILink(List systemPropertyBuildItems) { + CardPageBuildItem cardPageBuildItem = new CardPageBuildItem(); + cardPageBuildItem.addPage(Page.externalPageBuilder("Data Index GraphQL UI") + .url("/q/graphql-ui/") + .isHtmlContent() + .icon("font-awesome-solid:signs-post")); + return cardPageBuildItem; + } +} diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/resources/dev-templates/dataindex.html b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/resources/dev-templates/dataindex.html new file mode 100644 index 0000000000..c121df7858 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/resources/dev-templates/dataindex.html @@ -0,0 +1,32 @@ + +{#include main fluid=true} {#style} .main-container { margin: 0; padding: 0; } +{/style} {#title}Data Index GraphQL UI{/title} {#body} +
+
+ +
+
+{/body} {/include} diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/resources/dev-templates/embedded.html b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/resources/dev-templates/embedded.html new file mode 100644 index 0000000000..09553d5f19 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/deployment/src/main/resources/dev-templates/embedded.html @@ -0,0 +1,24 @@ + + + + Data Index GraphQL UI + diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/pom.xml b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/pom.xml new file mode 100644 index 0000000000..f724fcdadc --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/pom.xml @@ -0,0 +1,120 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-jpa-integration-tests-process + Kogito Apps :: Kogito Addons Quarkus Data Index JPA :: Integration Tests :: Process + + + + org.jbpm + jbpm-quarkus + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jackson + + + org.kie + kogito-addons-quarkus-data-index-jpa + + + org.kie + kie-addons-quarkus-persistence-jdbc + + + org.kie + kie-addons-quarkus-process-svg + + + io.quarkus + quarkus-agroal + + + io.quarkus + quarkus-jdbc-h2 + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + org.kie + kogito-addons-quarkus-data-index-postgresql-deployment + ${project.version} + pom + test + + + * + * + + + + + + + + io.quarkus + quarkus-maven-plugin + ${version.io.quarkus} + + + + build + + + + + + + + + native + + + native + + + + native + **/*IT.java + + + + diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/META-INF/processSVG/hello.svg b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/META-INF/processSVG/hello.svg new file mode 100644 index 0000000000..716974fb87 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/META-INF/processSVG/hello.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/application.properties b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/application.properties new file mode 100644 index 0000000000..2e5b20da68 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/application.properties @@ -0,0 +1,35 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +kogito.persistence.type=jdbc +quarkus.flyway.migrate-at-start=true + +quarkus.kogito.data-index.graphql.ui.always-include=true + +quarkus.datasource.db-kind=h2 +quarkus.datasource.username=kogito +quarkus.datasource.jdbc.url=jdbc:h2:mem:default;NON_KEYWORDS=VALUE,KEY + +# Not using Keycloak Dev service in test +quarkus.keycloak.devservices.enabled=false + +# Security +quarkus.oidc.enabled=false +quarkus.oidc.tenant-enabled=false +quarkus.oidc.auth-server-url=none diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/hello.bpmn b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/hello.bpmn new file mode 100644 index 0000000000..939c411bbd --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/main/resources/hello.bpmn @@ -0,0 +1,47 @@ + + + + + + + + + _9FD38FF8-A530-41E7-8EA0-E1F71353CBB3 + + + _9FD38FF8-A530-41E7-8EA0-E1F71353CBB3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _hT2oIPJzEDuE8tm0q8uK_w + _hT2oIPJzEDuE8tm0q8uK_w + + \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexIT.java b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexIT.java new file mode 100644 index 0000000000..c281a08e33 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-process/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexIT.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.kie.kogito.addons.quarkus.data.index.it; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; + +@QuarkusIntegrationTest +class JPAQuarkusAddonDataIndexIT { + + static { + RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); + } + + @Test + void testDataIndexAddon() { + String processDefId = "hello"; + given().contentType(ContentType.JSON).body("{ \"query\" : \"{ProcessDefinitions(where: { id: {equal: \\\"" + processDefId + + "\\\"}}){ id, version, name } }\" }") + .when().post("/graphql") + .then().statusCode(200) + .body("data.ProcessDefinitions.size()", is(1)) + .body("data.ProcessDefinitions[0].id", is("hello")) + .body("data.ProcessDefinitions[0].version", is("1.0")) + .body("data.ProcessDefinitions[0].name", is("hello")); + + given().contentType(ContentType.JSON).body("{ \"query\" : \"{ProcessInstances{ id } }\" }") + .when().post("/graphql") + .then().statusCode(200) + .body("data.ProcessInstances.size()", is(greaterThanOrEqualTo(0))); + + String processInstanceId = given() + .contentType(ContentType.JSON) + .accept(ContentType.JSON) + .post("/hello") + .then() + .statusCode(201) + .body("id", is(notNullValue())) + .extract().path("id"); + + given().contentType(ContentType.JSON) + .body("{ \"query\" : \"{ProcessInstances(where: { id: {equal: \\\"" + processInstanceId + "\\\"}}){ id, state, diagram, source, nodeDefinitions { name } } }\" }") + .when().post("/graphql") + .then().statusCode(200) + .body("data.ProcessInstances.size()", is(1)) + .body("data.ProcessInstances[0].id", is(processInstanceId)) + .body("data.ProcessInstances[0].state", is("COMPLETED")) + .body("data.ProcessInstances[0].diagram", is(notNullValue())) + .body("data.ProcessInstances[0].source", is(notNullValue())) + .body("data.ProcessInstances[0].nodeDefinitions.size()", is(2)); + } + + @Test + void testGraphQLUI() { + given().contentType(ContentType.HTML) + .when().get("/q/graphql-ui/") + .then().statusCode(200) + .body("html.head.title", is("GraphiQL")); + } + +} diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/pom.xml b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/pom.xml new file mode 100644 index 0000000000..990859cdff --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/pom.xml @@ -0,0 +1,116 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-jpa-integration-tests-sw + Kogito Apps :: Kogito Addons Quarkus Data Index JPA :: Integration Tests :: SW + + + + org.apache.kie.sonataflow + sonataflow-quarkus + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-resteasy-jackson + + + org.kie + kogito-addons-quarkus-data-index-jpa + + + org.kie + kie-addons-quarkus-persistence-jdbc + + + io.quarkus + quarkus-agroal + + + io.quarkus + quarkus-jdbc-h2 + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + org.kie + kogito-addons-quarkus-data-index-jpa-deployment + ${project.version} + pom + test + + + * + * + + + + + + + + io.quarkus + quarkus-maven-plugin + ${version.io.quarkus} + + + + build + + + + + + + + + native + + + native + + + + native + **/*IT.java + + + + diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/main/resources/application.properties b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/main/resources/application.properties new file mode 100644 index 0000000000..2e5b20da68 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/main/resources/application.properties @@ -0,0 +1,35 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +kogito.persistence.type=jdbc +quarkus.flyway.migrate-at-start=true + +quarkus.kogito.data-index.graphql.ui.always-include=true + +quarkus.datasource.db-kind=h2 +quarkus.datasource.username=kogito +quarkus.datasource.jdbc.url=jdbc:h2:mem:default;NON_KEYWORDS=VALUE,KEY + +# Not using Keycloak Dev service in test +quarkus.keycloak.devservices.enabled=false + +# Security +quarkus.oidc.enabled=false +quarkus.oidc.tenant-enabled=false +quarkus.oidc.auth-server-url=none diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/main/resources/greet.sw.json b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/main/resources/greet.sw.json new file mode 100644 index 0000000000..a849f440e1 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/main/resources/greet.sw.json @@ -0,0 +1,71 @@ +{ + "id": "greet", + "version": "1.0", + "name": "Greeting workflow", + "expressionLang": "jsonpath", + "description": "JSON based greeting workflow", + "start": "ChooseOnLanguage", + "functions": [ + { + "name": "greetFunction", + "type": "custom", + "operation": "sysout" + }, + { + "name": "isEnglish", + "type": "expression", + "operation" : "$.[?(@.language == 'English')]" + } + ], + "states": [ + { + "name": "ChooseOnLanguage", + "type": "switch", + "dataConditions": [ + { + "condition": "fn:isEnglish", + "transition": "GreetInEnglish" + }, + { + "condition": "${ $.[?(@.language == 'Spanish')] }", + "transition": "GreetInSpanish" + } + ], + "defaultCondition": { + "transition": "GreetInEnglish" + } + }, + { + "name": "GreetInEnglish", + "type": "inject", + "data": { + "greeting": "Hello from JSON Workflow," + }, + "transition": "GreetPerson" + }, + { + "name": "GreetInSpanish", + "type": "inject", + "data": { + "greeting": "Saludos desde JSON Workflow," + }, + "transition": "GreetPerson" + }, + { + "name": "GreetPerson", + "type": "operation", + "actions": [ + { + "name": "greetAction", + "functionRef": { + "refName": "greetFunction", + "arguments": { + "message": "$.greeting $.name" + } + } + } + ], + "end": true + } + ] +} \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexIT.java b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexIT.java new file mode 100644 index 0000000000..fcf179910c --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/integration-tests-sw/src/test/java/org/kie/kogito/addons/quarkus/data/index/it/JPAQuarkusAddonDataIndexIT.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.kie.kogito.addons.quarkus.data.index.it; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; + +@QuarkusIntegrationTest +class JPAQuarkusAddonDataIndexIT { + + static { + RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); + } + + @Test + void testDataIndexAddon() { + String processDefId = "greet"; + given().contentType(ContentType.JSON).body("{ \"query\" : \"{ProcessDefinitions(where: { id: {equal: \\\"" + processDefId + + "\\\"}}){ id, version, name } }\" }") + .when().post("/graphql") + .then().statusCode(200) + .body("data.ProcessDefinitions.size()", is(1)) + .body("data.ProcessDefinitions[0].id", is("greet")) + .body("data.ProcessDefinitions[0].version", is("1.0")) + .body("data.ProcessDefinitions[0].name", is("Greeting workflow")); + + given().contentType(ContentType.JSON).body("{ \"query\" : \"{ProcessInstances{ id } }\" }") + .when().post("/graphql") + .then().statusCode(200) + .body("data.ProcessInstances.size()", is(greaterThanOrEqualTo(0))); + + String processInstanceId = given() + .contentType(ContentType.JSON) + .accept(ContentType.JSON) + .body("{\"workflowdata\" : {\"name\" : \"John\", \"language\":\"English\"}}").when() + .post("/greet") + .then() + .statusCode(201) + .body("workflowdata.greeting", is("Hello from JSON Workflow,")) + .extract().path("id"); + + given().contentType(ContentType.JSON) + .body("{ \"query\" : \"{ProcessInstances(where: { id: {equal: \\\"" + processInstanceId + "\\\"}}){ id, state, diagram, source, nodeDefinitions { name } } }\" }") + .when().post("/graphql") + .then().statusCode(200) + .body("data.ProcessInstances.size()", is(1)) + .body("data.ProcessInstances[0].id", is(processInstanceId)) + .body("data.ProcessInstances[0].state", is("COMPLETED")) + .body("data.ProcessInstances[0].diagram", is(nullValue())) + .body("data.ProcessInstances[0].source", is(notNullValue())) + .body("data.ProcessInstances[0].nodeDefinitions.size()", is(12)); + } + + @Test + void testGraphQLUI() { + given().contentType(ContentType.HTML) + .when().get("/q/graphql-ui/") + .then().statusCode(200) + .body("html.head.title", is("GraphiQL")); + } + +} diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/pom.xml b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/pom.xml new file mode 100644 index 0000000000..aa7cd8598e --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/pom.xml @@ -0,0 +1,46 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-jpa-parent + pom + + Kogito Apps :: Kogito Addons Quarkus Data Index JPA + + + org.kie.kogito.addons.quarkus.data.index.jpa + + + + deployment + runtime + integration-tests-sw + integration-tests-process + + + diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/pom.xml b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/pom.xml new file mode 100644 index 0000000000..5a9e0e2289 --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/pom.xml @@ -0,0 +1,81 @@ + + + + 4.0.0 + + org.kie + kogito-addons-quarkus-data-index-jpa-parent + 999-SNAPSHOT + + kogito-addons-quarkus-data-index-jpa + Kogito Apps :: Kogito Addons Quarkus Data Index JPA :: Runtime + + + org.kie + kogito-addons-quarkus-data-index-common-runtime + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa + + + io.quarkus + quarkus-vertx-graphql + + + + + + io.quarkus + quarkus-extension-maven-plugin + ${version.io.quarkus} + + + compile + + extension-descriptor + + + ${project.groupId}:${project.artifactId}-deployment:${project.version} + + org.kie.kogito.data-index + + + + + + + maven-compiler-plugin + + + + io.quarkus + quarkus-extension-processor + ${version.io.quarkus} + + + + + + + diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/src/main/resources/META-INF/quarkus-extension.yaml new file mode 100644 index 0000000000..4086152b7e --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -0,0 +1,38 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +name: Kogito Data Index PostgreSQL Quarkus Add-On +description: Runs the Kogito Data Index embedded with JPA persistence +metadata: + keywords: + - data-index + - kogito + - processes + - workflows + - tasks + - jobs + - BPMN + - postgresql + guide: https://quarkus.io/guides/kogito + categories: + - "business-automation" + status: "stable" + config: + - "kogito.data-index." + - "kogito.dataindex." \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/src/main/resources/application.properties b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/src/main/resources/application.properties new file mode 100644 index 0000000000..648cbe8fcc --- /dev/null +++ b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-jpa/runtime/src/main/resources/application.properties @@ -0,0 +1,28 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# + +#Data Index +kogito.apps.persistence.type=jdbc +kogito.data-index.domain-indexing=false +kogito.data-index.blocking=true + +#Hibernate +quarkus.hibernate-orm.jdbc.timezone=UTC +quarkus.hibernate-orm.physical-naming-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy +quarkus.flyway.locations=classpath:db/migration \ No newline at end of file diff --git a/data-index/kogito-addons-quarkus-data-index/pom.xml b/data-index/kogito-addons-quarkus-data-index/pom.xml index 2996e9027a..e7aacaefb0 100644 --- a/data-index/kogito-addons-quarkus-data-index/pom.xml +++ b/data-index/kogito-addons-quarkus-data-index/pom.xml @@ -39,6 +39,7 @@ kogito-addons-quarkus-data-index-postgresql kogito-addons-quarkus-data-index-infinispan kogito-addons-quarkus-data-index-mongodb + kogito-addons-quarkus-data-index-jpa diff --git a/kogito-apps-bom/pom.xml b/kogito-apps-bom/pom.xml index 90fce247cf..5e903d4972 100644 --- a/kogito-apps-bom/pom.xml +++ b/kogito-apps-bom/pom.xml @@ -444,6 +444,28 @@ ${project.version} sources
+ + org.kie + kogito-addons-quarkus-data-index-persistence-jpa + ${project.version} + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa + ${project.version} + sources + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-deployment + ${project.version} + + + org.kie + kogito-addons-quarkus-data-index-persistence-jpa-deployment + ${project.version} + sources + org.kie kogito-addons-quarkus-data-index-common-runtime @@ -466,7 +488,28 @@ ${project.version} sources - + + org.kie + kogito-addons-quarkus-data-index-jpa + ${project.version} + + + org.kie + kogito-addons-quarkus-data-index-jpa + ${project.version} + sources + + + org.kie + kogito-addons-quarkus-data-index-jpa-deployment + ${project.version} + + + org.kie + kogito-addons-quarkus-data-index-jpa-deployment + ${project.version} + sources + @@ -576,6 +619,17 @@ ${project.version} sources + + org.kie.kogito + persistence-commons-jpa-base + ${project.version} + + + org.kie.kogito + persistence-commons-jpa-base + ${project.version} + sources + org.kie.kogito persistence-commons-jpa diff --git a/persistence-commons/persistence-commons-jpa-base/pom.xml b/persistence-commons/persistence-commons-jpa-base/pom.xml new file mode 100644 index 0000000000..3b2e9c2754 --- /dev/null +++ b/persistence-commons/persistence-commons-jpa-base/pom.xml @@ -0,0 +1,97 @@ + + + + + persistence-commons + org.kie.kogito + 999-SNAPSHOT + + 4.0.0 + + persistence-commons-jpa-base + Kogito Apps :: Persistence Commons JPA - Base + + + org.kie.kogito.persistence.jpa.base + + + + + org.kie.kogito + persistence-commons-api + + + io.quarkus + quarkus-hibernate-orm-panache + + + org.hibernate.orm + hibernate-ant + + + io.quarkus + quarkus-jackson + + + org.kie.kogito + kogito-jackson-utils + + + org.kie.kogito + kogito-quarkus-test-utils + test + + + io.quarkus + quarkus-junit5-mockito + test + + + org.assertj + assertj-core + test + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + org.jboss.logmanager.LogManager + + + + + + integration-test + verify + + + + + + + \ No newline at end of file diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/Constants.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/Constants.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/Constants.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/Constants.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorage.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorage.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorage.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorage.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorageService.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorageService.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorageService.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresStorageService.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryConverter.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryConverter.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryConverter.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryConverter.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntityRepository.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntityRepository.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntityRepository.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntityRepository.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheId.java b/persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheId.java similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheId.java rename to persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheId.java diff --git a/persistence-commons/persistence-commons-jpa/src/main/resources/META-INF/beans.xml b/persistence-commons/persistence-commons-jpa-base/src/main/resources/META-INF/beans.xml similarity index 100% rename from persistence-commons/persistence-commons-jpa/src/main/resources/META-INF/beans.xml rename to persistence-commons/persistence-commons-jpa-base/src/main/resources/META-INF/beans.xml diff --git a/persistence-commons/persistence-commons-jpa/pom.xml b/persistence-commons/persistence-commons-jpa/pom.xml index d40f23b990..929f672775 100644 --- a/persistence-commons/persistence-commons-jpa/pom.xml +++ b/persistence-commons/persistence-commons-jpa/pom.xml @@ -39,38 +39,7 @@ org.kie.kogito - persistence-commons-api - - - io.quarkus - quarkus-hibernate-orm-panache - - - org.hibernate.orm - hibernate-ant - - - io.quarkus - quarkus-jackson - - - org.kie.kogito - kogito-jackson-utils - - - org.kie.kogito - kogito-quarkus-test-utils - test - - - io.quarkus - quarkus-junit5-mockito - test - - - org.assertj - assertj-core - test + persistence-commons-jpa-base diff --git a/persistence-commons/persistence-commons-jpa/src/main/resources/db/migration/V1.5.0__kogito_apps_create_kogito_data_cache.sql b/persistence-commons/persistence-commons-jpa/src/main/resources/db/migration/V1.5.0__kogito_apps_create_kogito_data_cache.sql new file mode 100644 index 0000000000..3b6a41389d --- /dev/null +++ b/persistence-commons/persistence-commons-jpa/src/main/resources/db/migration/V1.5.0__kogito_apps_create_kogito_data_cache.sql @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +create table if not exists kogito_data_cache ( + key varchar(255) not null, + name varchar(255) not null, + json_value varbinary(max), + primary key (key, name) +); \ No newline at end of file diff --git a/persistence-commons/persistence-commons-postgresql/pom.xml b/persistence-commons/persistence-commons-postgresql/pom.xml index 181b102f72..fbfbf2a0f9 100644 --- a/persistence-commons/persistence-commons-postgresql/pom.xml +++ b/persistence-commons/persistence-commons-postgresql/pom.xml @@ -39,7 +39,7 @@ org.kie.kogito - persistence-commons-jpa + persistence-commons-jpa-base io.quarkus diff --git a/persistence-commons/persistence-commons-postgresql/src/main/resources/db/migration/V1.5.0__kogito_apps_create_kogito_data_cache.sql b/persistence-commons/persistence-commons-postgresql/src/main/resources/db/migration/V1.5.0__kogito_apps_create_kogito_data_cache.sql new file mode 100644 index 0000000000..c8167cd40e --- /dev/null +++ b/persistence-commons/persistence-commons-postgresql/src/main/resources/db/migration/V1.5.0__kogito_apps_create_kogito_data_cache.sql @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + + +create table if not exists kogito_data_cache ( + key varchar(255) not null, + name varchar(255) not null, + json_value jsonb, + primary key (key, name) +); diff --git a/persistence-commons/pom.xml b/persistence-commons/pom.xml index 9c7fb64511..83a58f41e9 100644 --- a/persistence-commons/pom.xml +++ b/persistence-commons/pom.xml @@ -37,6 +37,7 @@ persistence-commons-api persistence-commons-protobuf + persistence-commons-jpa-base persistence-commons-jpa persistence-commons-postgresql persistence-commons-infinispan