Repository: camel Updated Branches: refs/heads/master 578ae7e9b -> 81f7515e5
Component docs for scala Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/26f1e959 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/26f1e959 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/26f1e959 Branch: refs/heads/master Commit: 26f1e959d4f87257763703ff3a4f8b7f75897ceb Parents: 578ae7e Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Apr 13 10:53:07 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Apr 13 10:53:17 2017 +0200 ---------------------------------------------------------------------- .../apache/camel/model/ProcessDefinition.java | 2 +- .../model/cloud/ServiceCallDefinition.java | 2 +- .../src/main/docs/scala-dsl-eip.adoc | 224 ------------------- .../main/docs/scala-dsl-getting-started.adoc | 59 ----- .../docs/scala-dsl-supported-languages.adoc | 30 --- .../camel-scala/src/main/docs/scala-dsl.adoc | 76 ------- .../camel-scala/src/main/docs/scala-eip.adoc | 224 +++++++++++++++++++ .../src/main/docs/scala-getting-started.adoc | 59 +++++ .../main/docs/scala-supported-languages.adoc | 30 +++ components/camel-scala/src/main/docs/scala.adoc | 78 +++++++ components/readme.adoc | 4 +- 11 files changed, 395 insertions(+), 393 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/camel-core/src/main/java/org/apache/camel/model/ProcessDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/ProcessDefinition.java b/camel-core/src/main/java/org/apache/camel/model/ProcessDefinition.java index 7d2b818..fef9c5b 100644 --- a/camel-core/src/main/java/org/apache/camel/model/ProcessDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/ProcessDefinition.java @@ -32,7 +32,7 @@ import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; /** - * Calls a Camel processor. + * Calls a Camel processor * * @version */ http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/camel-core/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinition.java b/camel-core/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinition.java index 53821ff..efaf03e 100644 --- a/camel-core/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/cloud/ServiceCallDefinition.java @@ -56,7 +56,7 @@ import static org.apache.camel.util.CamelContextHelper.findByType; import static org.apache.camel.util.CamelContextHelper.lookup; /** - * Remote service call definition + * To call remote services */ @Metadata(label = "eip,routing") @XmlRootElement(name = "serviceCall") http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-dsl-eip.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-dsl-eip.adoc b/components/camel-scala/src/main/docs/scala-dsl-eip.adoc deleted file mode 100644 index f8d52e6..0000000 --- a/components/camel-scala/src/main/docs/scala-dsl-eip.adoc +++ /dev/null @@ -1,224 +0,0 @@ -[[ScalaDSL-SupportedDSL]] -Scala Supported DSL -^^^^^^^^^^^^^^^^^^^ - -The link:scala-dsl.html[Scala DSL] supports *every* DSL from the -link:dsl.html[Java DSL]. - -On this page we have examples for a number of the link:eip.html[EIP]s. + - You can check the -https://svn.apache.org/repos/asf/camel/trunk/components/camel-scala/src/test/scala/[unit -test source code] for the Scala Component to find more examples. - -* 1 link:#ScalaDSL-EIP-Messagingsystems[Messaging systems] -** 1.1 link:#ScalaDSL-EIP-Pipelinepipeline[Pipeline] -** 1.2 link:#ScalaDSL-EIP-Filterfilter[Filter] -* 2 link:#ScalaDSL-EIP-Messagingchannels[Messaging channels] -** 2.1 link:#ScalaDSL-EIP-Deadletterchannel[Dead letter channel] -* 3 link:#ScalaDSL-EIP-Messagerouting[Message routing] -** 3.1 link:#ScalaDSL-EIP-Aggregator[Aggregator] -** 3.2 link:#ScalaDSL-EIP-Contentbasedrouter[Content based router] -** 3.3 link:#ScalaDSL-EIP-Delayer[Delayer] -** 3.4 link:#ScalaDSL-EIP-Loadbalancer[Load balancer] -** 3.5 link:#ScalaDSL-EIP-Multicast[Multicast] -** 3.6 link:#ScalaDSL-EIP-Recipientlist[Recipient list] -** 3.7 link:#ScalaDSL-EIP-Resequencer[Resequencer] -** 3.8 link:#ScalaDSL-EIP-Splitter[Splitter] -** 3.9 link:#ScalaDSL-EIP-Throttler[Throttler] -* 4 link:#ScalaDSL-EIP-Messagetransformation[Message transformation] -** 4.1 link:#ScalaDSL-EIP-Contentenricher[Content enricher] - -[[ScalaDSL-EIP-Messagingsystems]] -Messaging systems -^^^^^^^^^^^^^^^^^ - -[[ScalaDSL-EIP-Pipelinepipeline]] -Pipeline -++++++++ - -There is a simple syntax available for specifying pipeline, by simple -putting `to` or `â` between the different steps in the pipeline. - -For more advanced use cases, you can also use a block-based syntax, -where every step in the pipeline starts with either `to` or `â`. - -[[ScalaDSL-EIP-Filterfilter]] -Filter -++++++ - -For a message filter, use the `when()` method with a parameter of type -The `Exchange â Boolean`. In the example below, we use a Scala -convenience method named `in` to access the 'in' message body; only -messages where the 'in' message is `<hello/>` will arrive at the -`mock:a` endpoint. - -Once again, if you need to specify a more advanced route, you can use -the more elaborate syntax. - -[[ScalaDSL-EIP-Messagingchannels]] -Messaging channels -^^^^^^^^^^^^^^^^^^ - -[[ScalaDSL-EIP-Deadletterchannel]] -Dead letter channel -+++++++++++++++++++ - -The http://www.eaipatterns.com/DeadLetterChannel.html[dead letter -channel] can be created with the syntax similar to the one used in -http://camel.apache.org/dead-letter-channel.html[Java DSL]. - -[source,java] ------------------------------------------------------------------- -"jms:in" errorHandler(deadLetterChannel("jms:error")) to "jms:out" ------------------------------------------------------------------- - -You can also use different error handler available for the -http://camel.apache.org/error-handler.html[Java DSL]. In particular -Scala DSL supports -http://camel.apache.org/defaulterrorhandler.html[DefaultErrorHandler] -and -http://camel.apache.org/error-handler.html#ErrorHandler-LoggingErrorHandler[LoggingErrorHandler]. - -[source,java] ----------------------------------------------------------------------------------------------------------------- -// DefaultErrorHandler -"jms:in" errorHandler(defaultErrorHandler) to "jms:out" - -// LoggingErrorHandler -"jms:in" errorHandler(loggingErrorHandler.level(LoggingLevel.INFO).logName("com.example.MyLogger")) to "jms:out" ----------------------------------------------------------------------------------------------------------------- - -[[ScalaDSL-EIP-Messagerouting]] -Message routing -^^^^^^^^^^^^^^^ - -[[ScalaDSL-EIP-Aggregator]] -Aggregator -++++++++++ - -The aggregator EIP aggregates messages based on some message correlation -criteria. In the Scala DSL, the `aggregate` method takes a function -`Exchange â Any` to determine the correlation value for the exchange. In -the sample below, message are being aggregated if the first 7 letters in -the message body are the same. - -[[ScalaDSL-EIP-Contentbasedrouter]] -Content based router -++++++++++++++++++++ - -Similar to the link:scala-dsl-eip.html[Filter], the content based router -uses `when` methods with `Exchange â Boolean` function literals and an -optional `otherwise`. The function literal can contain plain Scala code -as well as any of the link:scala-dsl-supported-languages.html[supported -languages]. The example below routes a given message based on the -language of the message body. - -[[ScalaDSL-EIP-Delayer]] -Delayer -+++++++ - -Unlike a throttler, which only slows down messages if the rate exceeds a -treshold, a delayer delays every messages with a fixed amount of time. -An example: to delay every message going from `seda:a` to `mock:a` with -1 second, you write... - -Our second example will delay the entire block (containing `mock:c`) -without doing anything to `mock:b` - -[[ScalaDSL-EIP-Loadbalancer]] -Load balancer -+++++++++++++ - -To distribute the message handling load over multiple endpoints, we add -a `loadbalance` to our route definition. You can optionally specify a -load balancer strategy, like `roundrobin` - -[[ScalaDSL-EIP-Multicast]] -Multicast -+++++++++ - -Multicast allows you to send a message to multiple endpoints at the same -time. In a simple route, you can specify multiple targets in the `to` or -`â` method call: - -[[ScalaDSL-EIP-Recipientlist]] -Recipient list -++++++++++++++ - -You can handle a static recipient list with a multicast or -link:scala-dsl-eip.html[pipeline], but this EIP is usually applied when -you want to dynamically determine the name(s) of the next endpoint(s) to -route to. Use the `recipients()` method with a function literal -(`Exchange => Any`) that returns the endpoint name(s). In the example -below, the target endpoint name can be found in the String message -starting at position 21. - -Because the `recipients()` method just takes a function literal, you can -basically use any kind of valid Scala code to determine the endpoint -name. Have a look at the next example which uses pattern matching to -figure out where to send the message: - -Again, we can also use the same thing in a more block-like syntax. For -this example, we use the Scala DSL's -link:scala-dsl-supported-languages.html[support for JXPath] to determine -the target. - -[[ScalaDSL-EIP-Resequencer]] -Resequencer -+++++++++++ - -Use the `resequence` method to add a resequencer to the RouteBuilder. -The method takes a function (`Exchange â Unit`) that determines the -value to resequence on. In this example, we resequence messages based on -the 'in' message body. - -The same EIP can also be used with a block-like syntax... - -... and with configurable batch size. In this last example, messages -will be send to `mock:e` whenever a batch of 5 messages is available. - -[[ScalaDSL-EIP-Splitter]] -Splitter -++++++++ - -To handle large message in smaller chunks, you can write a Scala -`Exchange â Any*` method and add it to your route with the `splitter` -method. As with many other EIPs, we support a short, in-line version as -well as a more elaborate block based one. - -The above examples also show you how -link:scala-dsl-supported-languages.html[other languages] like XPath can -be within the Scala DSL. - -[[ScalaDSL-EIP-Throttler]] -Throttler -+++++++++ - -The throttler allows you to slow down messages before sending them -along. The `throttle` methods allows you to specify the maximum -throughput rate of message: - -It can also be used in front of block to throttle messages at that -point. In the example below, message are passed on to `mock:b` in a -normal rate (i.e. as fast as possible), but a maximum 3 messages/2 -seconds will arrive at the `mock:c` endpoint. - -[[ScalaDSL-EIP-Messagetransformation]] -Message transformation -^^^^^^^^^^^^^^^^^^^^^^ - -[[ScalaDSL-EIP-Contentenricher]] -Content enricher -++++++++++++++++ - -Using a processor function (`Exchange â Unit`), you can alter/enrich the -message content. This example uses a simple function literal to append -`" says Hello"` to the message content: - -However, you can also define a separate method/function to handle the -transformation and pass that to the `process` method instead. The -example below uses pattern matching to enrich the message content: - -Off course, you can also use any other Camel component (e.g. -link:velocity.html[Velocity]) to enrich the content and add it to a -pipeline http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-dsl-getting-started.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-dsl-getting-started.adoc b/components/camel-scala/src/main/docs/scala-dsl-getting-started.adoc deleted file mode 100644 index 21cc41d..0000000 --- a/components/camel-scala/src/main/docs/scala-dsl-getting-started.adoc +++ /dev/null @@ -1,59 +0,0 @@ -[[ScalaDSL-GettingStarted]] -Scala DSL Getting Started -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Just like the link:dsl.html[Java DSL], the Scala DSL has a RouteBuilder -class (`org.apache.camel.scala.dsl.builder.RouteBuilder`) that you can -extend to implement your own routes. This example shows two very simple -routes: - -INFO: From *Camel 2.15* onwards use -org.apache.camel.scala.dsl.builder.ScalaRouteBuilder and pass in the -CamelContext in the constructor, which will be used by the builder. The -old class RouteBuilder is deprecated. - -If you compare this to the Java link:dsl.html[DSL], you notice: - -* there is no configure() method to override -* a route starts directly with a URI instead of `from(uri)` -* `â` is just an alias for `to` - -[[ScalaDSL-GettingStarted-SettingtherouteID]] -Setting the route ID -^^^^^^^^^^^^^^^^^^^^ - -To assign the unique ID to the Scala route, insert the `routeId` method -invocation after the "from" part of the DSL. - -[source,java] ------------------------------------------ - "direct:a" routeId "route-b" to "mock:b" ------------------------------------------ - -[[ScalaDSL-GettingStarted-CreatinganewCamelScalaproject]] -Creating a new Camel Scala project -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Camel offers link:camel-maven-archetypes.html[Maven archetypes] that -allow you to quickly setup a new project. - -To do this, you can execute the following Maven goal from the command -line (using Maven 3.0.3 or better): - -[source,java] ----------------------- -mvn archetype:generate ----------------------- - -This runs Maven interactively - just type `camel` and press <Enter> to -filter for Camel-related archetypes. + - From the list, pick the number for `camel-archetype-scala`, then fill -in the remaining details (such as the Camel version, _et cetera_). - -The generated project has a "readme" file with more instructions, and is -ready to compile and run from Maven using: - -[source,java] ---------------------- -mvn compile exec:java ---------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-dsl-supported-languages.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-dsl-supported-languages.adoc b/components/camel-scala/src/main/docs/scala-dsl-supported-languages.adoc deleted file mode 100644 index bbdb72a..0000000 --- a/components/camel-scala/src/main/docs/scala-dsl-supported-languages.adoc +++ /dev/null @@ -1,30 +0,0 @@ -[[ScalaDSL-SupportedLanguages]] -Scala DSL Supported Languages -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Support for link:languages.html[other languages] inside the Scala DSL -routes is delivered through traits. The -`org.apache.camel.scala.dsl.languages` package currently offers traits -to support XPath. To use any given language, you can mix-in the trait -when creating your `RouteBuilder`. - -You can use any of the supported Camel link:languages.html[Languages] in -the link:scala-dsl.html[Scala DSL]; see below for a couple of examples: - -[[ScalaDSL-Supportedlanguages-Using]] -Using link:xpath.html[XPath] -++++++++++++++++++++++++++++ - -With the XPath trait, you have an additional method available on an -`Exchange` to do XPath queries against the message. Just look at this -Splitter example, where the `xpath` method is used in a -`Exchange â Any*` function literal - -[[ScalaDSL-Supportedlanguages-Using.1]] -Using link:jxpath.html[JXPath] -++++++++++++++++++++++++++++++ - -With the `org.apache.camel.scala.dsl.languages.JXPath` trait, you can an -additional `jxpath` method on the `Exchange`. In the Recipient List -example below, JXPath is used for getting the next endpoint's name out -of the message body. http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-dsl.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-dsl.adoc b/components/camel-scala/src/main/docs/scala-dsl.adoc deleted file mode 100644 index 7c2b54a..0000000 --- a/components/camel-scala/src/main/docs/scala-dsl.adoc +++ /dev/null @@ -1,76 +0,0 @@ -[[ScalaDSL-AbouttheScalaDSL]] -About the Scala DSL -^^^^^^^^^^^^^^^^^^^ - -http://www.scala-lang.org/[Scala] is a general purpose programming -language designed to express common programming patterns in a concise, -elegant, and type-safe way. It integrates very well with the Java -platform. Our Scala DSL implementation is built on top of the existing -Java-based link:dsl.html[DSL], but it adds Scala syntax sugar to make -building routes even more convenient. - -[[ScalaDSL-Documentation]] -Documentation -^^^^^^^^^^^^^ - -* link:scala-dsl-getting-started.html[Scala DSL - Getting Started] gives -you basic information on how to use the Scala DSL. -* link:scala-dsl-eip.html[Scala DSL - EIP] shows you the Scala DSL -syntax for every EIP supported. link:scala-dsl.html[Scala DSL] supports -every EIP from the link:dsl.html[Java DSL]. -* link:scala-dsl-supported-languages.html[Scala DSL - Supported -languages] explains the usage of traits to add support for other -languages (e.g. XPath) - -[[ScalaDSL-References]] -References -^^^^^^^^^^ - -* At http://www.eu.apachecon.com[ApacheCon Europe 2008] there was a Fast -Feather talk that introduced some of the basic Scala language concepts -that are being used for building the Scala DSL. -http://www.anova.be/files/camel-scala.pdf[Here are the presentation -slides] . -* Here's a -http://davsclaus.blogspot.se/2011/12/apache-camel-little-scala-dsl-example.html[blog -post] demonstrating the link:message-filter.html[Message Filter] EIP -within the link:scala-dsl.html[Scala DSL], as well as how to use -link:camel-test.html[Camel's test kit] to test the example. - -[[ScalaDSL-Dependencies]] -Dependencies -^^^^^^^^^^^^ - -To use the Scala DSL in your camel routes you need to add the a -dependency on *camel-scala* which implements the Scala DSL. - -If you use maven you could just add the following to your pom.xml, -substituting the version number for the latest & greatest release (see -the download page for the latest versions). - -[source,xml] ----------------------------------------------------------- -<dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-scala</artifactId> - <version>x.x.x</version> - <!-- use the same version as your Camel core version --> -</dependency> ----------------------------------------------------------- - -Starting from version 2.11 Camel Scala DSL is compiled against Scala -2.10. If you plan to use Scala 2.9 with Camel 2.11, add the following to -your pom.xml file instead. - -[source,xml] ----------------------------------------------------------- -<dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-scala_2.9</artifactId> - <version>2.11.x</version> - <!-- use the same version as your Camel core version --> -</dependency> ----------------------------------------------------------- - -Support for Scala 2.9 is deprecated and will be removed starting from -the Camel 2.12 and 3.0. http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-eip.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-eip.adoc b/components/camel-scala/src/main/docs/scala-eip.adoc new file mode 100644 index 0000000..f8d52e6 --- /dev/null +++ b/components/camel-scala/src/main/docs/scala-eip.adoc @@ -0,0 +1,224 @@ +[[ScalaDSL-SupportedDSL]] +Scala Supported DSL +^^^^^^^^^^^^^^^^^^^ + +The link:scala-dsl.html[Scala DSL] supports *every* DSL from the +link:dsl.html[Java DSL]. + +On this page we have examples for a number of the link:eip.html[EIP]s. + + You can check the +https://svn.apache.org/repos/asf/camel/trunk/components/camel-scala/src/test/scala/[unit +test source code] for the Scala Component to find more examples. + +* 1 link:#ScalaDSL-EIP-Messagingsystems[Messaging systems] +** 1.1 link:#ScalaDSL-EIP-Pipelinepipeline[Pipeline] +** 1.2 link:#ScalaDSL-EIP-Filterfilter[Filter] +* 2 link:#ScalaDSL-EIP-Messagingchannels[Messaging channels] +** 2.1 link:#ScalaDSL-EIP-Deadletterchannel[Dead letter channel] +* 3 link:#ScalaDSL-EIP-Messagerouting[Message routing] +** 3.1 link:#ScalaDSL-EIP-Aggregator[Aggregator] +** 3.2 link:#ScalaDSL-EIP-Contentbasedrouter[Content based router] +** 3.3 link:#ScalaDSL-EIP-Delayer[Delayer] +** 3.4 link:#ScalaDSL-EIP-Loadbalancer[Load balancer] +** 3.5 link:#ScalaDSL-EIP-Multicast[Multicast] +** 3.6 link:#ScalaDSL-EIP-Recipientlist[Recipient list] +** 3.7 link:#ScalaDSL-EIP-Resequencer[Resequencer] +** 3.8 link:#ScalaDSL-EIP-Splitter[Splitter] +** 3.9 link:#ScalaDSL-EIP-Throttler[Throttler] +* 4 link:#ScalaDSL-EIP-Messagetransformation[Message transformation] +** 4.1 link:#ScalaDSL-EIP-Contentenricher[Content enricher] + +[[ScalaDSL-EIP-Messagingsystems]] +Messaging systems +^^^^^^^^^^^^^^^^^ + +[[ScalaDSL-EIP-Pipelinepipeline]] +Pipeline +++++++++ + +There is a simple syntax available for specifying pipeline, by simple +putting `to` or `â` between the different steps in the pipeline. + +For more advanced use cases, you can also use a block-based syntax, +where every step in the pipeline starts with either `to` or `â`. + +[[ScalaDSL-EIP-Filterfilter]] +Filter +++++++ + +For a message filter, use the `when()` method with a parameter of type +The `Exchange â Boolean`. In the example below, we use a Scala +convenience method named `in` to access the 'in' message body; only +messages where the 'in' message is `<hello/>` will arrive at the +`mock:a` endpoint. + +Once again, if you need to specify a more advanced route, you can use +the more elaborate syntax. + +[[ScalaDSL-EIP-Messagingchannels]] +Messaging channels +^^^^^^^^^^^^^^^^^^ + +[[ScalaDSL-EIP-Deadletterchannel]] +Dead letter channel ++++++++++++++++++++ + +The http://www.eaipatterns.com/DeadLetterChannel.html[dead letter +channel] can be created with the syntax similar to the one used in +http://camel.apache.org/dead-letter-channel.html[Java DSL]. + +[source,java] +------------------------------------------------------------------ +"jms:in" errorHandler(deadLetterChannel("jms:error")) to "jms:out" +------------------------------------------------------------------ + +You can also use different error handler available for the +http://camel.apache.org/error-handler.html[Java DSL]. In particular +Scala DSL supports +http://camel.apache.org/defaulterrorhandler.html[DefaultErrorHandler] +and +http://camel.apache.org/error-handler.html#ErrorHandler-LoggingErrorHandler[LoggingErrorHandler]. + +[source,java] +---------------------------------------------------------------------------------------------------------------- +// DefaultErrorHandler +"jms:in" errorHandler(defaultErrorHandler) to "jms:out" + +// LoggingErrorHandler +"jms:in" errorHandler(loggingErrorHandler.level(LoggingLevel.INFO).logName("com.example.MyLogger")) to "jms:out" +---------------------------------------------------------------------------------------------------------------- + +[[ScalaDSL-EIP-Messagerouting]] +Message routing +^^^^^^^^^^^^^^^ + +[[ScalaDSL-EIP-Aggregator]] +Aggregator +++++++++++ + +The aggregator EIP aggregates messages based on some message correlation +criteria. In the Scala DSL, the `aggregate` method takes a function +`Exchange â Any` to determine the correlation value for the exchange. In +the sample below, message are being aggregated if the first 7 letters in +the message body are the same. + +[[ScalaDSL-EIP-Contentbasedrouter]] +Content based router +++++++++++++++++++++ + +Similar to the link:scala-dsl-eip.html[Filter], the content based router +uses `when` methods with `Exchange â Boolean` function literals and an +optional `otherwise`. The function literal can contain plain Scala code +as well as any of the link:scala-dsl-supported-languages.html[supported +languages]. The example below routes a given message based on the +language of the message body. + +[[ScalaDSL-EIP-Delayer]] +Delayer ++++++++ + +Unlike a throttler, which only slows down messages if the rate exceeds a +treshold, a delayer delays every messages with a fixed amount of time. +An example: to delay every message going from `seda:a` to `mock:a` with +1 second, you write... + +Our second example will delay the entire block (containing `mock:c`) +without doing anything to `mock:b` + +[[ScalaDSL-EIP-Loadbalancer]] +Load balancer ++++++++++++++ + +To distribute the message handling load over multiple endpoints, we add +a `loadbalance` to our route definition. You can optionally specify a +load balancer strategy, like `roundrobin` + +[[ScalaDSL-EIP-Multicast]] +Multicast ++++++++++ + +Multicast allows you to send a message to multiple endpoints at the same +time. In a simple route, you can specify multiple targets in the `to` or +`â` method call: + +[[ScalaDSL-EIP-Recipientlist]] +Recipient list +++++++++++++++ + +You can handle a static recipient list with a multicast or +link:scala-dsl-eip.html[pipeline], but this EIP is usually applied when +you want to dynamically determine the name(s) of the next endpoint(s) to +route to. Use the `recipients()` method with a function literal +(`Exchange => Any`) that returns the endpoint name(s). In the example +below, the target endpoint name can be found in the String message +starting at position 21. + +Because the `recipients()` method just takes a function literal, you can +basically use any kind of valid Scala code to determine the endpoint +name. Have a look at the next example which uses pattern matching to +figure out where to send the message: + +Again, we can also use the same thing in a more block-like syntax. For +this example, we use the Scala DSL's +link:scala-dsl-supported-languages.html[support for JXPath] to determine +the target. + +[[ScalaDSL-EIP-Resequencer]] +Resequencer ++++++++++++ + +Use the `resequence` method to add a resequencer to the RouteBuilder. +The method takes a function (`Exchange â Unit`) that determines the +value to resequence on. In this example, we resequence messages based on +the 'in' message body. + +The same EIP can also be used with a block-like syntax... + +... and with configurable batch size. In this last example, messages +will be send to `mock:e` whenever a batch of 5 messages is available. + +[[ScalaDSL-EIP-Splitter]] +Splitter +++++++++ + +To handle large message in smaller chunks, you can write a Scala +`Exchange â Any*` method and add it to your route with the `splitter` +method. As with many other EIPs, we support a short, in-line version as +well as a more elaborate block based one. + +The above examples also show you how +link:scala-dsl-supported-languages.html[other languages] like XPath can +be within the Scala DSL. + +[[ScalaDSL-EIP-Throttler]] +Throttler ++++++++++ + +The throttler allows you to slow down messages before sending them +along. The `throttle` methods allows you to specify the maximum +throughput rate of message: + +It can also be used in front of block to throttle messages at that +point. In the example below, message are passed on to `mock:b` in a +normal rate (i.e. as fast as possible), but a maximum 3 messages/2 +seconds will arrive at the `mock:c` endpoint. + +[[ScalaDSL-EIP-Messagetransformation]] +Message transformation +^^^^^^^^^^^^^^^^^^^^^^ + +[[ScalaDSL-EIP-Contentenricher]] +Content enricher +++++++++++++++++ + +Using a processor function (`Exchange â Unit`), you can alter/enrich the +message content. This example uses a simple function literal to append +`" says Hello"` to the message content: + +However, you can also define a separate method/function to handle the +transformation and pass that to the `process` method instead. The +example below uses pattern matching to enrich the message content: + +Off course, you can also use any other Camel component (e.g. +link:velocity.html[Velocity]) to enrich the content and add it to a +pipeline http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-getting-started.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-getting-started.adoc b/components/camel-scala/src/main/docs/scala-getting-started.adoc new file mode 100644 index 0000000..21cc41d --- /dev/null +++ b/components/camel-scala/src/main/docs/scala-getting-started.adoc @@ -0,0 +1,59 @@ +[[ScalaDSL-GettingStarted]] +Scala DSL Getting Started +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Just like the link:dsl.html[Java DSL], the Scala DSL has a RouteBuilder +class (`org.apache.camel.scala.dsl.builder.RouteBuilder`) that you can +extend to implement your own routes. This example shows two very simple +routes: + +INFO: From *Camel 2.15* onwards use +org.apache.camel.scala.dsl.builder.ScalaRouteBuilder and pass in the +CamelContext in the constructor, which will be used by the builder. The +old class RouteBuilder is deprecated. + +If you compare this to the Java link:dsl.html[DSL], you notice: + +* there is no configure() method to override +* a route starts directly with a URI instead of `from(uri)` +* `â` is just an alias for `to` + +[[ScalaDSL-GettingStarted-SettingtherouteID]] +Setting the route ID +^^^^^^^^^^^^^^^^^^^^ + +To assign the unique ID to the Scala route, insert the `routeId` method +invocation after the "from" part of the DSL. + +[source,java] +----------------------------------------- + "direct:a" routeId "route-b" to "mock:b" +----------------------------------------- + +[[ScalaDSL-GettingStarted-CreatinganewCamelScalaproject]] +Creating a new Camel Scala project +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Camel offers link:camel-maven-archetypes.html[Maven archetypes] that +allow you to quickly setup a new project. + +To do this, you can execute the following Maven goal from the command +line (using Maven 3.0.3 or better): + +[source,java] +---------------------- +mvn archetype:generate +---------------------- + +This runs Maven interactively - just type `camel` and press <Enter> to +filter for Camel-related archetypes. + + From the list, pick the number for `camel-archetype-scala`, then fill +in the remaining details (such as the Camel version, _et cetera_). + +The generated project has a "readme" file with more instructions, and is +ready to compile and run from Maven using: + +[source,java] +--------------------- +mvn compile exec:java +--------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala-supported-languages.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala-supported-languages.adoc b/components/camel-scala/src/main/docs/scala-supported-languages.adoc new file mode 100644 index 0000000..bbdb72a --- /dev/null +++ b/components/camel-scala/src/main/docs/scala-supported-languages.adoc @@ -0,0 +1,30 @@ +[[ScalaDSL-SupportedLanguages]] +Scala DSL Supported Languages +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Support for link:languages.html[other languages] inside the Scala DSL +routes is delivered through traits. The +`org.apache.camel.scala.dsl.languages` package currently offers traits +to support XPath. To use any given language, you can mix-in the trait +when creating your `RouteBuilder`. + +You can use any of the supported Camel link:languages.html[Languages] in +the link:scala-dsl.html[Scala DSL]; see below for a couple of examples: + +[[ScalaDSL-Supportedlanguages-Using]] +Using link:xpath.html[XPath] +++++++++++++++++++++++++++++ + +With the XPath trait, you have an additional method available on an +`Exchange` to do XPath queries against the message. Just look at this +Splitter example, where the `xpath` method is used in a +`Exchange â Any*` function literal + +[[ScalaDSL-Supportedlanguages-Using.1]] +Using link:jxpath.html[JXPath] +++++++++++++++++++++++++++++++ + +With the `org.apache.camel.scala.dsl.languages.JXPath` trait, you can an +additional `jxpath` method on the `Exchange`. In the Recipient List +example below, JXPath is used for getting the next endpoint's name out +of the message body. http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/camel-scala/src/main/docs/scala.adoc ---------------------------------------------------------------------- diff --git a/components/camel-scala/src/main/docs/scala.adoc b/components/camel-scala/src/main/docs/scala.adoc new file mode 100644 index 0000000..a026489 --- /dev/null +++ b/components/camel-scala/src/main/docs/scala.adoc @@ -0,0 +1,78 @@ +[[ScalaDSL-AbouttheScalaDSL]] +About the Scala DSL +^^^^^^^^^^^^^^^^^^^ + +**Deprecated** + +http://www.scala-lang.org/[Scala] is a general purpose programming +language designed to express common programming patterns in a concise, +elegant, and type-safe way. It integrates very well with the Java +platform. Our Scala DSL implementation is built on top of the existing +Java-based link:dsl.html[DSL], but it adds Scala syntax sugar to make +building routes even more convenient. + +[[ScalaDSL-Documentation]] +Documentation +^^^^^^^^^^^^^ + +* link:scala-dsl-getting-started.html[Scala DSL - Getting Started] gives +you basic information on how to use the Scala DSL. +* link:scala-dsl-eip.html[Scala DSL - EIP] shows you the Scala DSL +syntax for every EIP supported. link:scala-dsl.html[Scala DSL] supports +every EIP from the link:dsl.html[Java DSL]. +* link:scala-dsl-supported-languages.html[Scala DSL - Supported +languages] explains the usage of traits to add support for other +languages (e.g. XPath) + +[[ScalaDSL-References]] +References +^^^^^^^^^^ + +* At http://www.eu.apachecon.com[ApacheCon Europe 2008] there was a Fast +Feather talk that introduced some of the basic Scala language concepts +that are being used for building the Scala DSL. +http://www.anova.be/files/camel-scala.pdf[Here are the presentation +slides] . +* Here's a +http://davsclaus.blogspot.se/2011/12/apache-camel-little-scala-dsl-example.html[blog +post] demonstrating the link:message-filter.html[Message Filter] EIP +within the link:scala-dsl.html[Scala DSL], as well as how to use +link:camel-test.html[Camel's test kit] to test the example. + +[[ScalaDSL-Dependencies]] +Dependencies +^^^^^^^^^^^^ + +To use the Scala DSL in your camel routes you need to add the a +dependency on *camel-scala* which implements the Scala DSL. + +If you use maven you could just add the following to your pom.xml, +substituting the version number for the latest & greatest release (see +the download page for the latest versions). + +[source,xml] +---------------------------------------------------------- +<dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-scala</artifactId> + <version>x.x.x</version> + <!-- use the same version as your Camel core version --> +</dependency> +---------------------------------------------------------- + +Starting from version 2.11 Camel Scala DSL is compiled against Scala +2.10. If you plan to use Scala 2.9 with Camel 2.11, add the following to +your pom.xml file instead. + +[source,xml] +---------------------------------------------------------- +<dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-scala_2.9</artifactId> + <version>2.11.x</version> + <!-- use the same version as your Camel core version --> +</dependency> +---------------------------------------------------------- + +Support for Scala 2.9 is deprecated and will be removed starting from +the Camel 2.12 and 3.0. http://git-wip-us.apache.org/repos/asf/camel/blob/26f1e959/components/readme.adoc ---------------------------------------------------------------------- diff --git a/components/readme.adoc b/components/readme.adoc index a8dbd0a..b68822d 100644 --- a/components/readme.adoc +++ b/components/readme.adoc @@ -390,7 +390,7 @@ Number of Components: 231 in 184 JAR artifacts (14 deprecated) `metrics:metricsType:metricsName` | 2.14 | To collect various metrics directly from Camel routes using the DropWizard metrics library. | link:camel-milo/src/main/docs/milo-client-component.adoc[Milo based OPC UA Client] (camel-milo) + -`milo-client:tcp://user:password@host:port/path/to/service` | | Camel OPC UA support +`milo-client:endpointUri` | 2.19 | Camel OPC UA support | link:camel-mina/src/main/docs/mina-component.adoc[Mina] (camel-mina) + `mina:protocol:host:port` | 1.0 | *deprecated* Socket level networking using TCP or UDP with the Apache Mina 1.x library. @@ -453,7 +453,7 @@ Number of Components: 231 in 184 JAR artifacts (14 deprecated) `olingo4:apiName/methodName` | 2.19 | Communicates with OData 4.0 services using Apache Olingo OData API. | link:camel-milo/src/main/docs/milo-server-component.adoc[OPC UA Server] (camel-milo) + -`milo-server:itemId` | | OPC UA Server based endpoint +`milo-server:itemId` | 2.19 | OPC UA Server based endpoint | link:camel-openshift/src/main/docs/openshift-component.adoc[OpenShift] (camel-openshift) + `openshift:clientId` | 2.14 | *deprecated* To manage your Openshift 2.x applications.