Hi Claus,
thanks for your help. I've checked the Composed Message Processor EIP.
Maybe I'm missing something but as far as I can see the EIP will not work
for my use case.
Let's recap my problem with the input file
Hello
A
B
C
...
Because it's a very large file it will be splitted in streaming mode.
Therfor
every line becomes a separate Message.
Using the Aggregator the "Hello" Message will be stored in the
AggregationRepository.
The the second message ("A") will be aggregated with "Hello" to "Hello A".
And now the important point: the "completion predicate" is now true and the
meesage is released from the Aggregator, e.g.
AggregateProcessor.onCompletion will
be called and the "Hello" Exchange is removed from the
AggregationRepository.
The Exchange needs to be released (completed) at this point because it is a
big file and
we need to operate in streaming mode.
Now the third message ("B") comes in. Because the "Hello" Exchange was
removed
we can not aggregate the Exchanges to "Hello B" anymore.
So the question remains: what is the best way to solve the given problem
(see below) with Camel?
One idea I had was to mimic the Aggregate Repository but without removing
the "Hello" Exchange
after combining it with the "A", "B", "C", etc. messages.
But is this really the best solution for my problem?
What I need is access to a storage location which is scoped to the
"Splitter input Exchange"
during processing the "splitted" Exchanges. For example: if it would be
possible to access
the "input" Exchange during processing the "splitted" Exchanges I would set
a property
on the "input" Exchange during processing the first line and reading it
afterwards during
processing the remaining lines.
Is there any other storage location besides an Exchange property which is
scoped to the
Exchange and is accessible from the "splitted" Exchanges?
Greetings
Oliver
2012/11/30 Claus Ibsen <[email protected]>
> Hi
>
> See this EIP
> http://camel.apache.org/composed-message-processor.html
>
> On Thu, Nov 29, 2012 at 11:27 PM, Oliver Geisser
> <[email protected]> wrote:
> > Hello,
> >
> > I am using a splitter to handle a big txt file (streaming mode). I need
> to
> > combine the first line
> > with all the other lines and store each result into a database.
> >
> > What is a good Camel solution for this?
> >
> > Example input file:
> >
> > Hello
> > A
> > B
> > C
> > ...
> >
> >
> > This needs to be combined into:
> >
> > Hello A
> > Hello B
> > Hello C
> > ...
> >
> > Every result is stored into a database.
> > It's important to use streaming because of the size of the input file.
> >
> >
> > My first idea was to use a Splitter and then store the first line into an
> > Exchange property.
> > But this does not work because the Splitter creates new Exchanges for
> every
> > line.
> >
> > So how do I combine the first line with all the other lines?
> >
> > Thanks
> > Oliver
> >
> > --
> > og
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> FuseSource is now part of Red Hat
> Email: [email protected]
> Web: http://fusesource.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
>
--
og