From 82ad03708d920ed115a0451e9e4175566772f075 Mon Sep 17 00:00:00 2001 From: JiriOndrusek Date: Tue, 8 Jun 2021 16:30:26 +0200 Subject: [PATCH] Sql aggregator does not work in native mode, solve DefaultExchangeHolder globally. --- .../ROOT/pages/reference/extensions/sql.adoc | 35 +++++++++++++++++++ .../sql/runtime/src/main/doc/usage.adoc | 31 ++++++++++++++++ .../src/main/resources/application.properties | 3 ++ .../main/resources/serialization-config.json | 20 +++++++++++ .../quarkus/component/sql/it/SqlTest.java | 2 -- 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 extensions/sql/runtime/src/main/doc/usage.adoc create mode 100644 integration-tests/sql/src/main/resources/serialization-config.json diff --git a/docs/modules/ROOT/pages/reference/extensions/sql.adoc b/docs/modules/ROOT/pages/reference/extensions/sql.adoc index 7a44f759b443..534c20409e76 100644 --- a/docs/modules/ROOT/pages/reference/extensions/sql.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/sql.adoc @@ -40,6 +40,41 @@ Or add the coordinates to your existing project: Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications. +== Usage + +If you are using SQL Aggregator in native mode, you have to register several classes for serialization using GraalVM +feature. Serialization support since GraalVM 21.0 allows developers to configure classes for serialization via +the serialization configuration file `-H:SerializationConfigurationResources=/path-to/serialization-config.json` option. +For more information see https://github.com/oracle/graal/pull/2730[pull request with feature]. + +Several classes has to be registered for serialization every time to make SQL Aggregator work in native. +Here is a template of `serialization-config.json` with all mandatory classes: + +``` +[ + { + "name" : "java.lang.Integer" + }, + { + "name" : "java.lang.Number" + }, + { + "name" : "java.lang.String" + }, + { + "name" : "java.util.HashMap" + }, + { + "name" : "java.util.LinkedHashMap" + }, + { + "name" : "org.apache.camel.support.DefaultExchangeHolder" + } +] +``` + + + == Additional Camel Quarkus configuration === Configuring a DataSource diff --git a/extensions/sql/runtime/src/main/doc/usage.adoc b/extensions/sql/runtime/src/main/doc/usage.adoc new file mode 100644 index 000000000000..29601d1ac2bf --- /dev/null +++ b/extensions/sql/runtime/src/main/doc/usage.adoc @@ -0,0 +1,31 @@ +If you are using SQL Aggregator in native mode, you have to register several classes for serialization using GraalVM +feature. Serialization support since GraalVM 21.0 allows developers to configure classes for serialization via +the serialization configuration file `-H:SerializationConfigurationResources=/path-to/serialization-config.json` option. +For more information see https://github.com/oracle/graal/pull/2730[pull request with feature]. + +Several classes has to be registered for serialization every time to make SQL Aggregator work in native. +Here is a template of `serialization-config.json` with all mandatory classes: + +``` +[ + { + "name" : "java.lang.Integer" + }, + { + "name" : "java.lang.Number" + }, + { + "name" : "java.lang.String" + }, + { + "name" : "java.util.HashMap" + }, + { + "name" : "java.util.LinkedHashMap" + }, + { + "name" : "org.apache.camel.support.DefaultExchangeHolder" + } +] +``` + diff --git a/integration-tests/sql/src/main/resources/application.properties b/integration-tests/sql/src/main/resources/application.properties index a9fadc92b4c6..0b6ec0d320e7 100644 --- a/integration-tests/sql/src/main/resources/application.properties +++ b/integration-tests/sql/src/main/resources/application.properties @@ -18,3 +18,6 @@ # Camel Quarkus SQL # quarkus.camel.sql.script-files=sql/get-camels.sql,sql/initDb.sql,sql/selectProjects.sql + +#Serialization-config.json is a workaround until serilazation support makes it into Quarkus (see https://github.com/quarkusio/quarkus/pull/15380) +quarkus.native.additional-build-args=-H:SerializationConfigurationResources=serialization-config.json diff --git a/integration-tests/sql/src/main/resources/serialization-config.json b/integration-tests/sql/src/main/resources/serialization-config.json new file mode 100644 index 000000000000..44c58a6d1491 --- /dev/null +++ b/integration-tests/sql/src/main/resources/serialization-config.json @@ -0,0 +1,20 @@ +[ + { + "name" : "java.lang.Integer" + }, + { + "name" : "java.lang.Number" + }, + { + "name" : "java.lang.String" + }, + { + "name" : "java.util.HashMap" + }, + { + "name" : "java.util.LinkedHashMap" + }, + { + "name" : "org.apache.camel.support.DefaultExchangeHolder" + } +] \ No newline at end of file diff --git a/integration-tests/sql/src/test/java/org/apache/camel/quarkus/component/sql/it/SqlTest.java b/integration-tests/sql/src/test/java/org/apache/camel/quarkus/component/sql/it/SqlTest.java index 1182f5aeedd8..49f695c4171d 100644 --- a/integration-tests/sql/src/test/java/org/apache/camel/quarkus/component/sql/it/SqlTest.java +++ b/integration-tests/sql/src/test/java/org/apache/camel/quarkus/component/sql/it/SqlTest.java @@ -27,7 +27,6 @@ import io.restassured.specification.RequestSpecification; import org.apache.camel.component.sql.SqlConstants; import org.apache.camel.util.CollectionHelper; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static io.restassured.RestAssured.given; @@ -189,7 +188,6 @@ public void testIdempotentRepository() { } @Test - @Disabled //see https://github.com/apache/camel-quarkus/issues/2693 public void testAggregationRepository() { postMapWithParam("/sql/toDirect/aggregation", "body", "A", CollectionHelper.mapOf("messageId", "123")) .statusCode(200);