Hi
Using the JdbcAggregationRepository I am trying to save the relation between my
incoming messages and the aggregate, as a 1-n relation. It is actually the EDI
Messages (Single message) into the EDI Interchange (Collection of messages).
When I run the route, I see that the entries are available in the my-SQL
aggregation table.
If the aggregate is finished, then all the entries are gone, both tables
aggregation and aggregation_completed are empty
Is that normal? Or Do I have an error somewhere in my setup?
I was trying to find another solution to get my relation saved. In my
AggregatorStrategy class, in the aggregate method I did save a list of
messages, and in the onCompletion method, I set that list as a Header. This
works only if I use the correlationExpression 'true', but actually I do
aggregate messages with same doctype like "DESADV" and "INVOIC" and then the
value of the Header is always just the one from the last processed aggregate
My route looks like this (simplified)
from("file:{{dir.from}}")
.choice()
.when()....setHeader("doctype").constant("DESADV")
.when()....setHeader("doctype").constant("INVOICE")
.aggregate(header("doctype"), new
EDIMessageToInterchangeAggregator()).aggregationRepository("repo3")
.log("Header: ${header.messageIDList}") // Shows always the latest Aggregate
Header only
If I run message for one doctype only, then it all works, cause there will only
be one aggregate
My bean config is like this:
<bean id="repo3"
class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
<property name="repositoryName" value="test_aggregation"/>
<property name="transactionManager" ref="txManager"/>
<property name="dataSource" ref="datasource"/>
<!-- configure to store the message body and following headers as text
in the repo -->
<property name="storeBodyAsText" value="true"/>
<property name="headersToStoreAsText">
<list>
<value>doctype</value>
<value>messageID</value>
<value>interchangeID</value>
</list>
</property>
</bean>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"/>
</bean>
My environment:
Camel 3.16.0
Java 11
SpringBoot 2.6.4
MySQL 8.x