java - 如何在 Camel 中处理多个 jpa 实体到处理器

标签 java jpa apache-camel

我正在从表中检索多行,然后希望我的处理器处理它们,但我观察到 Camel 正在为每一行调用我的处理器,我想传递实体列表

以下是我的代码

from("jpa:com.pns.ab.model.LoanRequest?consumeDelete=false"
            + "&consumer.delay=20000"
            + "&consumer.namedQuery=selectLoanRequests"
            + "&persistenceUnit=LoanServicePU").process(new JpaProcessor());

在处理器中

LoanRequest lr = exchange.getIn().getBody(LoanRequest.class);

但我想要这样的选项

List<LoanRequest> requests  = exchange....

问候,

最佳答案

使用聚合器:

private static class JpaAggregationRouteBuilder extends RouteBuilder {
    @Override
    public void configure() {
        from("jpa:com.pns.ab.model.LoanRequest?consumeDelete=false"
             + "&consumer.delay=20000"
             + "&consumer.namedQuery=selectLoanRequests"
             + "&persistenceUnit=LoanServicePU")
                .aggregate(constant(true), new ArrayListAggregationStrategy())
                .completionFromBatchConsumer()
                .process(new JpaProcessor());
    }
}

// Simply combines Exchange body values into an ArrayList<Object>
// Taken from http://camel.apache.org/aggregator2
private static class ArrayListAggregationStrategy implements AggregationStrategy {

    @SuppressWarnings("unchecked")
    @Override
    public Exchange aggregate(final Exchange oldExchange, final Exchange newExchange) {
        final Object newBody = newExchange.getIn().getBody();
        ArrayList<Object> list = null;
        if (oldExchange == null) {
            list = new ArrayList<Object>();
            if (newBody != null) {
                list.add(newBody);
            }
            newExchange.getIn().setBody(list);
            return newExchange;
        } else {
            list = oldExchange.getIn().getBody(ArrayList.class);
            if (newBody != null) {
                list.add(newBody);
            }
            return oldExchange;
        }
    }

}

有关聚合器的更多信息可以在 Camel webpage 上找到.

关于java - 如何在 Camel 中处理多个 jpa 实体到处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22116789/

相关文章:

java - JPA 中的深拷贝

java - 使用 hibernate 取消映射的复合对象

java - Camel onException() 未触发

java - Camel 2.10 更改 blueprint.xml 位置

java - Grails Oauth2 提供程序 NullPointerException

java - 使用编码代码对字符串进行编码

java - 取消被 Socket.Accept() 阻止的 SwingWorker?

java - @Transactional 与 JPA 和 Hibernate 有什么用?

java - 如何在Java程序中访问spring配置文件中定义的路由

java - Keytool.exe 和 jarsigner.exe 问题