Move examples from
https://github.com/apache/camel-quarkus/tree/fa37a0423c7c3948b98bb33b06bfdb16ad76b0b5/examples
diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 0000000..6ccb31b
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,29 @@
+#
+# 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.
+#
+
+github:
+ description: "Apache Camel Quarkus Examples"
+ homepage: https://camel.apache.org
+ labels:
+ - camel
+ - integration
+ - java
+ - quarkus
+ enabled_merge_buttons:
+ merge: false
+ rebase: true
+ squash: true
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed 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.
+
diff --git a/NOTICE.txt b/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/NOTICE.txt
@@ -0,0 +1,11 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Camel distribution. ==
+ =========================================================================
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Please read the different LICENSE files present in the licenses directory of
+ this distribution.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c2de7c9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+# Apache Camel Quarkus Examples
+
+[Apache Camel](http://camel.apache.org/) is a powerful open source integration framework based on known
+Enterprise Integration Patterns with powerful bean integration.
+
+### Introduction
+
+This project provides examples for Apache Camel Quarkus.
diff --git a/file-split-log-xml/README.adoc b/file-split-log-xml/README.adoc
new file mode 100644
index 0000000..fa499de
--- /dev/null
+++ b/file-split-log-xml/README.adoc
@@ -0,0 +1,66 @@
+= file-split-log-xml
+
+This is a basic hello world example that uses XML to set-up a Camel file consumer which reads a file in the resources folder.
+
+It demonstrates the following;
+1. Reading a file using camel file endpoint as a consumer.
+2. Splitting the file by row.
+3. Splitting the row by columns.
+4. Usage of properties in the camel endpoint uri.
+5. No Java code required or used, the XML can still be compiled to native code. Pretty cool.
+
+The file consumer has been marked as non-idempotent thus it will read the same file again using a configurable 30 second delay.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Once the application has started it will wait 5 seconds and then read the file every 30 seconds. By default the row split
+is sequential however you can edit the properties file and set the parallel processing to true. The output should then be
+a little more out of order i.e. non-sequential processing of rows.
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.570s.
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.011s.
+...
+----
diff --git a/file-split-log-xml/pom.xml b/file-split-log-xml/pom.xml
new file mode 100644
index 0000000..012311c
--- /dev/null
+++ b/file-split-log-xml/pom.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+
+
+ <artifactId>camel-quarkus-examples-file-log-xml</artifactId>
+ <name>Camel Quarkus :: Examples :: File To Log XML DSL</name>
+ <description>Camel Quarkus Example :: File To Log XML DSL</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-xml-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-file</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-file-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-xml-io-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <workingDir>${project.basedir}</workingDir>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/file-split-log-xml/src/main/java/org/acme/filereader/DummyClass.java b/file-split-log-xml/src/main/java/org/acme/filereader/DummyClass.java
new file mode 100644
index 0000000..0eef945
--- /dev/null
+++ b/file-split-log-xml/src/main/java/org/acme/filereader/DummyClass.java
@@ -0,0 +1,20 @@
+/*
+ * 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.filereader;
+
+public class DummyClass {
+}
diff --git a/file-split-log-xml/src/main/resources/application.properties b/file-split-log-xml/src/main/resources/application.properties
new file mode 100644
index 0000000..75988ad
--- /dev/null
+++ b/file-split-log-xml/src/main/resources/application.properties
@@ -0,0 +1,31 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+quarkus.log.category."org.apache.camel.main".level = DEBUG
+
+#
+# Camel
+#
+camel.context.name = camel-quarkus-xml
+camel.main.xml-routes = file:src/main/resources/routes/camel-routes.xml
+camel.file.route.folder = src/main/resources/file
+camel.file.repeat.interval = 30000
+camel.file.split.parallel = false
\ No newline at end of file
diff --git a/file-split-log-xml/src/main/resources/file/customerlist.csv b/file-split-log-xml/src/main/resources/file/customerlist.csv
new file mode 100644
index 0000000..8db6efa
--- /dev/null
+++ b/file-split-log-xml/src/main/resources/file/customerlist.csv
@@ -0,0 +1,1001 @@
+name,surname
+Michael,SMITH
+James,JOHNSON
+John,WILLIAMS
+Robert,BROWN
+David,JONES
+William,MILLER
+Mary,DAVIS
+Christopher,GARCIA
+Joseph,RODRIGUEZ
+Richard,WILSON
+Daniel,MARTINEZ
+Thomas,ANDERSON
+Matthew,TAYLOR
+Jennifer,THOMAS
+Charles,HERNANDEZ
+Anthony,MOORE
+Patricia,MARTIN
+Linda,JACKSON
+Mark,THOMPSON
+Elizabeth,WHITE
+Joshua,LOPEZ
+Steven,LEE
+Andrew,GONZALEZ
+Kevin,HARRIS
+Brian,CLARK
+Barbara,LEWIS
+Jessica,ROBINSON
+Jason,WALKER
+Susan,PEREZ
+Timothy,HALL
+Paul,YOUNG
+Kenneth,ALLEN
+Lisa,SANCHEZ
+Ryan,WRIGHT
+Sarah,KING
+Karen,SCOTT
+Jeffrey,GREEN
+Donald,BAKER
+Ashley,ADAMS
+Eric,NELSON
+Jacob,HILL
+Nicholas,RAMIREZ
+Jonathan,CAMPBELL
+Ronald,MITCHELL
+Michelle,ROBERTS
+Kimberly,CARTER
+Nancy,PHILLIPS
+Justin,EVANS
+Sandra,TURNER
+Amanda,TORRES
+Brandon,PARKER
+Stephanie,COLLINS
+Emily,EDWARDS
+Melissa,STEWART
+Gary,FLORES
+Edward,MORRIS
+Stephen,NGUYEN
+Scott,MURPHY
+George,RIVERA
+Donna,COOK
+Jose,ROGERS
+Rebecca,MORGAN
+Deborah,PETERSON
+Laura,COOPER
+Cynthia,REED
+Carol,BAILEY
+Amy,BELL
+Margaret,GOMEZ
+Gregory,KELLY
+Sharon,HOWARD
+Larry,WARD
+Angela,COX
+Maria,DIAZ
+Alexander,RICHARDSON
+Benjamin,WOOD
+Nicole,WATSON
+Kathleen,BROOKS
+Patrick,BENNETT
+Samantha,GRAY
+Tyler,JAMES
+Samuel,REYES
+Betty,CRUZ
+Brenda,HUGHES
+Pamela,PRICE
+Aaron,MYERS
+Kelly,LONG
+Heather,FOSTER
+Rachel,SANDERS
+Adam,ROSS
+Christine,MORALES
+Zachary,POWELL
+Debra,SULLIVAN
+Katherine,RUSSELL
+Dennis,ORTIZ
+Nathan,JENKINS
+Christina,GUTIERREZ
+Julie,PERRY
+Jordan,BUTLER
+Kyle,BARNES
+Anna,FISHER
+Michael,HENDERSON
+James,COLEMAN
+John,SIMMONS
+Robert,PATTERSON
+David,JORDAN
+William,REYNOLDS
+Mary,HAMILTON
+Christopher,GRAHAM
+Joseph,KIM
+Richard,GONZALES
+Daniel,ALEXANDER
+Thomas,RAMOS
+Matthew,WALLACE
+Jennifer,GRIFFIN
+Charles,WEST
+Anthony,COLE
+Patricia,HAYES
+Linda,CHAVEZ
+Mark,GIBSON
+Elizabeth,BRYANT
+Joshua,ELLIS
+Steven,STEVENS
+Andrew,MURRAY
+Kevin,FORD
+Brian,MARSHALL
+Barbara,OWENS
+Jessica,MCDONALD
+Jason,HARRISON
+Susan,RUIZ
+Timothy,KENNEDY
+Paul,WELLS
+Kenneth,ALVAREZ
+Lisa,WOODS
+Ryan,MENDOZA
+Sarah,CASTILLO
+Karen,OLSON
+Jeffrey,WEBB
+Donald,WASHINGTON
+Ashley,TUCKER
+Eric,FREEMAN
+Jacob,BURNS
+Nicholas,HENRY
+Jonathan,VASQUEZ
+Ronald,SNYDER
+Michelle,SIMPSON
+Kimberly,CRAWFORD
+Nancy,JIMENEZ
+Justin,PORTER
+Sandra,MASON
+Amanda,SHAW
+Brandon,GORDON
+Stephanie,WAGNER
+Emily,HUNTER
+Melissa,ROMERO
+Gary,HICKS
+Edward,DIXON
+Stephen,HUNT
+Scott,PALMER
+George,ROBERTSON
+Donna,BLACK
+Jose,HOLMES
+Rebecca,STONE
+Deborah,MEYER
+Laura,BOYD
+Cynthia,MILLS
+Carol,WARREN
+Amy,FOX
+Margaret,ROSE
+Gregory,RICE
+Sharon,MORENO
+Larry,SCHMIDT
+Angela,PATEL
+Maria,FERGUSON
+Alexander,NICHOLS
+Benjamin,HERRERA
+Nicole,MEDINA
+Kathleen,RYAN
+Patrick,FERNANDEZ
+Samantha,WEAVER
+Tyler,DANIELS
+Samuel,STEPHENS
+Betty,GARDNER
+Brenda,PAYNE
+Pamela,KELLEY
+Aaron,DUNN
+Kelly,PIERCE
+Heather,ARNOLD
+Rachel,TRAN
+Adam,SPENCER
+Christine,PETERS
+Zachary,HAWKINS
+Debra,GRANT
+Katherine,HANSEN
+Dennis,CASTRO
+Nathan,HOFFMAN
+Christina,HART
+Julie,ELLIOTT
+Jordan,CUNNINGHAM
+Kyle,KNIGHT
+Anna,BRADLEY
+Michael,CARROLL
+James,HUDSON
+John,DUNCAN
+Robert,ARMSTRONG
+David,BERRY
+William,ANDREWS
+Mary,JOHNSTON
+Christopher,RAY
+Joseph,LANE
+Richard,RILEY
+Daniel,CARPENTER
+Thomas,PERKINS
+Matthew,AGUILAR
+Jennifer,SILVA
+Charles,RICHARDS
+Anthony,WILLIS
+Patricia,MATTHEWS
+Linda,CHAPMAN
+Mark,LAWRENCE
+Elizabeth,GARZA
+Joshua,VARGAS
+Steven,WATKINS
+Andrew,WHEELER
+Kevin,LARSON
+Brian,CARLSON
+Barbara,HARPER
+Jessica,GEORGE
+Jason,GREENE
+Susan,BURKE
+Timothy,GUZMAN
+Paul,MORRISON
+Kenneth,MUNOZ
+Lisa,JACOBS
+Ryan,OBRIEN
+Sarah,LAWSON
+Karen,FRANKLIN
+Jeffrey,LYNCH
+Donald,BISHOP
+Ashley,CARR
+Eric,SALAZAR
+Jacob,AUSTIN
+Nicholas,MENDEZ
+Jonathan,GILBERT
+Ronald,JENSEN
+Michelle,WILLIAMSON
+Kimberly,MONTGOMERY
+Nancy,HARVEY
+Justin,OLIVER
+Sandra,HOWELL
+Amanda,DEAN
+Brandon,HANSON
+Stephanie,WEBER
+Emily,GARRETT
+Melissa,SIMS
+Gary,BURTON
+Edward,FULLER
+Stephen,SOTO
+Scott,MCCOY
+George,WELCH
+Donna,CHEN
+Jose,SCHULTZ
+Rebecca,WALTERS
+Deborah,REID
+Laura,FIELDS
+Cynthia,WALSH
+Carol,LITTLE
+Amy,FOWLER
+Margaret,BOWMAN
+Gregory,DAVIDSON
+Sharon,MAY
+Larry,DAY
+Angela,SCHNEIDER
+Maria,NEWMAN
+Alexander,BREWER
+Benjamin,LUCAS
+Nicole,HOLLAND
+Kathleen,WONG
+Patrick,BANKS
+Samantha,SANTOS
+Tyler,CURTIS
+Samuel,PEARSON
+Betty,DELGADO
+Brenda,VALDEZ
+Pamela,PENA
+Aaron,RIOS
+Kelly,DOUGLAS
+Heather,SANDOVAL
+Rachel,BARRETT
+Adam,HOPKINS
+Christine,KELLER
+Zachary,GUERRERO
+Debra,STANLEY
+Katherine,BATES
+Dennis,ALVARADO
+Nathan,BECK
+Christina,ORTEGA
+Julie,WADE
+Jordan,ESTRADA
+Kyle,CONTRERAS
+Anna,BARNETT
+Michael,CALDWELL
+James,SANTIAGO
+John,LAMBERT
+Robert,POWERS
+David,CHAMBERS
+William,NUNEZ
+Mary,CRAIG
+Christopher,LEONARD
+Joseph,LOWE
+Richard,RHODES
+Daniel,BYRD
+Thomas,GREGORY
+Matthew,SHELTON
+Jennifer,FRAZIER
+Charles,BECKER
+Anthony,MALDONADO
+Patricia,FLEMING
+Linda,VEGA
+Mark,SUTTON
+Elizabeth,COHEN
+Joshua,JENNINGS
+Steven,PARKS
+Andrew,MCDANIEL
+Kevin,WATTS
+Brian,BARKER
+Barbara,NORRIS
+Jessica,VAUGHN
+Jason,VAZQUEZ
+Susan,HOLT
+Timothy,SCHWARTZ
+Paul,STEELE
+Kenneth,BENSON
+Lisa,NEAL
+Ryan,DOMINGUEZ
+Sarah,HORTON
+Karen,TERRY
+Jeffrey,WOLFE
+Donald,HALE
+Ashley,LYONS
+Eric,GRAVES
+Jacob,HAYNES
+Nicholas,MILES
+Jonathan,PARK
+Ronald,WARNER
+Michelle,PADILLA
+Kimberly,BUSH
+Nancy,THORNTON
+Justin,MCCARTHY
+Sandra,MANN
+Amanda,ZIMMERMAN
+Brandon,ERICKSON
+Stephanie,FLETCHER
+Emily,MCKINNEY
+Melissa,PAGE
+Gary,DAWSON
+Edward,JOSEPH
+Stephen,MARQUEZ
+Scott,REEVES
+George,KLEIN
+Donna,ESPINOZA
+Jose,BALDWIN
+Rebecca,MORAN
+Deborah,LOVE
+Laura,ROBBINS
+Cynthia,HIGGINS
+Carol,BALL
+Amy,CORTEZ
+Margaret,LE
+Gregory,GRIFFITH
+Sharon,BOWEN
+Larry,SHARP
+Angela,CUMMINGS
+Maria,RAMSEY
+Alexander,HARDY
+Benjamin,SWANSON
+Nicole,BARBER
+Kathleen,ACOSTA
+Patrick,LUNA
+Samantha,CHANDLER
+Tyler,BLAIR
+Samuel,DANIEL
+Betty,CROSS
+Brenda,SIMON
+Pamela,DENNIS
+Aaron,OCONNOR
+Kelly,QUINN
+Heather,GROSS
+Rachel,NAVARRO
+Adam,MOSS
+Christine,FITZGERALD
+Zachary,DOYLE
+Debra,MCLAUGHLIN
+Katherine,ROJAS
+Dennis,RODGERS
+Nathan,STEVENSON
+Christina,SINGH
+Julie,YANG
+Jordan,FIGUEROA
+Kyle,HARMON
+Anna,NEWTON
+Michael,PAUL
+James,MANNING
+John,GARNER
+Robert,MCGEE
+David,REESE
+William,FRANCIS
+Mary,BURGESS
+Christopher,ADKINS
+Joseph,GOODMAN
+Richard,CURRY
+Daniel,BRADY
+Thomas,CHRISTENSEN
+Matthew,POTTER
+Jennifer,WALTON
+Charles,GOODWIN
+Anthony,MULLINS
+Patricia,MOLINA
+Linda,WEBSTER
+Mark,FISCHER
+Elizabeth,CAMPOS
+Joshua,AVILA
+Steven,SHERMAN
+Andrew,TODD
+Kevin,CHANG
+Brian,BLAKE
+Barbara,MALONE
+Jessica,WOLF
+Jason,HODGES
+Susan,JUAREZ
+Timothy,GILL
+Paul,FARMER
+Kenneth,HINES
+Lisa,GALLAGHER
+Ryan,DURAN
+Sarah,HUBBARD
+Karen,CANNON
+Jeffrey,MIRANDA
+Donald,WANG
+Ashley,SAUNDERS
+Eric,TATE
+Jacob,MACK
+Nicholas,HAMMOND
+Jonathan,CARRILLO
+Ronald,TOWNSEND
+Michelle,WISE
+Kimberly,INGRAM
+Nancy,BARTON
+Justin,MEJIA
+Sandra,AYALA
+Amanda,SCHROEDER
+Brandon,HAMPTON
+Stephanie,ROWE
+Emily,PARSONS
+Melissa,FRANK
+Gary,WATERS
+Edward,STRICKLAND
+Stephen,OSBORNE
+Scott,MAXWELL
+George,CHAN
+Donna,DELEON
+Jose,NORMAN
+Rebecca,HARRINGTON
+Deborah,CASEY
+Laura,PATTON
+Cynthia,LOGAN
+Carol,BOWERS
+Amy,MUELLER
+Margaret,GLOVER
+Gregory,FLOYD
+Sharon,HARTMAN
+Larry,BUCHANAN
+Angela,COBB
+Maria,FRENCH
+Alexander,KRAMER
+Benjamin,MCCORMICK
+Nicole,CLARKE
+Kathleen,TYLER
+Patrick,GIBBS
+Samantha,MOODY
+Tyler,CONNER
+Samuel,SPARKS
+Betty,MCGUIRE
+Brenda,LEON
+Pamela,BAUER
+Aaron,NORTON
+Kelly,POPE
+Heather,FLYNN
+Rachel,HOGAN
+Adam,ROBLES
+Christine,SALINAS
+Zachary,YATES
+Debra,LINDSEY
+Katherine,LLOYD
+Dennis,MARSH
+Nathan,MCBRIDE
+Christina,OWEN
+Julie,SOLIS
+Jordan,PHAM
+Kyle,LANG
+Anna,PRATT
+Michael,LARA
+James,BROCK
+John,BALLARD
+Robert,TRUJILLO
+David,SHAFFER
+William,DRAKE
+Mary,ROMAN
+Christopher,AGUIRRE
+Joseph,MORTON
+Richard,STOKES
+Daniel,LAMB
+Thomas,PACHECO
+Matthew,PATRICK
+Jennifer,COCHRAN
+Charles,SHEPHERD
+Anthony,CAIN
+Patricia,BURNETT
+Linda,HESS
+Mark,LI
+Elizabeth,CERVANTES
+Joshua,OLSEN
+Steven,BRIGGS
+Andrew,OCHOA
+Kevin,CABRERA
+Brian,VELASQUEZ
+Barbara,MONTOYA
+Jessica,ROTH
+Jason,MEYERS
+Susan,CARDENAS
+Timothy,FUENTES
+Paul,WEISS
+Kenneth,HOOVER
+Lisa,WILKINS
+Ryan,NICHOLSON
+Sarah,UNDERWOOD
+Karen,SHORT
+Jeffrey,CARSON
+Donald,MORROW
+Ashley,COLON
+Eric,HOLLOWAY
+Jacob,SUMMERS
+Nicholas,BRYAN
+Jonathan,PETERSEN
+Ronald,MCKENZIE
+Michelle,SERRANO
+Kimberly,WILCOX
+Nancy,CAREY
+Justin,CLAYTON
+Sandra,POOLE
+Amanda,CALDERON
+Brandon,GALLEGOS
+Stephanie,GREER
+Emily,RIVAS
+Melissa,GUERRA
+Gary,DECKER
+Edward,COLLIER
+Stephen,WALL
+Scott,WHITAKER
+George,BASS
+Donna,FLOWERS
+Jose,DAVENPORT
+Rebecca,CONLEY
+Deborah,HOUSTON
+Laura,HUFF
+Cynthia,COPELAND
+Carol,HOOD
+Amy,MONROE
+Margaret,MASSEY
+Gregory,ROBERSON
+Sharon,COMBS
+Larry,FRANCO
+Angela,LARSEN
+Maria,PITTMAN
+Alexander,RANDALL
+Benjamin,SKINNER
+Nicole,WILKINSON
+Kathleen,KIRBY
+Patrick,CAMERON
+Samantha,BRIDGES
+Tyler,ANTHONY
+Samuel,RICHARD
+Betty,KIRK
+Brenda,BRUCE
+Pamela,SINGLETON
+Aaron,MATHIS
+Kelly,BRADFORD
+Heather,BOONE
+Rachel,ABBOTT
+Adam,CHARLES
+Christine,ALLISON
+Zachary,SWEENEY
+Debra,ATKINSON
+Katherine,HORN
+Dennis,JEFFERSON
+Nathan,ROSALES
+Christina,YORK
+Julie,CHRISTIAN
+Jordan,PHELPS
+Kyle,FARRELL
+Anna,CASTANEDA
+Michael,NASH
+James,DICKERSON
+John,BOND
+Robert,WYATT
+David,FOLEY
+William,CHASE
+Mary,GATES
+Christopher,VINCENT
+Joseph,MATHEWS
+Richard,HODGE
+Daniel,GARRISON
+Thomas,TREVINO
+Matthew,VILLARREAL
+Jennifer,HEATH
+Charles,DALTON
+Anthony,VALENCIA
+Patricia,CALLAHAN
+Linda,HENSLEY
+Mark,ATKINS
+Elizabeth,HUFFMAN
+Joshua,ROY
+Steven,BOYER
+Andrew,SHIELDS
+Kevin,LIN
+Brian,HANCOCK
+Barbara,GRIMES
+Jessica,GLENN
+Jason,CLINE
+Susan,DELACRUZ
+Timothy,CAMACHO
+Paul,DILLON
+Kenneth,PARRISH
+Lisa,ONEILL
+Ryan,MELTON
+Sarah,BOOTH
+Karen,KANE
+Jeffrey,BERG
+Donald,HARRELL
+Ashley,PITTS
+Eric,SAVAGE
+Jacob,WIGGINS
+Nicholas,BRENNAN
+Jonathan,SALAS
+Ronald,MARKS
+Michelle,RUSSO
+Kimberly,SAWYER
+Nancy,BAXTER
+Justin,GOLDEN
+Sandra,HUTCHINSON
+Amanda,LIU
+Brandon,WALTER
+Stephanie,MCDOWELL
+Emily,WILEY
+Melissa,RICH
+Gary,HUMPHREY
+Edward,JOHNS
+Stephen,KOCH
+Scott,SUAREZ
+George,HOBBS
+Donna,BEARD
+Jose,GILMORE
+Rebecca,IBARRA
+Deborah,KEITH
+Laura,MACIAS
+Cynthia,KHAN
+Carol,ANDRADE
+Amy,WARE
+Margaret,STEPHENSON
+Gregory,HENSON
+Sharon,WILKERSON
+Larry,DYER
+Angela,MCCLURE
+Maria,BLACKWELL
+Alexander,MERCADO
+Benjamin,TANNER
+Nicole,EATON
+Kathleen,CLAY
+Patrick,BARRON
+Samantha,BEASLEY
+Tyler,ONEAL
+Samuel,PRESTON
+Betty,SMALL
+Brenda,WU
+Pamela,ZAMORA
+Aaron,MACDONALD
+Kelly,VANCE
+Heather,SNOW
+Rachel,MCCLAIN
+Adam,STAFFORD
+Christine,OROZCO
+Zachary,BARRY
+Debra,ENGLISH
+Katherine,SHANNON
+Dennis,KLINE
+Nathan,JACOBSON
+Christina,WOODARD
+Julie,HUANG
+Jordan,KEMP
+Kyle,MOSLEY
+Anna,PRINCE
+Michael,MERRITT
+James,HURST
+John,VILLANUEVA
+Robert,ROACH
+David,NOLAN
+William,LAM
+Mary,YODER
+Christopher,MCCULLOUGH
+Joseph,LESTER
+Richard,SANTANA
+Daniel,VALENZUELA
+Thomas,WINTERS
+Matthew,BARRERA
+Jennifer,LEACH
+Charles,ORR
+Anthony,BERGER
+Patricia,MCKEE
+Linda,STRONG
+Mark,CONWAY
+Elizabeth,STEIN
+Joshua,WHITEHEAD
+Steven,BULLOCK
+Andrew,ESCOBAR
+Kevin,KNOX
+Brian,MEADOWS
+Barbara,SOLOMON
+Jessica,VELEZ
+Jason,ODONNELL
+Susan,KERR
+Timothy,STOUT
+Paul,BLANKENSHIP
+Kenneth,BROWNING
+Lisa,KENT
+Ryan,LOZANO
+Sarah,BARTLETT
+Karen,PRUITT
+Jeffrey,BUCK
+Donald,BARR
+Ashley,GAINES
+Eric,DURHAM
+Jacob,GENTRY
+Nicholas,MCINTYRE
+Jonathan,SLOAN
+Ronald,ROCHA
+Michelle,MELENDEZ
+Kimberly,HERMAN
+Nancy,SEXTON
+Justin,MOON
+Sandra,HENDRICKS
+Amanda,RANGEL
+Brandon,STARK
+Stephanie,LOWERY
+Emily,HARDIN
+Melissa,HULL
+Gary,SELLERS
+Edward,ELLISON
+Stephen,CALHOUN
+Scott,GILLESPIE
+George,MORA
+Donna,KNAPP
+Jose,MCCALL
+Rebecca,MORSE
+Deborah,DORSEY
+Laura,WEEKS
+Cynthia,NIELSEN
+Carol,LIVINGSTON
+Amy,LEBLANC
+Margaret,MCLEAN
+Gregory,BRADSHAW
+Sharon,GLASS
+Larry,MIDDLETON
+Angela,BUCKLEY
+Maria,SCHAEFER
+Alexander,FROST
+Benjamin,HOWE
+Nicole,HOUSE
+Kathleen,MCINTOSH
+Patrick,HO
+Samantha,PENNINGTON
+Tyler,REILLY
+Samuel,HEBERT
+Betty,MCFARLAND
+Brenda,HICKMAN
+Pamela,NOBLE
+Aaron,SPEARS
+Kelly,CONRAD
+Heather,ARIAS
+Rachel,GALVAN
+Adam,VELAZQUEZ
+Christine,HUYNH
+Zachary,FREDERICK
+Debra,RANDOLPH
+Katherine,CANTU
+Dennis,FITZPATRICK
+Nathan,MAHONEY
+Christina,PECK
+Julie,VILLA
+Jordan,MICHAEL
+Kyle,DONOVAN
+Anna,MCCONNELL
+Michael,WALLS
+James,BOYLE
+John,MAYER
+Robert,ZUNIGA
+David,GILES
+William,PINEDA
+Mary,PACE
+Christopher,HURLEY
+Joseph,MAYS
+Richard,MCMILLAN
+Daniel,CROSBY
+Thomas,AYERS
+Matthew,CASE
+Jennifer,BENTLEY
+Charles,SHEPARD
+Anthony,EVERETT
+Patricia,PUGH
+Linda,DAVID
+Mark,MCMAHON
+Elizabeth,DUNLAP
+Joshua,BENDER
+Steven,HAHN
+Andrew,HARDING
+Kevin,ACEVEDO
+Brian,RAYMOND
+Barbara,BLACKBURN
+Jessica,DUFFY
+Jason,LANDRY
+Susan,DOUGHERTY
+Timothy,BAUTISTA
+Paul,SHAH
+Kenneth,POTTS
+Lisa,ARROYO
+Ryan,VALENTINE
+Sarah,MEZA
+Karen,GOULD
+Jeffrey,VAUGHAN
+Donald,FRY
+Ashley,RUSH
+Eric,AVERY
+Jacob,HERRING
+Nicholas,DODSON
+Jonathan,CLEMENTS
+Ronald,SAMPSON
+Michelle,TAPIA
+Kimberly,BEAN
+Nancy,LYNN
+Justin,CRANE
+Sandra,FARLEY
+Amanda,CISNEROS
+Brandon,BENTON
+Stephanie,ASHLEY
+Emily,MCKAY
+Melissa,FINLEY
+Gary,BEST
+Edward,BLEVINS
+Stephen,FRIEDMAN
+Scott,MOSES
+George,SOSA
+Donna,BLANCHARD
+Jose,HUBER
+Rebecca,FRYE
+Deborah,KRUEGER
+Laura,BERNARD
+Cynthia,ROSARIO
+Carol,RUBIO
+Amy,MULLEN
+Margaret,BENJAMIN
+Gregory,HALEY
+Sharon,CHUNG
+Larry,MOYER
+Angela,CHOI
+Maria,HORNE
+Alexander,YU
+Benjamin,WOODWARD
+Nicole,ALI
+Kathleen,NIXON
+Patrick,HAYDEN
+Samantha,RIVERS
+Tyler,ESTES
+Samuel,MCCARTY
+Betty,RICHMOND
+Brenda,STUART
+Pamela,MAYNARD
+Aaron,BRANDT
+Kelly,OCONNELL
+Heather,HANNA
+Rachel,SANFORD
+Adam,SHEPPARD
+Christine,CHURCH
+Zachary,BURCH
+Debra,LEVY
+Katherine,RASMUSSEN
+Dennis,COFFEY
+Nathan,PONCE
+Christina,FAULKNER
+Julie,DONALDSON
+Jordan,SCHMITT
+Kyle,NOVAK
+Anna,COSTA
+Michael,MONTES
+James,BOOKER
+John,CORDOVA
+Robert,WALLER
+David,ARELLANO
+William,MADDOX
+Mary,MATA
+Christopher,BONILLA
+Joseph,STANTON
+Richard,COMPTON
+Daniel,KAUFMAN
+Thomas,DUDLEY
+Matthew,MCPHERSON
+Jennifer,BELTRAN
+Charles,DICKSON
+Anthony,MCCANN
+Patricia,VILLEGAS
+Linda,PROCTOR
+Mark,HESTER
+Elizabeth,CANTRELL
+Joshua,DAUGHERTY
+Steven,CHERRY
+Andrew,BRAY
+Kevin,DAVILA
+Brian,ROWLAND
+Barbara,LEVINE
+Jessica,MADDEN
+Jason,SPENCE
+Susan,GOOD
+Timothy,IRWIN
+Paul,WERNER
+Kenneth,KRAUSE
+Lisa,PETTY
+Ryan,WHITNEY
+Sarah,BAIRD
+Karen,HOOPER
+Jeffrey,POLLARD
+Donald,ZAVALA
+Ashley,JARVIS
+Eric,HOLDEN
+Jacob,HAAS
+Nicholas,HENDRIX
+Jonathan,MCGRATH
+Ronald,BIRD
+Michelle,LUCERO
+Kimberly,TERRELL
+Nancy,RIGGS
+Justin,JOYCE
+Sandra,MERCER
+Amanda,ROLLINS
+Brandon,GALLOWAY
+Stephanie,DUKE
+Emily,ODOM
+Melissa,ANDERSEN
+Gary,DOWNS
+Edward,HATFIELD
+Stephen,BENITEZ
+Scott,ARCHER
+George,HUERTA
+Donna,TRAVIS
+Jose,MCNEIL
+Rebecca,HINTON
+Deborah,ZHANG
+Laura,HAYS
+Cynthia,MAYO
+Carol,FRITZ
+Amy,BRANCH
+Margaret,MOONEY
+Gregory,EWING
+Sharon,RITTER
+Larry,ESPARZA
+Angela,FREY
+Maria,BRAUN
+Alexander,GAY
+Benjamin,RIDDLE
+Nicole,HANEY
+Kathleen,KAISER
+Patrick,HOLDER
+Samantha,CHANEY
+Tyler,MCKNIGHT
+Samuel,GAMBLE
+Betty,VANG
+Brenda,COOLEY
+Pamela,CARNEY
+Aaron,COWAN
+Kelly,FORBES
+Heather,FERRELL
+Rachel,DAVIES
+Adam,BARAJAS
+Christine,SHEA
+Zachary,OSBORN
+Debra,BRIGHT
+Katherine,CUEVAS
+Dennis,BOLTON
+Nathan,MURILLO
+Christina,LUTZ
+Julie,DUARTE
+Jordan,KIDD
+Kyle,KEY
+Anna,COOKE
diff --git a/file-split-log-xml/src/main/resources/routes/camel-routes.xml b/file-split-log-xml/src/main/resources/routes/camel-routes.xml
new file mode 100644
index 0000000..c98e7b6
--- /dev/null
+++ b/file-split-log-xml/src/main/resources/routes/camel-routes.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+
+<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="
+ http://camel.apache.org/schema/spring
+ http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <route id="file-xml-route">
+ <from uri="file:{{camel.file.route.folder}}?noop=true&delay={{camel.file.repeat.interval}}&idempotent=false&initialDelay=5000"/>
+ <split parallelProcessing="{{camel.file.split.parallel}}">
+ <tokenize token="\n"/>
+ <log message="line ${headers.CamelSplitIndex} contains: ${body}"/>
+ <split>
+ <tokenize token=","/>
+ <choice>
+ <when>
+ <simple>${headers.CamelSplitIndex} == 0</simple>
+ <log message="Name is: ${body}"/>
+ </when>
+ <otherwise>
+ <log message="Surname is: ${body}"/>
+ </otherwise>
+ </choice>
+ </split>
+ </split>
+ </route>
+
+</routes>
\ No newline at end of file
diff --git a/health/README.adoc b/health/README.adoc
new file mode 100644
index 0000000..d61bc6b
--- /dev/null
+++ b/health/README.adoc
@@ -0,0 +1,79 @@
+== Camel Quarkus Example Health
+
+This example shows how to use Camel health-check with Quarkus.
+The example shows how you can build custom health-checks and have
+them automatic discovered by Camel and used as parts of its health-check system.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+The example has two routes. The timer route performs a given task at regular interval. For the sake of this example we'll say
+that this task unexpectedly freezes the service from time to time. The details can be consulted at http://localhost:8080/health.
+The custom health check is expected to report UNKNOWN on first consultation, then UP during 10 seconds, and finally DOWN so as to
+simulate that the service is frozen.
+
+The 2nd route is on purpose made to fail on startup by configuring netty to an unknown host.
+Camel supervising route controller will attempt to restart the route up till 10 times before exhausting.
+The routes health check will therefore report this route as DOWN until its exhausted where the states are changed to UNKNOWN.
+
+The details can be seen at runtime via the following url from a web browser: http://localhost:8080/health.
+
+=== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+You can check the health check status by calling the following url from a web browser: http://localhost:8080/health
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+=== JVM mode
+
+[source,shell]
+----
+
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.885s. Listening on: http://0.0.0.0:8080
+----
+
+=== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.026s. Listening on: http://0.0.0.0:8080
+...
+----
+
+=== Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+https://camel.apache.org/support.html[let us know].
+
+We also love contributors, so
+https://camel.apache.org/contributing.html[get involved] :-)
+
+The Camel riders!
+
diff --git a/health/pom.xml b/health/pom.xml
new file mode 100644
index 0000000..de99063
--- /dev/null
+++ b/health/pom.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-health</artifactId>
+ <name>Camel Quarkus :: Examples :: Health</name>
+ <description>Camel Quarkus Example :: Health Check</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-bean</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-netty</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-health</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-bean-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-health-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-netty-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/health/src/main/java/org/acme/health/MyRouteBuilder.java b/health/src/main/java/org/acme/health/MyRouteBuilder.java
new file mode 100644
index 0000000..11dc4aa
--- /dev/null
+++ b/health/src/main/java/org/acme/health/MyRouteBuilder.java
@@ -0,0 +1,32 @@
+/*
+ * 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.health;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class MyRouteBuilder extends RouteBuilder {
+
+ @Override
+ public void configure() {
+ from("timer:foo?period={{myPeriod}}").routeId("timer").log("Doing one more task");
+
+ // this route is invalid and fails during startup
+ // the supervising route controller will take over and attempt
+ // to restart this route
+ from("netty:tcp:unknownhost").to("log:dummy").routeId("netty");
+ }
+}
diff --git a/health/src/main/java/org/acme/health/RunTooLongHealthCheck.java b/health/src/main/java/org/acme/health/RunTooLongHealthCheck.java
new file mode 100644
index 0000000..db187d6
--- /dev/null
+++ b/health/src/main/java/org/acme/health/RunTooLongHealthCheck.java
@@ -0,0 +1,56 @@
+/*
+ * 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.health;
+
+import java.util.Map;
+
+import org.apache.camel.health.HealthCheckResultBuilder;
+import org.apache.camel.impl.health.AbstractHealthCheck;
+
+/**
+ * A user defined health check that reports UNKNOWN on first call, then UP for
+ * 10 seconds and finally DOWN afterward. This is a custom implementation of a
+ * Camel {@link org.apache.camel.health.HealthCheck} and used as part of Camel's
+ * health-check system.
+ */
+public class RunTooLongHealthCheck extends AbstractHealthCheck {
+
+ private volatile long firstCallTimeMillis = 0;
+
+ public RunTooLongHealthCheck() {
+ super("custom", "toolong");
+ }
+
+ @Override
+ protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+ builder.detail("toolong", "Reports DOWN when run for too long");
+ if (firstCallTimeMillis == 0) {
+ builder.unknown();
+ firstCallTimeMillis = System.currentTimeMillis();
+ } else if ((System.currentTimeMillis() - firstCallTimeMillis) < 10 * 1000L) {
+ builder.up();
+ } else {
+ builder.down();
+ }
+ }
+
+ @Override
+ public boolean isReadiness() {
+ // only liveness probe
+ return false;
+ }
+}
diff --git a/health/src/main/resources/application.properties b/health/src/main/resources/application.properties
new file mode 100644
index 0000000..f6ab0d7
--- /dev/null
+++ b/health/src/main/resources/application.properties
@@ -0,0 +1,77 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+# to configure camel main
+# here you can configure options on camel quarkus
+camel.quakus.name = MyHealthyCamel
+
+# extended runtime statistics about bean introspection usage (java reflection)
+camel.main.bean-introspection-extended-statistics=true
+camel.main.bean-introspection-logging-level=INFO
+
+# enable supervised route controller which will startup routes in safe manner
+camel.main.route-controller-supervise-enabled = true
+# attempt up till 10 times to start a route (and exhaust if still failing)
+# when a route is exhausted then its taken out as being supervised and
+# will not take part of health-check either (UNKNOWN state)
+camel.main.route-controller-back-off-max-attempts = 10
+# when starting a route (and restarts) fails all attempts
+# then we can control whether the route should be influence the health-check
+# and report the route as either UNKNOWN or DOWN. Setting this option to true
+# will report it as DOWN otherwise its UNKNOWN
+###camel.main.route-controller-unhealthy-on-exhausted = true
+
+# enable health check (is automatic enabled if discovered on classpath)
+# global flag to enable/disable
+camel.health.enabled = true
+# context check is default included but we can turn it on|off
+camel.health.context-enabled = true
+# routes check is default included but we can turn it on|off
+camel.health.routes-enabled = true
+# registry check is default included but we can turn it on|off
+camel.health.registry-enabled = true
+
+# you can turn on or off individual routes as shown below
+### camel.heath.config[timer].parent = routes
+### camel.heath.config[timer].enabled = true
+### camel.heath.config[netty].check = routes
+### camel.heath.config[netty].enabled = false
+
+# and configure each individually
+camel.health.config[timer].parent = routes
+camel.health.config[timer].interval = 5s
+camel.health.config[netty].parent = routes
+camel.health.config[netty].interval = 20s
+camel.health.config[netty].failure-threshold = 10
+
+# find grained routes configuration per route (support wildcards)
+# (enabled is default true for discovered health-checks)
+### camel.health.config[*].enabled = true
+
+# allow 5 failures with 10s apart as slack to handle routes being flaky
+# however if after 5 failures then the state will be regarded as DOWN onwards
+# (the route can recover and the state will then be UP)
+###camel.health.config[*].parent = routes
+###camel.health.config[*].interval = 10s
+###camel.health.config[*].failure-threshold = 5
+
+# properties used in the route
+myPeriod = 10s
diff --git a/http-log/README.adoc b/http-log/README.adoc
new file mode 100644
index 0000000..15baf95
--- /dev/null
+++ b/http-log/README.adoc
@@ -0,0 +1,111 @@
+= http-log
+
+This is a basic hello world example that uses CDI and JAX-RS to setup
+a Quarkus REST service and a Camel route to service HTTP traffic.
+
+The Quarkus REST service `ExampleResource.java` and the Camel route `CamelRoute.java`
+are independent and are present in this example to demonstrate how you can build microservices
+with both Quarkus and Camel separated.
+
+You can of course also combine Quarkus REST services with Camel (see further below).
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+This example was used in a 10 minute video recording to demonstrate
+how to quickly run 100 Camels with Apache Camel, Quarkus and GraalVM:
+
+- https://www.youtube.com/watch?v=4lXSf8DBQkQ
+
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+From a web browser, you can call the two services via
+
+- http://localhost:8080/hello
+- http://localhost:8080/camel/hello
+
+There is also health check and metrics available from the following urls:
+
+- http://localhost:8080/health
+- http://localhost:8080/metrics
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
+...
+----
+
+== Using Camel from Quarkus JAX-RS
+
+The `ExampleResource.java` is a pure JAX-RS REST service without using Camel.
+Suppose you wanted to add a HTTP POST that sends the HTTP body to a Kafka topic,
+via the camel-kafka component. You can then integrate Quarkus
+with Camel by dependency injecting Camels `FluentProducerTemplate` that allows to
+send the message in one line of code to Kafka. What's left is to configure the URL to the Kafka brokers,
+which can be done in the `application.properties` file.
+
+[source,java]
+----
+import org.apache.camel.FluentProducerTemplate;
+import org.jboss.resteasy.annotations.Body;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+
+@Path("/hello")
+public class ExampleResource {
+
+ @Inject
+ FluentProducerTemplate producer;
+
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String hello() {
+ return "hello";
+ }
+
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
+ public void foo(@Body String payload) {
+ producer.to("kafka:foo").send(payload);
+ }
+}
+----
diff --git a/http-log/pom.xml b/http-log/pom.xml
new file mode 100644
index 0000000..c406e10
--- /dev/null
+++ b/http-log/pom.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-http-log</artifactId>
+ <name>Camel Quarkus :: Examples :: HTTP Log</name>
+ <description>Camel Quarkus Example :: HTTP to Log</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-platform-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-health</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-metrics</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-health-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-metrics-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-platform-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/http-log/rss-memory.sh b/http-log/rss-memory.sh
new file mode 100755
index 0000000..e8db116
--- /dev/null
+++ b/http-log/rss-memory.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# 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.
+#
+
+# script to aggregate the total RSS memory used by the processes in MB.
+# the script includes itself so that adds about 2mb extra in total memory.
+# the script is a bit hackish and improvements is welcome.
+ps -o rss -o command | grep $1 | awk '{print $1}' | head -n 100 | awk '{sum+=$1/1024}END{print sum}'
diff --git a/http-log/run-many.sh b/http-log/run-many.sh
new file mode 100755
index 0000000..b1f0c68
--- /dev/null
+++ b/http-log/run-many.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# 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.
+#
+
+# script to quickly run 100 instances of the native compiled example
+# using http port numbers from 8000 - 8100
+# you can then try each instance by its number such as:
+# http://localhost:8012/camel/hello
+#
+# to kill all instances at once, you can use pkill command:
+# pkill camel-quarkus
+#
+for i in $(seq 8000 8100); do
+ QUARKUS_HTTP_PORT=$i ./target/camel-quarkus-examples-http-log-*-runner > http-log-$i.log &
+done
\ No newline at end of file
diff --git a/http-log/src/main/java/org/acme/http/CamelRoute.java b/http-log/src/main/java/org/acme/http/CamelRoute.java
new file mode 100644
index 0000000..c456f6f
--- /dev/null
+++ b/http-log/src/main/java/org/acme/http/CamelRoute.java
@@ -0,0 +1,32 @@
+/*
+ * 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.http;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.apache.camel.builder.endpoint.EndpointRouteBuilder;
+
+@ApplicationScoped
+public class CamelRoute extends EndpointRouteBuilder {
+
+ @Override
+ public void configure() throws Exception {
+ from(platformHttp("/camel/hello"))
+ .setBody().simple("Camel runs on ${hostname}")
+ .to(log("hi").showExchangePattern(false).showBodyType(false));
+ }
+}
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/http-log/src/main/java/org/acme/http/ExampleResource.java
new file mode 100644
index 0000000..4d71ac1
--- /dev/null
+++ b/http-log/src/main/java/org/acme/http/ExampleResource.java
@@ -0,0 +1,32 @@
+/*
+ * 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.http;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/hello")
+public class ExampleResource {
+
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String hello() {
+ return "hello";
+ }
+}
diff --git a/http-log/src/main/resources/META-INF/resources/index.html b/http-log/src/main/resources/META-INF/resources/index.html
new file mode 100644
index 0000000..cb44c76
--- /dev/null
+++ b/http-log/src/main/resources/META-INF/resources/index.html
@@ -0,0 +1,170 @@
+<!--
+
+ 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.
+
+-->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>code-with-quarkus - 1.0.0-SNAPSHOT</title>
+ <style>
+ h1, h2, h3, h4, h5, h6 {
+ margin-bottom: 0.5rem;
+ font-weight: 400;
+ line-height: 1.5;
+ }
+
+ h1 {
+ font-size: 2.5rem;
+ }
+
+ h2 {
+ font-size: 2rem
+ }
+
+ h3 {
+ font-size: 1.75rem
+ }
+
+ h4 {
+ font-size: 1.5rem
+ }
+
+ h5 {
+ font-size: 1.25rem
+ }
+
+ h6 {
+ font-size: 1rem
+ }
+
+ .lead {
+ font-weight: 300;
+ font-size: 2rem;
+ }
+
+ .banner {
+ font-size: 2.7rem;
+ margin: 0;
+ padding: 2rem 1rem;
+ background-color: #00A1E2;
+ color: white;
+ }
+
+ body {
+ margin: 0;
+ font-family: -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ }
+
+ code {
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 87.5%;
+ color: #e83e8c;
+ word-break: break-word;
+ }
+
+ .left-column {
+ padding: .75rem;
+ max-width: 75%;
+ min-width: 55%;
+ }
+
+ .right-column {
+ padding: .75rem;
+ max-width: 25%;
+ }
+
+ .container {
+ display: flex;
+ width: 100%;
+ }
+
+ li {
+ margin: 0.75rem;
+ }
+
+ .right-section {
+ margin-left: 1rem;
+ padding-left: 0.5rem;
+ }
+
+ .right-section h3 {
+ padding-top: 0;
+ font-weight: 200;
+ }
+
+ .right-section ul {
+ border-left: 0.3rem solid #00A1E2;
+ list-style-type: none;
+ padding-left: 0;
+ }
+
+ </style>
+</head>
+<body>
+
+<div class="banner lead">
+ Your new Cloud-Native application is ready!
+</div>
+
+<div class="container">
+ <div class="left-column">
+ <p class="lead"> Congratulations, you have created a new Quarkus application.</p>
+
+ <h2>Why do you see this?</h2>
+
+ <p>This page is served by Quarkus. The source is in
+ <code>src/main/resources/META-INF/resources/index.html</code>.</p>
+
+ <h2>What can I do from here?</h2>
+
+ <p>If not already done, run the application in <em>dev mode</em> using: <code>mvn compile quarkus:dev</code>.
+ </p>
+ <ul>
+ <li>Add REST resources, Servlets, functions and other services in <code>src/main/java</code>.</li>
+ <li>Your static assets are located in <code>src/main/resources/META-INF/resources</code>.</li>
+ <li>Configure your application in <code>src/main/resources/application.properties</code>.
+ </li>
+ </ul>
+
+ <h2>How do I get rid of this page?</h2>
+ <p>Just delete the <code>src/main/resources/META-INF/resources/index.html</code> file.</p>
+ </div>
+ <div class="right-column">
+ <div class="right-section">
+ <h3>Application</h3>
+ <ul>
+ <li>GroupId: org.apache.camel.quarkus</li>
+ <li>ArtifactId: http-log</li>
+ <li>Version: 1.0.0-SNAPSHOT</li>
+ <li>Quarkus Version: 1.3.2.Final</li>
+ </ul>
+ </div>
+ <div class="right-section">
+ <h3>Next steps</h3>
+ <ul>
+ <li><a href="https://quarkus.io/guides/maven-tooling.html" target="_blank">Setup your IDE</a></li>
+ <li><a href="https://quarkus.io/guides/getting-started.html" target="_blank">Getting started</a></li>
+ <li><a href="https://quarkus.io" target="_blank">Quarkus Web Site</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/http-log/src/main/resources/application.properties b/http-log/src/main/resources/application.properties
new file mode 100644
index 0000000..1d0efa7
--- /dev/null
+++ b/http-log/src/main/resources/application.properties
@@ -0,0 +1,37 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
+# Quarkus - Camel
+#
+
+# to turn on or off health check
+quarkus.camel.health.enabled = true
+
+# bean introspection to log reflection based configuration
+camel.main.beanIntrospectionExtendedStatistics = true
+camel.main.beanIntrospectionLoggingLevel = INFO
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-http-log
+
diff --git a/observability/README.adoc b/observability/README.adoc
new file mode 100644
index 0000000..d3ef123
--- /dev/null
+++ b/observability/README.adoc
@@ -0,0 +1,111 @@
+= Camel Quarkus Observability
+
+This example project demonstrates how to add support for metrics, health checks and distributed tracing.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+
+=== Metrics endpoint
+
+Metrics are exposed on an HTTP endpoint at `/metrics`. You can also browse application specific metrics from the `/metrics/application` endpoint.
+
+To view all Camel metrics do:
+
+[source,shell]
+----
+$ curl localhost:8080/metrics/application
+----
+
+To pick out specific metrics you can either use `grep` or the `https://stedolan.github.io/jq/[jq]` library :
+
+[source,shell]
+----
+$ curl -s -H"Accept: application/json" localhost:8080/metrics/application \
+ | jq '.["camel.context.exchanges.completed.total;camelContext=camel-quarkus-observability"]'
+----
+
+=== Health endpoint
+
+Camel provides some out of the box liveness and readiness checks. To see this working, interrogate the `/health/live` and `/health/ready` endpoints:
+
+[source,shell]
+----
+$ curl -s localhost:8080/health/live
+----
+
+[source,shell]
+----
+$ curl -s localhost:8080/health/ready
+----
+
+The JSON output will contain a check named 'camel' for verifying whether the `CamelContext` is in the 'Started' state and another check to verify whether each individual route is in the 'Started' state.
+
+This example project contains a custom liveness check class `CustomLivenessCheck` and custom readiness check class `CustomReadinessCheck` which leverage the Camel health API.
+You'll see these listed in the health JSON as 'custom-liveness-check' and 'custom-readiness-check'. On every 5th invocation of these checks, the health status will be reported as DOWN.
+
+You can also directly leverage MicroProfile Metrics APIs to create checks. Class `CamelUptimeHealthCheck` demonstrates how to register a readiness check.
+
+==== Tracing
+
+The tracing configuration for the application can be found within `application.properties`.
+
+To view tracing events, start a Jaeger tracing server. A simple way of doing this is with Docker:
+
+[source,shell]
+----
+$ docker run -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 \
+ -p 16686:16686 -p 14268:14268 -p 9411:9411 jaegertracing/all-in-one:latest
+----
+
+With the server running, browse to http://localhost:16686. Then choose 'greetings-service' from the 'Service' drop down and click the 'Find Traces' button.
+
+The `netty-http` consumer route introduces a random delay to simulate latency, hence the overall time of each trace should be different. When viewing a trace, you should see
+a hierarchy of 3 spans showing the progression of the message exchange through each endpoint.
+
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
+...
+----
diff --git a/observability/pom.xml b/observability/pom.xml
new file mode 100644
index 0000000..7dd60a7
--- /dev/null
+++ b/observability/pom.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-observability</artifactId>
+ <name>Camel Quarkus :: Examples :: Observability</name>
+ <description>Camel Quarkus Example :: Observability</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-netty-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-health</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-metrics</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-opentracing</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy</artifactId>
+ </dependency>
+
+ <!-- test dependencies -->
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-health-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-microprofile-metrics-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-netty-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-opentracing-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/observability/src/main/java/org/acme/observability/Routes.java b/observability/src/main/java/org/acme/observability/Routes.java
new file mode 100644
index 0000000..8f1be8f
--- /dev/null
+++ b/observability/src/main/java/org/acme/observability/Routes.java
@@ -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.
+ */
+package org.acme.observability;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class Routes extends RouteBuilder {
+
+ @Override
+ public void configure() throws Exception {
+ // Invokes a simple greeting endpoint every 10 seconds
+ from("timer:greeting?period=10000")
+ .to("netty-http:http://localhost:8099/greeting");
+
+ from("netty-http:0.0.0.0:8099/greeting")
+ // Random delay to simulate latency
+ .delay(simple("${random(1000, 5000)}"))
+ .setBody(constant("Hello From Camel Quarkus!"));
+ }
+}
diff --git a/observability/src/main/java/org/acme/observability/health/camel/CustomLivenessCheck.java b/observability/src/main/java/org/acme/observability/health/camel/CustomLivenessCheck.java
new file mode 100644
index 0000000..0d380d1
--- /dev/null
+++ b/observability/src/main/java/org/acme/observability/health/camel/CustomLivenessCheck.java
@@ -0,0 +1,50 @@
+/*
+ * 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.observability.health.camel;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.camel.health.HealthCheckResultBuilder;
+import org.apache.camel.microprofile.health.AbstractCamelMicroProfileLivenessCheck;
+
+/**
+ * A simple custom liveness check which utilizes the Camel Health API.
+ *
+ * The check status is recorded as DOWN on every 5th invocation.
+ */
+public class CustomLivenessCheck extends AbstractCamelMicroProfileLivenessCheck {
+
+ AtomicInteger hitCount = new AtomicInteger();
+
+ public CustomLivenessCheck() {
+ super("custom-liveness-check");
+ getConfiguration().setEnabled(true);
+ }
+
+ @Override
+ protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+ int hits = hitCount.incrementAndGet();
+
+ // Flag the check as DOWN on every 5th invocation, else it is UP
+ if (hits % 5 == 0) {
+ builder.down();
+ } else {
+ builder.up();
+ }
+ }
+}
diff --git a/observability/src/main/java/org/acme/observability/health/camel/CustomReadinessCheck.java b/observability/src/main/java/org/acme/observability/health/camel/CustomReadinessCheck.java
new file mode 100644
index 0000000..9ebe412
--- /dev/null
+++ b/observability/src/main/java/org/acme/observability/health/camel/CustomReadinessCheck.java
@@ -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.
+ */
+package org.acme.observability.health.camel;
+
+import java.util.Map;
+
+import org.apache.camel.health.HealthCheckResultBuilder;
+import org.apache.camel.microprofile.health.AbstractCamelMicroProfileReadinessCheck;
+
+/**
+ * A simple custom liveness check which utilizes the Camel Health API.
+ */
+public class CustomReadinessCheck extends AbstractCamelMicroProfileReadinessCheck {
+
+ public CustomReadinessCheck() {
+ super("custom-readiness-check");
+ getConfiguration().setEnabled(true);
+ }
+
+ @Override
+ protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+ builder.up();
+ }
+}
diff --git a/observability/src/main/java/org/acme/observability/health/microprofile/CamelUptimeHealthCheck.java b/observability/src/main/java/org/acme/observability/health/microprofile/CamelUptimeHealthCheck.java
new file mode 100644
index 0000000..68fc396
--- /dev/null
+++ b/observability/src/main/java/org/acme/observability/health/microprofile/CamelUptimeHealthCheck.java
@@ -0,0 +1,50 @@
+/*
+ * 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.observability.health.microprofile;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
+import org.eclipse.microprofile.health.Readiness;
+
+/**
+ * A simple CamelContext uptime readiness check which implements the MicroProfile Health API.
+ */
+@Readiness
+@ApplicationScoped
+public class CamelUptimeHealthCheck implements HealthCheck {
+
+ @Inject
+ CamelContext camelContext;
+
+ @Override
+ public HealthCheckResponse call() {
+ HealthCheckResponseBuilder builder = HealthCheckResponse.named("Uptime readiness check");
+
+ if (camelContext.getUptimeMillis() > 0) {
+ builder.up();
+ } else {
+ builder.down();
+ }
+
+ return builder.build();
+ }
+}
diff --git a/observability/src/main/resources/application.properties b/observability/src/main/resources/application.properties
new file mode 100644
index 0000000..6337bd2
--- /dev/null
+++ b/observability/src/main/resources/application.properties
@@ -0,0 +1,32 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+# Configure Quarkus Jaeger OpenTracing support
+quarkus.jaeger.service-name = greetings-service
+quarkus.jaeger.sampler-type = const
+quarkus.jaeger.sampler-param = 1
+quarkus.jaeger.endpoint = http://localhost:14268/api/traces
+
+#
+# Camel
+#
+camel.context.name = camel-quarkus-observability
diff --git a/observability/src/test/java/org/acme/observability/ObservabilityIT.java b/observability/src/test/java/org/acme/observability/ObservabilityIT.java
new file mode 100644
index 0000000..66c3517
--- /dev/null
+++ b/observability/src/test/java/org/acme/observability/ObservabilityIT.java
@@ -0,0 +1,23 @@
+/*
+ * 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.observability;
+
+import io.quarkus.test.junit.NativeImageTest;
+
+@NativeImageTest
+public class ObservabilityIT extends ObservabilityTest {
+}
diff --git a/observability/src/test/java/org/acme/observability/ObservabilityTest.java b/observability/src/test/java/org/acme/observability/ObservabilityTest.java
new file mode 100644
index 0000000..d9a4d3c
--- /dev/null
+++ b/observability/src/test/java/org/acme/observability/ObservabilityTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.observability;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.http.ContentType;
+import org.hamcrest.Matchers;
+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 ObservabilityTest {
+
+ @Test
+ public void metrics() {
+ // Verify a expected Camel metric is available
+ given()
+ .when().accept(ContentType.JSON)
+ .get("/metrics/application")
+ .then()
+ .statusCode(200)
+ .body(
+ "'camel.context.status;camelContext=camel-quarkus-observability'", is(3));
+ }
+
+ @Test
+ public void health() {
+ // Verify liveness
+ given()
+ .when().accept(ContentType.JSON)
+ .get("/health/live")
+ .then()
+ .statusCode(200)
+ .body("status", Matchers.is("UP"),
+ "checks.name", containsInAnyOrder("camel-liveness-checks"),
+ "checks.data.custom-liveness-check", containsInAnyOrder("UP"));
+
+ // Verify readiness
+ given()
+ .when().accept(ContentType.JSON)
+ .get("/health/ready")
+ .then()
+ .statusCode(200)
+ .body("status", Matchers.is("UP"),
+ "checks.name",
+ containsInAnyOrder("camel-readiness-checks", "camel-context-check", "Uptime readiness check"),
+ "checks.data.custom-readiness-check", containsInAnyOrder(null, "UP"));
+ }
+}
diff --git a/rest-json/README.adoc b/rest-json/README.adoc
new file mode 100644
index 0000000..be10e2b
--- /dev/null
+++ b/rest-json/README.adoc
@@ -0,0 +1,57 @@
+= rest-json
+
+This example is a port of Quarkus' quickstart https://github.com/quarkusio/quarkus-quickstarts/blob/master/rest-json[rest-json] to Camel.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Then point your browser to one of the endpoints:
+
+* http://localhost:8080/fruits
+* http://localhost:8080/legumes
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s. Listening on: http://0.0.0.0:8080
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s. Listening on: http://0.0.0.0:8080
+...
+----
diff --git a/rest-json/pom.xml b/rest-json/pom.xml
new file mode 100644
index 0000000..31c4b88
--- /dev/null
+++ b/rest-json/pom.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-rest-json</artifactId>
+ <name>Camel Quarkus :: Examples :: Rest Json</name>
+ <description>Camel Quarkus Example :: Rest Json</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-platform-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-jackson</artifactId>
+ </dependency>
+
+ <!-- test dependencies -->
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-junit5</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-jackson-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-platform-http-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/rest-json/src/main/java/org/acme/rest/json/Fruit.java b/rest-json/src/main/java/org/acme/rest/json/Fruit.java
new file mode 100644
index 0000000..b86a36c
--- /dev/null
+++ b/rest-json/src/main/java/org/acme/rest/json/Fruit.java
@@ -0,0 +1,70 @@
+/*
+ * 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 java.util.Objects;
+
+import io.quarkus.runtime.annotations.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;
+
+ public Fruit() {
+ }
+
+ public Fruit(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof Fruit)) {
+ return false;
+ }
+
+ Fruit other = (Fruit) obj;
+
+ return Objects.equals(other.name, this.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(this.name);
+ }
+}
diff --git a/rest-json/src/main/java/org/acme/rest/json/Legume.java b/rest-json/src/main/java/org/acme/rest/json/Legume.java
new file mode 100644
index 0000000..779b271
--- /dev/null
+++ b/rest-json/src/main/java/org/acme/rest/json/Legume.java
@@ -0,0 +1,70 @@
+/*
+ * 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 java.util.Objects;
+
+import io.quarkus.runtime.annotations.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;
+
+ public Legume() {
+ }
+
+ public Legume(String name, String description) {
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof Legume)) {
+ return false;
+ }
+
+ Legume other = (Legume) obj;
+
+ return Objects.equals(other.name, this.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(this.name);
+ }
+}
diff --git a/rest-json/src/main/java/org/acme/rest/json/Routes.java b/rest-json/src/main/java/org/acme/rest/json/Routes.java
new file mode 100644
index 0000000..431eae0
--- /dev/null
+++ b/rest-json/src/main/java/org/acme/rest/json/Routes.java
@@ -0,0 +1,68 @@
+/*
+ * 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 java.util.Collections;
+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 = Collections.synchronizedSet(new LinkedHashSet<>());
+ private final Set<Legume> legumes = Collections.synchronizedSet(new LinkedHashSet<>());
+
+ public Routes() {
+
+ /* Let's add some initial fruits */
+ this.fruits.add(new Fruit("Apple", "Winter fruit"));
+ this.fruits.add(new Fruit("Pineapple", "Tropical fruit"));
+
+ /* 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:/fruits?httpMethodRestrict=GET,POST")
+ .choice()
+ .when(simple("${header.CamelHttpMethod} == 'GET'"))
+ .setBody()
+ .constant(fruits)
+ .endChoice()
+ .when(simple("${header.CamelHttpMethod} == 'POST'"))
+ .unmarshal()
+ .json(JsonLibrary.Jackson, Fruit.class)
+ .process()
+ .body(Fruit.class, fruits::add)
+ .setBody()
+ .constant(fruits)
+ .endChoice()
+ .end()
+ .marshal().json();
+
+ from("platform-http:/legumes?httpMethodRestrict=GET")
+ .setBody().constant(legumes)
+ .marshal().json();
+
+ }
+}
diff --git a/rest-json/src/main/resources/META-INF/resources/fruits.html b/rest-json/src/main/resources/META-INF/resources/fruits.html
new file mode 100644
index 0000000..62cacfc
--- /dev/null
+++ b/rest-json/src/main/resources/META-INF/resources/fruits.html
@@ -0,0 +1,116 @@
+<!--
+
+ 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.
+
+-->
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title>Fruit REST service</title>
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/wingcss/0.1.8/wing.min.css"/>
+ <!-- Load AngularJS -->
+ <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
+ <script type="text/javascript">
+ var app = angular.module("FruitManagement", []);
+
+ //Controller Part
+ app.controller("FruitManagementController", function ($scope, $http) {
+
+ //Initialize page with default data which is blank in this example
+ $scope.fruits = [];
+
+ $scope.form = {
+ name: "",
+ description: ""
+ };
+
+ //Now load the data from server
+ _refreshPageData();
+
+ //HTTP POST methods for add fruits
+ $scope.add = function () {
+ var data = { "name": $scope.form.name, "description": $scope.form.description };
+
+ $http({
+ method: "POST",
+ url: '/fruits',
+ data: angular.toJson(data),
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(_success, _error);
+ };
+
+ /* Private Methods */
+ //HTTP GET- get all fruits collection
+ function _refreshPageData() {
+ $http({
+ method: 'GET',
+ url: '/fruits'
+ }).then(function successCallback(response) {
+ $scope.fruits = response.data;
+ }, function errorCallback(response) {
+ console.log(response.statusText);
+ });
+ }
+
+ function _success(response) {
+ _refreshPageData();
+ _clearForm();
+ }
+
+ function _error(response) {
+ alert(response.data.message || response.statusText);
+ }
+
+ //Clear the form
+ function _clearForm() {
+ $scope.form.name = "";
+ $scope.form.description = "";
+ }
+ });
+ </script>
+</head>
+<body ng-app="FruitManagement" ng-controller="FruitManagementController">
+
+<div class="container">
+ <h1>REST Service - Fruit</h1>
+
+ <h3>Add a fruit</h3>
+ <form ng-submit="add()">
+ <div class="row">
+ <div class="col-6"><input type="text" placeholder="Name" ng-model="form.name" size="60"/></div>
+ </div>
+ <div class="row">
+ <div class="col-6"><input type="text" placeholder="Description" ng-model="form.description" size="60"/></div>
+ </div>
+ <input type="submit" value="Save"/>
+ </form>
+
+ <h3>Fruit List</h3>
+ <div class="row">
+ <div class="col-4">Name</div>
+ <div class="col-8">Description</div>
+ </div>
+ <div class="row" ng-repeat="fruit in fruits">
+ <div class="col-4">{{ fruit.name }}</div>
+ <div class="col-8">{{ fruit.description }}</div>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/rest-json/src/main/resources/META-INF/resources/legumes.html b/rest-json/src/main/resources/META-INF/resources/legumes.html
new file mode 100644
index 0000000..ba6c6c3
--- /dev/null
+++ b/rest-json/src/main/resources/META-INF/resources/legumes.html
@@ -0,0 +1,79 @@
+<!--
+
+ 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.
+
+-->
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title>Legume REST service</title>
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/wingcss/0.1.8/wing.min.css"/>
+ <!-- Load AngularJS -->
+ <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
+ <script type="text/javascript">
+ var app = angular.module("LegumeManagement", []);
+
+ //Controller Part
+ app.controller("LegumeManagementController", function ($scope, $http) {
+
+ //Initialize page with default data which is blank in this example
+ $scope.legumes = [];
+
+ //Now load the data from server
+ _refreshPageData();
+
+ /* Private Methods */
+ //HTTP GET- get all legumes collection
+ function _refreshPageData() {
+ $http({
+ method: 'GET',
+ url: '/legumes'
+ }).then(function successCallback(response) {
+ $scope.legumes = response.data;
+ }, function errorCallback(response) {
+ console.log(response.statusText);
+ });
+ }
+
+ function _success(response) {
+ _refreshPageData();
+ }
+
+ function _error(response) {
+ alert(response.data.message || response.statusText);
+ }
+ });
+ </script>
+</head>
+<body ng-app="LegumeManagement" ng-controller="LegumeManagementController">
+
+<div class="container">
+ <h1>REST Service - Legume</h1>
+
+ <h3>Legume List</h3>
+ <div class="row">
+ <div class="col-4">Name</div>
+ <div class="col-8">Description</div>
+ </div>
+ <div class="row" ng-repeat="legume in legumes">
+ <div class="col-4">{{ legume.name }}</div>
+ <div class="col-8">{{ legume.description }}</div>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/rest-json/src/main/resources/application.properties b/rest-json/src/main/resources/application.properties
new file mode 100644
index 0000000..4d1d321
--- /dev/null
+++ b/rest-json/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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+
+quarkus.banner.enabled = false
+quarkus.ssl.native=true
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-rest-json
+
diff --git a/rest-json/src/test/java/org/acme/rest/json/RestJsonIT.java b/rest-json/src/test/java/org/acme/rest/json/RestJsonIT.java
new file mode 100644
index 0000000..a9bfe36
--- /dev/null
+++ b/rest-json/src/test/java/org/acme/rest/json/RestJsonIT.java
@@ -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.
+ */
+package org.acme.rest.json;
+
+import io.quarkus.test.junit.NativeImageTest;
+
+/**
+ * Native mode tests. In the native mode, the same tests will be executed as in the JVM mode because this class extends
+ * {@link RestJsonTest}.
+ */
+@NativeImageTest
+public class RestJsonIT extends RestJsonTest {
+}
diff --git a/rest-json/src/test/java/org/acme/rest/json/RestJsonTest.java b/rest-json/src/test/java/org/acme/rest/json/RestJsonTest.java
new file mode 100644
index 0000000..1d80c7f
--- /dev/null
+++ b/rest-json/src/test/java/org/acme/rest/json/RestJsonTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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;
+
+/**
+ * JVM mode tests.
+ */
+@QuarkusTest
+public class RestJsonTest {
+
+ @Test
+ public void fruits() {
+
+ /* Assert the initial fruits are there */
+ given()
+ .when().get("/fruits")
+ .then()
+ .statusCode(200)
+ .body(
+ "$.size()", is(2),
+ "name", containsInAnyOrder("Apple", "Pineapple"),
+ "description", containsInAnyOrder("Winter fruit", "Tropical fruit"));
+
+ /* Add a new fruit */
+ given()
+ .body("{\"name\": \"Pear\", \"description\": \"Winter fruit\"}")
+ .header("Content-Type", "application/json")
+ .when()
+ .post("/fruits")
+ .then()
+ .statusCode(200)
+ .body(
+ "$.size()", is(3),
+ "name", containsInAnyOrder("Apple", "Pineapple", "Pear"),
+ "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/timer-log-cdi/README.adoc b/timer-log-cdi/README.adoc
new file mode 100644
index 0000000..f9d0495
--- /dev/null
+++ b/timer-log-cdi/README.adoc
@@ -0,0 +1,57 @@
+= timer-log-cdi
+
+This is a basic hello world example that uses CDI to set-up
+a Camel timer that triggers every second and prints to the
+log.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Then look at the log output in the console. As we run the example in Quarkus Dev Mode, you can edit the source code and have live updates.
+For example try to change `Incremented the counter` to `Counter state` in the message body or change the property `timer.period` in application.properties
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s.
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s.
+...
+----
diff --git a/timer-log-cdi/pom.xml b/timer-log-cdi/pom.xml
new file mode 100644
index 0000000..76fac1c
--- /dev/null
+++ b/timer-log-cdi/pom.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-timer-log-cdi</artifactId>
+ <name>Camel Quarkus :: Examples :: Timer Log CDI</name>
+ <description>Camel Quarkus Example :: Timer to Log CDI</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/timer-log-cdi/src/main/java/org/acme/timer/Configurations.java b/timer-log-cdi/src/main/java/org/acme/timer/Configurations.java
new file mode 100644
index 0000000..7aad0ba
--- /dev/null
+++ b/timer-log-cdi/src/main/java/org/acme/timer/Configurations.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.acme.timer;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+
+import org.apache.camel.component.log.LogComponent;
+import org.apache.camel.support.processor.DefaultExchangeFormatter;
+
+@ApplicationScoped
+public class Configurations {
+ /**
+ * Produces a {@link LogComponent} instance with a custom exchange formatter set-up.
+ */
+ @Named
+ LogComponent log() {
+ DefaultExchangeFormatter formatter = new DefaultExchangeFormatter();
+ formatter.setShowExchangePattern(false);
+ formatter.setShowBodyType(false);
+
+ LogComponent component = new LogComponent();
+ component.setExchangeFormatter(formatter);
+
+ return component;
+ }
+}
diff --git a/timer-log-cdi/src/main/java/org/acme/timer/Counter.java b/timer-log-cdi/src/main/java/org/acme/timer/Counter.java
new file mode 100644
index 0000000..67b7739
--- /dev/null
+++ b/timer-log-cdi/src/main/java/org/acme/timer/Counter.java
@@ -0,0 +1,37 @@
+/*
+ * 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.timer;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.enterprise.context.ApplicationScoped;
+
+/**
+ * A counter bean.
+ */
+@ApplicationScoped
+public class Counter {
+ private final AtomicInteger value = new AtomicInteger(0);
+
+ public int increment() {
+ return value.incrementAndGet();
+ }
+
+ public int getValue() {
+ return value.get();
+ }
+}
diff --git a/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java b/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
new file mode 100644
index 0000000..f5c5010
--- /dev/null
+++ b/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
@@ -0,0 +1,54 @@
+/*
+ * 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.timer;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+/**
+ * A {@link RouteBuilder} demonstrating the use of CDI (Contexts and Dependency Injection).
+ * <p>
+ * Note that for the {@code @Inject} and {@code @ConfigProperty} annotations to work, this class has to be annotated
+ * with {@code @ApplicationScoped}.
+ */
+@ApplicationScoped
+public class TimerRoute extends RouteBuilder {
+
+ /**
+ * {@code timer.period} is defined in {@code src/main/resources/application.properties}
+ */
+ @ConfigProperty(name = "timer.period", defaultValue = "1000")
+ String period;
+
+ /**
+ * An injected bean
+ */
+ @Inject
+ Counter counter;
+
+ @Override
+ public void configure() throws Exception {
+ fromF("timer:foo?period=%s", period)
+ .setBody(exchange -> "Incremented the counter: " + counter.increment())
+ // the configuration of the log component is done programmatically using CDI
+ // by the org.acme.timer.Beans::log method.
+ .to("log:example");
+ }
+}
diff --git a/timer-log-cdi/src/main/resources/application.properties b/timer-log-cdi/src/main/resources/application.properties
new file mode 100644
index 0000000..aa728e8
--- /dev/null
+++ b/timer-log-cdi/src/main/resources/application.properties
@@ -0,0 +1,30 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+# camel look-up beans using BeanManager so we don't want
+# ArC to remove beans without injection points.
+quarkus.arc.remove-unused-beans = false
+
+#
+# Integration
+#
+timer.period = 5000
diff --git a/timer-log-kotlin/pom.xml b/timer-log-kotlin/pom.xml
new file mode 100644
index 0000000..4e7e560
--- /dev/null
+++ b/timer-log-kotlin/pom.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-timer-log-kotlin</artifactId>
+ <name>Camel Quarkus :: Examples :: Timer Log Kotlin</name>
+ <description>Camel Quarkus Example :: Timer to Log Kotlin</description>
+
+ <properties>
+ <kotlin.version>1.3.21</kotlin.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-kotlin</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-kotlin-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/main/kotlin</sourceDirectory>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-maven-plugin</artifactId>
+ <version>${kotlin.version}</version>
+ <executions>
+ <execution>
+ <id>compile</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>test-compile</id>
+ <phase>test-compile</phase>
+ <goals>
+ <goal>test-compile</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <compilerPlugins>
+ <plugin>all-open</plugin>
+ </compilerPlugins>
+ <pluginOptions>
+ <option>all-open:annotation=javax.enterprise.inject.Produces</option>
+ <option>all-open:annotation=javax.inject.Singleton</option>
+ <option>all-open:annotation=javax.enterprise.context.ApplicationScoped</option>
+ </pluginOptions>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-maven-allopen</artifactId>
+ <version>${kotlin.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt b/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt
new file mode 100644
index 0000000..467bab6
--- /dev/null
+++ b/timer-log-kotlin/src/main/kotlin/org/acme/timer/routes.kt
@@ -0,0 +1,32 @@
+/*
+ * 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.timer
+
+import org.apache.camel.Exchange
+import org.apache.camel.quarkus.kotlin.routes
+import javax.enterprise.context.ApplicationScoped
+import javax.enterprise.inject.Produces
+
+@ApplicationScoped
+class Routes {
+ @Produces
+ fun myRoutes() = routes {
+ from("timer:foo?period=1000")
+ .process { e: Exchange -> e.message.body = "Hello from Kotlin!" }
+ .log("\${body}")
+ }
+}
\ No newline at end of file
diff --git a/timer-log-kotlin/src/main/resources/application.properties b/timer-log-kotlin/src/main/resources/application.properties
new file mode 100644
index 0000000..16b8c20
--- /dev/null
+++ b/timer-log-kotlin/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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+# to turn on DEBUG logging in camel-main
+# quarkus.log.category."org.apache.camel.main".level = DEBUG
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-timer-log-kotlin
diff --git a/timer-log-main/README.adoc b/timer-log-main/README.adoc
new file mode 100644
index 0000000..d0497e3
--- /dev/null
+++ b/timer-log-main/README.adoc
@@ -0,0 +1,56 @@
+= timer-log-main
+
+This is a basic hello world example that uses a custom main to set-up
+a Camel timer that triggers every second and prints to the log.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Then look at the log output in the console. As we run the example in Quarkus Dev Mode, you can edit the source code and have live updates.
+For example try to change `Incremented the counter` to `Counter state` in the message body or change the property `timer.period` in application.properties
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s.
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s.
+...
+----
diff --git a/timer-log-main/pom.xml b/timer-log-main/pom.xml
new file mode 100644
index 0000000..b8dc003
--- /dev/null
+++ b/timer-log-main/pom.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-timer-log-main</artifactId>
+ <name>Camel Quarkus :: Examples :: Timer Log Main</name>
+ <description>Camel Quarkus Example :: Timer to Log Main</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/timer-log-main/src/main/java/org/acme/timer/Main.java b/timer-log-main/src/main/java/org/acme/timer/Main.java
new file mode 100644
index 0000000..9299d43
--- /dev/null
+++ b/timer-log-main/src/main/java/org/acme/timer/Main.java
@@ -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.
+ */
+package org.acme.timer;
+
+import io.quarkus.runtime.Quarkus;
+import io.quarkus.runtime.annotations.QuarkusMain;
+import org.apache.camel.quarkus.main.CamelMainApplication;
+
+@QuarkusMain
+public class Main {
+ public static void main(String... args) {
+ Quarkus.run(CamelMainApplication.class, args);
+ }
+}
diff --git a/timer-log-main/src/main/java/org/acme/timer/TimerRoute.java b/timer-log-main/src/main/java/org/acme/timer/TimerRoute.java
new file mode 100644
index 0000000..c33c153
--- /dev/null
+++ b/timer-log-main/src/main/java/org/acme/timer/TimerRoute.java
@@ -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.
+ */
+package org.acme.timer;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * A simple {@link RouteBuilder}.
+ */
+@ApplicationScoped
+public class TimerRoute extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+ from("timer:foo?period={{timer.period}}")
+ .setBody().constant("Hello from Main!")
+ .to("log:example");
+ }
+}
diff --git a/timer-log-main/src/main/resources/application.properties b/timer-log-main/src/main/resources/application.properties
new file mode 100644
index 0000000..dd370b0
--- /dev/null
+++ b/timer-log-main/src/main/resources/application.properties
@@ -0,0 +1,42 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+# camel look-up beans using BeanManager so we don't want
+# ArC to remove beans without injection points.
+quarkus.arc.remove-unused-beans = false
+
+#
+# Camel - Main
+#
+camel.main.duration-hit-exit-code = 15
+
+#
+# Camel - Components
+#
+camel.component.log.exchange-formatter = #class:org.apache.camel.support.processor.DefaultExchangeFormatter
+camel.component.log.exchange-formatter.show-exchange-pattern = false
+camel.component.log.exchange-formatter.show-body-type = false
+
+#
+# Integration
+#
+timer.period = 5000
diff --git a/timer-log-spring/README.adoc b/timer-log-spring/README.adoc
new file mode 100644
index 0000000..1f65a37
--- /dev/null
+++ b/timer-log-spring/README.adoc
@@ -0,0 +1,57 @@
+= timer-log-spring
+
+This is a basic hello world example that uses Spring to set-up
+a Camel timer that triggers every second and prints to the
+log.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Then look at the log output in the console. As we run the example in Quarkus Dev Mode, you can edit the source code and have live updates.
+For example try to change `Incremented the counter` to `Counter state` in the message body or change the property `timer.period` in application.properties
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.497s.
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.007s.
+...
+----
diff --git a/timer-log-spring/pom.xml b/timer-log-spring/pom.xml
new file mode 100644
index 0000000..e5c9316
--- /dev/null
+++ b/timer-log-spring/pom.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-timer-log-spring</artifactId>
+ <name>Camel Quarkus :: Examples :: Timer Log Spring</name>
+ <description>Camel Quarkus Example :: Timer to Log Spring</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-spring-di</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/timer-log-spring/src/main/java/org/acme/timer/Counter.java b/timer-log-spring/src/main/java/org/acme/timer/Counter.java
new file mode 100644
index 0000000..3587d58
--- /dev/null
+++ b/timer-log-spring/src/main/java/org/acme/timer/Counter.java
@@ -0,0 +1,37 @@
+/*
+ * 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.timer;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * A counter bean.
+ */
+@Component
+public class Counter {
+ private final AtomicInteger value = new AtomicInteger(0);
+
+ public int increment() {
+ return value.incrementAndGet();
+ }
+
+ public int getValue() {
+ return value.get();
+ }
+}
diff --git a/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java b/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
new file mode 100644
index 0000000..a7cdd61
--- /dev/null
+++ b/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.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.acme.timer;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+/**
+ * A {@link RouteBuilder} demonstrating the use of Spring Dependency Injection.
+ */
+@Service
+public class TimerRoute extends RouteBuilder {
+
+ /**
+ * {@code timer.period} is defined in {@code src/main/resources/application.properties}
+ */
+ @Value("timer.period")
+ String period = "1000";
+
+ /**
+ * An injected bean
+ */
+ @Autowired
+ Counter counter;
+
+ @Override
+ public void configure() throws Exception {
+ fromF("timer:foo?period=%s", period)
+ .setBody(exchange -> "Incremented the counter: " + counter.increment())
+ .to("log:example?showExchangePattern=false&showBodyType=false");
+ }
+}
diff --git a/timer-log-spring/src/main/resources/application.properties b/timer-log-spring/src/main/resources/application.properties
new file mode 100644
index 0000000..096809f
--- /dev/null
+++ b/timer-log-spring/src/main/resources/application.properties
@@ -0,0 +1,32 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-timer-log-spring
+
+#
+# Integration
+#
+
+timer.period = 5000
\ No newline at end of file
diff --git a/timer-log-xml/README.adoc b/timer-log-xml/README.adoc
new file mode 100644
index 0000000..0e7af51
--- /dev/null
+++ b/timer-log-xml/README.adoc
@@ -0,0 +1,58 @@
+= timer-log-xml
+
+This is a basic hello world example that uses XML to set-up
+a Camel timer that triggers every second and prints to the
+log.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Then look at the log output in the console. As we run the example
+in Quarkus Dev Mode, you can edit the source code and have live updates.
+For example try to change the logging output to be `Bye XML`.
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s.
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s.
+...
+----
diff --git a/timer-log-xml/pom.xml b/timer-log-xml/pom.xml
new file mode 100644
index 0000000..4a172ef
--- /dev/null
+++ b/timer-log-xml/pom.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-timer-log-xml</artifactId>
+ <name>Camel Quarkus :: Examples :: Timer Log XML</name>
+ <description>Camel Quarkus Example :: Timer to Log XML</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-xml-io</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-xml-io-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <workingDir>${project.basedir}</workingDir>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/timer-log-xml/src/main/java/org/acme/timer/DummyClass.java b/timer-log-xml/src/main/java/org/acme/timer/DummyClass.java
new file mode 100644
index 0000000..abb42bd
--- /dev/null
+++ b/timer-log-xml/src/main/java/org/acme/timer/DummyClass.java
@@ -0,0 +1,20 @@
+/*
+ * 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.timer;
+
+public class DummyClass {
+}
diff --git a/timer-log-xml/src/main/java/org/acme/timer/package-info.java b/timer-log-xml/src/main/java/org/acme/timer/package-info.java
new file mode 100644
index 0000000..764066e
--- /dev/null
+++ b/timer-log-xml/src/main/java/org/acme/timer/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * 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.timer;
+
+// Added to avoid quarkus-maven-plugin warning about empty source tree
diff --git a/timer-log-xml/src/main/resources/application.properties b/timer-log-xml/src/main/resources/application.properties
new file mode 100644
index 0000000..a711cde
--- /dev/null
+++ b/timer-log-xml/src/main/resources/application.properties
@@ -0,0 +1,33 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+# to turn on DEBUG logging in camel-main
+# quarkus.log.category."org.apache.camel.main".level = DEBUG
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-timer-log-xml
+
+#
+# Camel Main
+#
+camel.main.xml-routes = file:src/main/resources/routes/my-routes.xml
diff --git a/timer-log-xml/src/main/resources/routes/my-routes.xml b/timer-log-xml/src/main/resources/routes/my-routes.xml
new file mode 100644
index 0000000..ed63c39
--- /dev/null
+++ b/timer-log-xml/src/main/resources/routes/my-routes.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="
+ http://camel.apache.org/schema/spring
+ http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <route id="xml-route">
+ <from uri="timer:from-xml?period=1000"/>
+ <log message="Hello XML!"/>
+ </route>
+
+</routes>
\ No newline at end of file
diff --git a/timer-log/README.adoc b/timer-log/README.adoc
new file mode 100644
index 0000000..8596a9f
--- /dev/null
+++ b/timer-log/README.adoc
@@ -0,0 +1,57 @@
+= timer-log
+
+This is a basic hello world example that uses a Camel timer that
+triggers every second and prints to the log.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites
+and other general information.
+
+== Start in the Development mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your
+workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+Then look at the log output in the console. As we run the example
+in Quarkus Dev Mode, you can edit the source code and have live updates.
+For example try to change the logging output to be `Bye World`.
+
+=== Package and run the application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of
+https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+==== JVM mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/*-runner.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 1.163s.
+----
+
+==== Native mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section
+of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Pnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-... started in 0.013s.
+...
+----
diff --git a/timer-log/pom.xml b/timer-log/pom.xml
new file mode 100644
index 0000000..d6f3c65
--- /dev/null
+++ b/timer-log/pom.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<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-build-parent</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../../poms/build-parent/pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>camel-quarkus-examples-timer-log</artifactId>
+ <name>Camel Quarkus :: Examples :: Timer Log</name>
+ <description>Camel Quarkus Example :: Timer to Log</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log</artifactId>
+ </dependency>
+
+ <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-log-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-main-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-timer-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>build</id>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>native</id>
+ <activation>
+ <property>
+ <name>native</name>
+ </property>
+ </activation>
+ <properties>
+ <quarkus.package.type>native</quarkus.package.type>
+ </properties>
+ </profile>
+ </profiles>
+
+</project>
diff --git a/timer-log/src/main/java/org/acme/timer/TimerRoute.java b/timer-log/src/main/java/org/acme/timer/TimerRoute.java
new file mode 100644
index 0000000..0a3b0b9
--- /dev/null
+++ b/timer-log/src/main/java/org/acme/timer/TimerRoute.java
@@ -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.
+ */
+package org.acme.timer;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class TimerRoute extends RouteBuilder {
+
+ @Override
+ public void configure() throws Exception {
+ from("timer:foo?period=1000")
+ .log("Hello World");
+ }
+}
diff --git a/timer-log/src/main/resources/application.properties b/timer-log/src/main/resources/application.properties
new file mode 100644
index 0000000..261dde5
--- /dev/null
+++ b/timer-log/src/main/resources/application.properties
@@ -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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-timer-log
+