You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Dan Checkoway <dc...@gmail.com> on 2011/01/08 10:59:57 UTC

Dynamic URI with annotation-based POJOs?

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) {
    ...
}

Is this possible already and I just managed to miss it?  :-)  If not, is
something like that in the works?

Thanks,
Dan

Re: Dynamic URI with annotation-based POJOs?

Posted by Claus Ibsen <cl...@gmail.com>.
On Sat, Jan 8, 2011 at 5:53 PM, Dan Checkoway <dc...@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 <cl...@gmail.com> wrote:
>
>> On Sat, Jan 8, 2011 at 12:07 PM, Tarjei Huse <ta...@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 <ta...@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: cibsen@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: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Re: Dynamic URI with annotation-based POJOs?

Posted by Dan Checkoway <dc...@gmail.com>.
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?

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?

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 <cl...@gmail.com> wrote:

> On Sat, Jan 8, 2011 at 12:07 PM, Tarjei Huse <ta...@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 <ta...@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: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>

Re: Dynamic URI with annotation-based POJOs?

Posted by Claus Ibsen <cl...@gmail.com>.
On Sat, Jan 8, 2011 at 12:07 PM, Tarjei Huse <ta...@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 <ta...@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: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Re: Dynamic URI with annotation-based POJOs?

Posted by Tarjei Huse <ta...@scanmine.com>.
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
> Dan
>
> On Sat, Jan 8, 2011 at 5:23 AM, Tarjei Huse <ta...@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


Re: Dynamic URI with annotation-based POJOs?

Posted by Dan Checkoway <dc...@gmail.com>.
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?

Dan

On Sat, Jan 8, 2011 at 5:23 AM, Tarjei Huse <ta...@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
>
>

Re: Dynamic URI with annotation-based POJOs?

Posted by Tarjei Huse <ta...@scanmine.com>.
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


Re: Dynamic URI with annotation-based POJOs?

Posted by Christian Schneider <ch...@die-schneider.net>.
As Claus responded you may already use properties as you proposed.

Still I think it may be a good idea to use a direct endpoint instead and 
keep the activemq config in a routebuilder.
This allows you to better seperate your business logic from the camel stuff.

Like:
@Consumer("direct:somename")
public void onWhatever(String whatever) {

     ...
}


public class MyRouteBuilder extends RouteBuilder {

     public void configure() {
         from("activmeq:queue:${queueName}?concurrentConsumers=${concurrentConsumers}")
         .to("direct:somename");
     }
}

What I also saw is something like:
@Consumer("${myEndpoint}")
public void onWhatever(String whatever) {

     ...
}


This way you can move the endpoint config to the property file. This 
allows you to for example use different endpoints for test and prod. So 
you my consume from a file or direct endpoint in test and only use the 
queue in production.

Best regards

Christian


Am 08.01.2011 10:59, schrieb Dan Checkoway:
> 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) {
>      ...
> }
>
> Is this possible already and I just managed to miss it?  :-)  If not, is
> something like that in the works?
>
> Thanks,
> Dan
>

-- 
----
http://www.liquid-reality.de