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

Dan Checkoway updated CAMEL-3547:
---------------------------------

    Description: 
I find Camel's property placeholder support clumsy.  I already use Spring's 
PropertyPlaceholderConfigurer, and I feel like Camel should be able to harness 
that.  I realize Spring doesn't make it easy to access those properties, but I 
have come up with a way to enable Camel to use them...

By simply extending PropertyPlaceholderConfigurer, we will be able to intercept 
and absorb the properties that Spring has access to:

{{
import java.util.Properties;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class CamelPropertyPlaceholderConfigurer extends 
PropertyPlaceholderConfigurer {
    private final Properties properties = new Properties();
    
    @Override
    protected void processProperties(ConfigurableListableBeanFactory 
beanFactory, Properties props) {
        super.processProperties(beanFactory, props);
        // "Absorb" all properties that pass through so we can expose them later
        properties.putAll(props);
    }

    /** Expose all absorbed properties */
    public final Properties getProperties() {
        return properties;
    }
}
}}

It means users who want to take advantage of this would need to instantiate 
this instead of the stock PropertyPlaceholderConfigurer, but that's no problem:

  <bean class="org.apache.camel.impl.CamelPropertyPlaceholderConfigurer">
    <p:location="..."/>
  </bean>

That way, you wouldn't need to declare a "duplicating" <propertyPlaceholer> in 
the CamelContext.  What do you think, is this feasible?

  was:
I find Camel's property placeholder support clumsy.  I already use Spring's 
PropertyPlaceholderConfigurer, and I feel like Camel should be able to harness 
that.  I realize Spring doesn't make it easy to access those properties, but I 
have come up with a way to enable Camel to use them...

By simply extending PropertyPlaceholderConfigurer, we will be able to intercept 
and absorb the properties that Spring has access to:

import java.util.Properties;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class CamelPropertyPlaceholderConfigurer extends 
PropertyPlaceholderConfigurer {
    private final Properties properties = new Properties();
    
    @Override
    protected void processProperties(ConfigurableListableBeanFactory 
beanFactory, Properties props) {
        super.processProperties(beanFactory, props);
        // "Absorb" all properties that pass through so we can expose them later
        properties.putAll(props);
    }

    /** Expose all absorbed properties */
    public final Properties getProperties() {
        return properties;
    }
}

It means users who want to take advantage of this would need to instantiate 
this instead of the stock PropertyPlaceholderConfigurer, but that's no problem:

  <bean class="org.apache.camel.impl.CamelPropertyPlaceholderConfigurer">
    <p:location="..."/>
  </bean>

That way, you wouldn't need to declare a "duplicating" <propertyPlaceholer> in 
the CamelContext.  What do you think, is this feasible?


> Custom "absorbing" PropertyPlaceholderConfigurer
> ------------------------------------------------
>
>                 Key: CAMEL-3547
>                 URL: https://issues.apache.org/jira/browse/CAMEL-3547
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Dan Checkoway
>            Priority: Minor
>
> I find Camel's property placeholder support clumsy.  I already use Spring's 
> PropertyPlaceholderConfigurer, and I feel like Camel should be able to 
> harness that.  I realize Spring doesn't make it easy to access those 
> properties, but I have come up with a way to enable Camel to use them...
> By simply extending PropertyPlaceholderConfigurer, we will be able to 
> intercept and absorb the properties that Spring has access to:
> {{
> import java.util.Properties;
> import 
> org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
> import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
> public class CamelPropertyPlaceholderConfigurer extends 
> PropertyPlaceholderConfigurer {
>     private final Properties properties = new Properties();
>     
>     @Override
>     protected void processProperties(ConfigurableListableBeanFactory 
> beanFactory, Properties props) {
>         super.processProperties(beanFactory, props);
>         // "Absorb" all properties that pass through so we can expose them 
> later
>         properties.putAll(props);
>     }
>     /** Expose all absorbed properties */
>     public final Properties getProperties() {
>         return properties;
>     }
> }
> }}
> It means users who want to take advantage of this would need to instantiate 
> this instead of the stock PropertyPlaceholderConfigurer, but that's no 
> problem:
>   <bean class="org.apache.camel.impl.CamelPropertyPlaceholderConfigurer">
>     <p:location="..."/>
>   </bean>
> That way, you wouldn't need to declare a "duplicating" <propertyPlaceholer> 
> in the CamelContext.  What do you think, is this feasible?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to