Tiny example with source code generated configurer
diff --git a/examples/camel-example-main-tiny/pom.xml b/examples/camel-example-main-tiny/pom.xml
index dacd76b..b5f331e 100644
--- a/examples/camel-example-main-tiny/pom.xml
+++ b/examples/camel-example-main-tiny/pom.xml
@@ -93,16 +93,44 @@
<build>
<plugins>
- <!-- Run 'mvn camel-main:generate' -->
- <!-- generate autowire.properties file that can automatic detect resources
- from the classpath to make convention over configuration for Camel components -->
+ <!-- generate source code for configurer classes, which avoids reflection -->
<plugin>
<groupId>org.apache.camel</groupId>
- <artifactId>camel-main-maven-plugin</artifactId>
+ <artifactId>camel-package-maven-plugin</artifactId>
<version>${camel.version}</version>
- <configuration>
- <logClasspath>false</logClasspath>
- </configuration>
+ <executions>
+ <execution>
+ <id>generate</id>
+ <goals>
+ <goal>generate-component</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- include source code generated to maven sources paths -->
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>3.1.0</version>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ <goal>add-resource</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/generated/java</source>
+ </sources>
+ <resources>
+ <resource>
+ <directory>src/generated/resources</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
diff --git a/examples/camel-example-main-tiny/readme.adoc b/examples/camel-example-main-tiny/readme.adoc
index f6f7ce7..dd99121 100644
--- a/examples/camel-example-main-tiny/readme.adoc
+++ b/examples/camel-example-main-tiny/readme.adoc
@@ -5,11 +5,7 @@
This example shows how to run Camel standalone via the built-in Main class.
-The example also demonstrates how you can configure the Camel application
-via Camel built-in dependency-injection that supports binding via the
-`@BindToRegistry`, `@BeanInject` and `@PropertyInject` annotations.
-
-Also notice how you can configure Camel in the `application.properties` file.
+Notice how you can configure Camel in the `application.properties` file.
=== How to run
diff --git a/examples/camel-example-main-tiny/src/generated/java/org/apache/camel/example/MyBeanConfigurer.java b/examples/camel-example-main-tiny/src/generated/java/org/apache/camel/example/MyBeanConfigurer.java
new file mode 100644
index 0000000..73d4b8e
--- /dev/null
+++ b/examples/camel-example-main-tiny/src/generated/java/org/apache/camel/example/MyBeanConfigurer.java
@@ -0,0 +1,45 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.example;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.example.MyBean;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class MyBeanConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+ @Override
+ public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+ org.apache.camel.example.MyBean target = (org.apache.camel.example.MyBean) obj;
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "hi":
+ case "Hi": target.setHi(property(camelContext, java.lang.String.class, value)); return true;
+ default: return false;
+ }
+ }
+
+ @Override
+ public Map<String, Object> getAllOptions(Object target) {
+ Map<String, Object> answer = new CaseInsensitiveMap();
+ answer.put("Hi", java.lang.String.class);
+ return answer;
+ }
+
+ @Override
+ public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+ org.apache.camel.example.MyBean target = (org.apache.camel.example.MyBean) obj;
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "hi":
+ case "Hi": return target.getHi();
+ default: return null;
+ }
+ }
+}
+
diff --git a/examples/camel-example-main-tiny/src/generated/resources/META-INF/services/org/apache/camel/configurer/MyBean b/examples/camel-example-main-tiny/src/generated/resources/META-INF/services/org/apache/camel/configurer/MyBean
new file mode 100644
index 0000000..24d3637
--- /dev/null
+++ b/examples/camel-example-main-tiny/src/generated/resources/META-INF/services/org/apache/camel/configurer/MyBean
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.example.MyBeanConfigurer
diff --git a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyApplication.java b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyApplication.java
index c6214d0..8c1cc6a 100644
--- a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyApplication.java
+++ b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyApplication.java
@@ -29,9 +29,6 @@
public static void main(String[] args) throws Exception {
// use Camels Main class
Main main = new Main();
- // lets use a configuration class (you can specify multiple classes)
- // (properties are automatic loaded from application.properties)
- main.addConfigurationClass(MyConfiguration.class);
// and add the routes (you can specify multiple classes)
main.addRouteBuilder(MyRouteBuilder.class);
// now keep the application running until the JVM is terminated (ctrl + c or sigterm)
diff --git a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyBean.java b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyBean.java
index 1e1bdb8..348a0a6 100644
--- a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyBean.java
+++ b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyBean.java
@@ -16,21 +16,23 @@
*/
package org.apache.camel.example;
+import org.apache.camel.spi.Configurer;
+
+@Configurer
public class MyBean {
private String hi;
- private String bye;
- public MyBean(String hi, String bye) {
+ public String getHi() {
+ return hi;
+ }
+
+ public void setHi(String hi) {
this.hi = hi;
- this.bye = bye;
}
public String hello() {
return hi + " how are you?";
}
- public String bye() {
- return bye + " World";
- }
}
diff --git a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyConfiguration.java b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyConfiguration.java
deleted file mode 100644
index 9c26fdd..0000000
--- a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyConfiguration.java
+++ /dev/null
@@ -1,37 +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;
-
-import org.apache.camel.BindToRegistry;
-import org.apache.camel.PropertyInject;
-
-/**
- * Class to configure the Camel application.
- */
-public class MyConfiguration {
-
- @BindToRegistry
- public MyBean myBean(@PropertyInject("hi") String hi, @PropertyInject("bye") String bye) {
- // this will create an instance of this bean with the name of the method (eg myBean)
- return new MyBean(hi, bye);
- }
-
- public void configure() {
- // this method is optional and can be removed if no additional configuration is needed.
- }
-
-}
diff --git a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyRouteBuilder.java b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyRouteBuilder.java
index 26971ba..185c9df 100644
--- a/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyRouteBuilder.java
+++ b/examples/camel-example-main-tiny/src/main/java/org/apache/camel/example/MyRouteBuilder.java
@@ -23,7 +23,7 @@
@Override
public void configure() throws Exception {
from("timer:foo?period={{myPeriod}}")
- .bean("myBean", "hello")
+ .bean("mybean", "hello")
.log("${body}");
}
}
diff --git a/examples/camel-example-main-tiny/src/main/resources/application.properties b/examples/camel-example-main-tiny/src/main/resources/application.properties
index a58bbe6..61379fc 100644
--- a/examples/camel-example-main-tiny/src/main/resources/application.properties
+++ b/examples/camel-example-main-tiny/src/main/resources/application.properties
@@ -48,6 +48,7 @@
# properties used in the route
myPeriod = 1000
-# application properties
-hi = Hello
+# configure beans
+camel.beans.mybean = #class:org.apache.camel.example.MyBean
+camel.beans.mybean.hi = Hello