[ 
https://issues.apache.org/jira/browse/CAMEL-20352?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yury Kartsev updated CAMEL-20352:
---------------------------------
    Description: 
Some time ago a new property was added to Apache Camel in CAMEL-10421, called 
"includeNonSingletons". It was configured via 
"camel.springboot.includeNonSingletons" property. Now it looks like 
`org.apache.camel.main.DefaultRoutesCollector.collectRoutesFromRegistry` finds 
all RouteBuilder in its `findByType(camelContext, RoutesBuilder.class);` 
method, regardless of whether they're prototypes or not by calling Spring's 
.`org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(@Nullable
 Class<T> type)`, which hard-codes `includeNonSingletons` to `true`.  

In older Camel versions `org.apache.camel.spring.boot.RoutesCollector` class 
would run method `onApplicationEvent` and it would not touch prototypes due to 
this: "applicationContext.getBeansOfType(RoutesBuilder.class, 
configurationProperties.isIncludeNonSingletons(), true).values()".

This issue causes our code to fail because we have a RouteBuilder prototype 
with only constructor to set URI and routeId dynamically for each builder. But 
we don't need Camel to do it automatically, because it does not know what to 
pass to that constructor.

  was:
Some time ago a new property was added to Apache Camel in CAMEL-10421, called 
"includeNonSingletons". It was configured via 
"camel.springboot.includeNonSingletons" property. Now it looks like 
`org.apache.camel.main.DefaultRoutesCollector.collectRoutesFromRegistry` finds 
all RouteBuilder in its `findByType(camelContext, RoutesBuilder.class);` 
method, regardless of whether they're prototypes or not by calling Spring's 
.`org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(@Nullable
 Class<T> type)`, which hard-codes `includeNonSingletons` to `true`.  

In older Camel version class `org.apache.camel.spring.boot.RoutesCollector` 
would run method `onApplicationEvent` and it would not touch prototypes due to 
this: "applicationContext.getBeansOfType(RoutesBuilder.class, 
configurationProperties.isIncludeNonSingletons(), true).values()".

This issue causes our code to fail because we have a RouteBuilder prototype 
with only constructor to set URI and routeId dynamically for each builder. But 
we don't need Camel to do it automatically, because it does not know what to 
pass to that constructor.


> camel.springboot.includeNonSingletons is not respected anymore: prototype 
> Route Builders are always initialized. 
> -----------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-20352
>                 URL: https://issues.apache.org/jira/browse/CAMEL-20352
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-spring-boot
>    Affects Versions: 4.3.0
>            Reporter: Yury Kartsev
>            Priority: Major
>
> Some time ago a new property was added to Apache Camel in CAMEL-10421, called 
> "includeNonSingletons". It was configured via 
> "camel.springboot.includeNonSingletons" property. Now it looks like 
> `org.apache.camel.main.DefaultRoutesCollector.collectRoutesFromRegistry` 
> finds all RouteBuilder in its `findByType(camelContext, 
> RoutesBuilder.class);` method, regardless of whether they're prototypes or 
> not by calling Spring's 
> .`org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(@Nullable
>  Class<T> type)`, which hard-codes `includeNonSingletons` to `true`.  
> In older Camel versions `org.apache.camel.spring.boot.RoutesCollector` class 
> would run method `onApplicationEvent` and it would not touch prototypes due 
> to this: "applicationContext.getBeansOfType(RoutesBuilder.class, 
> configurationProperties.isIncludeNonSingletons(), true).values()".
> This issue causes our code to fail because we have a RouteBuilder prototype 
> with only constructor to set URI and routeId dynamically for each builder. 
> But we don't need Camel to do it automatically, because it does not know what 
> to pass to that constructor.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to