This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new bb64853 Revisit the documentation #2136 #2470 #2374 bb64853 is described below commit bb648537b3311273a2275fec1bf896637a85eaf7 Author: Peter Palaga <ppal...@redhat.com> AuthorDate: Wed Apr 14 11:43:50 2021 +0200 Revisit the documentation #2136 #2470 #2374 --- docs/README.adoc | 5 +- docs/modules/ROOT/nav.adoc | 5 +- .../contributor-guide/create-new-extension.adoc | 2 +- .../contributor-guide/promote-jvm-to-native.adoc | 2 +- docs/modules/ROOT/pages/index.adoc | 2 +- .../ROOT/pages/reference/extensions/core.adoc | 2 +- docs/modules/ROOT/pages/user-guide/bootstrap.adoc | 176 --------------------- docs/modules/ROOT/pages/user-guide/cdi.adoc | 23 +++ .../ROOT/pages/user-guide/command-mode.adoc | 30 ++++ .../ROOT/pages/user-guide/configuration.adoc | 137 ++++++++++++++++ .../pages/user-guide/defining-camel-routes.adoc | 141 +++++++++++++++++ .../pages/user-guide/dependency-management.adoc | 86 ++++++++++ .../modules/ROOT/pages/user-guide/first-steps.adoc | 32 +++- docs/modules/ROOT/pages/user-guide/index.adoc | 2 +- 14 files changed, 458 insertions(+), 187 deletions(-) diff --git a/docs/README.adoc b/docs/README.adoc index 7d227a3..17148c4 100644 --- a/docs/README.adoc +++ b/docs/README.adoc @@ -20,9 +20,12 @@ To setup the environment you need to execute the following command once (and eve [code,shell] ---- -yarn install +yarn install --immutable ---- +`--immutable` makes the install command respect the content of `yarn.lock` file. +You may want to omit it if you want upgrade the versions in `yarn.lock` file. + == Build the Documentation Website To generate the documentation website, execute: diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index 246758a..7545d0c 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -1,9 +1,12 @@ * xref:user-guide/index.adoc[User guide] ** xref:user-guide/first-steps.adoc[First steps] -** xref:user-guide/bootstrap.adoc[Bootstrap] +** xref:user-guide/dependency-management.adoc[Dependency management] +** xref:user-guide/defining-camel-routes.adoc[Defining routes] +** xref:user-guide/configuration.adoc[Configuration] ** xref:user-guide/cdi.adoc[CDI] ** xref:user-guide/observability.adoc[Observability] ** xref:user-guide/native-mode.adoc[Native mode] +** xref:user-guide/command-mode.adoc[Command mode] ** xref:user-guide/testing.adoc[Testing] ** xref:user-guide/examples.adoc[Examples] * xref:contributor-guide/index.adoc[Contributor guide] diff --git a/docs/modules/ROOT/pages/contributor-guide/create-new-extension.adoc b/docs/modules/ROOT/pages/contributor-guide/create-new-extension.adoc index d6a4517..079c7d0 100644 --- a/docs/modules/ROOT/pages/contributor-guide/create-new-extension.adoc +++ b/docs/modules/ROOT/pages/contributor-guide/create-new-extension.adoc @@ -70,7 +70,7 @@ Check the xref:contributor-guide/extension-metadata.adoc[Extension metadata] pag [TIP] ==== If your test application is going to be configured via `camel.component.*` properties, you need to add the -`camel-quarkus-main` dependency to the test project. See the xref:user-guide/bootstrap.adoc[Bootstrap] section of +`camel-quarkus-main` dependency to the test project. See the xref:user-guide/configuration.adoc[Bootstrap] section of the User guide for more details. ==== diff --git a/docs/modules/ROOT/pages/contributor-guide/promote-jvm-to-native.adoc b/docs/modules/ROOT/pages/contributor-guide/promote-jvm-to-native.adoc index 7be0198..a986317 100644 --- a/docs/modules/ROOT/pages/contributor-guide/promote-jvm-to-native.adoc +++ b/docs/modules/ROOT/pages/contributor-guide/promote-jvm-to-native.adoc @@ -49,7 +49,7 @@ $ mvn clean verify -Pnative [TIP] ==== If your test application is going to be configured via `camel.component.*` properties, you need to add the -`camel-quarkus-main` dependency to the test project. See the xref:user-guide/bootstrap.adoc[Bootstrap] section of +`camel-quarkus-main` dependency to the test project. See the xref:user-guide/configuration.adoc[Bootstrap] section of the User guide for more details. ==== + diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 2a4c6e8..1eb89f7 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -11,7 +11,7 @@ Camel Quarkus provides xref:reference/index.adoc[Quarkus extensions] for many of Camel Quarkus also takes advantage of the many performance improvements made in Camel 3, which results in a lower memory footprint, less reliance on reflection (which is good for native application support) and faster startup times. -You can define Camel routes using the Java DSL, XML & Kotlin (see the xref:user-guide/examples.adoc[examples]). +You can xref:user-guide/defining-camel-routes.adoc[define Camel routes] using the Java DSL, XML, Kotlin, Groovy, YAML or JavaScript. === Where to go next? diff --git a/docs/modules/ROOT/pages/reference/extensions/core.adoc b/docs/modules/ROOT/pages/reference/extensions/core.adoc index efb4632..6e3dc0f 100644 --- a/docs/modules/ROOT/pages/reference/extensions/core.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/core.adoc @@ -174,7 +174,7 @@ What to do if it is not possible to extract CSimple expressions from a route def |icon:lock[title=Fixed at build time] [[quarkus.camel.main.enabled]]`link:#quarkus.camel.main.enabled[quarkus.camel.main.enabled]` -If `true` all `camel-main` features are enabled; otherwise no `camel-main` features are enabled. See described the xref:user-guide/bootstrap.adoc#_camel_main[Bootstrap] section of Camel Quarkus documentation for more details. +If `true` all `camel-main` features are enabled; otherwise no `camel-main` features are enabled. See described the xref:user-guide/configuration.adoc#_camel_main[Bootstrap] section of Camel Quarkus documentation for more details. | `boolean` | `true` diff --git a/docs/modules/ROOT/pages/user-guide/bootstrap.adoc b/docs/modules/ROOT/pages/user-guide/bootstrap.adoc deleted file mode 100644 index f0e0740..0000000 --- a/docs/modules/ROOT/pages/user-guide/bootstrap.adoc +++ /dev/null @@ -1,176 +0,0 @@ -= Bootstrap and configuration - -Camel Quarkus automatically configures and deploys a Camel Context bean which by default is started/stopped according to -the Quarkus Application lifecycle. The configuration step happens at build time during Quarkus' augmentation phase and -it is driven by the Camel Quarkus extensions which can be tuned using Camel Quarkus specific `camel.quarkus.*` -properties. After the configuration is done, a minimal Camel Runtime is assembled and started at -https://quarkus.io/guides/writing-extensions#bootstrap-three-phases[RUNTIME_INIT] time. - - -== CDI - -The https://quarkus.io/guides/cdi-reference[CDI] APIs can be used to configure various aspects of Camel behavior. For example, to configure the `LogComponent` you can write a code like: - -[source,java] ----- -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 // <1> - LogComponent log() { - DefaultExchangeFormatter formatter = new DefaultExchangeFormatter(); - formatter.setShowExchangePattern(false); - formatter.setShowBodyType(false); - - LogComponent component = new LogComponent(); - component.setExchangeFormatter(formatter); - - return component; - } -} ----- -<1> Camel uses the component URI scheme to look-up components from its registry, this requires you to add the `@Named` annotation to the method, otherwise the CDI container would create an anonymous bean and Camel would not be able to look it up. - -In Camel Quarkus the Camel components are discovered during the augmentation phase, producing a new component as shown in the example above would invalidate any optimization that may have been made. - -As a better alternative you can use `@Inject` to obtain an instance of a component automatically created by Camel or you can observe one of the https://github.com/apache/camel-quarkus/tree/main/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/events[events] fired by Camel Quarkus as shown in the following example, in which we use `@Observes` to be notified about components added to the Camel Context: - -[source,java] ----- -import javax.enterprise.context.ApplicationScoped; -import javax.enterprise.event.Observes; -import org.apache.camel.quarkus.core.events.ComponentAddEvent; -import org.apache.camel.component.log.LogComponent; - -@ApplicationScoped -public static class EventHandler { - public void onComponentAdd(@Observes ComponentAddEvent event) { - if (event.getComponent() instanceof LogComponent) { - // do something with the log component - } - } -} ----- - -== Camel Main - -To configure components and other aspects of Apache Camel through properties, you can add the `camel-quarkus-main` -extension which brings functionalities from xref:{cq-camel-components}:others:main.adoc[Apache Camel -Main] to Camel Quarkus. - -In the example below, we apply the same configuration as the one from the Java example above by using properties: - -[source,properties] ----- -camel.component.log.exchange-formtatter = #class:org.apache.camel.support.processor.DefaultExchangeFormatter -camel.component.log.exchange-formtatter.show-exchange-pattern = false -camel.component.log.exchange-formtatter.show-body-type = false ----- - -In addition to support configuring Camel through properties, `camel-quarkus-main` allows you to use conventions to configure the Camel behavior. For example, if there is a single `ExchangeFormatter` instance in the CDI container, then it will automatically wire that bean to the `LogComponent`. - -Camel Main also brings the option to write https://quarkus.io/guides/command-mode-reference[Quarkus Command Mode Applications] with control about when the Camel runtime should start: - -[source,java] ----- -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) { - // - // your logic here - // - - Quarkus.run(CamelMainApplication.class, args); // <1> - } -} ----- -<1> Start Quarkus and the Camel Quarkus runtime - -[NOTE] -==== -It is recommended to perform very little logic in the Java Main. -==== - -Find more details about Camel Quarkus command line applications in this link:/blog/2020/07/command-line-utility-with-camel-quarkus/[blog post]. - -=== XML Configuration - -In order to configure Camel routes, rests or templates in XML, you must add a Camel XML parser dependency to the classpath. E.g either `camel-quarkus-xml-io` or -`camel-quarkus-xml-jaxb`. `camel-quarkus-xml-io` is preferred due to its lightweight implementation. - -With Camel Main, you can set a property that points to the location of resources XML files such as routes, xref:latest@manual::rest-dsl.adoc[REST DSL] and xref:latest@manual::route-template.adoc[Route templates]: - -[source,properties] ----- -camel.main.routes-include-pattern = routes/routes.xml, file:src/main/routes/rests.xml, file:src/main/rests/route-template.xml ----- - -[NOTE] -==== -Path globbing like `camel.main.routes-include-pattern = *./routes.xml` currently does not work in native mode. -==== - - -.Route -[source,xml] ----- -<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> ----- -[NOTE] -==== -Spring XML with `<beans>` or Blueprint XML with `<blueprint>` elements are not supported. The route XML should be in the simplified version like: -==== - -.Rest DSL -[source,xml] ----- -<rests xmlns="http://camel.apache.org/schema/spring"> - <rest id="greeting" path="/greeting"> - <get uri="/hello"> - <setBody> - <constant>Hello World!</constant> - </setBody> - </get> - </rest> -</rests> ----- - -.Route Templates -[source,xml] ----- -<routeTemplates xmlns="http://camel.apache.org/schema/spring"> - <routeTemplate id="myTemplate"> - <templateParameter name="name"/> - <templateParameter name="greeting"/> - <templateParameter name="myPeriod" defaultValue="3s"/> - <route> - <from uri="timer:{{name}}?period={{myPeriod}}"/> - <setBody><simple>{{greeting}} ${body}</simple></setBody> - <log message="${body}"/> - </route> - </routeTemplate> -</routeTemplates> ----- diff --git a/docs/modules/ROOT/pages/user-guide/cdi.adoc b/docs/modules/ROOT/pages/user-guide/cdi.adoc index 5393b2e..caf8ff7 100644 --- a/docs/modules/ROOT/pages/user-guide/cdi.adoc +++ b/docs/modules/ROOT/pages/user-guide/cdi.adoc @@ -41,6 +41,29 @@ you really need it. TIP: Please refer to the https://quarkus.io/blog/quarkus-dependency-injection[Quarkus Dependency Injection guide] for more details. +=== Accessing `CamelContext` + +To access `CamelContext` just inject it into your bean: + +[source,java] +---- +import javax.inject.Inject; +import javax.enterprise.context.ApplicationScoped; +import java.util.stream.Collectors; +import java.util.List; +import org.apache.camel.CamelContext; + +@ApplicationScoped +public static class MyBean { + + @Inject + CamelContext context; + + public List<String> listRouteIds() { + return context.getRoutes().stream().map(Route::getId).sorted().collect(Collectors.toList()); + } +} +---- == CDI and the Camel Bean component diff --git a/docs/modules/ROOT/pages/user-guide/command-mode.adoc b/docs/modules/ROOT/pages/user-guide/command-mode.adoc new file mode 100644 index 0000000..481bffb --- /dev/null +++ b/docs/modules/ROOT/pages/user-guide/command-mode.adoc @@ -0,0 +1,30 @@ += Command Mode Applications + +`camel-quarkus-core` brings the option to write https://quarkus.io/guides/command-mode-reference[Quarkus Command Mode Applications] with control about when the Camel runtime should start: + +[source,java] +---- +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) { + // + // your logic here + // + + Quarkus.run(CamelMainApplication.class, args); // <1> + } +} +---- +<1> Start Quarkus and the Camel Quarkus runtime + +[NOTE] +==== +It is recommended to perform very little logic in the Java Main. +==== + +Find more details about Camel Quarkus command line applications in this link:/blog/2020/07/command-line-utility-with-camel-quarkus/[blog post]. + diff --git a/docs/modules/ROOT/pages/user-guide/configuration.adoc b/docs/modules/ROOT/pages/user-guide/configuration.adoc new file mode 100644 index 0000000..cb51535 --- /dev/null +++ b/docs/modules/ROOT/pages/user-guide/configuration.adoc @@ -0,0 +1,137 @@ += Configuration +:page-aliases: user-guide/bootstrap.adoc + +Camel Quarkus automatically configures and deploys a Camel Context bean which by default is started/stopped according to +the Quarkus Application lifecycle. The configuration step happens at build time during Quarkus' augmentation phase and +it is driven by the Camel Quarkus extensions which can be tuned using Camel Quarkus specific `quarkus.camel.*` +properties. + +[INFO] +==== +`quarkus.camel.*` configuration properties are documented on the individual extension pages +- see e.g. xref:reference/extensions/core.adoc[Camel Quarkus Core]. +==== + +After the configuration is done, a minimal Camel Runtime is assembled and started in the +https://quarkus.io/guides/writing-extensions#bootstrap-three-phases[RUNTIME_INIT] phase. + + +== Configuring Camel components + +=== `application.properties` + +To configure components and other aspects of Apache Camel through properties, +make sure that your application depends on `camel-quarkus-core` directly or transitively. +Because most Camel Quarkus extensions depend on `camel-quarkus-core`, you typically do not need to add it explicitly. + +`camel-quarkus-core` brings functionalities from xref:{cq-camel-components}:others:main.adoc[Camel +Main] to Camel Quarkus. + +In the example below, we set a specific `ExchangeFormatter` configuration on the `LogComponent` via +`application.properties`: + +[source,properties] +---- +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 +---- + + +=== CDI + +The same can be done programmatically using CDI: + +[source,java] +---- +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("log") // <1> + LogComponent log() { + DefaultExchangeFormatter formatter = new DefaultExchangeFormatter(); + formatter.setShowExchangePattern(false); + formatter.setShowBodyType(false); + + LogComponent component = new LogComponent(); + component.setExchangeFormatter(formatter); + + return component; + } +} +---- +<1> Camel uses the component URI scheme to look-up components from its registry, this requires you to add the `@Named` annotation to the method, otherwise the CDI container would create an anonymous bean and Camel would not be able to look it up. +The `"log"` argument of the `@Named` annotation can be omitted as long as the name of the method is the same. + +In Camel Quarkus, the Camel components are discovered during the augmentation phase. +Hence producing a new component as shown in the example above would invalidate any optimization that may have been made. + +As a better alternative you can use `@Inject` to obtain an instance of a component automatically created by Camel or you can observe one of the https://github.com/apache/camel-quarkus/tree/main/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/events[events] fired by Camel Quarkus as shown in the following example, in which we use `@Observes` to be notified about components added to the Camel Context: + +[source,java] +---- +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import org.apache.camel.quarkus.core.events.ComponentAddEvent; +import org.apache.camel.component.log.LogComponent; + +@ApplicationScoped +public static class EventHandler { + public void onComponentAdd(@Observes ComponentAddEvent event) { + if (event.getComponent() instanceof LogComponent) { + // do something with the log component + } + } +} +---- + +== Camel Quarkus Core and Camel Main + +INFO: Before Camel Quarkus 1.8.0, `camel-quarkus-main` used to be a separate artifact. +Since 1.8.0, all its functionality moved to `camel-quarkus-core`. + +== Configuration by convention + +In addition to support configuring Camel through properties, `camel-quarkus-core` allows you to use conventions to configure the Camel behavior. +For example, if there is a single `ExchangeFormatter` instance in the CDI container, then it will automatically wire that bean to the `LogComponent`. + + +`camel-quarkus-core` also brings the option to write https://quarkus.io/guides/command-mode-reference[Quarkus Command Mode Applications] with control about when the Camel runtime should start: + +[source,java] +---- +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) { + // + // your logic here + // + + Quarkus.run(CamelMainApplication.class, args); // <1> + } +} +---- +<1> Start Quarkus and the Camel Quarkus runtime + +[NOTE] +==== +It is recommended to perform very little logic in the Java Main. +==== + +Find more details about Camel Quarkus command line applications in this link:/blog/2020/07/command-line-utility-with-camel-quarkus/[blog post]. + +== What's next? + +We recommend to continue with xref:user-guide/cdi.adoc[CDI]. diff --git a/docs/modules/ROOT/pages/user-guide/defining-camel-routes.adoc b/docs/modules/ROOT/pages/user-guide/defining-camel-routes.adoc new file mode 100644 index 0000000..6cc8743 --- /dev/null +++ b/docs/modules/ROOT/pages/user-guide/defining-camel-routes.adoc @@ -0,0 +1,141 @@ += Defining Camel routes + +Camel Quarkus supports several domain specific languages (DSLs) to define Camel Routes. + +== Java DSL + +Extending `org.apache.camel.builder.RouteBuilder` and using the fluent builder methods available there +is the most common way of defining Camel Routes. +Here is an example from the https://github.com/apache/camel-quarkus-examples/tree/main/timer-log[timer-log] quicksstart: + +[source,java] +---- +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"); + } +} +---- + +=== Endpoint DSL + +Since Camel 3.0, you can use fluent builders also for defining Camel endpoints. +The following is equivalent with the previous example: + +[source,java] +---- +import org.apache.camel.builder.RouteBuilder; +import static org.apache.camel.builder.endpoint.StaticEndpointBuilders.timer; + +public class TimerRoute extends RouteBuilder { + + @Override + public void configure() throws Exception { + from(timer("foo").period(1000)) + .log("Hello World"); + } +} +---- + +[NOTE] +==== +Builder methods for all Camel components are available via `camel-quarkus-core`, +but you still need to add the given component's extension as a dependency for the route to work properly. +In case of the above example, it would be `camel-quarkus-timer`. +==== + +== XML DSL + +In order to configure Camel routes, rests or templates in XML, you must add a Camel XML parser dependency to the classpath. +Since Camel Quarkus 1.8.0, `xref:reference/extensions/xml-io-dsl.adoc[camel-quarkus-xml-io-dsl]` is the best choice. + +With Camel Main, you can set a property that points to the location of resources XML files such as routes, xref:latest@manual::rest-dsl.adoc[REST DSL] and xref:latest@manual::route-template.adoc[Route templates]: + +[source,properties] +---- +camel.main.routes-include-pattern = routes/routes.xml, file:src/main/routes/rests.xml, file:src/main/rests/route-template.xml +---- + +[NOTE] +==== +Path globbing like `camel.main.routes-include-pattern = *./routes.xml` currently does not work in native mode. +==== + + +.Route +[source,xml] +---- +<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> +---- + +[WARN] +==== +Spring XML with `<beans>` or Blueprint XML with `<blueprint>` elements are not supported. +==== + +The route XML should be in the simplified version like: + +.Rest DSL +[source,xml] +---- +<rests xmlns="http://camel.apache.org/schema/spring"> + <rest id="greeting" path="/greeting"> + <get uri="/hello"> + <setBody> + <constant>Hello World!</constant> + </setBody> + </get> + </rest> +</rests> +---- + +.Route Templates +[source,xml] +---- +<routeTemplates xmlns="http://camel.apache.org/schema/spring"> + <routeTemplate id="myTemplate"> + <templateParameter name="name"/> + <templateParameter name="greeting"/> + <templateParameter name="myPeriod" defaultValue="3s"/> + <route> + <from uri="timer:{{name}}?period={{myPeriod}}"/> + <setBody><simple>{{greeting}} ${body}</simple></setBody> + <log message="${body}"/> + </route> + </routeTemplate> +</routeTemplates> +---- + +== Other route DSLs + +Since Camel Quarkus 1.8.0, you can also use +xref:reference/extensions/java-joor-dsl.adoc[Java jOOR], +xref:reference/extensions/groovy-dsl.adoc[Groovy], +xref:reference/extensions/yaml-dsl.adoc[YAML], +xref:reference/extensions/kotlin-dsl.adoc[Kotlin] or +xref:reference/extensions/js-dsl.adoc[JavaScript] for defining Camel routes. + +These are mostly motivated by link:/camel-k/latest[Camel K] and its project-less approach to defining Camel routes. +With Camel K, all you need to run an integration is a file where the routes are defined using one of the supported DSLs. +With Camel Quarkus you still need a `pom.xml` file with the appropriate dependencies in addition to the route definition files. +Except for YAML, these DSLs are supported only in JVM mode, because they load and compile the routes at runtime. + +== What's next? + +We recommend to continue with xref:user-guide/configuration.adoc[Configuration]. diff --git a/docs/modules/ROOT/pages/user-guide/dependency-management.adoc b/docs/modules/ROOT/pages/user-guide/dependency-management.adoc new file mode 100644 index 0000000..c5bc0c5 --- /dev/null +++ b/docs/modules/ROOT/pages/user-guide/dependency-management.adoc @@ -0,0 +1,86 @@ += Dependency management + +A specific Camel Quarkus release is supposed to work only with a specific Quarkus release. + +== Quarkus Universe BOM + +The easiest and most straightforward way to get the dependency versions right is to use https://code.quarkus.io/[code.quarkus.io]. +It will produce a project with the `io.quarkus:quarkus-universe-bom` set up in the `<depependencyManagement>` section +of your `pom.xml` file. + +[INFO] +==== +BOM stands for "Bill of Materials" - it is a `pom.xml` whose main purpose is to manage the versions of artifacts +so that end users importing the BOM in their projects do not need to care which particular versions of the artifacts +are supposed to work together. In other words, having a BOM imported in the `<depependencyManagement>` section +of your `pom.xml` allows you to avoid specifying versions for the dependencies managed by the given BOM. +==== + +`quarkus-universe-bom` manages the artifacts from Quarkus, Camel Quarkus and other participating projects, +such as Hazelcast, Cassandra, Kogito, Optaplanner, etc. + +This has the advantage that application developers do not need to care for the compatibility of the individual artifacts +that may come from various independent projects. +All artifacts managed by `quarkus-universe-bom` are supposed to work together flawlessly. + +Here is a stub of a `pom.xml` file generated by https://code.quarkus.io/[code.quarkus.io]: + +[source,xml,subs="attributes+"] +---- +<project> + ... + <properties> + <quarkus.platform.version>{quarkus-version}</quarkus.platform.version> + ... + </properties> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-universe-bom</artifactId> + <version>${quarkus.platform.version}</version> + <type>pom</type> + <scope>import</scope><!-- The BOM is imported in the <dependencyManagement> --> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-timer</artifactId> + <!-- No explicit version required here and below --> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy</artifactId> + </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-resteasy-jackson</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-ftp</artifactId> + </dependency> + ... + </dependencies> + ... +</project> +---- + +== Camel Quarkus BOM + +As long as you do not plan to use any dependencies beyond those from Quarkus and Camel Quarkus, +you may consider switching to `org.apache.camel.quarkus:camel-quarkus-bom`. +It manages all supported Camel artifacts and imports `io.quarkus:quarkus-bom`. + +== Combining with other BOMs + +When combining `camel-quarkus-bom` or `quarkus-universe-bom` with any other BOM, +think carefully in which order you import them, +because the order of imports defines the precedence. + +== What's next? + +We recommend to continue with xref:user-guide/defining-camel-routes.adoc[Defining routes]. diff --git a/docs/modules/ROOT/pages/user-guide/first-steps.adoc b/docs/modules/ROOT/pages/user-guide/first-steps.adoc index 0e814f3..a56945a 100644 --- a/docs/modules/ROOT/pages/user-guide/first-steps.adoc +++ b/docs/modules/ROOT/pages/user-guide/first-steps.adoc @@ -1,7 +1,7 @@ = First steps :page-aliases: first-steps.adoc -This guide outlines various ways to create a Camel Quarkus project. +This guide outlines various ways to create a new Camel Quarkus application. == Prerequisites @@ -17,9 +17,13 @@ This guide outlines various ways to create a Camel Quarkus project. == code.quarkus.io -Projects can be bootstrapped and generated at https://code.quarkus.io. All of the Camel Quarkus extensions can be found under the 'Integration' heading. Use the 'search' field to help with finding extensions that you are interested in. +Projects can be generated at https://code.quarkus.io[code.quarkus.io]. +All of the Camel Quarkus extensions can be found under the 'Integration' heading. +Use the 'search' field to help with finding extensions that you are interested in. -Simply select the component extensions that you want to work with and click the 'Generate your application' button to download a basic skeleton project. There is also the option to push the project directly to GitHub. +Simply select the component extensions that you want to work with +and click the 'Generate your application' button to download a basic skeleton project. +There is also the option to push the project directly to GitHub. When the project archive download has completed successfully, unzip and import into your favorite IDE. @@ -50,7 +54,17 @@ Quarkus has plugins for most of the popular development IDEs. They provide Quark * https://plugins.jetbrains.com/plugin/13234-quarkus-tools[IntelliJ plugin] * https://marketplace.visualstudio.com/items?itemName=redhat.vscode-quarkus[VSCode plugin] -Check the plugin documentation to discover how to create projects for your preferred IDE. +Check the documentation of the given plugin to discover how to create projects in your preferred IDE. + +=== Camel content assist + +The follwing plugins provide support for content assist when editing Camel routes and `application.properties`: + +* https://marketplace.visualstudio.com/items?itemName=redhat.vscode-apache-camel[VS Code Language support for Camel] - a part of the https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack[Camel extension pack] +* https://marketplace.eclipse.org/content/language-support-apache-camel[Eclipse Desktop Language Support for Camel] - a part of https://tools.jboss.org/[Jboss Tools] and https://developers.redhat.com/products/codeready-studio[CodeReady Studio] +* https://plugins.jetbrains.com/plugin/9371-apache-camel-idea-plugin[Apache Camel IDEA plugin] (not always up to date) +* Users of other https://microsoft.github.io/language-server-protocol/implementors/tools/[IDEs supporting Language Server Protocol] +may choose to install and configure https://github.com/camel-tooling/camel-language-server[Camel Language Server] manually == Example projects @@ -101,6 +115,11 @@ The application has three compile dependencies: They are managed within the `camel-quarkus-bom` that is imported in `<dependencyManagement>`. +[INFO] +==== +More about xref:user-guide/dependency-management.adoc[BOMs]. +==== + There are only three classes in the application: `Routes` defines the Camel routes, whereas `Fruit` and `Legume` are entities. The application is configured by properties defined within `src/main/resources/application.properties`. E.g. the `camel.context.name` is set there. @@ -212,3 +231,8 @@ That's under 35 MB of RAM! TIP: https://quarkus.io/guides/building-native-image-guide.html[Quarkus Native executable guide] contains more details including https://quarkus.io/guides/building-native-image-guide.html#creating-a-container[steps for creating a container image]. + +== What's next? + +We recommend to continue with xref:user-guide/dependency-management.adoc[Dependency management]. + diff --git a/docs/modules/ROOT/pages/user-guide/index.adoc b/docs/modules/ROOT/pages/user-guide/index.adoc index 41fc441..cb080ee 100644 --- a/docs/modules/ROOT/pages/user-guide/index.adoc +++ b/docs/modules/ROOT/pages/user-guide/index.adoc @@ -4,7 +4,7 @@ This guide is for developers writing Camel applications on top of Quarkus. -WARNING: Camel extensions for Quarkus is a new project and this guide is a work in progress. +WARNING: Camel Quarkus is a new project and this guide is a work in progress. https://github.com/apache/camel-quarkus/issues[Issue reports] and fixes are welcome. == Which Camel components are supported on Quarkus?