Аз съм сравнително нов в Camel и се боря с проблем с прост маршрут, който използва MyBatis за „захранване“ на ActiveMQ опашка.
Моят маршрут е следният:
public class SearchItemProductionRouteRoute extends SpringRouteBuilder {
@Override
public void configure() throws Exception {
from("timer://pollTheDatabase?delay=5000")
.to("mybatis:selectSearchItem?statementType=SelectList&consumer.useIterator=true&consumer.onConsume=updateProcessingSearchItem")
.to("bean:searchItemProcesser?method=process")
.to("activemq:searchitemqueue");
}
}
Заявката за mybatis работи добре. Самата заявка носи 4 записа от базата данни. Имам нужда всеки ред да се превърне в съобщение в опашката, но вместо това получавам 1 съобщение с всичките 4 реда в него.
SearchItemProcessor просто отпечатва тялото на съобщението (така знам, че съобщението съдържа всичките 4 записа).
Това са заявките, които горният маршрут използва:
<select id="selectSearchItem" resultMap="result" parameterType="java.util.HashMap">
SELECT * FROM SEARCH_REQUEST_ITEM SRI WHERE SRI.STATUS = '1'
</select>
<update id="updateProcessingSearchItem">
UPDATE SEARCH_REQUEST_ITEM SET STATUS = 2,
UPDATEDIN=SYSDATE, UPDATEDBY='XDRBATCH'
WHERE ID = #{ID}
</update>
Ако някой може да хвърли малко светлина върху това, ще съм му благодарен!
РЕДАКТИРАНЕ:
Току-що намерих едно решение с помощта на Splitter EIP. Първо създадох този клас:
public class XdrMessageSplitterBean {
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<HashMap> splitBody(Object body) {
return (List<HashMap>) body;
}
}
След това го добавете към маршрута:
public void configure() throws Exception {
from("timer://pollTheDatabase?delay=5000")
.to("mybatis:selectSearchItem?statementType=SelectList&consumer.useIterator=true&consumer.onConsume=updateProcessingSearchItem")
.split().method("xdrMessageSplitterBean", "splitBody")
.to("bean:searchItemProcesser?method=process")
.to("activemq:searchitemqueue");
}
Бийнът трябва да бъде деклариран във файла camel-context.xml:
<bean id="xdrMessageSplitterBean" name="xdrMessageSplitterBean"
class="package.of.bean.XdrMessageSplitterBean" />
Работи, но не се чувства добре. Ако някой има някакво предложение, то ще бъде много добре дошло.