== Camel XML Example - CDI

=== Introduction

This example illustrates the use of Camel XML configuration files into
Camel CDI applications.

While CDI favors a typesafe dependency injection mechanism, it may be
useful to reuse existing Camel XML configuration files into a Camel CDI
application. In other use cases, it might be handy to rely on the Camel
XML DSL to configure its Camel context(s).

So that example demonstrates how to import a Camel XML configuration
file and the level of interoperability between the Camel XML DSL and
CDI.

It 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.

It is required to have the `+camel-core-xml+` dependency in the
classpath when importing Camel XML configuration files using Camel CDI.

The `+camel-cdi+` and `+camel-stream+` components are used in this
example. The `+camel-test-cdi+` module is used for the JUnit test
runner.

=== Build

You can build this example using:

[source,sh]
----
$ mvn package
----

=== Run

You can run this example using:

[source,sh]
----
$ mvn camel:run
----

When the Camel application runs, you should see the following messages
being logged to the console, e.g.:

....
2016-04-26 17:08:49,021 [cdi.Main.main()] INFO  Version                        - WELD-000900: 2.3.4 (Final)
2016-04-26 17:08:51,805 [cdi.Main.main()] INFO  CdiCamelExtension              - Camel CDI is starting Camel context [cdi-camel-xml]
2016-04-26 17:08:51,806 [cdi.Main.main()] INFO  DefaultCamelContext            - Apache Camel 2.18.0 (CamelContext: cdi-camel-xml) is starting
2016-04-26 17:08:52,322 [cdi.Main.main()] INFO  SedaEndpoint                   - Endpoint Endpoint[seda://rescue?multipleConsumers=true] is using shared queue: seda://rescue with size: 2147483647
2016-04-26 17:08:52,356 [cdi.Main.main()] INFO  DefaultCamelContext            - Route: terminal started and consuming from: Endpoint[stream://in?delay=1000&promptMessage=Which+pill+%28red%7Cblue%29%3F%3A+]
2016-04-26 17:08:52,360 [cdi.Main.main()] INFO  DefaultCamelContext            - Route: matrix started and consuming from: Endpoint[direct://neo]
2016-04-26 17:08:52,361 [cdi.Main.main()] INFO  DefaultCamelContext            - Route: unplug started and consuming from: Endpoint[direct://unplug]
2016-04-26 17:08:52,362 [cdi.Main.main()] INFO  DefaultCamelContext            - Total 3 routes, of which 3 are started.
2016-04-26 17:08:52,363 [cdi.Main.main()] INFO  DefaultCamelContext            - Apache Camel 2.18.0 (CamelContext: cdi-camel-xml) started in 0.556 seconds
2016-04-26 17:08:52,434 [cdi.Main.main()] INFO  Bootstrap                      - WELD-ENV-002003: Weld SE container STATIC_INSTANCE initialized
████████╗██╗  ██╗███████╗    ███╗   ███╗ █████╗ ████████╗██████╗ ██╗██╗  ██╗
╚══██╔══╝██║  ██║██╔════╝    ████╗ ████║██╔══██╗╚══██╔══╝██╔══██╗██║╚██╗██╔╝
   ██║   ███████║█████╗      ██╔████╔██║███████║   ██║   ██████╔╝██║ ╚███╔╝ 
   ██║   ██╔══██║██╔══╝      ██║╚██╔╝██║██╔══██║   ██║   ██╔══██╗██║ ██╔██╗ 
   ██║   ██║  ██║███████╗    ██║ ╚═╝ ██║██║  ██║   ██║   ██║  ██║██║██╔╝ ██╗
   ╚═╝   ╚═╝  ╚═╝╚══════╝    ╚═╝     ╚═╝╚═╝  ╚═╝   ╚═╝   ╚═╝  ╚═╝╚═╝╚═╝  ╚═╝
Which pill (red|blue)?: 
....

You're being prompted which pill Neo should be taking. If he chooses the
red one, Neo gets unplugged from the Matrix and the red pill serves as a
location device to track his position into the farm to broadcast it and
have the rebellion rescuing him, e.g.:

....
Which pill (red|blue)?: red
2016-04-26 17:12:07,520 [#1 - ControlBus] INFO  DefaultShutdownStrategy        - Starting to graceful shutdown 1 routes (timeout 300 seconds)
2016-04-26 17:12:07,521 [0 - stream://in] INFO  unplug                         - Neo has been located in matrix
2016-04-26 17:12:07,523 [ - ShutdownTask] INFO  DefaultShutdownStrategy        - Route: terminal shutdown complete, was consuming from: Endpoint[stream://in?delay=1000&promptMessage=Which+pill+%28red%7Cblue%29%3F%3A+]
2016-04-26 17:12:07,524 [ - ShutdownTask] INFO  DefaultShutdownStrategy        - Waiting as there are still 1 inflight and pending exchanges to complete, timeout in 300 seconds. Inflights per route: [terminal = 1]
2016-04-26 17:12:08,530 [#1 - ControlBus] INFO  DefaultShutdownStrategy        - Graceful shutdown of 1 routes completed in 1 seconds
                                     __ 
 _____         _                   _|  |
|  |  |___ ___| |_ _ ___ ___ ___ _| |  |
|  |  |   | . | | | | . | . | -_| . |__|
|_____|_|_|  _|_|___|_  |_  |___|___|__|
          |_|       |___|___|           
2016-04-26 17:12:08,532 [#1 - ControlBus] INFO  DefaultCamelContext            - Route: terminal is stopped, was consuming from: Endpoint[stream://in?delay=1000&promptMessage=Which+pill+%28red%7Cblue%29%3F%3A+]
2016-04-26 17:12:08,533 [#1 - ControlBus] INFO  ControlBusProducer             - ControlBus task done [stop route terminal] with result -> void
....

The Camel application can be stopped pressing ctrl+c in the shell:

....
2016-04-26 17:16:50,172 [Thread-5       ] INFO  MainSupport$HangupInterceptor  - Received hang up - stopping the main instance.
2016-04-26 17:16:50,179 [Thread-5       ] INFO  CamelContextProducer           - Camel CDI is stopping Camel context [cdi-camel-xml]
2016-04-26 17:16:50,180 [Thread-5       ] INFO  DefaultCamelContext            - Apache Camel 2.18.0 (CamelContext: cdi-camel-xml) is shutting down
2016-04-26 17:16:50,180 [Thread-5       ] INFO  DefaultShutdownStrategy        - Starting to graceful shutdown 3 routes (timeout 300 seconds)
2016-04-26 17:16:50,191 [ - ShutdownTask] INFO  DefaultShutdownStrategy        - Route: terminal shutdown complete, was consuming from: Endpoint[stream://in?delay=1000&promptMessage=Which+pill+%28red%7Cblue%29%3F%3A+]
2016-04-26 17:16:50,192 [ - ShutdownTask] INFO  DefaultShutdownStrategy        - Route: unplug shutdown complete, was consuming from: Endpoint[direct://unplug]
2016-04-26 17:16:50,192 [ - ShutdownTask] INFO  DefaultShutdownStrategy        - Route: matrix shutdown complete, was consuming from: Endpoint[direct://neo]
2016-04-26 17:16:50,192 [Thread-5       ] INFO  DefaultShutdownStrategy        - Graceful shutdown of 3 routes completed in 0 seconds
2016-04-26 17:16:50,236 [Thread-5       ] INFO  MainLifecycleStrategy          - CamelContext: cdi-camel-xml has been shutdown, triggering shutdown of the JVM.
2016-04-26 17:16:50,259 [Thread-5       ] INFO  DefaultCamelContext            - Apache Camel 2.18.0 (CamelContext: cdi-camel-xml) uptime 7 minutes
2016-04-26 17:16:50,259 [Thread-5       ] INFO  DefaultCamelContext            - Apache Camel 2.18.0 (CamelContext: cdi-camel-xml) is shutdown in 0.079 seconds
 _____ _       _     _                     
|   __| |_ _ _| |_ _| |___ _ _ _ ___       
|__   |   | | |  _| . | . | | | |   |_ _ _ 
|_____|_|_|___|_| |___|___|_____|_|_|_|_|_|
2016-04-26 17:16:50,275 [Thread-5       ] INFO  Bootstrap                      - WELD-ENV-002001: Weld SE container STATIC_INSTANCE shut down
....

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/support.html[let us know].

We also love contributors, so
https://camel.apache.org/contributing.html[get involved] :-)

The Camel riders!
