You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/01/28 18:58:51 UTC

[1/5] camel git commit: Reformat Camel Metrics CDI example README

Repository: camel
Updated Branches:
  refs/heads/master 461ecd52f -> 8300779a6


Reformat Camel Metrics CDI example README


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f52a464a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f52a464a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f52a464a

Branch: refs/heads/master
Commit: f52a464ac362099d6766f5b583568e4f8d35e74f
Parents: 3cc3172
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Thu Jan 28 15:23:59 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 28 18:56:19 2016 +0100

----------------------------------------------------------------------
 examples/camel-example-cdi-metrics/README.md | 58 +++++++++++++----------
 1 file changed, 34 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f52a464a/examples/camel-example-cdi-metrics/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/README.md b/examples/camel-example-cdi-metrics/README.md
index 8802c35..ee5dd43 100644
--- a/examples/camel-example-cdi-metrics/README.md
+++ b/examples/camel-example-cdi-metrics/README.md
@@ -4,11 +4,21 @@
 
 This example illustrates the integration between Camel, Dropwizard Metrics and CDI.
 
-The example emulates an unreliable service that processes a continuous stream of events. The unreliable service fails randomly and metrics get collected to report the number of generated events as well as the total number of attempted, redelivered, failed and successful calls to the service. A SLF4J reporter is configured so that these metrics details get logged every 10 seconds in the console.
-
-The example is implemented in Java with CDI dependency injection. It uses JBoss Weld as the minimal CDI container to run the application, though you can run the application in any CDI compliant container.
-
-The `camel-core` and `camel-metrics` components are used in this example. Besides, the Metrics CDI extension is used so that metrics can be injected and custom metrics registered via CDI. For instance, a ratio gauge is registered to monitor the success rate, that is the ratio of success calls on the number of generated events.
+The example emulates an unreliable service that processes a continuous stream of events.
+The unreliable service fails randomly and metrics get collected to report
+the number of generated events as well as the total number of attempted, redelivered,
+failed and successful calls to the service. A SLF4J reporter is configured so that
+these metrics details get logged every 10 seconds in the console.
+
+The example is implemented in Java with CDI dependency injection. It uses JBoss Weld
+as the minimal CDI container to run the application, though you can run the application
+in any CDI compliant container.
+
+The `camel-core` and `camel-metrics` components are used in this example.
+Besides, the Metrics CDI extension is used so that metrics can be injected
+and custom metrics registered via CDI. For instance, a ratio gauge is registered
+to monitor the success rate, that is the ratio of success calls on the number
+of generated events.
 
 ### Build
 
@@ -24,29 +34,29 @@ You can run this example using:
 
 When the Camel application runs, you should see the calls to the 'unreliable-service' being logged to the console, e.g.:
 ```
-2016-01-18 15:19:04,390 [ timer://stream] INFO  unreliable-service             - Processing event #8...
-2016-01-18 15:19:06,399 [ timer://stream] ERROR unreliable-service             - Failed processing event #8
-2016-01-18 15:19:06,400 [ timer://stream] INFO  unreliable-service             - Processing event #9...
-2016-01-18 15:19:08,410 [ timer://stream] ERROR unreliable-service             - Failed processing event #9
-2016-01-18 15:19:08,411 [ timer://stream] INFO  unreliable-service             - Processing event #10...
-2016-01-18 15:19:08,412 [ timer://stream] INFO  unreliable-service             - Successfully processed event #10
-2016-01-18 15:19:09,415 [ timer://stream] INFO  unreliable-service             - Processing event #11...
-2016-01-18 15:19:09,416 [ timer://stream] INFO  unreliable-service             - Successfully processed event #11
-2016-01-18 15:19:10,420 [ timer://stream] INFO  unreliable-service             - Processing event #12...
-2016-01-18 15:19:10,421 [ timer://stream] INFO  unreliable-service             - Successfully processed event #12
-2016-01-18 15:19:11,424 [ timer://stream] INFO  unreliable-service             - Processing event #13...
-2016-01-18 15:19:12,428 [ timer://stream] WARN  unreliable-service             - Processed event #13 after 1 retries
-2016-01-18 15:19:12,430 [ timer://stream] INFO  unreliable-service             - Successfully processed event #13
+2016-01-18 15:19:04,390 [ timer://stream] INFO  unreliable-service - Processing event #8...
+2016-01-18 15:19:06,399 [ timer://stream] ERROR unreliable-service - Failed processing event #8
+2016-01-18 15:19:06,400 [ timer://stream] INFO  unreliable-service - Processing event #9...
+2016-01-18 15:19:08,410 [ timer://stream] ERROR unreliable-service - Failed processing event #9
+2016-01-18 15:19:08,411 [ timer://stream] INFO  unreliable-service - Processing event #10...
+2016-01-18 15:19:08,412 [ timer://stream] INFO  unreliable-service - Successfully processed event #10
+2016-01-18 15:19:09,415 [ timer://stream] INFO  unreliable-service - Processing event #11...
+2016-01-18 15:19:09,416 [ timer://stream] INFO  unreliable-service - Successfully processed event #11
+2016-01-18 15:19:10,420 [ timer://stream] INFO  unreliable-service - Processing event #12...
+2016-01-18 15:19:10,421 [ timer://stream] INFO  unreliable-service - Successfully processed event #12
+2016-01-18 15:19:11,424 [ timer://stream] INFO  unreliable-service - Processing event #13...
+2016-01-18 15:19:12,428 [ timer://stream] WARN  unreliable-service - Processed event #13 after 1 retries
+2016-01-18 15:19:12,430 [ timer://stream] INFO  unreliable-service - Successfully processed event #13
 ```
 
 And every 10 seconds, the metrics report, e.g.:
 ```
-2016-01-18 15:19:14,360 [rter-1-thread-1] INFO  metrics                        - type=GAUGE, name=success-ratio, value=0.9314661799835947
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=attempt, count=26, mean_rate=1.3682531895692165, m1=1.245416192969619, m5=1.209807850571521, m15=1.2033118138834105, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=error, count=2, mean_rate=0.25121358141009453, m1=0.4, m5=0.4, m15=0.4, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=generated, count=15, mean_rate=0.7210025396112787, m1=0.6455184225121126, m5=0.6098087536676114, m15=0.6033118478925024, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=redelivery, count=11, mean_rate=0.6872842357052532, m1=0.9385926899562456, m5=0.9868864401928024, m15=0.995580155717569, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=success, count=12, mean_rate=0.5768131773739456, m1=0.6012785791263936, m5=0.6000546385677541, m15=0.6000061386568257, rate_unit=events/second
+2016-01-18 15:19:14,360 [rter-1-thread-1] INFO  metrics - type=GAUGE, name=success-ratio, value=0.9314661799835947
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=attempt, count=26, mean_rate=1.3682531895692165, m1=1.245416192969619, m5=1.209807850571521, m15=1.2033118138834105, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=error, count=2, mean_rate=0.25121358141009453, m1=0.4, m5=0.4, m15=0.4, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=generated, count=15, mean_rate=0.7210025396112787, m1=0.6455184225121126, m5=0.6098087536676114, m15=0.6033118478925024, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=redelivery, count=11, mean_rate=0.6872842357052532, m1=0.9385926899562456, m5=0.9868864401928024, m15=0.995580155717569, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=success, count=12, mean_rate=0.5768131773739456, m1=0.6012785791263936, m5=0.6000546385677541, m15=0.6000061386568257, rate_unit=events/second
 ```
 
 The Camel application can be stopped pressing `ctrl + c` in the shell.


[3/5] camel git commit: Camel CDI DeltaSpike properties example

Posted by da...@apache.org.
Camel CDI DeltaSpike properties example


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/83d0d1b0
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/83d0d1b0
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/83d0d1b0

Branch: refs/heads/master
Commit: 83d0d1b01db6a6df7953a2a14342367d0775a80c
Parents: 461ecd5
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Thu Jan 28 15:12:20 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 28 18:56:19 2016 +0100

----------------------------------------------------------------------
 examples/README.md                              |   1 +
 examples/camel-example-cdi-properties/README.md |  53 +++++++
 examples/camel-example-cdi-properties/pom.xml   | 140 +++++++++++++++++++
 .../example/cdi/properties/Application.java     |  76 ++++++++++
 .../META-INF/apache-deltaspike.properties       |   2 +
 .../src/main/resources/META-INF/beans.xml       |   8 ++
 .../src/main/resources/log4j.properties         |  27 ++++
 .../example/cdi/properties/ApplicationTest.java |  72 ++++++++++
 examples/pom.xml                                |   1 +
 9 files changed, 380 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/README.md
----------------------------------------------------------------------
diff --git a/examples/README.md b/examples/README.md
index 80dca64..9eac90e 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -50,6 +50,7 @@ All examples have been sort by type/category
 
 * [camel-example-cdi](camel-example-cdi/README.md)
 * [camel-example-metrics-cdi](camel-example-metrics-cdi/README.md)
+* [camel-example-cdi-properties](camel-example-cdi-properties/README.md)
 * [camel-example-widget-gadget-java](camel-example-widget-gadget-cdi/README.md)
 
 ##### OSGi

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/README.md b/examples/camel-example-cdi-properties/README.md
new file mode 100644
index 0000000..fe7b498
--- /dev/null
+++ b/examples/camel-example-cdi-properties/README.md
@@ -0,0 +1,53 @@
+# Properties Example - CDI
+
+### Introduction
+
+This example illustrates the integration between Camel, DeltaSpike and CDI
+for configuration properties.
+
+The example uses DeltaSpike to source configuration properties and creates
+a `PropertiesComponent` bean that Camel uses to resolve property placeholders
+in endpoint URIs. Besides, the application uses DeltaSpike's `@ConfigProperty`
+qualifier to directly inject configuration property values. More information
+can be found in [DeltaSpike configuration mechanism][] documentation.
+
+The example is implemented in Java with CDI dependency injection.
+It uses JBoss Weld as the minimal CDI container to run the application,
+though you can run the application in any CDI compliant container.
+
+[DeltaSpike configuration mechanism]: http://deltaspike.apache.org/documentation/configuration.html
+
+### Build
+
+You will need to build this example first:
+
+    mvn install
+
+### Run
+
+You can run this example using:
+
+    mvn compile camel:run
+
+When the Camel application runs, you should see the following messages
+being logged to the console, e.g.:
+```
+2016-01-28 15:02:46,223 [cdi.Main.main()] INFO  CdiCamelExtension   - Camel CDI is starting Camel context [hello]
+2016-01-28 15:02:46,223 [cdi.Main.main()] INFO  DefaultCamelContext - Apache Camel 2.17-SNAPSHOT (CamelContext: hello) is starting
+...
+2016-01-28 15:02:46,460 [cdi.Main.main()] INFO  DefaultCamelContext - Route: route1 started and consuming from: Endpoint[direct://hello]
+2016-01-28 15:02:46,461 [cdi.Main.main()] INFO  DefaultCamelContext - Total 1 routes, of which 1 is started.
+2016-01-28 15:02:46,461 [cdi.Main.main()] INFO  DefaultCamelContext - Apache Camel 2.17-SNAPSHOT (CamelContext: hello) started in 0.238 seconds
+2016-01-28 15:02:46,661 [cdi.Main.main()] INFO  route1              - Hello from CamelContext (hello)
+```
+
+The Camel application can be stopped pressing `ctrl + c` in the shell.
+
+### Forum, Help, etc
+
+If you hit an problems please let us know on the Camel Forums
+	<http://camel.apache.org/discussion-forums.html>
+
+Please help us make Apache Camel better - we appreciate any feedback you may have. Enjoy!
+
+The Camel riders!

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/pom.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/pom.xml b/examples/camel-example-cdi-properties/pom.xml
new file mode 100755
index 0000000..c80c179
--- /dev/null
+++ b/examples/camel-example-cdi-properties/pom.xml
@@ -0,0 +1,140 @@
+<?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/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>examples</artifactId>
+    <version>2.17-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-example-cdi-properties</artifactId>
+  <name>Camel :: Example :: CDI :: Properties</name>
+  <description>DeltaSpike configuration properties CDI example</description>
+  <packaging>jar</packaging>
+
+  <dependencies>
+
+    <!-- Camel -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-cdi</artifactId>
+    </dependency>
+
+    <!-- CDI API -->
+    <dependency>
+      <groupId>javax.enterprise</groupId>
+      <artifactId>cdi-api</artifactId>
+      <version>${cdi-api-1.2-version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <!-- DeltaSpike -->
+    <dependency>
+      <groupId>org.apache.deltaspike.core</groupId>
+      <artifactId>deltaspike-core-api</artifactId>
+      <version>${deltaspike-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.core</groupId>
+      <artifactId>deltaspike-core-impl</artifactId>
+      <version>${deltaspike-version}</version>
+    </dependency>
+
+    <!-- need to use a CDI container such as JBoss Weld -->
+    <!-- lets use weld for CDI -->
+    <dependency>
+      <groupId>org.jboss.weld.se</groupId>
+      <artifactId>weld-se</artifactId>
+      <version>${weld2-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.weld</groupId>
+      <artifactId>weld-core</artifactId>
+      <version>${weld2-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.cdictrl</groupId>
+      <artifactId>deltaspike-cdictrl-weld</artifactId>
+      <version>${deltaspike-version}</version>
+      <scope>runtime</scope>
+    </dependency>
+
+    <!-- logging -->
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+    </dependency>
+
+    <!-- test -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>java-hamcrest</artifactId>
+      <version>${hamcrest-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>${arquillian-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
+      <artifactId>shrinkwrap-descriptors-depchain</artifactId>
+      <version>${shrinkwrap-descriptors-version}</version>
+      <type>pom</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-weld-se-embedded-1.1</artifactId>
+      <version>${arquillian-weld-se-embedded-version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-maven-plugin</artifactId>
+        <version>${project.version}</version>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java b/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java
new file mode 100644
index 0000000..8113bc7
--- /dev/null
+++ b/examples/camel-example-cdi-properties/src/main/java/org/apache/camel/example/cdi/properties/Application.java
@@ -0,0 +1,76 @@
+/**
+ * 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.apache.camel.example.cdi.properties;
+
+import java.util.Properties;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.ContextName;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.properties.DefaultPropertiesParser;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.component.properties.PropertiesParser;
+import org.apache.camel.management.event.CamelContextStartedEvent;
+import org.apache.deltaspike.core.api.config.ConfigProperty;
+import org.apache.deltaspike.core.api.config.ConfigResolver;
+
+public class Application {
+
+    @ContextName("hello")
+    static class HelloRoute extends RouteBuilder {
+
+        @Override
+        public void configure() {
+            // Property placeholders in endpoint URIs are resolved
+            // based on configuration properties
+            from("{{destination}}").log("${body} from CamelContext (${camelContext.name})");
+        }
+    }
+
+    void hello(@Observes CamelContextStartedEvent event,
+               // Configuration properties can be injected with @ConfigProperty
+               @ConfigProperty(name = "message") String message,
+               // Property placeholders in @Uri qualifier are also resolved
+               @Uri("{{destination}}") ProducerTemplate producer) {
+        producer.sendBody(message);
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    // "properties" component bean that Camel uses to lookup properties
+    PropertiesComponent properties(PropertiesParser parser) {
+        PropertiesComponent component = new PropertiesComponent();
+        // Use DeltaSpike as configuration source for Camel CDI
+        component.setPropertiesParser(parser);
+        return component;
+    }
+
+    // PropertiesParser bean that uses DeltaSpike to resolve properties
+    static class DeltaSpikeParser extends DefaultPropertiesParser {
+
+        @Override
+        public String parseProperty(String key, String value, Properties properties) {
+            return ConfigResolver.getPropertyValue(key);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/src/main/resources/META-INF/apache-deltaspike.properties
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/src/main/resources/META-INF/apache-deltaspike.properties b/examples/camel-example-cdi-properties/src/main/resources/META-INF/apache-deltaspike.properties
new file mode 100644
index 0000000..358e7d4
--- /dev/null
+++ b/examples/camel-example-cdi-properties/src/main/resources/META-INF/apache-deltaspike.properties
@@ -0,0 +1,2 @@
+destination=direct:hello
+message=Hello
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/src/main/resources/META-INF/beans.xml b/examples/camel-example-cdi-properties/src/main/resources/META-INF/beans.xml
new file mode 100755
index 0000000..e81becb
--- /dev/null
+++ b/examples/camel-example-cdi-properties/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
+                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
+       version="1.1" bean-discovery-mode="all">
+       
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/src/main/resources/log4j.properties b/examples/camel-example-cdi-properties/src/main/resources/log4j.properties
new file mode 100755
index 0000000..f5aae04
--- /dev/null
+++ b/examples/camel-example-cdi-properties/src/main/resources/log4j.properties
@@ -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.
+## ------------------------------------------------------------------------
+
+# default properties to initialise log4j
+log4j.rootLogger=INFO, console
+
+# settings for specific packages
+#log4j.logger.org.apache.camel.cdi=DEBUG
+
+# Console appender
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/ApplicationTest.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/ApplicationTest.java b/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/ApplicationTest.java
new file mode 100644
index 0000000..c092a43
--- /dev/null
+++ b/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/ApplicationTest.java
@@ -0,0 +1,72 @@
+/**
+ * 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.apache.camel.example.cdi.properties;
+
+import javax.enterprise.event.Observes;
+
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.management.event.CamelContextStartingEvent;
+import org.apache.camel.model.ModelCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+
+@RunWith(Arquillian.class)
+public class ApplicationTest {
+
+    @Deployment
+    public static Archive deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // DeltaSpike
+            .addPackages(true, "org.apache.deltaspike.core.impl")
+            // Test classes
+            .addPackage(Application.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    static void advice(@Observes CamelContextStartingEvent event, ModelCamelContext context) throws Exception {
+        // Add a mock endpoint to the end of the route
+        context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
+            @Override
+            public void configure() {
+                weaveAddLast().to("mock:outbound");
+            }
+        });
+    }
+
+    @Test
+    public void testMessage(@Uri("mock:outbound") MockEndpoint outbound) {
+        assertThat("Exchange count is incorrect!", outbound.getExchanges(), hasSize(1));
+        assertThat("Exchange body is incorrect!", outbound.getExchanges().get(0).getIn().getBody(String.class), is(equalTo("Hello")));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/83d0d1b0/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index e9ce100..6669ec3 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -37,6 +37,7 @@
     <module>camel-example-box-osgi</module>
     <module>camel-example-cafe</module>
     <module>camel-example-cdi</module>
+    <module>camel-example-cdi-properties</module>
     <module>camel-example-cxf</module>
     <module>camel-example-cxf-blueprint</module>
     <module>camel-example-cxf-osgi</module>


[5/5] camel git commit: Refactor and document the Metrics CDI example

Posted by da...@apache.org.
Refactor and document the Metrics CDI example


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8300779a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8300779a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8300779a

Branch: refs/heads/master
Commit: 8300779a6ff962abc4f3ebda82375a2ca943963c
Parents: 15af9f0
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Thu Jan 28 17:18:01 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 28 18:56:20 2016 +0100

----------------------------------------------------------------------
 .../camel/example/cdi/metrics/Application.java  | 134 +++++++++++++++++++
 .../example/cdi/metrics/MetricsCdiConfig.java   |  63 ---------
 .../camel/example/cdi/metrics/MetricsRoute.java |  52 -------
 .../example/cdi/metrics/SuccessRatioGauge.java  |  43 ------
 .../example/cdi/metrics/ApplicationTest.java    |  90 +++++++++++++
 .../example/cdi/metrics/MetricsSampleTest.java  |  90 -------------
 6 files changed, 224 insertions(+), 248 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8300779a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
new file mode 100644
index 0000000..423f9c7
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
@@ -0,0 +1,134 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import java.util.concurrent.TimeUnit;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Disposes;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.RatioGauge;
+import com.codahale.metrics.Slf4jReporter;
+import com.codahale.metrics.annotation.Metric;
+import io.astefanutti.metrics.cdi.MetricsConfiguration;
+import org.apache.camel.Exchange;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.ContextName;
+import org.apache.camel.component.metrics.MetricsComponent;
+import org.apache.camel.component.metrics.MetricsConstants;
+import org.apache.camel.management.event.CamelContextStartedEvent;
+
+/**
+ * This example registers the following meters into the Metrics registry:
+ * <ul>
+ *     <li>{@code attempt}</code>: meters the number of calls
+ *     made to the service to process incoming events</li>
+ *     <li>{@code error}</code>: meters the number of errors
+ *     corresponding to the number of events that haven't been processed</li>
+ *     <li>{@code generated}</code>: meters the number of events to be processed</li>
+ *     <li>{@code redelivery}</code>: meters the number of retries
+ *     made to process the events</li>
+ *     <li>{@code success}</code>: meters the number of events successfully processed</li>
+ * </ul>
+ * The invariant being: {@code attempt = redelivery - success - error}.
+ * <p> In addition, a ratio gauge {@code success-ratio = success / generated} is registered.
+ *
+ */
+class Application {
+
+    @ContextName("camel-example-metrics-cdi")
+    static class MetricsRoute extends RouteBuilder {
+
+        @Override
+        public void configure() {
+            onException()
+                .handled(true)
+                .maximumRedeliveries(2)
+                .logStackTrace(false)
+                .logExhausted(false)
+                .log(LoggingLevel.ERROR, "Failed processing ${body}")
+                .to("metrics:meter:redelivery?mark=2")
+                // The 'error' meter
+                .to("metrics:meter:error");
+
+            from("timer:stream?period=1000")
+                .routeId("unreliable-service")
+                .setBody(header(Exchange.TIMER_COUNTER).prepend("event #"))
+                .log("Processing ${body}...")
+                // The 'generated' meter
+                .to("metrics:meter:generated")
+                .bean(UnreliableService.class)
+                .filter(header(Exchange.REDELIVERED))
+                    .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries")
+                    .setHeader(MetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER))
+                    // The 'redelivery' meter
+                    .to("metrics:meter:redelivery")
+                .end()
+                .log("Successfully processed ${body}")
+                // The 'success' meter
+                .to("metrics:meter:success");
+        }
+    }
+
+    @Produces
+    @Singleton
+    @Named(MetricsComponent.METRIC_REGISTRY_NAME)
+    // TODO: remove when Camel Metrics component looks up for the Metrics registry by type only
+    MetricRegistry registry = new MetricRegistry();
+
+    @Produces
+    @Metric(name = "success-ratio")
+        // Register a custom gauge that's the ratio of the 'success' meter on the 'generated' meter
+        // TODO: use a lambda expression and parameter names when Java 8 is a pre-requisite
+    Gauge<Double> successRatio(@Metric(name = "success") final Meter success,
+                               @Metric(name = "generated") final Meter generated) {
+        return new RatioGauge() {
+            @Override
+            protected Ratio getRatio() {
+                return Ratio.of(success.getOneMinuteRate(), generated.getOneMinuteRate());
+            }
+        };
+    }
+
+    @Produces
+    @Singleton
+    Slf4jReporter reporter(MetricRegistry registry) {
+        return Slf4jReporter.forRegistry(registry)
+            .convertRatesTo(TimeUnit.SECONDS)
+            .convertDurationsTo(TimeUnit.MILLISECONDS)
+            .build();
+    }
+
+    void onStart(@Observes CamelContextStartedEvent event, Slf4jReporter reporter) {
+        reporter.start(10L, TimeUnit.SECONDS);
+    }
+
+    void onStop(@Disposes Slf4jReporter reporter) {
+        reporter.stop();
+    }
+
+    void configure(@Observes MetricsConfiguration config) {
+        // Force Metrics CDI to use absolute names
+        config.useAbsoluteName(true);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/8300779a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java
deleted file mode 100644
index 171838f..0000000
--- a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.cdi.metrics;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.Slf4jReporter;
-import io.astefanutti.metrics.cdi.MetricsConfiguration;
-import org.apache.camel.component.metrics.MetricsComponent;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStoppedEvent;
-
-@ApplicationScoped
-class MetricsCdiConfig {
-
-    @Produces
-    @ApplicationScoped
-    @Named(MetricsComponent.METRIC_REGISTRY_NAME)
-    // TODO: remove when Camel Metrics component looks up for the Metrics registry by type only
-    private MetricRegistry registry = new MetricRegistry();
-
-    private final Slf4jReporter reporter;
-
-    @Inject
-    MetricsCdiConfig(MetricRegistry registry) {
-        reporter = Slf4jReporter.forRegistry(registry)
-            .convertRatesTo(TimeUnit.SECONDS)
-            .convertDurationsTo(TimeUnit.MILLISECONDS)
-            .build();
-    }
-
-    private void onStart(@Observes CamelContextStartedEvent event) {
-        reporter.start(10L, TimeUnit.SECONDS);
-    }
-
-    private void onStop(@Observes CamelContextStoppedEvent event) {
-        reporter.stop();
-    }
-
-    private void configure(@Observes MetricsConfiguration config) {
-        config.useAbsoluteName(true);
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/8300779a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java
deleted file mode 100644
index b4e8076..0000000
--- a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.cdi.metrics;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.LoggingLevel;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.ContextName;
-import org.apache.camel.component.metrics.MetricsConstants;
-
-@ContextName("camel-example-metrics-cdi")
-class MetricsRoute extends RouteBuilder {
-
-    @Override
-    public void configure() {
-        onException()
-            .handled(true)
-            .maximumRedeliveries(2)
-            .logStackTrace(false)
-            .logExhausted(false)
-            .log(LoggingLevel.ERROR, "Failed processing ${body}")
-            .to("metrics:meter:redelivery?mark=2")
-            .to("metrics:meter:error");
-
-        from("timer:stream?period=1000").routeId("unreliable-service")
-            .setBody(header(Exchange.TIMER_COUNTER).prepend("event #"))
-            .log("Processing ${body}...")
-            .to("metrics:meter:generated")
-            .bean(UnreliableService.class)
-            .filter(header(Exchange.REDELIVERED))
-                .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries")
-                .setHeader(MetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER))
-                .to("metrics:meter:redelivery")
-            .end()
-            .log("Successfully processed ${body}")
-            .to("metrics:meter:success");
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/8300779a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java
deleted file mode 100644
index 86911f5..0000000
--- a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.cdi.metrics;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-
-import com.codahale.metrics.Gauge;
-import com.codahale.metrics.Meter;
-import com.codahale.metrics.RatioGauge;
-import com.codahale.metrics.annotation.Metric;
-
-class SuccessRatioGauge {
-
-    @Inject
-    private Meter generated;
-
-    @Inject
-    private Meter success;
-
-    @Produces
-    @Metric(name = "success-ratio")
-    private Gauge<Double> successRatio = new RatioGauge() {
-        @Override
-        protected Ratio getRatio() {
-            return Ratio.of(success.getOneMinuteRate(), generated.getOneMinuteRate());
-        }
-    };
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/8300779a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/ApplicationTest.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/ApplicationTest.java b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/ApplicationTest.java
new file mode 100644
index 0000000..623c519
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/ApplicationTest.java
@@ -0,0 +1,90 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import javax.inject.Inject;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.annotation.Metric;
+import io.astefanutti.metrics.cdi.MetricsExtension;
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class ApplicationTest {
+
+    @Inject
+    private Meter generated;
+    @Inject
+    private Meter attempt;
+    @Inject
+    private Meter success;
+    @Inject
+    private Meter redelivery;
+    @Inject
+    private Meter error;
+
+    @Inject
+    @Metric(name = "success-ratio")
+    private Gauge<Double> ratio;
+
+    @Inject
+    private CamelContext context;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Metrics CDI
+            .addPackage(MetricsExtension.class.getPackage())
+            // Test classes
+            .addPackage(Application.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void testContextName() {
+        assertThat("Context name is incorrect!", context.getName(), is(equalTo("camel-example-metrics-cdi")));
+    }
+
+    @Test
+    public void testMetricsValues() throws Exception {
+        // Wait a while so that the timer can kick in
+        Thread.sleep(5000);
+
+        // And stop the Camel context so that inflight exchanges get completed
+        context.stop();
+
+        assertThat("Meter counts are not consistent!", attempt.getCount() - redelivery.getCount() - success.getCount() - error.getCount(), is(equalTo(0L)));
+
+        assertThat("Success rate gauge value is incorrect!", ratio.getValue(), is(equalTo(success.getOneMinuteRate() / generated.getOneMinuteRate())));
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/8300779a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java
deleted file mode 100644
index ff98b40..0000000
--- a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.cdi.metrics;
-
-import javax.inject.Inject;
-import com.codahale.metrics.Gauge;
-import com.codahale.metrics.Meter;
-import com.codahale.metrics.annotation.Metric;
-import io.astefanutti.metrics.cdi.MetricsExtension;
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class MetricsSampleTest {
-
-    @Inject
-    private Meter generated;
-    @Inject
-    private Meter attempt;
-    @Inject
-    private Meter success;
-    @Inject
-    private Meter redelivery;
-    @Inject
-    private Meter error;
-
-    @Inject
-    @Metric(name = "success-ratio")
-    private Gauge<Double> ratio;
-
-    @Inject
-    private CamelContext context;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Metrics CDI
-            .addPackage(MetricsExtension.class.getPackage())
-            // Test classes
-            .addPackage(MetricsSampleTest.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void testContextName() {
-        assertThat("Context name is incorrect!", context.getName(), is(equalTo("camel-example-metrics-cdi")));
-    }
-
-    @Test
-    public void testMetricsValues() throws Exception {
-        // Wait a while so that the timer can kick in
-        Thread.sleep(5000);
-
-        // And stop the Camel context so that inflight exchanges get completed
-        context.stop();
-
-        assertThat("Meter counts are not consistent!", attempt.getCount() - redelivery.getCount() - success.getCount() - error.getCount(), is(equalTo(0L)));
-
-        assertThat("Success rate gauge value is incorrect!", ratio.getValue(), is(equalTo(success.getOneMinuteRate() / generated.getOneMinuteRate())));
-    }
-}


[2/5] camel git commit: Rename Camel Metrics CDI example

Posted by da...@apache.org.
Rename Camel Metrics CDI example


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3cc3172a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3cc3172a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3cc3172a

Branch: refs/heads/master
Commit: 3cc3172ac6ea3135412c3e7ce9b1d790c9be9110
Parents: 83d0d1b
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Thu Jan 28 15:21:48 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 28 18:56:19 2016 +0100

----------------------------------------------------------------------
 examples/README.md                              |   2 +-
 examples/camel-example-cdi-metrics/README.md    |  61 ++++++
 examples/camel-example-cdi-metrics/pom.xml      | 145 +++++++++++++
 .../example/cdi/metrics/MetricsCdiConfig.java   |  63 ++++++
 .../camel/example/cdi/metrics/MetricsRoute.java |  52 +++++
 .../example/cdi/metrics/SuccessRatioGauge.java  |  43 ++++
 .../example/cdi/metrics/UnreliableService.java  |  40 ++++
 .../src/main/resources/META-INF/LICENSE.txt     | 203 +++++++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt      |  11 +
 .../src/main/resources/META-INF/beans.xml       |  18 ++
 .../src/main/resources/log4j.properties         |  27 +++
 .../example/cdi/metrics/MetricsSampleTest.java  |  90 ++++++++
 examples/camel-example-metrics-cdi/README.md    |  61 ------
 examples/camel-example-metrics-cdi/pom.xml      | 145 -------------
 .../example/metrics/cdi/MetricsCdiConfig.java   |  63 ------
 .../camel/example/metrics/cdi/MetricsRoute.java |  52 -----
 .../example/metrics/cdi/SuccessRatioGauge.java  |  43 ----
 .../example/metrics/cdi/UnreliableService.java  |  40 ----
 .../src/main/resources/META-INF/LICENSE.txt     | 203 -------------------
 .../src/main/resources/META-INF/NOTICE.txt      |  11 -
 .../src/main/resources/META-INF/beans.xml       |  18 --
 .../src/main/resources/log4j.properties         |  27 ---
 .../example/metrics/cdi/MetricsSampleTest.java  |  90 --------
 examples/pom.xml                                |   2 +-
 24 files changed, 755 insertions(+), 755 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/README.md
----------------------------------------------------------------------
diff --git a/examples/README.md b/examples/README.md
index 9eac90e..35a4b30 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -49,7 +49,7 @@ All examples have been sort by type/category
 ##### CDI
 
 * [camel-example-cdi](camel-example-cdi/README.md)
-* [camel-example-metrics-cdi](camel-example-metrics-cdi/README.md)
+* [camel-example-cdi-metrics](camel-example-cdi-metrics/README.md)
 * [camel-example-cdi-properties](camel-example-cdi-properties/README.md)
 * [camel-example-widget-gadget-java](camel-example-widget-gadget-cdi/README.md)
 

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/README.md b/examples/camel-example-cdi-metrics/README.md
new file mode 100644
index 0000000..8802c35
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/README.md
@@ -0,0 +1,61 @@
+# Metrics Example - CDI
+
+### Introduction
+
+This example illustrates the integration between Camel, Dropwizard Metrics and CDI.
+
+The example emulates an unreliable service that processes a continuous stream of events. The unreliable service fails randomly and metrics get collected to report the number of generated events as well as the total number of attempted, redelivered, failed and successful calls to the service. A SLF4J reporter is configured so that these metrics details get logged every 10 seconds in the console.
+
+The example is implemented in Java with CDI dependency injection. It uses JBoss Weld as the minimal CDI container to run the application, though you can run the application in any CDI compliant container.
+
+The `camel-core` and `camel-metrics` components are used in this example. Besides, the Metrics CDI extension is used so that metrics can be injected and custom metrics registered via CDI. For instance, a ratio gauge is registered to monitor the success rate, that is the ratio of success calls on the number of generated events.
+
+### Build
+
+You will need to build this example first:
+
+    mvn install
+
+### Run
+
+You can run this example using:
+
+    mvn compile camel:run
+
+When the Camel application runs, you should see the calls to the 'unreliable-service' being logged to the console, e.g.:
+```
+2016-01-18 15:19:04,390 [ timer://stream] INFO  unreliable-service             - Processing event #8...
+2016-01-18 15:19:06,399 [ timer://stream] ERROR unreliable-service             - Failed processing event #8
+2016-01-18 15:19:06,400 [ timer://stream] INFO  unreliable-service             - Processing event #9...
+2016-01-18 15:19:08,410 [ timer://stream] ERROR unreliable-service             - Failed processing event #9
+2016-01-18 15:19:08,411 [ timer://stream] INFO  unreliable-service             - Processing event #10...
+2016-01-18 15:19:08,412 [ timer://stream] INFO  unreliable-service             - Successfully processed event #10
+2016-01-18 15:19:09,415 [ timer://stream] INFO  unreliable-service             - Processing event #11...
+2016-01-18 15:19:09,416 [ timer://stream] INFO  unreliable-service             - Successfully processed event #11
+2016-01-18 15:19:10,420 [ timer://stream] INFO  unreliable-service             - Processing event #12...
+2016-01-18 15:19:10,421 [ timer://stream] INFO  unreliable-service             - Successfully processed event #12
+2016-01-18 15:19:11,424 [ timer://stream] INFO  unreliable-service             - Processing event #13...
+2016-01-18 15:19:12,428 [ timer://stream] WARN  unreliable-service             - Processed event #13 after 1 retries
+2016-01-18 15:19:12,430 [ timer://stream] INFO  unreliable-service             - Successfully processed event #13
+```
+
+And every 10 seconds, the metrics report, e.g.:
+```
+2016-01-18 15:19:14,360 [rter-1-thread-1] INFO  metrics                        - type=GAUGE, name=success-ratio, value=0.9314661799835947
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=attempt, count=26, mean_rate=1.3682531895692165, m1=1.245416192969619, m5=1.209807850571521, m15=1.2033118138834105, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=error, count=2, mean_rate=0.25121358141009453, m1=0.4, m5=0.4, m15=0.4, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=generated, count=15, mean_rate=0.7210025396112787, m1=0.6455184225121126, m5=0.6098087536676114, m15=0.6033118478925024, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=redelivery, count=11, mean_rate=0.6872842357052532, m1=0.9385926899562456, m5=0.9868864401928024, m15=0.995580155717569, rate_unit=events/second
+2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=success, count=12, mean_rate=0.5768131773739456, m1=0.6012785791263936, m5=0.6000546385677541, m15=0.6000061386568257, rate_unit=events/second
+```
+
+The Camel application can be stopped pressing `ctrl + c` in the shell.
+
+### Forum, Help, etc
+
+If you hit an problems please let us know on the Camel Forums
+	<http://camel.apache.org/discussion-forums.html>
+
+Please help us make Apache Camel better - we appreciate any feedback you may have. Enjoy!
+
+The Camel riders!

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/pom.xml b/examples/camel-example-cdi-metrics/pom.xml
new file mode 100755
index 0000000..9044e38
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/pom.xml
@@ -0,0 +1,145 @@
+<?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/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>examples</artifactId>
+    <version>2.17-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-example-cdi-metrics</artifactId>
+  <name>Camel :: Example :: CDI :: Metrics</name>
+  <description>Dropwizard Metrics CDI example</description>
+  <packaging>jar</packaging>
+
+  <dependencies>
+
+    <!-- Camel -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-cdi</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-metrics</artifactId>
+    </dependency>
+
+    <!-- Metrics CDI -->
+    <dependency>
+      <groupId>io.astefanutti.metrics.cdi</groupId>
+      <artifactId>metrics-cdi</artifactId>
+      <version>1.3.3</version>
+    </dependency>
+
+    <!-- CDI API -->
+    <dependency>
+      <groupId>javax.enterprise</groupId>
+      <artifactId>cdi-api</artifactId>
+      <version>${cdi-api-1.2-version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <!-- need to use a CDI container such as JBoss Weld -->
+    <!-- lets use weld for CDI -->
+    <dependency>
+      <groupId>org.jboss.weld.se</groupId>
+      <artifactId>weld-se</artifactId>
+      <version>${weld2-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.weld</groupId>
+      <artifactId>weld-core</artifactId>
+      <version>${weld2-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.core</groupId>
+      <artifactId>deltaspike-core-api</artifactId>
+      <version>${deltaspike-version}</version>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.cdictrl</groupId>
+      <artifactId>deltaspike-cdictrl-weld</artifactId>
+      <version>${deltaspike-version}</version>
+      <scope>runtime</scope>
+    </dependency>
+
+    <!-- logging -->
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+    </dependency>
+
+    <!-- test -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>java-hamcrest</artifactId>
+      <version>${hamcrest-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>${arquillian-version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
+      <artifactId>shrinkwrap-descriptors-depchain</artifactId>
+      <version>${shrinkwrap-descriptors-version}</version>
+      <type>pom</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-weld-se-embedded-1.1</artifactId>
+      <version>${arquillian-weld-se-embedded-version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-maven-plugin</artifactId>
+        <version>${project.version}</version>
+      </plugin>
+
+    </plugins>
+  </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java
new file mode 100644
index 0000000..171838f
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsCdiConfig.java
@@ -0,0 +1,63 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import java.util.concurrent.TimeUnit;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Slf4jReporter;
+import io.astefanutti.metrics.cdi.MetricsConfiguration;
+import org.apache.camel.component.metrics.MetricsComponent;
+import org.apache.camel.management.event.CamelContextStartedEvent;
+import org.apache.camel.management.event.CamelContextStoppedEvent;
+
+@ApplicationScoped
+class MetricsCdiConfig {
+
+    @Produces
+    @ApplicationScoped
+    @Named(MetricsComponent.METRIC_REGISTRY_NAME)
+    // TODO: remove when Camel Metrics component looks up for the Metrics registry by type only
+    private MetricRegistry registry = new MetricRegistry();
+
+    private final Slf4jReporter reporter;
+
+    @Inject
+    MetricsCdiConfig(MetricRegistry registry) {
+        reporter = Slf4jReporter.forRegistry(registry)
+            .convertRatesTo(TimeUnit.SECONDS)
+            .convertDurationsTo(TimeUnit.MILLISECONDS)
+            .build();
+    }
+
+    private void onStart(@Observes CamelContextStartedEvent event) {
+        reporter.start(10L, TimeUnit.SECONDS);
+    }
+
+    private void onStop(@Observes CamelContextStoppedEvent event) {
+        reporter.stop();
+    }
+
+    private void configure(@Observes MetricsConfiguration config) {
+        config.useAbsoluteName(true);
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java
new file mode 100644
index 0000000..b4e8076
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/MetricsRoute.java
@@ -0,0 +1,52 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.ContextName;
+import org.apache.camel.component.metrics.MetricsConstants;
+
+@ContextName("camel-example-metrics-cdi")
+class MetricsRoute extends RouteBuilder {
+
+    @Override
+    public void configure() {
+        onException()
+            .handled(true)
+            .maximumRedeliveries(2)
+            .logStackTrace(false)
+            .logExhausted(false)
+            .log(LoggingLevel.ERROR, "Failed processing ${body}")
+            .to("metrics:meter:redelivery?mark=2")
+            .to("metrics:meter:error");
+
+        from("timer:stream?period=1000").routeId("unreliable-service")
+            .setBody(header(Exchange.TIMER_COUNTER).prepend("event #"))
+            .log("Processing ${body}...")
+            .to("metrics:meter:generated")
+            .bean(UnreliableService.class)
+            .filter(header(Exchange.REDELIVERED))
+                .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries")
+                .setHeader(MetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER))
+                .to("metrics:meter:redelivery")
+            .end()
+            .log("Successfully processed ${body}")
+            .to("metrics:meter:success");
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java
new file mode 100644
index 0000000..86911f5
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/SuccessRatioGauge.java
@@ -0,0 +1,43 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.RatioGauge;
+import com.codahale.metrics.annotation.Metric;
+
+class SuccessRatioGauge {
+
+    @Inject
+    private Meter generated;
+
+    @Inject
+    private Meter success;
+
+    @Produces
+    @Metric(name = "success-ratio")
+    private Gauge<Double> successRatio = new RatioGauge() {
+        @Override
+        protected Ratio getRatio() {
+            return Ratio.of(success.getOneMinuteRate(), generated.getOneMinuteRate());
+        }
+    };
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/UnreliableService.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/UnreliableService.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/UnreliableService.java
new file mode 100644
index 0000000..2da6320
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/UnreliableService.java
@@ -0,0 +1,40 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import com.codahale.metrics.Meter;
+import org.apache.camel.Exchange;
+import org.apache.camel.RuntimeExchangeException;
+
+@ApplicationScoped
+public class UnreliableService {
+
+    @Inject
+    private Meter attempt;
+
+    public void unreliable(Exchange exchange) {
+        attempt.mark();
+
+        if (Math.random() < 0.5) {
+            throw new RuntimeExchangeException("Random failure", exchange);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/resources/META-INF/LICENSE.txt
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/resources/META-INF/LICENSE.txt b/examples/camel-example-cdi-metrics/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/resources/META-INF/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.
+

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/resources/META-INF/NOTICE.txt
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/resources/META-INF/NOTICE.txt b/examples/camel-example-cdi-metrics/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/resources/META-INF/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.

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/resources/META-INF/beans.xml b/examples/camel-example-cdi-metrics/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..112d56d
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,18 @@
+<?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.
+-->
+<beans/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/main/resources/log4j.properties b/examples/camel-example-cdi-metrics/src/main/resources/log4j.properties
new file mode 100755
index 0000000..f5aae04
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/main/resources/log4j.properties
@@ -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.
+## ------------------------------------------------------------------------
+
+# default properties to initialise log4j
+log4j.rootLogger=INFO, console
+
+# settings for specific packages
+#log4j.logger.org.apache.camel.cdi=DEBUG
+
+# Console appender
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java
new file mode 100644
index 0000000..ff98b40
--- /dev/null
+++ b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/MetricsSampleTest.java
@@ -0,0 +1,90 @@
+/**
+ * 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.apache.camel.example.cdi.metrics;
+
+import javax.inject.Inject;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.annotation.Metric;
+import io.astefanutti.metrics.cdi.MetricsExtension;
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class MetricsSampleTest {
+
+    @Inject
+    private Meter generated;
+    @Inject
+    private Meter attempt;
+    @Inject
+    private Meter success;
+    @Inject
+    private Meter redelivery;
+    @Inject
+    private Meter error;
+
+    @Inject
+    @Metric(name = "success-ratio")
+    private Gauge<Double> ratio;
+
+    @Inject
+    private CamelContext context;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Metrics CDI
+            .addPackage(MetricsExtension.class.getPackage())
+            // Test classes
+            .addPackage(MetricsSampleTest.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void testContextName() {
+        assertThat("Context name is incorrect!", context.getName(), is(equalTo("camel-example-metrics-cdi")));
+    }
+
+    @Test
+    public void testMetricsValues() throws Exception {
+        // Wait a while so that the timer can kick in
+        Thread.sleep(5000);
+
+        // And stop the Camel context so that inflight exchanges get completed
+        context.stop();
+
+        assertThat("Meter counts are not consistent!", attempt.getCount() - redelivery.getCount() - success.getCount() - error.getCount(), is(equalTo(0L)));
+
+        assertThat("Success rate gauge value is incorrect!", ratio.getValue(), is(equalTo(success.getOneMinuteRate() / generated.getOneMinuteRate())));
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/README.md b/examples/camel-example-metrics-cdi/README.md
deleted file mode 100644
index 8802c35..0000000
--- a/examples/camel-example-metrics-cdi/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# Metrics Example - CDI
-
-### Introduction
-
-This example illustrates the integration between Camel, Dropwizard Metrics and CDI.
-
-The example emulates an unreliable service that processes a continuous stream of events. The unreliable service fails randomly and metrics get collected to report the number of generated events as well as the total number of attempted, redelivered, failed and successful calls to the service. A SLF4J reporter is configured so that these metrics details get logged every 10 seconds in the console.
-
-The example is implemented in Java with CDI dependency injection. It uses JBoss Weld as the minimal CDI container to run the application, though you can run the application in any CDI compliant container.
-
-The `camel-core` and `camel-metrics` components are used in this example. Besides, the Metrics CDI extension is used so that metrics can be injected and custom metrics registered via CDI. For instance, a ratio gauge is registered to monitor the success rate, that is the ratio of success calls on the number of generated events.
-
-### Build
-
-You will need to build this example first:
-
-    mvn install
-
-### Run
-
-You can run this example using:
-
-    mvn compile camel:run
-
-When the Camel application runs, you should see the calls to the 'unreliable-service' being logged to the console, e.g.:
-```
-2016-01-18 15:19:04,390 [ timer://stream] INFO  unreliable-service             - Processing event #8...
-2016-01-18 15:19:06,399 [ timer://stream] ERROR unreliable-service             - Failed processing event #8
-2016-01-18 15:19:06,400 [ timer://stream] INFO  unreliable-service             - Processing event #9...
-2016-01-18 15:19:08,410 [ timer://stream] ERROR unreliable-service             - Failed processing event #9
-2016-01-18 15:19:08,411 [ timer://stream] INFO  unreliable-service             - Processing event #10...
-2016-01-18 15:19:08,412 [ timer://stream] INFO  unreliable-service             - Successfully processed event #10
-2016-01-18 15:19:09,415 [ timer://stream] INFO  unreliable-service             - Processing event #11...
-2016-01-18 15:19:09,416 [ timer://stream] INFO  unreliable-service             - Successfully processed event #11
-2016-01-18 15:19:10,420 [ timer://stream] INFO  unreliable-service             - Processing event #12...
-2016-01-18 15:19:10,421 [ timer://stream] INFO  unreliable-service             - Successfully processed event #12
-2016-01-18 15:19:11,424 [ timer://stream] INFO  unreliable-service             - Processing event #13...
-2016-01-18 15:19:12,428 [ timer://stream] WARN  unreliable-service             - Processed event #13 after 1 retries
-2016-01-18 15:19:12,430 [ timer://stream] INFO  unreliable-service             - Successfully processed event #13
-```
-
-And every 10 seconds, the metrics report, e.g.:
-```
-2016-01-18 15:19:14,360 [rter-1-thread-1] INFO  metrics                        - type=GAUGE, name=success-ratio, value=0.9314661799835947
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=attempt, count=26, mean_rate=1.3682531895692165, m1=1.245416192969619, m5=1.209807850571521, m15=1.2033118138834105, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=error, count=2, mean_rate=0.25121358141009453, m1=0.4, m5=0.4, m15=0.4, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=generated, count=15, mean_rate=0.7210025396112787, m1=0.6455184225121126, m5=0.6098087536676114, m15=0.6033118478925024, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=redelivery, count=11, mean_rate=0.6872842357052532, m1=0.9385926899562456, m5=0.9868864401928024, m15=0.995580155717569, rate_unit=events/second
-2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics                        - type=METER, name=success, count=12, mean_rate=0.5768131773739456, m1=0.6012785791263936, m5=0.6000546385677541, m15=0.6000061386568257, rate_unit=events/second
-```
-
-The Camel application can be stopped pressing `ctrl + c` in the shell.
-
-### Forum, Help, etc
-
-If you hit an problems please let us know on the Camel Forums
-	<http://camel.apache.org/discussion-forums.html>
-
-Please help us make Apache Camel better - we appreciate any feedback you may have. Enjoy!
-
-The Camel riders!

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/pom.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/pom.xml b/examples/camel-example-metrics-cdi/pom.xml
deleted file mode 100755
index 293927a..0000000
--- a/examples/camel-example-metrics-cdi/pom.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?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/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>examples</artifactId>
-    <version>2.17-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>camel-example-metrics-cdi</artifactId>
-  <name>Camel :: Example :: Metrics :: CDI</name>
-  <description>Dropwizard Metrics CDI example</description>
-  <packaging>jar</packaging>
-
-  <dependencies>
-
-    <!-- Camel -->
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-cdi</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-metrics</artifactId>
-    </dependency>
-
-    <!-- Metrics CDI -->
-    <dependency>
-      <groupId>io.astefanutti.metrics.cdi</groupId>
-      <artifactId>metrics-cdi</artifactId>
-      <version>1.3.3</version>
-    </dependency>
-
-    <!-- CDI API -->
-    <dependency>
-      <groupId>javax.enterprise</groupId>
-      <artifactId>cdi-api</artifactId>
-      <version>${cdi-api-1.2-version}</version>
-      <scope>provided</scope>
-    </dependency>
-
-    <!-- need to use a CDI container such as JBoss Weld -->
-    <!-- lets use weld for CDI -->
-    <dependency>
-      <groupId>org.jboss.weld.se</groupId>
-      <artifactId>weld-se</artifactId>
-      <version>${weld2-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.jboss.weld</groupId>
-      <artifactId>weld-core</artifactId>
-      <version>${weld2-version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.deltaspike.core</groupId>
-      <artifactId>deltaspike-core-api</artifactId>
-      <version>${deltaspike-version}</version>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.deltaspike.cdictrl</groupId>
-      <artifactId>deltaspike-cdictrl-weld</artifactId>
-      <version>${deltaspike-version}</version>
-      <scope>runtime</scope>
-    </dependency>
-
-    <!-- logging -->
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-    </dependency>
-
-    <!-- test -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.hamcrest</groupId>
-      <artifactId>java-hamcrest</artifactId>
-      <version>${hamcrest-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.jboss.arquillian.junit</groupId>
-      <artifactId>arquillian-junit-container</artifactId>
-      <version>${arquillian-version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
-      <artifactId>shrinkwrap-descriptors-depchain</artifactId>
-      <version>${shrinkwrap-descriptors-version}</version>
-      <type>pom</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.jboss.arquillian.container</groupId>
-      <artifactId>arquillian-weld-se-embedded-1.1</artifactId>
-      <version>${arquillian-weld-se-embedded-version}</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-
-      <plugin>
-        <groupId>org.apache.camel</groupId>
-        <artifactId>camel-maven-plugin</artifactId>
-        <version>${project.version}</version>
-      </plugin>
-
-    </plugins>
-  </build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsCdiConfig.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsCdiConfig.java b/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsCdiConfig.java
deleted file mode 100644
index 8509804..0000000
--- a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsCdiConfig.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.metrics.cdi;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.Slf4jReporter;
-import io.astefanutti.metrics.cdi.MetricsConfiguration;
-import org.apache.camel.component.metrics.MetricsComponent;
-import org.apache.camel.management.event.CamelContextStartedEvent;
-import org.apache.camel.management.event.CamelContextStoppedEvent;
-
-@ApplicationScoped
-class MetricsCdiConfig {
-
-    @Produces
-    @ApplicationScoped
-    @Named(MetricsComponent.METRIC_REGISTRY_NAME)
-    // TODO: remove when Camel Metrics component looks up for the Metrics registry by type only
-    private MetricRegistry registry = new MetricRegistry();
-
-    private final Slf4jReporter reporter;
-
-    @Inject
-    MetricsCdiConfig(MetricRegistry registry) {
-        reporter = Slf4jReporter.forRegistry(registry)
-            .convertRatesTo(TimeUnit.SECONDS)
-            .convertDurationsTo(TimeUnit.MILLISECONDS)
-            .build();
-    }
-
-    private void onStart(@Observes CamelContextStartedEvent event) {
-        reporter.start(10L, TimeUnit.SECONDS);
-    }
-
-    private void onStop(@Observes CamelContextStoppedEvent event) {
-        reporter.stop();
-    }
-
-    private void configure(@Observes MetricsConfiguration config) {
-        config.useAbsoluteName(true);
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsRoute.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsRoute.java b/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsRoute.java
deleted file mode 100644
index 49f0acd..0000000
--- a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/MetricsRoute.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.metrics.cdi;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.LoggingLevel;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.ContextName;
-import org.apache.camel.component.metrics.MetricsConstants;
-
-@ContextName("camel-example-metrics-cdi")
-class MetricsRoute extends RouteBuilder {
-
-    @Override
-    public void configure() {
-        onException()
-            .handled(true)
-            .maximumRedeliveries(2)
-            .logStackTrace(false)
-            .logExhausted(false)
-            .log(LoggingLevel.ERROR, "Failed processing ${body}")
-            .to("metrics:meter:redelivery?mark=2")
-            .to("metrics:meter:error");
-
-        from("timer:stream?period=1000").routeId("unreliable-service")
-            .setBody(header(Exchange.TIMER_COUNTER).prepend("event #"))
-            .log("Processing ${body}...")
-            .to("metrics:meter:generated")
-            .bean(UnreliableService.class)
-            .filter(header(Exchange.REDELIVERED))
-                .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries")
-                .setHeader(MetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER))
-                .to("metrics:meter:redelivery")
-            .end()
-            .log("Successfully processed ${body}")
-            .to("metrics:meter:success");
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/SuccessRatioGauge.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/SuccessRatioGauge.java b/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/SuccessRatioGauge.java
deleted file mode 100644
index 59496a6..0000000
--- a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/SuccessRatioGauge.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.metrics.cdi;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-
-import com.codahale.metrics.Gauge;
-import com.codahale.metrics.Meter;
-import com.codahale.metrics.RatioGauge;
-import com.codahale.metrics.annotation.Metric;
-
-class SuccessRatioGauge {
-
-    @Inject
-    private Meter generated;
-
-    @Inject
-    private Meter success;
-
-    @Produces
-    @Metric(name = "success-ratio")
-    private Gauge<Double> successRatio = new RatioGauge() {
-        @Override
-        protected Ratio getRatio() {
-            return Ratio.of(success.getOneMinuteRate(), generated.getOneMinuteRate());
-        }
-    };
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/UnreliableService.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/UnreliableService.java b/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/UnreliableService.java
deleted file mode 100644
index a0c18b3..0000000
--- a/examples/camel-example-metrics-cdi/src/main/java/org/apache/camel/example/metrics/cdi/UnreliableService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.camel.example.metrics.cdi;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-
-import com.codahale.metrics.Meter;
-import org.apache.camel.Exchange;
-import org.apache.camel.RuntimeExchangeException;
-
-@ApplicationScoped
-public class UnreliableService {
-
-    @Inject
-    private Meter attempt;
-
-    public void unreliable(Exchange exchange) {
-        attempt.mark();
-
-        if (Math.random() < 0.5) {
-            throw new RuntimeExchangeException("Random failure", exchange);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/LICENSE.txt
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/LICENSE.txt b/examples/camel-example-metrics-cdi/src/main/resources/META-INF/LICENSE.txt
deleted file mode 100644
index 6b0b127..0000000
--- a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/LICENSE.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-
-                                 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.
-

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/NOTICE.txt
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/NOTICE.txt b/examples/camel-example-metrics-cdi/src/main/resources/META-INF/NOTICE.txt
deleted file mode 100644
index 2e215bf..0000000
--- a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/NOTICE.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-   =========================================================================
-   ==  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.

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/beans.xml b/examples/camel-example-metrics-cdi/src/main/resources/META-INF/beans.xml
deleted file mode 100644
index 112d56d..0000000
--- a/examples/camel-example-metrics-cdi/src/main/resources/META-INF/beans.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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.
--->
-<beans/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/main/resources/log4j.properties b/examples/camel-example-metrics-cdi/src/main/resources/log4j.properties
deleted file mode 100755
index f5aae04..0000000
--- a/examples/camel-example-metrics-cdi/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,27 +0,0 @@
-## ------------------------------------------------------------------------
-## Licensed to the Apache Software Foundation (ASF) under one or more
-## contributor license agreements.  See the NOTICE file distributed with
-## this work for additional information regarding copyright ownership.
-## The ASF licenses this file to You under the Apache License, Version 2.0
-## (the "License"); you may not use this file except in compliance with
-## the License.  You may obtain a copy of the License at
-##
-## http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing, software
-## distributed under the License is distributed on an "AS IS" BASIS,
-## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-## See the License for the specific language governing permissions and
-## limitations under the License.
-## ------------------------------------------------------------------------
-
-# default properties to initialise log4j
-log4j.rootLogger=INFO, console
-
-# settings for specific packages
-#log4j.logger.org.apache.camel.cdi=DEBUG
-
-# Console appender
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/camel-example-metrics-cdi/src/test/java/org/apache/camel/example/metrics/cdi/MetricsSampleTest.java
----------------------------------------------------------------------
diff --git a/examples/camel-example-metrics-cdi/src/test/java/org/apache/camel/example/metrics/cdi/MetricsSampleTest.java b/examples/camel-example-metrics-cdi/src/test/java/org/apache/camel/example/metrics/cdi/MetricsSampleTest.java
deleted file mode 100644
index 2ac1210..0000000
--- a/examples/camel-example-metrics-cdi/src/test/java/org/apache/camel/example/metrics/cdi/MetricsSampleTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.example.metrics.cdi;
-
-import javax.inject.Inject;
-import com.codahale.metrics.Gauge;
-import com.codahale.metrics.Meter;
-import com.codahale.metrics.annotation.Metric;
-import io.astefanutti.metrics.cdi.MetricsExtension;
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class MetricsSampleTest {
-
-    @Inject
-    private Meter generated;
-    @Inject
-    private Meter attempt;
-    @Inject
-    private Meter success;
-    @Inject
-    private Meter redelivery;
-    @Inject
-    private Meter error;
-
-    @Inject
-    @Metric(name = "success-ratio")
-    private Gauge<Double> ratio;
-
-    @Inject
-    private CamelContext context;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Metrics CDI
-            .addPackage(MetricsExtension.class.getPackage())
-            // Test classes
-            .addPackage(MetricsSampleTest.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void testContextName() {
-        assertThat("Context name is incorrect!", context.getName(), is(equalTo("camel-example-metrics-cdi")));
-    }
-
-    @Test
-    public void testMetricsValues() throws Exception {
-        // Wait a while so that the timer can kick in
-        Thread.sleep(5000);
-
-        // And stop the Camel context so that inflight exchanges get completed
-        context.stop();
-
-        assertThat("Meter counts are not consistent!", attempt.getCount() - redelivery.getCount() - success.getCount() - error.getCount(), is(equalTo(0L)));
-
-        assertThat("Success rate gauge value is incorrect!", ratio.getValue(), is(equalTo(success.getOneMinuteRate() / generated.getOneMinuteRate())));
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/3cc3172a/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index 6669ec3..03142e8 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -37,6 +37,7 @@
     <module>camel-example-box-osgi</module>
     <module>camel-example-cafe</module>
     <module>camel-example-cdi</module>
+    <module>camel-example-cdi-metrics</module>
     <module>camel-example-cdi-properties</module>
     <module>camel-example-cxf</module>
     <module>camel-example-cxf-blueprint</module>
@@ -55,7 +56,6 @@
     <module>camel-example-loadbalancing</module>
     <module>camel-example-loan-broker</module>
     <module>camel-example-management</module>
-    <module>camel-example-metrics-cdi</module>
     <module>camel-example-mybatis</module>
     <module>camel-example-netty-http</module>
     <module>camel-example-osgi</module>


[4/5] camel git commit: Use tag for keyboard shortcuts

Posted by da...@apache.org.
Use <kbd> tag for keyboard shortcuts


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/15af9f02
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/15af9f02
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/15af9f02

Branch: refs/heads/master
Commit: 15af9f02db369b46b66f98f37ebf4c6ec78a85d6
Parents: f52a464
Author: Antonin Stefanutti <an...@stefanutti.fr>
Authored: Thu Jan 28 15:50:35 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jan 28 18:56:20 2016 +0100

----------------------------------------------------------------------
 examples/camel-example-aggregate/README.md              |  4 ++--
 examples/camel-example-bam/README.md                    |  2 +-
 examples/camel-example-cafe/README.md                   |  2 +-
 examples/camel-example-cdi-metrics/README.md            |  2 +-
 examples/camel-example-cdi-properties/README.md         |  2 +-
 examples/camel-example-cdi/README.md                    |  2 +-
 examples/camel-example-console/README.md                |  2 +-
 examples/camel-example-cxf-proxy/README.md              |  2 +-
 examples/camel-example-etl/README.md                    | 10 +++++-----
 examples/camel-example-guice-jms/README.md              |  2 +-
 examples/camel-example-jdbc/README.md                   |  2 +-
 examples/camel-example-jmx/README.md                    |  2 +-
 examples/camel-example-loan-broker/README.md            |  2 +-
 examples/camel-example-management/README.md             |  2 +-
 examples/camel-example-mybatis/README.md                |  2 +-
 examples/camel-example-osgi-rmi/README.md               |  2 +-
 examples/camel-example-osgi/README.md                   |  4 ++--
 examples/camel-example-pojo-messaging/README.md         |  2 +-
 examples/camel-example-reportincident/README.md         |  2 +-
 examples/camel-example-route-throttling/README.md       |  2 +-
 examples/camel-example-servlet-rest-blueprint/README.md |  2 +-
 examples/camel-example-simplejirabot/README.md          |  2 +-
 examples/camel-example-spring-boot/README.md            |  2 +-
 examples/camel-example-spring-javaconfig/README.md      |  2 +-
 examples/camel-example-spring-jms/README.md             |  2 +-
 examples/camel-example-spring-security/README.md        |  2 +-
 examples/camel-example-spring-ws/README.md              |  2 +-
 examples/camel-example-spring-xquery/README.md          |  2 +-
 examples/camel-example-spring/README.md                 |  2 +-
 examples/camel-example-sql-blueprint/README.md          |  4 ++--
 examples/camel-example-sql/README.md                    |  4 ++--
 examples/camel-example-ssh-security/README.md           |  2 +-
 examples/camel-example-ssh/README.md                    |  2 +-
 examples/camel-example-swagger-cdi/README.md            |  2 +-
 examples/camel-example-swagger-java/README.md           |  2 +-
 examples/camel-example-tracer/README.md                 |  2 +-
 examples/camel-example-twitter-websocket/README.md      |  2 +-
 examples/camel-example-widget-gadget-cdi/README.md      |  5 +++--
 examples/camel-example-widget-gadget-java/README.md     |  5 +++--
 examples/camel-example-widget-gadget-xml/README.md      |  5 +++--
 40 files changed, 54 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-aggregate/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-aggregate/README.md b/examples/camel-example-aggregate/README.md
index 10a3a5e..67b5a98 100644
--- a/examples/camel-example-aggregate/README.md
+++ b/examples/camel-example-aggregate/README.md
@@ -30,8 +30,8 @@ To run the example type:
 
 	mvn camel:run
 
-To stop the example hit `Ctrl-C`.  If you restart it and resume entering numbers
-you should see that it remembered previously entered values, as it
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>.  If you restart it and resume
+entering numbers you should see that it remembered previously entered values, as it
 uses a persistent store.
 
 ### Documentation

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-bam/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-bam/README.md b/examples/camel-example-bam/README.md
index b031568..912feee 100644
--- a/examples/camel-example-bam/README.md
+++ b/examples/camel-example-bam/README.md
@@ -26,7 +26,7 @@ To run the example with Maven, type
 You can see the BAM activies defined in
   `src/main/java/org/apache/camel/example/bam/MyActivites.java`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-cafe/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cafe/README.md b/examples/camel-example-cafe/README.md
index 65cc4cb..6ff1777 100644
--- a/examples/camel-example-cafe/README.md
+++ b/examples/camel-example-cafe/README.md
@@ -21,7 +21,7 @@ You can see the routing rules by looking at the java code in the
 `src/main/java directory` and the Spring XML configuration lives in
 `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-cdi-metrics/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-metrics/README.md b/examples/camel-example-cdi-metrics/README.md
index ee5dd43..bf161d1 100644
--- a/examples/camel-example-cdi-metrics/README.md
+++ b/examples/camel-example-cdi-metrics/README.md
@@ -59,7 +59,7 @@ And every 10 seconds, the metrics report, e.g.:
 2016-01-18 15:19:14,361 [rter-1-thread-1] INFO  metrics - type=METER, name=success, count=12, mean_rate=0.5768131773739456, m1=0.6012785791263936, m5=0.6000546385677541, m15=0.6000061386568257, rate_unit=events/second
 ```
 
-The Camel application can be stopped pressing `ctrl + c` in the shell.
+The Camel application can be stopped pressing <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell.
 
 ### Forum, Help, etc
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-cdi-properties/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi-properties/README.md b/examples/camel-example-cdi-properties/README.md
index fe7b498..8099292 100644
--- a/examples/camel-example-cdi-properties/README.md
+++ b/examples/camel-example-cdi-properties/README.md
@@ -41,7 +41,7 @@ being logged to the console, e.g.:
 2016-01-28 15:02:46,661 [cdi.Main.main()] INFO  route1              - Hello from CamelContext (hello)
 ```
 
-The Camel application can be stopped pressing `ctrl + c` in the shell.
+The Camel application can be stopped pressing <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell.
 
 ### Forum, Help, etc
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-cdi/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cdi/README.md b/examples/camel-example-cdi/README.md
index 3cdf12d..e1e0ed8 100644
--- a/examples/camel-example-cdi/README.md
+++ b/examples/camel-example-cdi/README.md
@@ -22,7 +22,7 @@ To run the example type
 You can see the routing rules by looking at the java code in the
   `src/main/java` directory
 
-  To stop the example hit `ctrl + c`
+  To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
   
 When we launch the example using the camel maven plugin, a local CDI container
 is created and started.

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-console/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-console/README.md b/examples/camel-example-console/README.md
index 0f7afbc..961cfb3 100644
--- a/examples/camel-example-console/README.md
+++ b/examples/camel-example-console/README.md
@@ -18,7 +18,7 @@ To run the example type
 You can see the routing rules by looking at the XML in the directory:
   `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 You can also run the example from your editor such as Eclipse, IDEA etc,
 by opening the org.apache.camel.example.console.CamelConsoleMain class

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-cxf-proxy/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-cxf-proxy/README.md b/examples/camel-example-cxf-proxy/README.md
index 8524fef..95bccd1 100644
--- a/examples/camel-example-cxf-proxy/README.md
+++ b/examples/camel-example-cxf-proxy/README.md
@@ -34,7 +34,7 @@ The webservice WSDL is exposed at:
 <http://localhost:9080/camel-example-cxf-proxy/webservices/incident?wsdl>
 
 Because we use dynamic port numbers, you have to check the console to get the used one.
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 To make a SOAP call open soapUI or another SOAP query tool and create a new
 project w/WSDL of <http://localhost:${proxy.port}/camel-example-cxf-proxy/webservices/incident?wsdl>.

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-etl/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-etl/README.md b/examples/camel-example-etl/README.md
index ff9d060..4e02a28 100644
--- a/examples/camel-example-etl/README.md
+++ b/examples/camel-example-etl/README.md
@@ -20,7 +20,7 @@ You can see the routing rules by looking at the java code in the src/main/java
 directory and the Spring XML configuration lives in
   `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Build and Run inside OSGi container
 
@@ -39,10 +39,10 @@ from the shell using this example's "features.xml" for easy provisioning.
 	features:addUrl mvn:org.apache.camel/camel-example-etl/${version}/xml/features
 	features:install camel-example-etl
 
-The example outputs logs into the console. When you're done just hit `ctrl + d` to exit the container.
-Next time you start the container again use the 'clean' option so that this example's bundle gets
-removed and you don't see the logs anymore written into the console, e.g. in case of Karaf start it
-again using:
+The example outputs logs into the console. When you're done just hit <kbd>ctrl</kbd>+<kbd>d</kbd>
+to exit the container. Next time you start the container again use the 'clean' option so that
+this example's bundle gets removed and you don't see the logs anymore written into the console,
+e.g. in case of Karaf start it again using:
 
 	karaf clean
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-guice-jms/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-guice-jms/README.md b/examples/camel-example-guice-jms/README.md
index 4b12a2c..522a7c4 100644
--- a/examples/camel-example-guice-jms/README.md
+++ b/examples/camel-example-guice-jms/README.md
@@ -31,7 +31,7 @@ You can see the routing rules by looking at the java code in the
 `src/main/java directory` and the `guicejndi.properties` file lives in
 `src/main/resources/guicejndi.properties`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-jdbc/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-jdbc/README.md b/examples/camel-example-jdbc/README.md
index cae8ab1..ece3846 100644
--- a/examples/camel-example-jdbc/README.md
+++ b/examples/camel-example-jdbc/README.md
@@ -17,7 +17,7 @@ Now to run the example type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Configuration
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-jmx/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-jmx/README.md b/examples/camel-example-jmx/README.md
index 39bcc13..5b66d96 100644
--- a/examples/camel-example-jmx/README.md
+++ b/examples/camel-example-jmx/README.md
@@ -24,7 +24,7 @@ You can see the routing rules by looking at the java code in the
 `src/main/java` directory and the Spring XML configuration lives in
 `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-loan-broker/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-loan-broker/README.md b/examples/camel-example-loan-broker/README.md
index 4107d57..9be9e2f 100644
--- a/examples/camel-example-loan-broker/README.md
+++ b/examples/camel-example-loan-broker/README.md
@@ -26,7 +26,7 @@ The example of web services version
 	mvn exec:java -PWS.LoanBroker
 	mvn exec:java -PWS.Client
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-management/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-management/README.md b/examples/camel-example-management/README.md
index 226ae78..fde763c 100644
--- a/examples/camel-example-management/README.md
+++ b/examples/camel-example-management/README.md
@@ -62,7 +62,7 @@ You can see the routing rules by looking at the java code in the
 `src/main/java directory` and the Spring XML configuration lives in
 `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-mybatis/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-mybatis/README.md b/examples/camel-example-mybatis/README.md
index 8c1783c..f0c1139 100644
--- a/examples/camel-example-mybatis/README.md
+++ b/examples/camel-example-mybatis/README.md
@@ -31,7 +31,7 @@ And you can see the application running by tailing the logs
 
 	log:tail
 
-And you can use `ctrl + c` to stop tailing the log.
+And you can use <kbd>ctrl</kbd>+<kbd>c</kbd> to stop tailing the log.
 
 ### Configuration
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-osgi-rmi/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-osgi-rmi/README.md b/examples/camel-example-osgi-rmi/README.md
index 689dff4..9ae14b0 100644
--- a/examples/camel-example-osgi-rmi/README.md
+++ b/examples/camel-example-osgi-rmi/README.md
@@ -25,7 +25,7 @@ To run the client
 
 	mvn exec:java -PClient
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 
 ### Run inside OSGi container

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-osgi/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-osgi/README.md b/examples/camel-example-osgi/README.md
index 1486a43..84481ac 100644
--- a/examples/camel-example-osgi/README.md
+++ b/examples/camel-example-osgi/README.md
@@ -14,7 +14,7 @@ To run the example using Maven type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Run inside OSGi container
 You will need to compile and install this example first:
@@ -35,7 +35,7 @@ The example outputs to the log, which you can see using
 
 	log:tail
 
-And use `ctrl+c` to break the tail.
+And use <kbd>ctrl</kbd>+<kbd>c</kbd> to break the tail.
 
 ### Forum, Help, etc
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-pojo-messaging/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-pojo-messaging/README.md b/examples/camel-example-pojo-messaging/README.md
index dd69ed8..5f49478 100644
--- a/examples/camel-example-pojo-messaging/README.md
+++ b/examples/camel-example-pojo-messaging/README.md
@@ -18,7 +18,7 @@ To run the example type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-reportincident/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-reportincident/README.md b/examples/camel-example-reportincident/README.md
index 9609fe0..a624c0d 100644
--- a/examples/camel-example-reportincident/README.md
+++ b/examples/camel-example-reportincident/README.md
@@ -28,7 +28,7 @@ The webservice WSDL is exposed at:
 
 <http://localhost:9080/webservices/incident?wsdl>
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-route-throttling/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-route-throttling/README.md b/examples/camel-example-route-throttling/README.md
index 87f39e2..dfe4fb9 100644
--- a/examples/camel-example-route-throttling/README.md
+++ b/examples/camel-example-route-throttling/README.md
@@ -33,7 +33,7 @@ The example should run if you type:
 
 	mvn exec:java -PCamelFileClient
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-servlet-rest-blueprint/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-servlet-rest-blueprint/README.md b/examples/camel-example-servlet-rest-blueprint/README.md
index b4f9d84..0890c7c 100644
--- a/examples/camel-example-servlet-rest-blueprint/README.md
+++ b/examples/camel-example-servlet-rest-blueprint/README.md
@@ -31,7 +31,7 @@ And you can see the application running by tailing the logs
 
 	log:tail
 
-And you can use `ctrl + c` to stop tailing the log.
+And you can use <kbd>ctrl</kbd>+<kbd>c</kbd> to stop tailing the log.
 
 There is a user REST service that supports the following operations
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-simplejirabot/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-simplejirabot/README.md b/examples/camel-example-simplejirabot/README.md
index c6aa475..a5d2c89 100644
--- a/examples/camel-example-simplejirabot/README.md
+++ b/examples/camel-example-simplejirabot/README.md
@@ -29,7 +29,7 @@ You can see the routing rules by looking at the java code in the
 `src/main/java` directory and the Spring XML configuration lives in
 `src/main/resources/META-INF/spring` in each module
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring-boot/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring-boot/README.md b/examples/camel-example-spring-boot/README.md
index 333c793..69f4d1b 100644
--- a/examples/camel-example-spring-boot/README.md
+++ b/examples/camel-example-spring-boot/README.md
@@ -31,7 +31,7 @@ You can also execute the fat WAR directly:
 
 You will see the message printed to the console every second.
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring-javaconfig/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring-javaconfig/README.md b/examples/camel-example-spring-javaconfig/README.md
index 260a489..3190426 100644
--- a/examples/camel-example-spring-javaconfig/README.md
+++ b/examples/camel-example-spring-javaconfig/README.md
@@ -18,7 +18,7 @@ To run the example type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 
 ### Configuration

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring-jms/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring-jms/README.md b/examples/camel-example-spring-jms/README.md
index 4de029b..32fc41e 100644
--- a/examples/camel-example-spring-jms/README.md
+++ b/examples/camel-example-spring-jms/README.md
@@ -29,7 +29,7 @@ The example should run if you type:
 	mvn exec:java -PCamelClientRemoting
 	mvn exec:java -PCamelClientEndpoint
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring-security/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring-security/README.md b/examples/camel-example-spring-security/README.md
index be542ce..3b15376 100644
--- a/examples/camel-example-spring-security/README.md
+++ b/examples/camel-example-spring-security/README.md
@@ -14,7 +14,7 @@ To run the example, you need to start up the server by typing
 
 	mvn jetty:run
 
-To stop the server hit `ctrl + c`
+To stop the server hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 The example consumes messages from a servlet endpoint which is secured by Spring Security
 with http basic authentication, there are two service:

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring-ws/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring-ws/README.md b/examples/camel-example-spring-ws/README.md
index 42d6318..44f88f4 100644
--- a/examples/camel-example-spring-ws/README.md
+++ b/examples/camel-example-spring-ws/README.md
@@ -12,7 +12,7 @@ To run the example, you need to start up the server by typing
 
 	mvn jetty:run
 
-To stop the server hit `ctrl + c`
+To stop the server hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 
 The web service endpoint address is:

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring-xquery/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring-xquery/README.md b/examples/camel-example-spring-xquery/README.md
index 4b1137e..743c39a 100644
--- a/examples/camel-example-spring-xquery/README.md
+++ b/examples/camel-example-spring-xquery/README.md
@@ -23,7 +23,7 @@ To run the example using Maven, type
 You can see the routing rules by looking at the the Spring XML configuration
 at `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 This example is documented at <http://camel.apache.org/spring-xquery-example.html>

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-spring/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-spring/README.md b/examples/camel-example-spring/README.md
index 1d3fe68..c3686c3 100644
--- a/examples/camel-example-spring/README.md
+++ b/examples/camel-example-spring/README.md
@@ -22,7 +22,7 @@ You can see the routing rules by looking at the java code in the
 `src/main/java directory` and the Spring XML configuration lives in
 `src/main/resources/META-INF/spring`
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-sql-blueprint/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-sql-blueprint/README.md b/examples/camel-example-sql-blueprint/README.md
index 1137f4f..6227eb0 100644
--- a/examples/camel-example-sql-blueprint/README.md
+++ b/examples/camel-example-sql-blueprint/README.md
@@ -20,7 +20,7 @@ To run the example type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 This example uses Blueprint to setup and configure the database,
 as well the CamelContext. You can see this in the following file:
@@ -55,7 +55,7 @@ And you can see the application running by tailing the logs
 
 	log:tail
 
-And you can use `ctrl + c` to stop tailing the log.
+And you can use <kbd>ctrl</kbd>+<kbd>c</kbd> to stop tailing the log.
 
 ### Documentation
 This example is documented at <http://camel.apache.org/sql-example-blueprint.html>

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-sql/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-sql/README.md b/examples/camel-example-sql/README.md
index fbd01e8..62b575a 100644
--- a/examples/camel-example-sql/README.md
+++ b/examples/camel-example-sql/README.md
@@ -22,7 +22,7 @@ To run the example type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 This example uses Spring to setup and configure the database,
 as well the CamelContext. You can see this in the following file:
@@ -54,7 +54,7 @@ And you can see the application running by tailing the logs
 
 	log:tail
 
-And you can use `ctrl + c` to stop tailing the log.
+And you can use <kbd>ctrl</kbd>+<kbd>c</kbd> to stop tailing the log.
 
 ### Documentation
 This example is documented at <http://camel.apache.org/sql-example.html>

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-ssh-security/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-ssh-security/README.md b/examples/camel-example-ssh-security/README.md
index a0bb1e8..df8c7a8 100644
--- a/examples/camel-example-ssh-security/README.md
+++ b/examples/camel-example-ssh-security/README.md
@@ -65,7 +65,7 @@ To test locally, assuming you have Setup Karaf and have it running, run the foll
 
     mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Run with Karaf
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-ssh/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-ssh/README.md b/examples/camel-example-ssh/README.md
index d52112f..b04cecb 100644
--- a/examples/camel-example-ssh/README.md
+++ b/examples/camel-example-ssh/README.md
@@ -16,7 +16,7 @@ To run the example using Maven type
 
 	mvn camel:run
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Run with Karaf
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-swagger-cdi/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-cdi/README.md b/examples/camel-example-swagger-cdi/README.md
index ae75974..dde2e01 100644
--- a/examples/camel-example-swagger-cdi/README.md
+++ b/examples/camel-example-swagger-cdi/README.md
@@ -35,7 +35,7 @@ The rest services provides Swagger API which can be accessed from the following
 
 <http://localhost:8080/api-doc>
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Forum, Help, etc
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-swagger-java/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-swagger-java/README.md b/examples/camel-example-swagger-java/README.md
index cf68b81..a8a7767 100644
--- a/examples/camel-example-swagger-java/README.md
+++ b/examples/camel-example-swagger-java/README.md
@@ -30,7 +30,7 @@ The example has documentation in the home.html page which you can access using t
 This example implements the rest-dsl in XML in the camel-config.xml file. For an example that
 is using Java code, see the `camel-example-swagger-cdi`.
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Forum, Help, etc
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-tracer/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-tracer/README.md b/examples/camel-example-tracer/README.md
index 127b819..8860ee2 100644
--- a/examples/camel-example-tracer/README.md
+++ b/examples/camel-example-tracer/README.md
@@ -23,7 +23,7 @@ In the console you can enter some words separated with space. Try to enter:
 This example will based on the input get some quotes from the input and select the best quote
 to return as response in the console.
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 ### Documentation
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-twitter-websocket/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-twitter-websocket/README.md b/examples/camel-example-twitter-websocket/README.md
index e14dfab..5fe7269 100644
--- a/examples/camel-example-twitter-websocket/README.md
+++ b/examples/camel-example-twitter-websocket/README.md
@@ -25,7 +25,7 @@ Then open a browser to see live twitter updates in the web page
 	http://localhost:9090
 <http://localhost:9090>
 
-To stop the example hit `ctrl + c`
+To stop the example hit <kbd>ctrl</kbd>+<kbd>c</kbd>
 
 
 ### Documentation

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-widget-gadget-cdi/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-widget-gadget-cdi/README.md b/examples/camel-example-widget-gadget-cdi/README.md
index ee5359b..0ae4bab 100644
--- a/examples/camel-example-widget-gadget-cdi/README.md
+++ b/examples/camel-example-widget-gadget-cdi/README.md
@@ -38,7 +38,8 @@ Then the broker can be started with
     cd apache-activemq-5.13.0
     bin/activemq console
 
-And then Broker is running (you can press `ctrl + c` in the shell to stop the broker).
+And then Broker is running (you can press <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell
+to stop the broker).
 
 The Camel application connects to the remote broker on url: `tcp://localhost:61616`.
 The url can be changed in the `WidgetMain.java` source code.
@@ -60,7 +61,7 @@ and then browse the queues. You should see the three queues:
  - widget
  - gadget
 
-The Camel application can be stopped pressing `ctrl + c` in the shell.
+The Camel application can be stopped pressing <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell.
 
 ### Configuration
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-widget-gadget-java/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-widget-gadget-java/README.md b/examples/camel-example-widget-gadget-java/README.md
index 9f3f4dd..cd04fb9 100644
--- a/examples/camel-example-widget-gadget-java/README.md
+++ b/examples/camel-example-widget-gadget-java/README.md
@@ -36,7 +36,8 @@ Then the broker can be started with
     cd apache-activemq-5.13.0
     bin/activemq console
 
-And then Broker is running (you can press `ctrl + c` in the shell to stop the broker).
+And then Broker is running (you can press <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell
+to stop the broker).
 
 The Camel application connects to the remote broker on url: `tcp://localhost:61616`.
 The url can be changed in the `WidgetMain.java` source code.
@@ -58,7 +59,7 @@ and then browse the queues. You should see the three queues:
  - widget
  - gadget
 
-The Camel application can be stopped pressing `ctrl + c` in the shell.
+The Camel application can be stopped pressing <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell.
 
 ### Configuration
 

http://git-wip-us.apache.org/repos/asf/camel/blob/15af9f02/examples/camel-example-widget-gadget-xml/README.md
----------------------------------------------------------------------
diff --git a/examples/camel-example-widget-gadget-xml/README.md b/examples/camel-example-widget-gadget-xml/README.md
index 28c41af..9cbc8d8 100644
--- a/examples/camel-example-widget-gadget-xml/README.md
+++ b/examples/camel-example-widget-gadget-xml/README.md
@@ -37,7 +37,8 @@ Then the broker can be started with
     cd apache-activemq-5.13.0
     bin/activemq console
 
-And then Broker is running (you can press `ctrl + c` in the shell to stop the broker).
+And then Broker is running (you can press <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell
+to stop the broker).
 
 The Camel application connects to the remote broker on url: `tcp://localhost:61616`.
 The url can be changed in the `widget.xml` source code.
@@ -59,7 +60,7 @@ and then browse the queues. You should see the three queues:
  - widget
  - gadget
 
-The Camel application can be stopped pressing `ctrl + c` in the shell.
+The Camel application can be stopped pressing <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell.
 
 ### Configuration