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

Alex Soto updated CAMEL-12291:
------------------------------
    Description: 
The error "name is already instanciated (sic) as null and cannot be removed" is 
thrown when configuring a component in Blueprint using property placeholders.

I noticed when trying to migrate my project to Camel 2.20.2 (from 2.17.4) 
 Example:
{code:java}
<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>

 <bean id="audit-log-reaper-quartz" 
       class="org.apache.camel.component.quartz2.QuartzComponent">

    <property name="startDelayedSeconds" value="#{startDelaySeconds}" />
</bean>{code}
  
 The bean is referenced in a Camel route:
{code:java}
<route id="reaper-scheduler">
     <from uri="[audit-log-reaper-quartz://reaper?cron=\{{cron}}]" />
{code}
Throws exception:
{quote}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]
{quote}
 
  
 Removing the property placeholder fixes the issue:
  
{code:java}
<bean id="audit-log-reaper-quartz" 
      class="org.apache.camel.component.quartz2.QuartzComponent">
  
      <property name="startDelayedSeconds" value="600" />
</bean>
{code}
 
 According to Guillaume Nodet, this seems to have been introduced by this pull 
request:

[https://github.com/apache/camel/commit/a4e94f036d02943814c84195d73837cf607c8c20]

Solution proposed by Guillaume Nodet is to change line 1056 of 
/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java

to
{code:java}
 if (camelContext.getComponent(component, false) == null) {
{code}
I tested this change locally and it seems to work, however I don't know if this 
can cause other problems.

  was:
The error "name is already instanciated (sic) as null and cannot be removed" is 
thrown when configuring a component in Blueprint using property placeholders.


 I noticed when trying to migrate my project to Camel 2.20.2 (from 2.17.4) 
 Example:
{code:java}
<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>

 <bean id="audit-log-reaper-quartz" 
       class="org.apache.camel.component.quartz2.QuartzComponent">

    <property name="startDelayedSeconds" value="#{startDelaySeconds}" />
</bean>{code}
  
 The bean is referenced in a Camel route:
{code:java}
<route id="reaper-scheduler">
     <from uri="[audit-log-reaper-quartz://reaper?cron=\{{cron}}]" />
{code}
Throws exception:
{quote}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]
{quote}
 
  
 Removing the property placeholder fixes the issue:
  
{code:java}
<bean id="audit-log-reaper-quartz" 
      class="org.apache.camel.component.quartz2.QuartzComponent">
  
      <property name="startDelayedSeconds" value="600" />
</bean>
{code}
 
According to Guillaume Nodet, this seems to have been introduced by this pull 
request:

[https://github.com/apache/camel/commit/a4e94f036d02943814c84195d73837cf607c8c20]

Solution proposed by Guillaume Nodet is to change line 106 of 
/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java

to
{code:java}
 if (camelContext.getComponent(component, false) == null) {
{code}
I tested this change locally and it seems to work, however I don't know if this 
can cause other problems.


> Blueprint error: "name is already instanciated as null and cannot be removed"
> -----------------------------------------------------------------------------
>
>                 Key: CAMEL-12291
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12291
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-blueprint
>    Affects Versions: 2.20.2
>         Environment: Mac OSX, {color:#000000}Karaf 4.2.5{color}
>            Reporter: Alex Soto
>            Assignee: Grzegorz Grzybek
>            Priority: Major
>
> The error "name is already instanciated (sic) as null and cannot be removed" 
> is thrown when configuring a component in Blueprint using property 
> placeholders.
> I noticed when trying to migrate my project to Camel 2.20.2 (from 2.17.4) 
>  Example:
> {code:java}
> <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>
>  <bean id="audit-log-reaper-quartz" 
>        class="org.apache.camel.component.quartz2.QuartzComponent">
>     <property name="startDelayedSeconds" value="#{startDelaySeconds}" />
> </bean>{code}
>   
>  The bean is referenced in a Camel route:
> {code:java}
> <route id="reaper-scheduler">
>      <from uri="[audit-log-reaper-quartz://reaper?cron=\{{cron}}]" />
> {code}
> Throws exception:
> {quote}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]
> {quote}
>  
>   
>  Removing the property placeholder fixes the issue:
>   
> {code:java}
> <bean id="audit-log-reaper-quartz" 
>       class="org.apache.camel.component.quartz2.QuartzComponent">
>   
>       <property name="startDelayedSeconds" value="600" />
> </bean>
> {code}
>  
>  According to Guillaume Nodet, this seems to have been introduced by this 
> pull request:
> [https://github.com/apache/camel/commit/a4e94f036d02943814c84195d73837cf607c8c20]
> Solution proposed by Guillaume Nodet is to change line 1056 of 
> /camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
> to
> {code:java}
>  if (camelContext.getComponent(component, false) == null) {
> {code}
> I tested this change locally and it seems to work, however I don't know if 
> this can cause other problems.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to