1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing.response;
12
13 import org.mule.api.MuleEvent;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.routing.RoutingException;
16 import org.mule.routing.inbound.EventGroup;
17 import org.mule.routing.EventCorrelatorCallback;
18
19
20
21
22
23
24 public abstract class ResponseCorrelationAggregator extends AbstractResponseAggregator
25 {
26
27 protected EventCorrelatorCallback getCorrelatorCallback()
28 {
29 return new DefaultEventCorrelatorCallback();
30 }
31
32 public class DefaultEventCorrelatorCallback implements EventCorrelatorCallback
33 {
34
35
36
37
38
39
40
41
42
43
44
45
46 public MuleMessage aggregateEvents(EventGroup events) throws RoutingException
47 {
48 return ResponseCorrelationAggregator.this.aggregateEvents(events);
49 }
50
51
52
53
54
55
56
57
58
59
60 public boolean shouldAggregateEvents(EventGroup events)
61 {
62 int expected = events.expectedSize();
63 int current = events.size();
64
65 if (expected == -1)
66 {
67 logger.warn("Correlation Group Size not set, but CorrelationAggregator is being used. Message is being forwarded");
68 return true;
69 }
70
71 if (logger.isDebugEnabled())
72 {
73 logger.debug("Correlation size is " + expected + ", current event group size is " + current
74 + " for correlation group " + events.getGroupId());
75 }
76
77 return expected == current;
78 }
79
80 public EventGroup createEventGroup(MuleEvent event, Object id)
81 {
82 return new EventGroup(id, event.getMessage().getCorrelationGroupSize());
83 }
84 }
85 }