I made a mistake in my test. It doesn't do what expected ...

Still the same example :

.from(...)
.split()
.tokenize("\n")
.streaming()
.unmarshal()
.bindy(BindyType.Csv, AED.class)
.enrich("direct:refreshReferentielDynamic", new
AggregationEnrichissementZone())

And a :

from("direct:refreshReferentielDynamic")
.processRef("validatingProcessor")

.end();


And


public class ValidatingProcessor implements Processor {

@Autowired
DriverManagerDataSource dataSource;
 public void process(Exchange exchange) throws Exception {


Integer idxParse = (Integer) exchange.getProperty(Exchange.SPLIT_INDEX);
 if (idxParse != null & idxParse == 0) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List<Map<String, Object>> ref = jdbcTemplate
.queryForList("SELECT ID , CODE , LIBELLE FROM  ZONE_T ");
Map<String, Zone> newRef = new HashMap();
 for (Map<String, Object> map : ref) {
 int id=(Integer) map.get("ID");
 String code =(String) map.get("CODE");
 String libelle =(String)map.get("LIBELLE");
 newRef.put(code, new Zone(id,code,libelle));
}
 exchange.getOut().setBody(newRef) ;


}
        }


The problem is that in my AggregationStrategy zones which is populate
before has data only for the first line ( the first spit index).


public class AggregationEnrichissementZone implements AggregationStrategy {

Logger LOG = LoggerFactory.getLogger(AggregationEnrichissementZone.class);

@Override
public Exchange aggregate(Exchange original, Exchange resource) {

Map<String, Zone> zones = (Map<String, Zone>) resource.getIn().getBody();


Any idea ?


Thanks !




2013/3/6 Jean Francois LE BESCONT <jflebesc...@gmail.com>

> Thanks Claus !
>
> Tricky but it works :)
>
>
> 2013/3/6 Claus Ibsen <claus.ib...@gmail.com>
>
>> On Wed, Mar 6, 2013 at 1:05 PM, Jean Francois LE BESCONT
>> <jflebesc...@gmail.com> wrote:
>> > When we do an enrich, the *resourceUri ( in my example
>> *.enrich("direct:ds",
>> > new AggregationStrategyRessource()))  is called every time.
>> >
>> > When I parse a file, big query with all the datasource while be called
>> > every, is there a trick to tell the route to execute only one ? I have
>> > watch camel cache but I have understand that it is used for something
>> else.
>> >
>> > Thanks !
>> >
>>
>> You can use a filter / content based route and only use the enrich the
>> 1st time.
>> When you use the splitter the exchange has a property with the split
>> index, so the 1st time the index is zero.
>>
>> The key for that property is Exchange.SPLIT_INDEX
>>
>> >
>> >
>> >
>> > 2013/3/6 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>> >
>> >> Thanks Claus for the link ( have you an HashMap off the FAQ in the
>> head ?
>> >>  :)
>> >>
>> >> Don't forget to add :
>> >>
>> >>
>> >>    original.getOut().setHeaders(original.getIn().getHeaders());
>> >>
>> >>
>> >> When enrich with strategy !
>> >>
>> >>
>> >> 2013/3/6 Claus Ibsen <claus.ib...@gmail.com>
>> >>
>> >>> On Wed, Mar 6, 2013 at 10:26 AM, Jean Francois LE BESCONT
>> >>> <jflebesc...@gmail.com> wrote:
>> >>> > My mistake ...I used   resource.getOut().getBody(); instead
>> >>> > od  resource.getIn().getBody();
>> >>> >
>> >>>
>> >>> Yeah see this FAQ
>> >>>
>> http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html
>> >>>
>> >>> >
>> >>> >   public Exchange aggregate(Exchange original, Exchange resource) {
>> >>> >
>> >>> > AED originalBody = (AED)original.getIn().getBody();
>> >>> > Object resourceResponse = (Object) resource.getIn().getBody();
>> >>> >
>> >>> >         LOG.info("originalBody " + originalBody ) ;
>> >>> >         LOG.info("resourceResponse " + resourceResponse ) ;
>> >>> >         // do stuff with
>> >>> >
>> >>> >         return resource;
>> >>> >     }
>> >>> >
>> >>> > Thanks raul for the help ! :)
>> >>> >
>> >>> >
>> >>> > 2013/3/6 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>> >>> >
>> >>> >> Thanks Raul !
>> >>> >>
>> >>> >> I haven't found simple example  enrich here (
>> >>> >> http://camel.apache.org/content-enricher.html, direct:resource in
>> >>> never
>> >>> >> explains ). Perharps that I haven't understand fondamental but
>> it's a
>> >>> >> huge framework and learning needs time :)
>> >>> >>
>> >>> >> So I have a querie :
>> >>> >>
>> >>> >> from("direct:refreshReferentielDynamic")
>> >>> >> .setBody(constant("SELECT * FROM TEST"))
>> >>> >>  .to("jdbc:dataSource")
>> >>> >> .to("direct:ds")
>> >>> >> .end();
>> >>> >>
>> >>> >> Plus :
>> >>> >>
>> >>> >> from("direct:ds").to("log:dans.directds").end();
>> >>> >>
>> >>> >> Otherwise it doesn't works.
>> >>> >>
>> >>> >>
>> >>> >> And an " main route " :
>> >>> >>
>> >>> >> from("file://....")
>> >>> >> .split()
>> >>> >> .tokenize("\n")
>> >>> >> .enrich("direct:ds", new AggregationStrategyRessource())
>> >>> >>
>> >>> >> With :
>> >>> >>
>> >>> >>
>> >>> >> public class AggregationStrategyRessource implements
>> >>> AggregationStrategy {
>> >>> >>
>> >>> >>
>> >>> >>     public Exchange aggregate(Exchange original, Exchange
>> resource) {
>> >>> >>
>> >>> >>         return resource; // for the moment
>> >>> >>     }
>> >>> >>
>> >>> >> }
>> >>> >>
>> >>> >> But original is always null ...
>> >>> >>
>> >>> >> Do you see with ?
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >> 2013/3/6 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>> >>> >>
>> >>> >>> Hey !
>> >>> >>>
>> >>> >>> A picture is sometime better than explication :) I try to make a
>> >>> really
>> >>> >>> simple test ( equivalent of MAP with lookup in ETL) :
>> >>> >>>
>> >>> >>>
>> >>> >>>
>> -------------------------
>> >>> >>>                                           |  TABLE TEST  |
>> >>> >>>
>> -------------------------
>> >>> >>>                                           | COL1  | COL2  |
>> >>> >>>                                           | jack  |  2          |
>> >>> >>>                                           | bob  |   3         |
>> >>> >>>                                           ------------------------
>> >>> >>>                                                  |
>> >>> >>>                                                  |
>> >>> >>>                                                  |
>> >>> >>>                                                  |
>> >>> >>>                                                  |
>> >>> >>> ----------------                           ----------------------
>> >>> >>>            ------------------------
>> >>> >>> | FILE INPUT   |                     |     ENRICH ? |
>> >>> >>>  | FILE OUTPUT  |
>> >>> >>> ----------------                           ----------------------
>> >>> >>>            -----------------------
>> >>> >>> | jack  | cool    | >>>>>>>>>  |                     | >>>>>>>>> |
>> >>> jack
>> >>> >>> | cool |  2   |
>> >>> >>> | bob   | foo     |                     |                     |
>> >>> >>>          | bob    | foo  |  3   |
>> >>> >>> ----------------                           -----------------------
>> >>> >>>              ------------------------
>> >>> >>>
>> >>> >>>
>> >>> >>>
>> >>> >>>
>> >>> >>>
>> >>> >>>
>> >>> >>>
>> >>> >>> 2013/3/6 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>> >>> >>>
>> >>> >>>> If i do:
>> >>> >>>> public class AggregationStrategyRessource implements
>> >>> AggregationStrategy
>> >>> >>>> {
>> >>> >>>>
>> >>> >>>> @Override
>> >>> >>>>     public Exchange aggregate(Exchange original, Exchange
>> resource) {
>> >>> >>>>         int i = 1 / 0;
>> >>> >>>> return original;
>> >>> >>>>     }
>> >>> >>>> }
>> >>> >>>>
>> >>> >>>>  no exception are thows.
>> >>> >>>>
>> >>> >>>>
>> >>> >>>>
>> >>> >>>> 2013/3/6 Jean Francois LE BESCONT <jflebesc...@gmail.com>
>> >>> >>>>
>> >>> >>>>> thks Raul
>> >>> >>>>>
>> >>> >>>>> For the moment it's a simple :
>> >>> >>>>>
>> >>> >>>>> public class AggregationStrategyRessource implements
>> >>> >>>>> AggregationStrategy {
>> >>> >>>>>
>> >>> >>>>> @Override
>> >>> >>>>>     public Exchange aggregate(Exchange original, Exchange
>> resource)
>> >>> {
>> >>> >>>>>         return original;
>> >>> >>>>>     }
>> >>> >>>>>
>> >>> >>>>> }
>> >>> >>>>>
>> >>> >>>>> If I put a debug point on it, it is never fired ....
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>> 2013/3/6 Raúl Kripalani <r...@evosent.com>
>> >>> >>>>>
>> >>> >>>>>> Can we see the code of AggregationStrategyRessource?
>> >>> >>>>>>
>> >>> >>>>>> Regards,
>> >>> >>>>>> Raúl.
>> >>> >>>>>>
>> >>> >>>>>> On Mar 5, 2013, at 23:30, Jean Francois LE BESCONT wrote:
>> >>> >>>>>>
>> >>> >>>>>> > Hey,
>> >>> >>>>>> >
>> >>> >>>>>> > I have this >
>> >>> >>>>>> >
>> >>> >>>>>>
>> >>>
>> http://camel.465427.n5.nabble.com/Enrich-message-with-data-from-dynamic-sql-query-td5329427.html
>> >>> >>>>>> >
>> >>> >>>>>> > But I haven't found a solution to my question.
>> >>> >>>>>> >
>> >>> >>>>>> > How can enrich my stream with data from a queries ?
>> >>> >>>>>> >
>> >>> >>>>>> > I have a a route called from the start :
>> >>> >>>>>> >
>> >>> >>>>>> > from("direct:refreshReferentielDynamic")
>> >>> >>>>>> > //
>> >>> >>>>>> > .setBody(constant("SELECT * FROM TEST"))
>> >>> >>>>>> > //
>> >>> >>>>>> > .to("jdbc:dataSource")
>> >>> >>>>>> > //
>> >>> >>>>>> > .to("direct:ds")
>> >>> >>>>>> > //
>> >>> >>>>>> > .end();
>> >>> >>>>>> >
>> >>> >>>>>> >
>> >>> >>>>>> > End I would like to acces data in memory in direct:ds from an
>> >>> other
>> >>> >>>>>> route.
>> >>> >>>>>> > I have try this :
>> >>> >>>>>> >
>> >>> >>>>>> > from("foo").
>> >>> >>>>>> > [...]
>> >>> >>>>>> > .enrich("direct:ds", new AggregationStrategyRessource())
>> >>> >>>>>> >
>> >>> >>>>>> > But code in AggregationStrategyRessource is not called ...
>> and
>> >>> body
>> >>> >>>>>> is
>> >>> >>>>>> > replace by the content of the query.
>> >>> >>>>>> >
>> >>> >>>>>> > Thks !
>> >>> >>>>>> >
>> >>> >>>>>> > Thks !
>> >>> >>>>>>
>> >>> >>>>>>
>> >>> >>>>>
>> >>> >>>>
>> >>> >>>
>> >>> >>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Claus Ibsen
>> >>> -----------------
>> >>> Red Hat, Inc.
>> >>> FuseSource is now part of Red Hat
>> >>> Email: cib...@redhat.com
>> >>> Web: http://fusesource.com
>> >>> Twitter: davsclaus
>> >>> Blog: http://davsclaus.com
>> >>> Author of Camel in Action: http://www.manning.com/ibsen
>> >>>
>> >>
>> >>
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> Red Hat, Inc.
>> FuseSource is now part of Red Hat
>> Email: cib...@redhat.com
>> Web: http://fusesource.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>>
>
>

Reply via email to