On Sat, Jan 8, 2011 at 5:53 PM, Dan Checkoway <dchecko...@gmail.com> wrote: > Claus et al, > > Thanks for the replies. I have it working when I do this: > > <camelContext xmlns="http://camel.apache.org/schema/spring"> > <propertyPlaceholder id="properties" > location="file:/usr/local/whatever/config/whatever.properties"/> > </camelContext> > > ...but I also have this in my app context, so that my beans can use > ${...}in their configuration: > > <bean > class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> > <property name="location" > value="file:/usr/local/whatever/config/whatever.properties"/> > </bean> > > It seems wasteful to me to have to grab the same properties file twice. Do > you know of a way around this, where I could share the same instance of > Properties for both needs? >
That's not possible as Spring property placeholder is a BeanFactoryPostProcessor which mean its a post processor which is executed once before spring bean container will start to instantiate beans. And Camel cannot interfere or anyway hook into this. So they are 2 different lifecycles. > I've seen the "ref:" syntax, where it refers to a Properties bean...but > unfortunately Spring's PropertyPlaceholderConfigurer itself doesn't act as a > Properties instance. > > There's probably something simple I'm missing. Any ideas? > > The other case I'm wondering about is when properties are JNDI-based, such > as: > > <bean > class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> > <property name="location"> > <bean class="org.springframework.jndi.JndiObjectFactoryBean"> > <property name="jndiName" value="whateverProperties"/> > <property name="resourceRef" value="true"/> > </bean> > </property> > </bean> > > I tried this but it didn't work: > > <propertyPlaceholder id="properties" location="ref:whateverProperties"/> > > Is there way for Camel's properties component to reference > "whateverProperties" from JNDI? > You can implemenent a custom PropertiesResolver and configure it on the PropertiesComponent. In your custom code you can lookup properties from JNDI. But that's meant for loading resources once, eg from a file etc. What you want for JNDI is most likely to lookup on-demand. For that you need PropertiesParser as the best shot so far. PropertiesParser is although a bit to low-level so we most likely need a new interface for end users to more easily hook in and lookup a property on demand such a from JNDI, database or other registry such as ZooKeeper. I have created a ticket https://issues.apache.org/jira/browse/CAMEL-3518 > These are NON-critical issues, that's for sure...I don't mind having the > duplicate Properties instances. It could be a lot worse. But I've love to > avoid it if there's an easy way. > > Thanks, > Dan > > > On Sat, Jan 8, 2011 at 6:42 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > >> On Sat, Jan 8, 2011 at 12:07 PM, Tarjei Huse <tar...@scanmine.com> wrote: >> > On 01/08/2011 11:32 AM, Dan Checkoway wrote: >> >> Yeah, I've been digging into that. It looks like I may be able to do >> >> something like this in the <camelContext>: >> >> >> >> <propertyPlaceholder id="propertes" location="ref:myJndiProperties" /> >> >> >> >> And then use the {{...}} style property references on the URI? >> > Try. I think it will work on annotations as well. >> > T >> >> Yes and endpoints uri which is resolved by CamelContext supports the >> Camel property placeholders feature. >> >> >> >> Dan >> >> >> >> On Sat, Jan 8, 2011 at 5:23 AM, Tarjei Huse <tar...@scanmine.com> >> wrote: >> > >> >>> Hi, >> >>> On 01/08/2011 10:59 AM, Dan Checkoway wrote: >> >>>> I'm generally a huge fan of annotation-driven stuff. Here's one >> example >> >>>> where my hands are tied, and I can't use annotations to do what I want >> to >> >>>> do. Let's say I have this: >> >>>> >> >>>> @Consume(uri="activmeq:queue:whatever?concurrentConsumers=10") >> >>>> public void onWhatever(String whatever) { >> >>>> ... >> >>>> } >> >>>> >> >>>> Now let's say I want the queue name ("stuff") and the # of >> >>>> concurrentConsumers to be configurable via a properties file. Up >> until >> >>> now, >> >>>> I've resorted to setting up the route manually with stuff like: >> >>>> >> >>>> public class MyRouteBuilder extends RouteBuilder { >> >>>> @Value("${queueName}") >> >>>> String queueName; >> >>>> @Value("${concurrentConsumers}") >> >>>> int concurrentConsumers; >> >>>> >> >>>> public void configure() { >> >>>> from("activemq:queue:" + queueName + "?concurrentConsumers=" + >> >>>> concurrentConsumers) >> >>>> .to(myWhateverBean, "onWhatever"); >> >>>> } >> >>>> } >> >>>> >> >>>> Can anybody suggest an alternative way of using "dynamic" URIs with >> >>>> annotation-based POJOs? I would love, for example, to be able to do >> >>>> something like this: >> >>>> >> >>>> >> >>> >> @Consume(uri="activmeq:queue:${queueName}?concurrentConsumers=${concurrentConsumers}") >> >>>> public void onWhatever(String whatever) { >> >>>> ... >> >>>> } >> >>> Have you looked at the new property placeholder stuff in 2.3? >> >>> >> >>> >> http://davsclaus.blogspot.com/2010/02/property-placeholder-galore-in-apache.html >> >>> >> >>> I'm not sure if it works with annotations, but I've used it in a lot of >> >>> other places. >> >>> T >> >>>> Is this possible already and I just managed to miss it? :-) If not, >> is >> >>>> something like that in the works? >> >>>> >> >>>> Thanks, >> >>>> Dan >> >>>> >> >>> >> >>> -- >> >>> Regards / Med vennlig hilsen >> >>> Tarjei Huse >> >>> Mobil: 920 63 413 >> >>> >> >>> >> > >> > >> > -- >> > Regards / Med vennlig hilsen >> > Tarjei Huse >> > Mobil: 920 63 413 >> > >> > >> >> >> >> -- >> Claus Ibsen >> ----------------- >> FuseSource >> Email: cib...@fusesource.com >> Web: http://fusesource.com >> Twitter: davsclaus >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ >> > -- Claus Ibsen ----------------- FuseSource Email: cib...@fusesource.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/