UnitOfWorkProcessor unitOfWorkProcessor = new UnitOfWorkProcessor(this, processor);
Processor target = unitOfWorkProcessor;
// and then optionally add route policy processor if a custom policy is set
RoutePolicyProcessor routePolicyProcessor = null;
RoutePolicy policy = getRoutePolicy();
if (policy != null) {
routePolicyProcessor = new RoutePolicyProcessor(unitOfWorkProcessor, policy);
// add it as service if we have not already done that (eg possible if two routes have the same service)
if (!camelContext.hasService(policy)) {
try {
camelContext.addService(policy);
} catch (Exception e) {
throw ObjectHelper.wrapRuntimeCamelException(e);
}
}
target = routePolicyProcessor;
}
// and wrap it by a instrumentation processor that is to be used for performance stats
// for this particular route
InstrumentationProcessor wrapper = new InstrumentationProcessor();
wrapper.setType("route");
wrapper.setProcessor(target);
// and create the route that wraps the UoW
Route edcr = new EventDrivenConsumerRoute(this, getEndpoint(), wrapper);
// create the route id
String routeId = route.idOrCreate(getCamelContext().getNodeIdFactory());
edcr.getProperties().put(Route.ID_PROPERTY, routeId);
edcr.getProperties().put(Route.PARENT_PROPERTY, Integer.toHexString(route.hashCode()));
if (route.getGroup() != null) {
edcr.getProperties().put(Route.GROUP_PROPERTY, route.getGroup());
}
// after the route is created then set the route on the policy processor so we get hold of it
if (routePolicyProcessor != null) {
routePolicyProcessor.setRoute(edcr);
}
// invoke init on route policy
if (policy != null) {
policy.onInit(edcr);
}
routes.add(edcr);
}
}