You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/10/11 19:45:11 UTC
[camel-quarkus] branch master updated: Fix #259 The User guide
should refer to the rest-json example (#261)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push:
new a8bac24 Fix #259 The User guide should refer to the rest-json example (#261)
a8bac24 is described below
commit a8bac2456bf27b39091fe674655fe87e89444ae2
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Fri Oct 11 21:45:07 2019 +0200
Fix #259 The User guide should refer to the rest-json example (#261)
* Do not use ${project.version} in the BOMs
* Comment and simplify the rest-json example
* Fix #259 The User guide should refer to the rest-json example
rather than the servlet itest
---
docs/modules/ROOT/pages/user-guide.adoc | 57 ++++++++++------------
examples/rest-json/pom.xml | 20 +-------
.../src/main/java/org/acme/rest/json/Fruit.java | 5 +-
.../src/main/java/org/acme/rest/json/Legume.java | 6 ++-
.../src/main/java/org/acme/rest/json/Routes.java | 22 +++++----
.../java/org/acme/rest/json/LegumeResourceIT.java | 23 ---------
.../org/acme/rest/json/LegumeResourceTest.java | 39 ---------------
.../json/{FruitResourceIT.java => RestJsonIT.java} | 6 ++-
.../{FruitResourceTest.java => RestJsonTest.java} | 26 ++++++++--
extensions/pom.xml | 3 ++
poms/bom-deployment/pom.xml | 10 ++--
poms/bom/pom.xml | 12 ++---
12 files changed, 91 insertions(+), 138 deletions(-)
diff --git a/docs/modules/ROOT/pages/user-guide.adoc b/docs/modules/ROOT/pages/user-guide.adoc
index e79c397..4806330 100644
--- a/docs/modules/ROOT/pages/user-guide.adoc
+++ b/docs/modules/ROOT/pages/user-guide.adoc
@@ -13,14 +13,11 @@ xref:list-of-camel-quarkus-extensions.adoc[complete list].
== Your first application
-As long as we do not have self-contained examples, we can only offer some of the Camel Quarkus integration tests as a
-replacement. Only a few manual steps are needed to turn e.g. the servlet integration test into a standalone application
-that can further serve as a base for your real world project.
+We recommend you to choose an example from our https://github.com/apache/camel-quarkus/tree/master/examples[source tree]
+as a base for your real world project.
=== Prerequisites
-To transform one of our integration tests to a standalone example, you need:
-
* A `git` client
* An IDE
* JDK 1.8+ with JAVA_HOME configured appropriately
@@ -29,7 +26,7 @@ To transform one of our integration tests to a standalone example, you need:
https://quarkus.io/guides/building-native-image-guide[Building a native executable] section of the Quarkus
documentation.
-=== Turn the servlet integration test into a standalone application
+=== Step by step with the `rest-json` example
1. Clone Camel Quarkus and checkout the latest release tag
+
@@ -41,13 +38,13 @@ cd camel-quarkus
git checkout $(git describe --abbrev=0)
----
-2. Copy the servlet integration test out of the Camel Quarkus source tree.
+2. Copy the `rest-json` example out of the Camel Quarkus source tree.
+
[source,shell]
----
cd ..
-cp -r camel-quarkus/integration-tests/servlet/ .
-cd servlet
+cp -r camel-quarkus/examples/rest-json .
+cd rest-json
----
3. Open the `pom.xml` file in your IDE.
@@ -87,24 +84,24 @@ The application has just two compile dependencies:
----
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-servlet</artifactId>
+ <artifactId>camel-quarkus-platform-http</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-rest</artifactId>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-jackson</artifactId>
</dependency>
----
-They are managed in `camel-quarkus-bom` that we use as the Maven parent. `camel-quarkus-bom` also manages plugins
-necessary for a typical Camel Quarkus application.
+They are managed in `camel-quarkus-bom` that we use as the Maven parent. `camel-quarkus-bom` and its ancestors also
+manage plugins necessary for a typical Camel Quarkus application. In case you cannot use `camel-quarkus-bom` as a
+parent of your application, make sure that you add those plugins manually.
-There are only two classes in the application: `CamelRoute` defining the Camel routes and
-`CustomServlet`.
+There are only three classes in the application: `Routes` defining the Camel routes and a couple of entity classes
+(`Fruit` and `Legume`).
-`src/main/resources/application.properties` configure the application. E.g. the `CustomServlet` is set
-there to serve the requests for the path `/my-named-folder/*`.
+`src/main/resources/application.properties` configure the application. E.g. the `camel.context.name` is set there.
-There are two test classes there: `CamelServletTest` is for the JVM mode while `CamelServletIT` is there for the native
+There are two test classes there: `RestJsonTest` is for the JVM mode while `RestJsonIT` is there for the native
mode.
The JVM mode tests are run by `maven-surefire-plugin` in the `test` Maven phase:
@@ -114,17 +111,17 @@ The JVM mode tests are run by `maven-surefire-plugin` in the `test` Maven phase:
mvn clean test
----
-This should take about half a minute.
+This should take about 15 seconds.
The native mode tests are verified by `maven-failsafe-plugin` in the `verify` phase. Pass the `native` property to
activate the profile that runs them:
[source,shell]
----
-mvn clean verify -Dnative -Dnative-image.docker-build=true -Dnative-image.xmx=5g
+mvn clean verify -Dnative -Dnative-image.docker-build=true
----
-This takes about three minutes.
+This takes about 2.5 minutes (once you have all dependencies cached).
=== Run the application
@@ -137,7 +134,7 @@ This takes about three minutes.
mvn clean package
ls -lh target
...
--rw-r--r--. 1 ppalaga ppalaga 157K Aug 9 18:55 my-app-0.0.1-SNAPSHOT-runner.jar
+-rw-r--r--. 1 ppalaga ppalaga 238K Oct 11 18:55 my-app-0.0.1-SNAPSHOT-runner.jar
...
----
@@ -147,10 +144,10 @@ You can run it as follows:
----
java -jar target/*-runner.jar
...
-[io.quarkus] (main) Quarkus 0.20.0 started in 0.805s. Listening on: http://[::]:8080
+[io.quarkus] (main) Quarkus 0.23.2 started in 1.163s. Listening on: http://[::]:8080
----
-Notice the boot time under a second.
+Notice the boot time around a second.
The thin `jar` contains just the application code. To run it, the dependencies in `target/lib` are required too.
@@ -160,10 +157,10 @@ To prepare a native executable using GraalVM, run the following command:
[source,shell]
----
-mvn clean package -Dnative -Dnative-image.docker-build=true -Dnative-image.xmx=5g
+mvn clean package -Dnative -Dnative-image.docker-build=true
ls -lh target
...
--rwxr-xr-x. 1 ppalaga ppalaga 32M Aug 9 18:57 my-app-0.0.1-SNAPSHOT-runner
+-rwxr-xr-x. 1 ppalaga ppalaga 46M Oct 11 18:57 my-app-0.0.1-SNAPSHOT-runner
...
----
@@ -174,7 +171,7 @@ it can be run directly:
----
./target/*-runner
...
-[io.quarkus] (main) Quarkus 0.20.0 started in 0.017s. Listening on: http://[::]:8080
+[io.quarkus] (main) Quarkus 0.23.2 started in 0.013s. Listening on: http://[::]:8080
...
----
@@ -184,7 +181,7 @@ Check how fast it started and check how little memory it consumes:
----
ps -o rss,command -p $(pgrep my-app)
RSS COMMAND
-21932 ./target/my-app-0.0.1-SNAPSHOT-runner
+34916 ./target/my-app-0.0.1-SNAPSHOT-runner
----
-That's under 22 MB of RAM!
+That's under 35 MB of RAM!
diff --git a/examples/rest-json/pom.xml b/examples/rest-json/pom.xml
index 1420885..bd1e4c4 100644
--- a/examples/rest-json/pom.xml
+++ b/examples/rest-json/pom.xml
@@ -20,8 +20,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-examples</artifactId>
+ <artifactId>camel-quarkus-bom</artifactId>
<version>0.2.1-SNAPSHOT</version>
+ <relativePath>../../poms/bom/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -41,18 +42,6 @@
<native-image.container-runtime>docker</native-image.container-runtime>
</properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.camel.quarkus</groupId>
- <artifactId>camel-quarkus-bom</artifactId>
- <version>${project.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
<dependencies>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
@@ -63,11 +52,6 @@
<artifactId>camel-jackson</artifactId>
</dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-resteasy</artifactId>
- </dependency>
-
<!-- test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
diff --git a/examples/rest-json/src/main/java/org/acme/rest/json/Fruit.java b/examples/rest-json/src/main/java/org/acme/rest/json/Fruit.java
index 29349f0..b86a36c 100644
--- a/examples/rest-json/src/main/java/org/acme/rest/json/Fruit.java
+++ b/examples/rest-json/src/main/java/org/acme/rest/json/Fruit.java
@@ -20,7 +20,10 @@ import java.util.Objects;
import io.quarkus.runtime.annotations.RegisterForReflection;
-@RegisterForReflection
+/**
+ * A REST entity representing a fruit.
+ */
+@RegisterForReflection // Lets Quarkus register this class for reflection during the native build
public class Fruit {
private String name;
private String description;
diff --git a/examples/rest-json/src/main/java/org/acme/rest/json/Legume.java b/examples/rest-json/src/main/java/org/acme/rest/json/Legume.java
index b72a880..e9f4f0e 100644
--- a/examples/rest-json/src/main/java/org/acme/rest/json/Legume.java
+++ b/examples/rest-json/src/main/java/org/acme/rest/json/Legume.java
@@ -20,7 +20,11 @@ import java.util.Objects;
import io.quarkus.runtime.annotations.RegisterForReflection;
-@RegisterForReflection
+
+/**
+ * A REST entity representing a legume.
+ */
+@RegisterForReflection // Lets Quarkus register this class for reflection during the native build
public class Legume {
private String name;
private String description;
diff --git a/examples/rest-json/src/main/java/org/acme/rest/json/Routes.java b/examples/rest-json/src/main/java/org/acme/rest/json/Routes.java
index cc39afe..ace624c 100644
--- a/examples/rest-json/src/main/java/org/acme/rest/json/Routes.java
+++ b/examples/rest-json/src/main/java/org/acme/rest/json/Routes.java
@@ -17,33 +17,32 @@
package org.acme.rest.json;
import java.util.Collections;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.dataformat.JsonLibrary;
+/**
+ * Camel route definitions.
+ */
public class Routes extends RouteBuilder {
- private final Set<Fruit> fruits;
- private final Set<Legume> legumes;
+ private final Set<Fruit> fruits = Collections.synchronizedSet(new LinkedHashSet<>());
+ private final Set<Legume> legumes = Collections.synchronizedSet(new LinkedHashSet<>());
public Routes() {
- this.fruits = Collections.newSetFromMap(Collections.synchronizedMap(new LinkedHashMap<>()));
+
+ /* Let's add some initial fruits */
this.fruits.add(new Fruit("Apple", "Winter fruit"));
this.fruits.add(new Fruit("Pineapple", "Tropical fruit"));
- this.legumes = Collections.synchronizedSet(new LinkedHashSet<>());
+ /* Let's add some initial legumes */
this.legumes.add(new Legume("Carrot", "Root vegetable, usually orange"));
this.legumes.add(new Legume("Zucchini", "Summer squash"));
}
@Override
public void configure() throws Exception {
- from("platform-http:/legumes?httpMethodRestrict=GET")
- .setBody().constant(legumes)
- .marshal().json();
-
from("platform-http:/fruits?httpMethodRestrict=GET,POST")
.choice()
.when(simple("${header.CamelHttpMethod} == 'GET'"))
@@ -60,5 +59,10 @@ public class Routes extends RouteBuilder {
.endChoice()
.end()
.marshal().json();
+
+ from("platform-http:/legumes?httpMethodRestrict=GET")
+ .setBody().constant(legumes)
+ .marshal().json();
+
}
}
diff --git a/examples/rest-json/src/test/java/org/acme/rest/json/LegumeResourceIT.java b/examples/rest-json/src/test/java/org/acme/rest/json/LegumeResourceIT.java
deleted file mode 100644
index ce0b3c8..0000000
--- a/examples/rest-json/src/test/java/org/acme/rest/json/LegumeResourceIT.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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.acme.rest.json;
-
-import io.quarkus.test.junit.SubstrateTest;
-
-@SubstrateTest
-public class LegumeResourceIT extends LegumeResourceTest {
-}
\ No newline at end of file
diff --git a/examples/rest-json/src/test/java/org/acme/rest/json/LegumeResourceTest.java b/examples/rest-json/src/test/java/org/acme/rest/json/LegumeResourceTest.java
deleted file mode 100644
index c0b5eb0..0000000
--- a/examples/rest-json/src/test/java/org/acme/rest/json/LegumeResourceTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.acme.rest.json;
-
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
-
-import static io.restassured.RestAssured.given;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-
-@QuarkusTest
-public class LegumeResourceTest {
-
- @Test
- public void testList() {
- given()
- .when().get("/legumes")
- .then()
- .statusCode(200)
- .body("$.size()", is(2),
- "name", containsInAnyOrder("Carrot", "Zucchini"),
- "description", containsInAnyOrder("Root vegetable, usually orange", "Summer squash"));
- }
-}
diff --git a/examples/rest-json/src/test/java/org/acme/rest/json/FruitResourceIT.java b/examples/rest-json/src/test/java/org/acme/rest/json/RestJsonIT.java
similarity index 81%
rename from examples/rest-json/src/test/java/org/acme/rest/json/FruitResourceIT.java
rename to examples/rest-json/src/test/java/org/acme/rest/json/RestJsonIT.java
index d36cb4b..c32a4fb 100644
--- a/examples/rest-json/src/test/java/org/acme/rest/json/FruitResourceIT.java
+++ b/examples/rest-json/src/test/java/org/acme/rest/json/RestJsonIT.java
@@ -18,6 +18,10 @@ package org.acme.rest.json;
import io.quarkus.test.junit.SubstrateTest;
+/**
+ * Native mode tests. In the native mode, the same tests will be executed as in the JVM mode because this class extends
+ * {@link RestJsonTest}.
+ */
@SubstrateTest
-public class FruitResourceIT extends FruitResourceTest {
+public class RestJsonIT extends RestJsonTest {
}
\ No newline at end of file
diff --git a/examples/rest-json/src/test/java/org/acme/rest/json/FruitResourceTest.java b/examples/rest-json/src/test/java/org/acme/rest/json/RestJsonTest.java
similarity index 76%
rename from examples/rest-json/src/test/java/org/acme/rest/json/FruitResourceTest.java
rename to examples/rest-json/src/test/java/org/acme/rest/json/RestJsonTest.java
index fdd17fb..24f1e76 100644
--- a/examples/rest-json/src/test/java/org/acme/rest/json/FruitResourceTest.java
+++ b/examples/rest-json/src/test/java/org/acme/rest/json/RestJsonTest.java
@@ -16,8 +16,6 @@
*/
package org.acme.rest.json;
-import javax.ws.rs.core.MediaType;
-
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
@@ -25,11 +23,16 @@ import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.containsInAnyOrder;
+/**
+ * JVM mode tests.
+ */
@QuarkusTest
-public class FruitResourceTest {
+public class RestJsonTest {
@Test
- public void test() {
+ public void fruits() {
+
+ /* Assert the initial fruits are there */
given()
.when().get("/fruits")
.then()
@@ -40,9 +43,10 @@ public class FruitResourceTest {
"description", containsInAnyOrder("Winter fruit", "Tropical fruit")
);
+ /* Add a new fruit */
given()
.body("{\"name\": \"Pear\", \"description\": \"Winter fruit\"}")
- .header("Content-Type", MediaType.APPLICATION_JSON)
+ .header("Content-Type", "application/json")
.when()
.post("/fruits")
.then()
@@ -53,4 +57,16 @@ public class FruitResourceTest {
"description", containsInAnyOrder("Winter fruit", "Tropical fruit", "Winter fruit")
);
}
+
+ @Test
+ public void legumes() {
+ given()
+ .when().get("/legumes")
+ .then()
+ .statusCode(200)
+ .body("$.size()", is(2),
+ "name", containsInAnyOrder("Carrot", "Zucchini"),
+ "description", containsInAnyOrder("Root vegetable, usually orange", "Summer squash"));
+ }
+
}
diff --git a/extensions/pom.xml b/extensions/pom.xml
index 3ba3193..4c3906d 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -83,6 +83,9 @@
<templatesUriBase>file:///${project.basedir}/../build/create-extension-templates</templatesUriBase>
<runtimeBomPath>../poms/bom/pom.xml</runtimeBomPath>
<deploymentBomPath>../poms/bom-deployment/pom.xml</deploymentBomPath>
+ <!-- The bomEntryVersion should come with the upgrade to Quarkus 0.25
+ see https://github.com/quarkusio/quarkus/pull/4514
+ <bomEntryVersion>%{camel-quarkus.version}</bomEntryVersion> -->
<itestParentPath>../integration-tests/pom.xml</itestParentPath>
</configuration>
</plugin>
diff --git a/poms/bom-deployment/pom.xml b/poms/bom-deployment/pom.xml
index 35c0d8f..f962574 100644
--- a/poms/bom-deployment/pom.xml
+++ b/poms/bom-deployment/pom.xml
@@ -118,7 +118,7 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-csv-deployment</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
@@ -153,7 +153,7 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-microprofile-metrics-deployment</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
@@ -203,17 +203,17 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-zipfile-deployment</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-paho-deployment</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-platform-http-deployment</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
</dependencies>
diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml
index 1cecddf..cd1f2fc 100644
--- a/poms/bom/pom.xml
+++ b/poms/bom/pom.xml
@@ -305,7 +305,7 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-csv</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
@@ -330,7 +330,7 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-microprofile-metrics</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
@@ -375,7 +375,7 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-zipfile</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<!-- Other third party dependencies (in alphabetical order by groupId:artifactId) -->
@@ -392,17 +392,17 @@
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-paho</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-platform-http</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-platform-http-component</artifactId>
- <version>${project.version}</version>
+ <version>${camel-quarkus.version}</version>
</dependency>
</dependencies>