Thank you Guillaume,

You are correct,  I tried your suggestion locally and it does work.
I don’t know what are the potential side effects of this change though.
Probably better that somebody more familiar with this code takes a look and 
fixes it.

Best regards,
Alex soto


> On Feb 23, 2018, at 12:04 PM, Guillaume Nodet <gno...@apache.org> wrote:
> 
> As I indicated on the Karaf mailing list, I suspect the problem comes from
> 
> https://github.com/apache/camel/blob/master/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java#L1056
> 
> I think it should call getComponent(component, false) instead to ensure the
> component is not created eagerly.
> 
> The reason is that the exception is saying that the processor (the property
> placeholder) can't process the bean because it has been already
> instantiated.  And that call could be the culprit as the OSGi camel context
> may attempt to create the component.
> 
> That could break the original intent though, in which case, we'd need to go
> to the blueprint container and check if the component is available without
> creating it.
> 
> Guillaume
> 
> 
> 2018-02-23 17:55 GMT+01:00 Quinn Stevenson <qu...@pronoia-solutions.com>:
> 
>> That makes more sense :-)
>> 
>> When I’ve seen this kind of stuff before, it’s usually that the
>> initialization of bean that is a dependency of another bean fails.  I start
>> at the first exception I see - that usually points me to the right place.
>> 
>> In this case, it’s acting like it can’t find a setter for the correct type
>> - maybe that changed across Camel versions?
>> 
>>> On Feb 23, 2018, at 6:49 AM, Alex Soto <alex.s...@envieta.com> wrote:
>>> 
>>> The actual code is well-formed, this was just error formatting the code
>> for the post.  I’ll try again:
>>> 
>>>      <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>>>              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>              xmlns:camel="http://camel.apache.org/schema/blueprint";
>>>              xmlns:cm="http://aries.apache.
>> org/blueprint/xmlns/blueprint-cm/v1.1.0"
>>>              xmlns:ext="http://aries.apache.org/blueprint/xmlns/
>> blueprint-ext/v1.0.0"
>>>              xsi:schemaLocation="
>>>                      http://www.osgi.org/xmlns/blueprint/v1.0.0
>>>                      https://www.osgi.org/xmlns/
>> blueprint/v1.0.0/blueprint.xsd”>
>>> 
>>>      <cm:property-placeholder persistent-id="audit.log"
>>>              update-strategy="reload”
>>>              placeholder-prefix="#{" placeholder-suffix="}">
>>>              <cm:default-properties>
>>>                      <cm:property name="audit-log.reaper.cron" value="0
>> 0/30 * * * ?" />
>>>                      <cm:property name="startDelaySeconds"
>> value="600" />
>>>              </cm:default-properties>
>>>      </cm:property-placeholder>
>>> 
>>> 
>>> 
>>>> On Feb 22, 2018, at 9:56 PM, Quinn Stevenson <
>> qu...@pronoia-solutions.com> wrote:
>>>> 
>>>> Is that really the XML?  It’s not well formed - you start with a
>> cm:property-placeholder element and end with a cm:default-properties
>> element.
>>>> 
>>>>> On Feb 22, 2018, at 12:48 PM, Alex Soto <alex.s...@envieta.com> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> I am having some problems migrating to Camel 2.20.2 from 2.17.4.  I
>> have blueprint configuration:
>>>>> 
>>>>>            <cm:property-placeholder
>>>>>                            persistent-id=“audit.log”
>>>>>                            update-strategy="reload”
>>>>>                            placeholder-prefix="#{"
>> placeholder-suffix="}”>
>>>>> 
>>>>>                    <cm:property name=“startDelaySeconds" value="600"
>> />
>>>>>                    <cm:property name="cron" value="0 0/30 * * * ?" />
>>>>>            </cm:default-properties>
>>>>> 
>>>>> A component configuration (in this case for Quartz2, but I don’t think
>> this is related to Quartz2):
>>>>> 
>>>>>    <bean id="audit-log-reaper-quartz" class="org.apache.camel.
>> component.quartz2.QuartzComponent">
>>>>>            <property name="startDelayedSeconds"
>> value="#{startDelaySeconds}" />
>>>>>    </bean>
>>>>> 
>>>>> Then use this in a route:
>>>>> 
>>>>>    <route id="reaper-scheduler">
>>>>>            <from uri="audit-log-reaper-quartz://reaper?cron={{cron}}"
>> />
>>>>>            ...
>>>>> 
>>>>> When I run this (Karaf 4.2.5) an exception is thrown:
>>>>> 
>>>>> org.osgi.service.blueprint.container.ComponentDefinitionException:
>> Name audit-log-reaper-quartz is already instanciated as null and cannot be
>> removed.
>>>>>    at org.apache.aries.blueprint.container.BlueprintRepository.
>> removeRecipe(BlueprintRepository.java:131) [38:org.apache.aries.
>> blueprint.core:1.8.3]
>>>>>    at org.apache.aries.blueprint.container.BlueprintContainerImpl.
>> updateUninstantiatedRecipes(BlueprintContainerImpl.java:572)
>> [38:org.apache.aries.blueprint.core:1.8.3]
>>>>>    at org.apache.aries.blueprint.container.BlueprintContainerImpl.
>> processProcessors(BlueprintContainerImpl.java:559) [38:org.apache.aries.
>> blueprint.core:1.8.3]
>>>>>    at org.apache.aries.blueprint.container.
>> BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:394)
>> [38:org.apache.aries.blueprint.core:1.8.3]
>>>>>    at org.apache.aries.blueprint.container.
>> BlueprintContainerImpl.run(BlueprintContainerImpl.java:275)
>> [38:org.apache.aries.blueprint.core:1.8.3]
>>>>> 
>>>>> 
>>>>> This was working fine in Camel 2.17.4.  Interestingly,  if I remove
>> property place holder:
>>>>> 
>>>>>    <bean id="audit-log-reaper-quartz" class="org.apache.camel.
>> component.quartz2.QuartzComponent">
>>>>>            <property name="startDelayedSeconds" value="600" />
>>>>>    </bean>
>>>>> 
>>>>> Then it works fine, no errors.  So this seems to be related to the
>> property placeholders.  Has anybody seen this?
>>>>> I appreciate any insight on how to solve this problem.
>>>>> 
>>>>> Best regards,
>>>>> Alex soto
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>> 
> 
> 
> -- 
> ------------------------
> Guillaume Nodet

Reply via email to