public void commit() { // now lets turn all of the event driven consumer processors into a single route if (!eventDrivenProcessors.isEmpty()) { Processor target = Pipeline.newInstance(getCamelContext(), eventDrivenProcessors); String routeId = route.idOrCreate(getCamelContext().getNodeIdFactory()); // and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the // same UoW CamelInternalProcessor internal = new CamelInternalProcessor(target); internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeId)); // and then in route context so we can keep track which route this is at runtime internal.addAdvice(new CamelInternalProcessor.RouteContextAdvice(this)); // and then optionally add route policy processor if a custom policy is set List<RoutePolicy> routePolicyList = getRoutePolicyList(); if (routePolicyList != null && !routePolicyList.isEmpty()) { for (RoutePolicy policy : routePolicyList) { // add policy as service if we have not already done that (eg possible if two routes have // the same service) // this ensures Camel can control the lifecycle of the policy if (!camelContext.hasService(policy)) { try { camelContext.addService(policy); } catch (Exception e) { throw ObjectHelper.wrapRuntimeCamelException(e); } } } internal.addAdvice(new CamelInternalProcessor.RoutePolicyAdvice(routePolicyList)); } // wrap in route inflight processor to track number of inflight exchanges for the route internal.addAdvice( new CamelInternalProcessor.RouteInflightRepositoryAdvice( camelContext.getInflightRepository(), routeId)); // wrap in JMX instrumentation processor that is used for performance stats internal.addAdvice(new CamelInternalProcessor.InstrumentationAdvice("route")); // wrap in route lifecycle internal.addAdvice(new CamelInternalProcessor.RouteLifecycleAdvice()); // and create the route that wraps the UoW Route edcr = new EventDrivenConsumerRoute(this, getEndpoint(), internal); edcr.getProperties().put(Route.ID_PROPERTY, routeId); edcr.getProperties().put(Route.PARENT_PROPERTY, Integer.toHexString(route.hashCode())); edcr.getProperties().put(Route.DESCRIPTION_PROPERTY, route.getDescriptionText()); if (route.getGroup() != null) { edcr.getProperties().put(Route.GROUP_PROPERTY, route.getGroup()); } String rest = "false"; if (route.isRest() != null && route.isRest()) { rest = "true"; } edcr.getProperties().put(Route.REST_PROPERTY, rest); // after the route is created then set the route on the policy processor so we get hold of it CamelInternalProcessor.RoutePolicyAdvice task = internal.getAdvice(CamelInternalProcessor.RoutePolicyAdvice.class); if (task != null) { task.setRoute(edcr); } CamelInternalProcessor.RouteLifecycleAdvice task2 = internal.getAdvice(CamelInternalProcessor.RouteLifecycleAdvice.class); if (task2 != null) { task2.setRoute(edcr); } // invoke init on route policy if (routePolicyList != null && !routePolicyList.isEmpty()) { for (RoutePolicy policy : routePolicyList) { policy.onInit(edcr); } } routes.add(edcr); } }