(#56) Update generic component usage examples
diff --git a/generic-examples/amqp/AmqpConnectionBeanConsumer.java b/generic-examples/amqp/AmqpConnectionBeanConsumer.java
index e4b876d..b2a43ee 100644
--- a/generic-examples/amqp/AmqpConnectionBeanConsumer.java
+++ b/generic-examples/amqp/AmqpConnectionBeanConsumer.java
@@ -15,12 +15,6 @@
  * limitations under the License.
  */
 
-// You can bundle your credentials as a secret properties file:
-//
-// kubectl create secret generic my-amqp --from-file=amqp.properties
-// 
-// kamel run AmqpConnectionBeanConsumer.java --dev --config secret:my-amqp
-
 public class AmqpConnectionBeanConsumer extends org.apache.camel.builder.RouteBuilder {
     @Override
     public void configure() throws Exception {
diff --git a/generic-examples/amqp/AmqpConnectionBeanProducer.java b/generic-examples/amqp/AmqpConnectionBeanProducer.java
index 5b5a7aa..1e1dd64 100644
--- a/generic-examples/amqp/AmqpConnectionBeanProducer.java
+++ b/generic-examples/amqp/AmqpConnectionBeanProducer.java
@@ -15,12 +15,6 @@
  * limitations under the License.
  */
 
-// You can bundle your credentials as a secret properties file:
-//
-// kubectl create secret generic my-amqp --from-file=amqp.properties
-// 
-// kamel run AmqpConnectionBeanProducer.java --dev --config secret:my-amqp
-
 public class AmqpConnectionBeanProducer extends org.apache.camel.builder.RouteBuilder {
     @Override
     public void configure() throws Exception {
diff --git a/generic-examples/amqp/README.md b/generic-examples/amqp/README.md
index 4d2b075..4abcb6f 100644
--- a/generic-examples/amqp/README.md
+++ b/generic-examples/amqp/README.md
@@ -23,25 +23,19 @@
 - [`amqp.properties`](./amqp.properties) holds required credentials to connect to broker.
 
 ## Running the Example
+
 You should have an amqp broker running in a namespace, if not, see [how to install a JMS/AMQP Broker on Kubernetes](./artemis/)
 
-To create a secret for your credentials, run:
+To run an integration that sends/consumes message to amqp queue, run:
 ```
 kubectl create secret generic my-amqp --from-file=amqp.properties
+kamel run --dev --config secret:my-amqp amqp.yaml
 ```
 
-To run an integration that sends message to amqp queue, run:
-```
-kamel run AmqpConnectionBeanProducer.java --config secret:my-amqp
-```
-
-To consume messages from the amqp queue, run:
-```
-kamel run AmqpConnectionBeanConsumer.java --dev --config secret:my-amqp
-```
 The terminal should show the logged messages:
 ```console
-[1] 2022-06-21 15:44:46,513 INFO  [info] (Camel (camel-1) thread #1 - JmsConsumer[example]) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K]
-[1] 2022-06-21 15:44:47,513 INFO  [info] (Camel (camel-1) thread #1 - JmsConsumer[example]) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K]
-[1] 2022-06-21 15:44:48,517 INFO  [info] (Camel (camel-1) thread #1 - JmsConsumer[example]) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K]
+[1] 2024-05-23 07:12:27,778 INFO  [org.apa.qpi.jms.JmsConnection] (AmqpProvider :(8):[amqp://my-amqp-service:5672]) Connection ID:e04a1ef1-d167-4aed-b525-6959666be4a8:8 connected to server: amqp://my-amqp-service:5672
+[1] 2024-05-23 07:12:27,788 INFO  [info] (Camel (camel-1) thread #1 - JmsConsumer[example]) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K]
+[1] 2024-05-23 07:12:28,772 INFO  [org.apa.qpi.jms.JmsConnection] (AmqpProvider :(9):[amqp://my-amqp-service:5672]) Connection ID:34387545-ef55-429a-976f-a28cd2d5e038:9 connected to server: amqp://my-amqp-service:5672
+[1] 2024-05-23 07:12:28,783 INFO  [info] (Camel (camel-1) thread #1 - JmsConsumer[example]) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K]
 ```
\ No newline at end of file
diff --git a/generic-examples/amqp/amqp.groovy b/generic-examples/amqp/amqp.groovy
deleted file mode 100644
index aebb3fb..0000000
--- a/generic-examples/amqp/amqp.groovy
+++ /dev/null
@@ -1,39 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-//
-// To run this integrations use:
-//
-//     kamel run -e BROKER_URL=<service-name>.<namespace>.svc.cluster.local -d camel-amqp amqp.groovy
-//
-
-camel {
-    components {
-        amqp {
-            connectionFactory = new org.apache.qpid.jms.JmsConnectionFactory(
-                new URI('amqp://' + System.getenv('BROKER_URL'))
-            )
-        }
-    }
-}
-
-from('timer:js?period=1000')
-    .routeId('js')
-    .setBody()
-        .simple('Hello Camel K')
-    .to('amqp:topic:example?exchangePattern=InOnly')
diff --git a/generic-examples/amqp/amqp.js b/generic-examples/amqp/amqp.js
deleted file mode 100644
index 78db23a..0000000
--- a/generic-examples/amqp/amqp.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// camel-k: language=js
-// 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.
-
-//
-// To run this integrations use:
-//
-//     kamel run -e BROKER_URL=event-bus-amqp-0-svc.messaging.svc.cluster.local -d camel-amqp examples/amqp.js
-//
-components.get('amqp')
-    .setConnectionFactory(
-        new org.apache.qpid.jms.JmsConnectionFactory('amqp://' + java.lang.System.getenv('BROKER_URL'))
-    );
-
-from('timer:js?period=1000')
-    .routeId('js')
-    .setBody()
-        .simple('Hello Camel K')
-    .to('amqp:topic:example?exchangePattern=InOnly')
diff --git a/generic-examples/amqp/amqp.yaml b/generic-examples/amqp/amqp.yaml
new file mode 100644
index 0000000..64fd7a5
--- /dev/null
+++ b/generic-examples/amqp/amqp.yaml
@@ -0,0 +1,32 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+# camel-k: dependency=camel-amqp
+
+- from:
+   uri: "timer:foo"
+   steps:
+    - setBody:
+       simple: "Hello Camel K"
+    - to: "amqp:queue:example?exchangePattern=InOnly"
+
+- from:
+    uri: "amqp:queue:example?exchangePattern=InOnly"
+    steps:
+      - to: "log:info"
diff --git a/generic-examples/amqp/artemis/README.md b/generic-examples/amqp/artemis/README.md
index 565fe87..977b520 100644
--- a/generic-examples/amqp/artemis/README.md
+++ b/generic-examples/amqp/artemis/README.md
@@ -4,15 +4,27 @@
 
 ## Create a Kubernetes Deployment
 
-You can [install ActiveMQ Artemis Operator on Kubernetes](https://artemiscloud.io/docs/tutorials/using_operator/) thanks to ArtemisCloud.io. It would be enough to execute steps 1 and 2 of the linked tutorial post. \
+You can [install ActiveMQ Artemis Operator on Kubernetes](https://artemiscloud.io/docs/tutorials/using_operator/) thanks to ArtemisCloud.io. 
+It would be enough to execute steps 1 and 2 of the linked tutorial post.
+
 **Note:** Openshift environments may require some adjustments, see [Installing the AMQ Broker Operator](https://access.redhat.com/documentation/en-us/red_hat_amq/7.4/html/deploying_amq_broker_on_openshift_container_platform/broker-operator-broker-ocp#install-broker-operator-broker-ocp)
 
+## Verify that the Artemis Operator is running
+
+```
+$ kubectl get pod -l name=activemq-artemis-operator -w
+NAME                                                   READY   STATUS              RESTARTS   AGE
+activemq-artemis-controller-manager-55645cc79f-q2qbj   0/1     ContainerCreating   0          48s
+activemq-artemis-controller-manager-55645cc79f-q2qbj   0/1     Running             0          56s
+activemq-artemis-controller-manager-55645cc79f-q2qbj   1/1     Running             0          61s
+```
+
 ## Create an AMQP broker instance
 
 Once the operator is up and running, you can proceed by creating a basic install of a broker accepting `amqp` protocol:
 
 ```
-kubectl apply -f artemis-amqp.yaml
+kubectl apply -f ./artemis/artemis-amqp.yaml
 ```
 
 ## Expose the Broker via service
@@ -20,8 +32,7 @@
 We need to make the broker accessible from the `Integration`. Let's do that via a `Service`:
 
 ```
-kubectl apply -f artemis-service.yaml
-
+kubectl apply -f ./artemis/artemis-service.yaml
 ```
 
 We're now ready to use the `Broker`.
diff --git a/generic-examples/caffeine/README.md b/generic-examples/caffeine/README.md
index b10058a..df19e32 100644
--- a/generic-examples/caffeine/README.md
+++ b/generic-examples/caffeine/README.md
@@ -13,17 +13,17 @@
 
 ## Understanding the Example
 
-- [`CaffeineCacheSample.java`](./CaffeineCacheSample.java) defines a route that every second:
+- [`camel-caffeine.yaml`](./CaffeineCacheSample.java) defines a route that every second:
     - uses message headers to PUT a key-value pair in the cache and log the result
     - uses message headers to GET the cached value for the key and log the result
     - uses message headers to INVALIDATE the cached value for the key, logs about invalidating the data
     - uses message headers to GET the now discarded cached value for the key and log the result
-- [`camel-caffeine.groovy`](./camel-caffeine.groovy) does the same thing as `CaffeineCacheSample.java` except that a bean is defined and accumulation of cache statistics is enabled.
 
 ## Running the Example
+
 To see the logs in the terminal, run the integration in dev mode:
 ```
-kamel run --dev CaffeineCacheSample.java
+kamel run --dev camel-caffeine.yaml
 ```
 
 The following should be logged continuously to the terminal:
diff --git a/generic-examples/caffeine/camel-caffeine.groovy b/generic-examples/caffeine/camel-caffeine.groovy
deleted file mode 100644
index 0987bfe..0000000
--- a/generic-examples/caffeine/camel-caffeine.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-//
-// To run this integration use:
-//
-//     kamel run camel-caffeine.groovy
-//
-
-import com.github.benmanes.caffeine.cache.Caffeine
-
-beans {
-    caffeineCache = Caffeine.newBuilder().recordStats().build()
-}
-
-from('timer:tick')
-  .setBody().constant('Hello')
-  .process {
-    it.in.headers['CamelCaffeineAction'] = 'PUT'
-    it.in.headers['CamelCaffeineKey'] = 1
-  }
-  .toF('caffeine-cache://%s', 'caffeineCache')
-  .log('Result of Action ${header.CamelCaffeineAction} with key ${header.CamelCaffeineKey} is: ${body}')
-  .setBody().constant(null)
-  .process {
-    it.in.headers['CamelCaffeineAction'] = 'GET'
-    it.in.headers['CamelCaffeineKey'] = 1
-  }
-  .toF('caffeine-cache://%s', 'caffeineCache')
-  .log('Result of Action ${header.CamelCaffeineAction} with key ${header.CamelCaffeineKey} is: ${body}')
-  .setBody().constant(null)
-  .process {
-    it.in.headers['CamelCaffeineAction'] = 'INVALIDATE'
-    it.in.headers['CamelCaffeineKey'] = 1
-  }
-  .toF('caffeine-cache://%s', 'caffeineCache')
-  .log('Invalidating entry with key ${header.CamelCaffeineKey}')
-  .setBody().constant(null)
-  .process {
-    it.in.headers['CamelCaffeineAction'] = 'GET'
-    it.in.headers['CamelCaffeineKey'] = 1
-  }
-  .toF('caffeine-cache://%s', 'caffeineCache')
-  .log('The Action ${header.CamelCaffeineAction} with key ${header.CamelCaffeineKey} has result? ${header.CamelCaffeineActionHasResult}');
diff --git a/generic-examples/caffeine/camel-caffeine.yaml b/generic-examples/caffeine/camel-caffeine.yaml
new file mode 100644
index 0000000..d707a4a
--- /dev/null
+++ b/generic-examples/caffeine/camel-caffeine.yaml
@@ -0,0 +1,55 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+- from:
+    uri: "timer:tick"
+    steps:
+      - setBody:
+          constant: "Hello"
+      - setHeader:
+          name: "CamelCaffeineAction"
+          constant: "PUT"
+      - setHeader:
+          name: "CamelCaffeineKey"
+          constant: "1"
+      - to: "caffeine-cache://test"
+      - setBody:
+          simple: "Result of Action ${header.CamelCaffeineAction} with key ${header.CamelCaffeineKey} is: ${body}"
+      - to: "log:info"
+
+      - setBody:
+          constant: null
+      - setHeader:
+          name: "CamelCaffeineAction"
+          constant: "GET"
+      - to: "caffeine-cache://test"
+      - setBody:
+          simple: "Result of Action ${header.CamelCaffeineAction} with key ${header.CamelCaffeineKey} is: ${body}"
+      - to: "log:info"
+
+      - setBody:
+          constant: null
+      - setHeader:
+          name: "CamelCaffeineAction"
+          constant: "INVALIDATE"
+      - log: "Invalidating entry with key ${header.CamelCaffeineKey}"
+      - to: "caffeine-cache://test"
+      - setBody:
+          simple: "The Action ${header.CamelCaffeineAction} with key ${header.CamelCaffeineKey} has result? ${header.CamelCaffeineActionHasResult}"
+      - to: "log:info"
diff --git a/generic-examples/databases/PostgresDBAutoDatasource.java b/generic-examples/databases/PostgresDBAutoDatasource.java
index 5f66f0d..f42c448 100644
--- a/generic-examples/databases/PostgresDBAutoDatasource.java
+++ b/generic-examples/databases/PostgresDBAutoDatasource.java
@@ -15,21 +15,8 @@
  * limitations under the License.
  */
 
-// kamel run PostgresDBAutoDatasource.java --dev 
-//                                          --build-property quarkus.datasource.camel.db-kind=postgresql 
-//                                          -p quarkus.datasource.camel.jdbc.url=jdbc:postgresql://postgres:5432/test 
-//                                          -p quarkus.datasource.camel.username=postgresadmin 
-//                                          -p quarkus.datasource.camel.password=admin123 
-//                                          -d mvn:io.quarkus:quarkus-jdbc-postgresql:2.10.0.Final
-// 
-// Alternatively, you can bundle your credentials as a secret properties file:
-//
-// kubectl create secret generic my-datasource --from-file=datasource.properties
-// 
-// kamel run PostgresDBAutoDatasource.java --dev 
-//                                          --build-property quarkus.datasource.camel.db-kind=postgresql 
-//                                          --config secret:my-datasource
-//                                          -d mvn:io.quarkus:quarkus-jdbc-postgresql:2.10.0.Final
+// camel-k: build-property=quarkus.datasource.camel.db-kind=postgresql
+// camel-k: dependency=mvn:io.quarkus:quarkus-jdbc-postgresql:2.10.0.Final
 
 import org.apache.camel.builder.RouteBuilder;
 
diff --git a/generic-examples/databases/README.md b/generic-examples/databases/README.md
index 0f06a24..c89f7ad 100644
--- a/generic-examples/databases/README.md
+++ b/generic-examples/databases/README.md
@@ -20,16 +20,16 @@
 - [`datasource.properties`](./datasource.properties) holds your credentials for connecting to the database.
 
 ## Running the Example
+
 You should have a PostgreSQL instance running in a namespace. If not see [How to deploy a simple Postgres DB to a Kubernetes cluster](./postgres-deploy/)
 
-Bundle your credentials as a secret:
+Run the integration:
+
 ```
 kubectl create secret generic my-datasource --from-file=datasource.properties
-```
+kamel run --dev --config secret:my-datasource PostgresDBAutoDatasource.java
 
-Run the integration:
-```
-kamel run PostgresDBAutoDatasource.java --dev --build-property quarkus.datasource.camel.db-kind=postgresql --config secret:my-datasource -d mvn:io.quarkus:quarkus-jdbc-postgresql:2.10.0.Final
+kamel run --dev --config secret:my-datasource postgres-route.yaml
 ```
 
 If successful, the query result: `hello` and `world`, should be logged to the terminal every 10 seconds:
@@ -41,21 +41,22 @@
 
 ## Multiple datasources example
 
-An additional example using multiple datasources with an in-memory H2 database is available as a standalone. It does not requires the PostgreSQL instance.
+An additional example using multiple datasources with an in-memory H2 database is available as a standalone integration. 
+It does not require the PostgreSQL instance.
 
 It shows how to configure and use multiple datasources.
 
 [`H2DBMultiDatasources.java`](./H2DBMultiDatasources.java) contains the integration code. It defines 2 datasources, with 3 routes:
 - initialise a table with each datasource only once
-- insert periodically datas via each datasource
-- queries periodically bot datasources and logs the result.
+- insert periodically data via each datasource
+- queries periodically both datasources and logs the result.
 
 You will find most of the configuration parameters inside the integration code.
 
-
 To run it you only need the following :
+
 ```
-kamel run H2DBMultiDatasources.java --dev
+kamel run --dev H2DBMultiDatasources.java
 ```
 
 If successful, the following should be logged to the terminal every 10 seconds:
diff --git a/generic-examples/databases/postgres-deploy/README.md b/generic-examples/databases/postgres-deploy/README.md
index aa8396c..11d3423 100644
--- a/generic-examples/databases/postgres-deploy/README.md
+++ b/generic-examples/databases/postgres-deploy/README.md
@@ -15,6 +15,7 @@
 kubectl create -f postgres-deployment.yaml
 kubectl create -f postgres-service.yaml
 ```
+
 ## Test the connection
 
 Connection credentials available in the [postgres-configmap.yaml](./postgres-configmap.yaml) descriptor.
@@ -23,10 +24,11 @@
 kubectl get svc postgres
 ```
 
-To connect to the PostgreSQL database, run the command below, changing the pod name:
+To connect to the PostgreSQL database, run the command below:
 ```
-kubectl exec -it postgres-xxxx -- psql -h postgres -U postgresadmin --password -p 5432 postgresdb
+kubectl exec -it $(kubectl get pod -l app=postgres -o name) -- psql -h postgres -U postgresadmin --password -p 5432 postgresdb
 ```
+
 You will be prompted for password. Connection credentials are in the [postgres-configmap.yaml](./postgres-configmap.yaml) file. \
 After you enter your password, you should get a PostgreSQL shell
 
@@ -42,9 +44,11 @@
 CREATE TABLE test (data TEXT PRIMARY KEY);
 INSERT INTO test(data) VALUES ('hello'), ('world');
 ```
+
 ### Read the `test` table from the `testdb` database
 ```
 SELECT * FROM test;
 ```
-You should see 2 rows containing 'hello' and 'world' respectively. Enter `exit` to exit the shell. \
+
+You should see 2 rows containing 'hello' and 'world' respectively. Enter `exit` to exit the shell.
 Our `testdb` database works fine and can now be used in a Camel K integration.
diff --git a/generic-examples/databases/postgres-route.yaml b/generic-examples/databases/postgres-route.yaml
new file mode 100644
index 0000000..11f1061
--- /dev/null
+++ b/generic-examples/databases/postgres-route.yaml
@@ -0,0 +1,29 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+# camel-k: build-property=quarkus.datasource.camel.db-kind=postgresql
+# camel-k: dependency=mvn:io.quarkus:quarkus-jdbc-postgresql:2.10.0.Final
+
+- from:
+    uri: "timer:foo?period=10000"
+    steps:
+      - setBody:
+          constant: "SELECT * FROM test"
+      - to: "jdbc:camel"
+      - to: "log:info"
diff --git a/generic-examples/dns/README.md b/generic-examples/dns/README.md
index ea6599c..86562f1 100644
--- a/generic-examples/dns/README.md
+++ b/generic-examples/dns/README.md
@@ -18,10 +18,12 @@
 To learn about more options for configuring DNS queries, [see here](https://camel.apache.org/components/3.17.x/dns-component.html)
 
 ## Running the Examples
+
 Run the `ip.js` integration:
 ```
-kamel run ip.js --dev
+kamel run --dev ip.js
 ```
+
 You should see the `IP address` logged to the terminal every second:
 ```terminal
 ...
@@ -31,8 +33,9 @@
 
 Run the `lookup.js` integration:
 ```
-kamel run lookup.js --dev
+kamel run --dev lookup.js
 ```
+
 Every 10 seconds, You should see the MX records associated with the specified domain being logged to the terminal. Each MX record should have a `Target` value, a `Priority` value for the target, and a `TTL` value:
 ```terminal
 ...
diff --git a/generic-examples/dns/ip.js b/generic-examples/dns/ip.js
index ed88f3d..d4c7e8b 100644
--- a/generic-examples/dns/ip.js
+++ b/generic-examples/dns/ip.js
@@ -14,12 +14,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-//
-// To run this integrations use:
-//
-//     kamel run ip.js
-//
-
 from('timer:dns?period=1000')
   .routeId('dns')
   .setHeader('dns.domain')
diff --git a/generic-examples/dns/lookup.js b/generic-examples/dns/lookup.js
index 7f769b0..5cfff84 100644
--- a/generic-examples/dns/lookup.js
+++ b/generic-examples/dns/lookup.js
@@ -14,12 +14,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-//
-// To run this integrations use:
-//
-//     kamel run lookup.js --dev
-//
-
 from('timer:dns?period=10000')
   .routeId('dns')
   .setHeader('dns.name', constant('gmail.com'))
diff --git a/generic-examples/http/NettySecureServer.java b/generic-examples/http/NettySecureServer.java
index 202a9d8..356cdf5 100644
--- a/generic-examples/http/NettySecureServer.java
+++ b/generic-examples/http/NettySecureServer.java
@@ -26,19 +26,6 @@
 // kubectl create secret generic http-keystore --from-file keystore.jks
 // kubectl create secret generic http-truststore --from-file truststore.jks
 
-// Run the integration:
-//
-// kamel run NettySecureServer.java
-//        -t mount.resources=secret:http-keystore/keystore.jks@/etc/ssl/keystore.jks
-//        -t mount.resources=secret:http-truststore/truststore.jks@/etc/ssl/truststore.jks
-//        -t container.port=8443 -t service.type=NodePort --dev
-
-// Test
-//
-// recover the service location. If you're running on minikube, "minikube service netty-secure-server --url=true --https=true"
-// curl -k https://<service-location>/hello
-//
-
 import org.apache.camel.builder.RouteBuilder;
 
 import org.apache.camel.support.jsse.*;
diff --git a/generic-examples/http/NettyServer.java b/generic-examples/http/NettyServer.java
index 85850d0..943aedf 100644
--- a/generic-examples/http/NettyServer.java
+++ b/generic-examples/http/NettyServer.java
@@ -15,16 +15,6 @@
  * limitations under the License.
  */
 
-// Run integration
-//
-// kamel run NettyServer.java -t service.type=NodePor --dev
-
-// Test
-//
-// recover the service location. If you're running on minikube, minikube service netty-server --url=true
-// curl http://<service-location>/hello
-//
-
 import org.apache.camel.builder.RouteBuilder;
 
 public class NettyServer extends RouteBuilder {
diff --git a/generic-examples/http/PlatformHttpServer.java b/generic-examples/http/PlatformHttpServer.java
index 04599c1..afe67a4 100644
--- a/generic-examples/http/PlatformHttpServer.java
+++ b/generic-examples/http/PlatformHttpServer.java
@@ -15,15 +15,8 @@
  * limitations under the License.
  */
 
-// Run integration
-//
-// kamel run PlatformHttpServer.java -t service.enabled=true -t service.type=NodePort --dev
-
-// Test
-//
-// recover the service location. If you're running on minikube, minikube service platform-http-server --url=true
-// curl -H "name:World" http://<service-location>/hello
-//
+// camel-k: trait=service.enabled=true
+// camel-k: trait=service.type=NodePort
 
 import org.apache.camel.builder.RouteBuilder;
 
diff --git a/generic-examples/http/PlatformHttpsServer.java b/generic-examples/http/PlatformHttpsServer.java
index 8fcb26e..a36f336 100644
--- a/generic-examples/http/PlatformHttpsServer.java
+++ b/generic-examples/http/PlatformHttpsServer.java
@@ -21,21 +21,11 @@
 // openssl req -new -key server.key -out server.csr
 // openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
 
-// Storing certificate and keys in a secret
-// kubectl create secret generic my-self-signed-ssl --from-file=server.key --from-file=server.crt
-
-// Integration execution
-//
-// kamel run PlatformHttpsServer.java -p quarkus.http.ssl.certificate.files=/etc/ssl/my-self-signed-ssl/server.crt
-//                                    -p quarkus.http.ssl.certificate.key-files=/etc/ssl/my-self-signed-ssl/server.key
-//                                    --resource secret:my-self-signed-ssl@/etc/ssl/my-self-signed-ssl
-//                                    -t container.port=8443 -t service.type=NodePort --dev
-
-// Test
-//
-// recover the service location. If you're running on minikube, minikube service platform-https-server --url=true
-// curl -H "name:World" -k https://<service-location>/hello
-//
+// camel-k: resource=secret:my-self-signed-ssl@/etc/ssl/my-self-signed-ssl
+// camel-k: property=quarkus.http.ssl.certificate.files=/etc/ssl/my-self-signed-ssl/server.crt
+// camel-k: property=quarkus.http.ssl.certificate.key-files=/etc/ssl/my-self-signed-ssl/server.key
+// camel-k: trait=service.type=NodePort
+// camel-k: trait=container.port=8443
 
 import org.apache.camel.builder.RouteBuilder;
 
diff --git a/generic-examples/http/README.md b/generic-examples/http/README.md
index 124e390..639d091 100644
--- a/generic-examples/http/README.md
+++ b/generic-examples/http/README.md
@@ -23,20 +23,64 @@
 
 ## Running the Examples
 
-### Run the Integration in `NettySecureServer.java`:
-This integration requires a Keystore and a Truststore. Open [NettySecureServer.java](./NettySecureServer.java) to find instructions on how to generate a required `keystore.jks` and `truststore.jks` file. For this example, keystore and trustore password is `changeit`
+### Run the NettyServer
+
+```
+kamel run --dev -t service.type=NodePort NettyServer.java
+```
+
+Get the service location. If you're running on minikube, run `minikube service netty-server --url=true`. 
+
+You should see "Hello World" displayed on `http://<service-location>/hello`.
+Alternatively, you could run: `curl http://<service-location>/hello`.
+
+### Run the NettySecureServer
+
+This integration requires a Keystore and a Truststore. Open [NettySecureServer.java](./NettySecureServer.java) to find instructions on how to generate a required `keystore.jks` and `truststore.jks` file. For this example, keystore and truststore password is `changeit`
 
 Run the integration:
-```
-kamel run NettySecureServer.java -t mount.resources=secret:http-keystore/keystore.jks@/etc/ssl/keystore.jks \
-        -t mount.resources=secret:http-truststore/truststore.jks@/etc/ssl/truststore.jks \
-        -t container.port=8443 -t service.type=NodePort --dev
-```
-Get the service location. If you're running on minikube, run `minikube service netty-secure-server --url=true --https=true` \
-Visit `https://<service-location>/hello`. You should see "Hello Secure World" displayed on the web page. \
-Alternatively, you could run: `curl -k https://<service-location>/hello`.
 
-### Run the other Integrations:
-- Open [NettyServer.java](./NettyServer.java) to find instruction on how to run the integration.
-- Open [PlatformHttpsServer.java](./PlatformHttpsServer.java) to find instructions on how to generate a required private key and self-signed certificate, and also how to run the integration.
-- Open [PlatformHttpServer.java](./PlatformHttpServer.java) to find instruction on how to run the integration.
+```
+kubectl create secret generic http-keystore --from-file keystore.jks
+kubectl create secret generic http-truststore --from-file truststore.jks
+
+kamel run --dev \
+  -t mount.resources=secret:http-keystore/keystore.jks@/etc/ssl/keystore.jks \
+  -t mount.resources=secret:http-truststore/truststore.jks@/etc/ssl/truststore.jks \
+  -t container.port=8443 -t service.type=NodePort \
+  NettySecureServer.java
+```
+
+Get the service location. If you're running on minikube, run `minikube service netty-secure-server --url=true --https=true`.
+
+You should see "Hello Secure World" displayed on `https://<service-location>/hello`.
+Alternatively, you could run: `curl -vk https://<service-location>/hello`.
+
+**TODO:** [[#98]](https://github.com/apache/camel-k-examples/issues/98) NettySecureServer may not be able to access keystore
+
+### Run the PlatformHttpServer
+
+```
+kamel run --dev PlatformHttpServer.java
+```
+
+Get the service location. If you're running on minikube, run `minikube service platform-http-server --url=true`.
+
+You can now run `curl -H name:World http://<service-location>/hello`.
+
+### Run the PlatformHttpsServer
+
+This integration requires a server key and certificate. 
+Open [PlatformHttpsServer.java](./PlatformHttpsServer.java) to find instructions on how to generate those. 
+
+Run the integration:
+
+```
+kubectl create secret generic my-self-signed-ssl --from-file=server.key --from-file=server.crt
+
+kamel run --dev PlatformHttpsServer.java
+```
+
+Get the service location. If you're running on minikube, run `minikube service platform-https-server --url=true --https=true`.
+
+You can now run `curl -vk -H name:World https://<service-location>/hello`.
diff --git a/generic-examples/kafka/README.md b/generic-examples/kafka/README.md
index 41545d6..d6ef450 100644
--- a/generic-examples/kafka/README.md
+++ b/generic-examples/kafka/README.md
@@ -12,6 +12,7 @@
 cluster before starting the example.
 
 ## Additional Requirements for running the examples
+
 **A Kafka broker**: handles the storage and passing of messages.
 
 ## Authentication to Kafka
@@ -20,6 +21,7 @@
 For a simple use case without client authentication, continue with this guide.
 
 ## Understanding the example
+
 - [SampleKafkaConsumer.java](./SampleKafkaConsumer.java): contains a route that reads message from a kafka topic and logs the message
 - [application.properties](./application.properties): holds properties required to connect to kafka broker and read from topic.
 
@@ -30,23 +32,24 @@
 
 **IMPORTANT:** The `kafka.host` value in `application.properties` needs to be set to the CLUSTER-IP address of the my-cluster-kafka-bootstrap service in the kafka namespace. To do this run:
 ```
-kafkaip=`kubectl get svc/my-cluster-kafka-bootstrap -n kafka -ojsonpath="{.spec.clusterIP}"`; sed -i "/kafka\.host/s/<.*>/$kafkaip/g" application.properties
+kafkaip=$(kubectl get svc/my-cluster-kafka-bootstrap -n kafka -ojsonpath="{.spec.clusterIP}")
+echo $kafkaip
 ```
 
 Create a configmap to contain the properties:
 ```
-kubectl create configmap kafka.props  --from-file=application.properties
+kubectl create configmap kafka.props --from-file application.properties
 ```
 
-
-
 Finally run this sample using the command:
 ```
-kamel run SampleKafkaConsumer.java --config=configmap:kafka.props
+kamel run --dev --config=configmap:kafka.props SampleKafkaConsumer.java
 ```
 
 To create messages to be read, use the producer command from the Strimzi page. Run in another terminal:
 ```
 kubectl -n kafka run kafka-producer -ti --image=quay.io/strimzi/kafka:0.30.0-kafka-3.2.0 --rm --restart=Never -- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic
 ```
-You should see a prompt where you can type messages to be sent to the `my-topic` topic.
\ No newline at end of file
+You should see a prompt where you can type messages to be sent to the `my-topic` topic.
+
+**TODO:** [[#99]](https://github.com/apache/camel-k-examples/issues/99) Add message producer route to kafka example 
diff --git a/generic-examples/knative/README.md b/generic-examples/knative/README.md
index deccf52..d677134 100644
--- a/generic-examples/knative/README.md
+++ b/generic-examples/knative/README.md
@@ -1,10 +1,12 @@
 # Knative Camel K Example
+
 This example shows how Camel K can be used to connect Knative building blocks to create awesome applications.
 
 A video version of this [demo is available on YouTube](https://youtu.be/btf_e2GniXM).
 **NB:** This video shows an outdated way of configuring the Camel Telegram component. The recent way uses a required `authorizationToken` query parameter (see the "Playing harder" section below).
 
-It's assumed that both Camel K and Knative are properly installed (both Knative Serving and Eventing) into the cluster. If not, please refer to the [official documentation to install and configure the components](https://knative.dev/docs/install/).
+It's assumed that both Camel K and Knative are properly installed (both Knative Serving and Eventing) into the cluster. 
+If not, please refer to the [official documentation to install and configure the components](https://knative.dev/docs/install/).
 
 We're going to create two channels:
 - messages
@@ -27,16 +29,17 @@
 
 Writing a "function" that does this is as simple as writing:
 
-```
-from('knative:channel/words')
-  .convertBodyTo(String.class)
-  .to('log:info')
+```yaml
+- from:
+   uri: "knative:channel/words"
+   steps:
+    - to: "log:info"
 ```
 
 You can run this integration by running:
 
-```
-kamel run printer.groovy
+```shell
+kamel run --dev printer.yaml
 ```
 
 Under the hood, the Camel K operator does this:
@@ -53,17 +56,22 @@
 
 The integration code is super simple:
 
-```
-from('knative:channel/messages')
-  .split().tokenize(" ")
-  .log('sending ${body} to words channel')
-  .to('knative:channel/words')
+```yaml
+- from:
+    uri: "knative:channel/messages"
+    steps:
+      - split:
+          tokenize:
+            token: ' '
+          steps:
+            - log: "sending ${body} to words channel"
+            - to: "knative:channel/words"
 ```
 
 Let's run it with:
 
-```
-kamel run splitter.groovy
+```shell
+kamel run --dev splitter.yaml
 ```
 
 This integration will be also materialized as a Knative autoscaling service, because the only entrypoint is passive (waits for a push notification).
@@ -72,19 +80,22 @@
 
 We're going to feed this chain of functions using a timed feed like this:
 
-```
-from('timer:clock?period=3000')
-  .setBody().constant("Hello World from Camel K")
-  .to('knative:channel/messages')
-  .log('sent message to messages channel')
+```yaml
+- from:
+   uri: "timer:clock?period=3000"
+   steps:
+    - setBody:
+       constant: "Hello World from Camel K"
+    - to: "knative:channel/messages"
+    - log: "sent message to channel: messages"
 ```
 
 Every 3 seconds, the integration sends a message to the Knative `messages` channel.
 
 Let's run it with:
 
-```
-kamel run feed.groovy
+```shell
+kamel run --dev feed.yaml
 ```
 
 This cannot be materialized into an autoscaling service, but the operator understands it automatically and maps it to a plain Kubernetes Deployment
diff --git a/generic-examples/knative/feed.groovy b/generic-examples/knative/feed.groovy
deleted file mode 100644
index a456c8b..0000000
--- a/generic-examples/knative/feed.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-from('timer:clock?period=3000')
-	.setBody().constant("Hello World from Camel K")
-	.to('knative:channel/messages')
-	.log('sent message to messages channel')
diff --git a/generic-examples/knative/feed.yaml b/generic-examples/knative/feed.yaml
new file mode 100644
index 0000000..790be55
--- /dev/null
+++ b/generic-examples/knative/feed.yaml
@@ -0,0 +1,26 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+- from:
+   uri: "timer:clock?period=3000"
+   steps:
+    - setBody:
+       constant: "Hello World from Camel K"
+    - to: "knative:channel/messages"
+    - log: "sent message to channel: messages"
diff --git a/generic-examples/knative/printer.groovy b/generic-examples/knative/printer.groovy
deleted file mode 100644
index fa3aa8f..0000000
--- a/generic-examples/knative/printer.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-from('knative:channel/words')
-  .convertBodyTo(String.class)
-  .to('log:info')
diff --git a/generic-examples/knative/printer.yaml b/generic-examples/knative/printer.yaml
new file mode 100644
index 0000000..939b976
--- /dev/null
+++ b/generic-examples/knative/printer.yaml
@@ -0,0 +1,23 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+- from:
+   uri: "knative:channel/words"
+   steps:
+    - to: "log:info"
diff --git a/generic-examples/knative/reader.groovy b/generic-examples/knative/reader.groovy
deleted file mode 100644
index 2a96560..0000000
--- a/generic-examples/knative/reader.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-from('knative:endpoint/reader')
-  .log('got ${body}')
\ No newline at end of file
diff --git a/generic-examples/knative/splitter.groovy b/generic-examples/knative/splitter.groovy
deleted file mode 100644
index 4bde12c..0000000
--- a/generic-examples/knative/splitter.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-from('knative:channel/messages')
-  .split().tokenize(" ")
-  .log('sending ${body} to words channel')
-  .to('knative:channel/words')
\ No newline at end of file
diff --git a/generic-examples/knative/splitter.yaml b/generic-examples/knative/splitter.yaml
new file mode 100644
index 0000000..505617f
--- /dev/null
+++ b/generic-examples/knative/splitter.yaml
@@ -0,0 +1,28 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+- from:
+    uri: "knative:channel/messages"
+    steps:
+      - split:
+          tokenize:
+            token: ' '
+          steps:
+            - log: "sending ${body} to words channel"
+            - to: "knative:channel/words"
diff --git a/generic-examples/knative/writer.groovy b/generic-examples/knative/writer.groovy
deleted file mode 100644
index a452f4c..0000000
--- a/generic-examples/knative/writer.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-// camel-k: language=groovy
-/*
- * 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.
- */
-
-from('timer:messages?period=10000')
-  .setBody().constant('the-body')
-  .to('knative:endpoint/reader')