001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.camel.management; 018 019import java.util.Iterator; 020import java.util.concurrent.ThreadPoolExecutor; 021 022import org.apache.camel.CamelContext; 023import org.apache.camel.Component; 024import org.apache.camel.Consumer; 025import org.apache.camel.DelegateProcessor; 026import org.apache.camel.Endpoint; 027import org.apache.camel.ErrorHandlerFactory; 028import org.apache.camel.NamedNode; 029import org.apache.camel.Processor; 030import org.apache.camel.Producer; 031import org.apache.camel.Route; 032import org.apache.camel.Service; 033import org.apache.camel.cluster.CamelClusterService; 034import org.apache.camel.component.bean.BeanProcessor; 035import org.apache.camel.component.log.LogEndpoint; 036import org.apache.camel.health.HealthCheckRegistry; 037import org.apache.camel.management.mbean.ManagedAggregateProcessor; 038import org.apache.camel.management.mbean.ManagedBeanProcessor; 039import org.apache.camel.management.mbean.ManagedBrowsableEndpoint; 040import org.apache.camel.management.mbean.ManagedCamelContext; 041import org.apache.camel.management.mbean.ManagedCamelHealth; 042import org.apache.camel.management.mbean.ManagedChoice; 043import org.apache.camel.management.mbean.ManagedClaimCheck; 044import org.apache.camel.management.mbean.ManagedClusterService; 045import org.apache.camel.management.mbean.ManagedComponent; 046import org.apache.camel.management.mbean.ManagedConsumer; 047import org.apache.camel.management.mbean.ManagedConvertBody; 048import org.apache.camel.management.mbean.ManagedCustomLoadBalancer; 049import org.apache.camel.management.mbean.ManagedDataFormat; 050import org.apache.camel.management.mbean.ManagedDelayer; 051import org.apache.camel.management.mbean.ManagedDynamicRouter; 052import org.apache.camel.management.mbean.ManagedEndpoint; 053import org.apache.camel.management.mbean.ManagedEnricher; 054import org.apache.camel.management.mbean.ManagedErrorHandler; 055import org.apache.camel.management.mbean.ManagedEventNotifier; 056import org.apache.camel.management.mbean.ManagedFailoverLoadBalancer; 057import org.apache.camel.management.mbean.ManagedFilter; 058import org.apache.camel.management.mbean.ManagedIdempotentConsumer; 059import org.apache.camel.management.mbean.ManagedLog; 060import org.apache.camel.management.mbean.ManagedLoop; 061import org.apache.camel.management.mbean.ManagedMarshal; 062import org.apache.camel.management.mbean.ManagedMulticast; 063import org.apache.camel.management.mbean.ManagedPollEnricher; 064import org.apache.camel.management.mbean.ManagedProcess; 065import org.apache.camel.management.mbean.ManagedProcessor; 066import org.apache.camel.management.mbean.ManagedProducer; 067import org.apache.camel.management.mbean.ManagedRandomLoadBalancer; 068import org.apache.camel.management.mbean.ManagedRecipientList; 069import org.apache.camel.management.mbean.ManagedRemoveHeader; 070import org.apache.camel.management.mbean.ManagedRemoveHeaders; 071import org.apache.camel.management.mbean.ManagedRemoveProperties; 072import org.apache.camel.management.mbean.ManagedRemoveProperty; 073import org.apache.camel.management.mbean.ManagedResequencer; 074import org.apache.camel.management.mbean.ManagedRollback; 075import org.apache.camel.management.mbean.ManagedRoundRobinLoadBalancer; 076import org.apache.camel.management.mbean.ManagedRoute; 077import org.apache.camel.management.mbean.ManagedRouteController; 078import org.apache.camel.management.mbean.ManagedRoutingSlip; 079import org.apache.camel.management.mbean.ManagedSamplingThrottler; 080import org.apache.camel.management.mbean.ManagedScheduledPollConsumer; 081import org.apache.camel.management.mbean.ManagedScript; 082import org.apache.camel.management.mbean.ManagedSendDynamicProcessor; 083import org.apache.camel.management.mbean.ManagedSendProcessor; 084import org.apache.camel.management.mbean.ManagedService; 085import org.apache.camel.management.mbean.ManagedSetBody; 086import org.apache.camel.management.mbean.ManagedSetExchangePattern; 087import org.apache.camel.management.mbean.ManagedSetHeader; 088import org.apache.camel.management.mbean.ManagedSetProperty; 089import org.apache.camel.management.mbean.ManagedSplitter; 090import org.apache.camel.management.mbean.ManagedStep; 091import org.apache.camel.management.mbean.ManagedStickyLoadBalancer; 092import org.apache.camel.management.mbean.ManagedStop; 093import org.apache.camel.management.mbean.ManagedSupervisingRouteController; 094import org.apache.camel.management.mbean.ManagedSuspendableRoute; 095import org.apache.camel.management.mbean.ManagedThreadPool; 096import org.apache.camel.management.mbean.ManagedThreads; 097import org.apache.camel.management.mbean.ManagedThrottler; 098import org.apache.camel.management.mbean.ManagedThroughputLogger; 099import org.apache.camel.management.mbean.ManagedThrowException; 100import org.apache.camel.management.mbean.ManagedTopicLoadBalancer; 101import org.apache.camel.management.mbean.ManagedTransformer; 102import org.apache.camel.management.mbean.ManagedUnmarshal; 103import org.apache.camel.management.mbean.ManagedValidate; 104import org.apache.camel.management.mbean.ManagedWeightedLoadBalancer; 105import org.apache.camel.management.mbean.ManagedWireTapProcessor; 106import org.apache.camel.model.AggregateDefinition; 107import org.apache.camel.model.DynamicRouterDefinition; 108import org.apache.camel.model.EnrichDefinition; 109import org.apache.camel.model.ExpressionNode; 110import org.apache.camel.model.IdempotentConsumerDefinition; 111import org.apache.camel.model.LoadBalanceDefinition; 112import org.apache.camel.model.LoopDefinition; 113import org.apache.camel.model.MarshalDefinition; 114import org.apache.camel.model.PollEnrichDefinition; 115import org.apache.camel.model.ProcessDefinition; 116import org.apache.camel.model.ProcessorDefinition; 117import org.apache.camel.model.RecipientListDefinition; 118import org.apache.camel.model.RoutingSlipDefinition; 119import org.apache.camel.model.ScriptDefinition; 120import org.apache.camel.model.SetBodyDefinition; 121import org.apache.camel.model.SetHeaderDefinition; 122import org.apache.camel.model.SetPropertyDefinition; 123import org.apache.camel.model.SplitDefinition; 124import org.apache.camel.model.TransformDefinition; 125import org.apache.camel.model.UnmarshalDefinition; 126import org.apache.camel.model.ValidateDefinition; 127import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition; 128import org.apache.camel.processor.ChoiceProcessor; 129import org.apache.camel.processor.ClaimCheckProcessor; 130import org.apache.camel.processor.ConvertBodyProcessor; 131import org.apache.camel.processor.Delayer; 132import org.apache.camel.processor.DynamicRouter; 133import org.apache.camel.processor.Enricher; 134import org.apache.camel.processor.ErrorHandler; 135import org.apache.camel.processor.ExchangePatternProcessor; 136import org.apache.camel.processor.FilterProcessor; 137import org.apache.camel.processor.LogProcessor; 138import org.apache.camel.processor.LoopProcessor; 139import org.apache.camel.processor.MulticastProcessor; 140import org.apache.camel.processor.Pipeline; 141import org.apache.camel.processor.PollEnricher; 142import org.apache.camel.processor.RecipientList; 143import org.apache.camel.processor.RemoveHeaderProcessor; 144import org.apache.camel.processor.RemoveHeadersProcessor; 145import org.apache.camel.processor.RemovePropertiesProcessor; 146import org.apache.camel.processor.RemovePropertyProcessor; 147import org.apache.camel.processor.Resequencer; 148import org.apache.camel.processor.RollbackProcessor; 149import org.apache.camel.processor.RoutingSlip; 150import org.apache.camel.processor.SamplingThrottler; 151import org.apache.camel.processor.ScriptProcessor; 152import org.apache.camel.processor.SendDynamicProcessor; 153import org.apache.camel.processor.SendProcessor; 154import org.apache.camel.processor.SetBodyProcessor; 155import org.apache.camel.processor.SetHeaderProcessor; 156import org.apache.camel.processor.SetPropertyProcessor; 157import org.apache.camel.processor.Splitter; 158import org.apache.camel.processor.StepProcessor; 159import org.apache.camel.processor.StopProcessor; 160import org.apache.camel.processor.StreamResequencer; 161import org.apache.camel.processor.ThreadsProcessor; 162import org.apache.camel.processor.Throttler; 163import org.apache.camel.processor.ThrowExceptionProcessor; 164import org.apache.camel.processor.TransformProcessor; 165import org.apache.camel.processor.WireTapProcessor; 166import org.apache.camel.processor.aggregate.AggregateProcessor; 167import org.apache.camel.processor.idempotent.IdempotentConsumer; 168import org.apache.camel.processor.loadbalancer.FailOverLoadBalancer; 169import org.apache.camel.processor.loadbalancer.LoadBalancer; 170import org.apache.camel.processor.loadbalancer.RandomLoadBalancer; 171import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer; 172import org.apache.camel.processor.loadbalancer.StickyLoadBalancer; 173import org.apache.camel.processor.loadbalancer.TopicLoadBalancer; 174import org.apache.camel.processor.loadbalancer.WeightedLoadBalancer; 175import org.apache.camel.spi.BrowsableEndpoint; 176import org.apache.camel.spi.DataFormat; 177import org.apache.camel.spi.EventNotifier; 178import org.apache.camel.spi.ManagementObjectStrategy; 179import org.apache.camel.spi.RouteController; 180import org.apache.camel.spi.SupervisingRouteController; 181import org.apache.camel.support.ScheduledPollConsumer; 182import org.apache.camel.support.processor.MarshalProcessor; 183import org.apache.camel.support.processor.PredicateValidatingProcessor; 184import org.apache.camel.support.processor.ThroughputLogger; 185import org.apache.camel.support.processor.UnmarshalProcessor; 186 187/** 188 * Default {@link org.apache.camel.spi.ManagementObjectStrategy}. 189 */ 190public class DefaultManagementObjectStrategy implements ManagementObjectStrategy { 191 192 @Override 193 public Object getManagedObjectForCamelContext(CamelContext context) { 194 ManagedCamelContext mc = new ManagedCamelContext(context); 195 mc.init(context.getManagementStrategy()); 196 return mc; 197 } 198 199 @Override 200 public Object getManagedObjectForCamelHealth(CamelContext context, HealthCheckRegistry healthCheckRegistry) { 201 ManagedCamelHealth mch = new ManagedCamelHealth(context, healthCheckRegistry); 202 mch.init(context.getManagementStrategy()); 203 return mch; 204 } 205 206 @Override 207 @SuppressWarnings({"deprecation", "unchecked"}) 208 public Object getManagedObjectForComponent(CamelContext context, Component component, String name) { 209 ManagedComponent mc = new ManagedComponent(name, component); 210 mc.init(context.getManagementStrategy()); 211 return mc; 212 } 213 214 @Override 215 @SuppressWarnings({"deprecation", "unchecked"}) 216 public Object getManagedObjectForDataFormat(CamelContext context, DataFormat dataFormat) { 217 ManagedDataFormat md = new ManagedDataFormat(context, dataFormat); 218 md.init(context.getManagementStrategy()); 219 return md; 220 } 221 222 @Override 223 @SuppressWarnings({"deprecation", "unchecked"}) 224 public Object getManagedObjectForEndpoint(CamelContext context, Endpoint endpoint) { 225 // we only want to manage singleton endpoints 226 if (!endpoint.isSingleton()) { 227 return null; 228 } 229 230 if (endpoint instanceof BrowsableEndpoint) { 231 ManagedBrowsableEndpoint me = new ManagedBrowsableEndpoint((BrowsableEndpoint) endpoint); 232 me.init(context.getManagementStrategy()); 233 return me; 234 } else { 235 ManagedEndpoint me = new ManagedEndpoint(endpoint); 236 me.init(context.getManagementStrategy()); 237 return me; 238 } 239 } 240 241 @Override 242 public Object getManagedObjectForErrorHandler(CamelContext context, Route route, 243 Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) { 244 ManagedErrorHandler me = new ManagedErrorHandler(route, errorHandler, errorHandlerBuilder); 245 me.init(context.getManagementStrategy()); 246 return me; 247 } 248 249 @Override 250 public Object getManagedObjectForRouteController(CamelContext context, RouteController routeController) { 251 ManagedService mrc; 252 if (routeController instanceof SupervisingRouteController) { 253 mrc = new ManagedSupervisingRouteController(context, (SupervisingRouteController) routeController); 254 } else { 255 mrc = new ManagedRouteController(context, routeController); 256 } 257 mrc.init(context.getManagementStrategy()); 258 return mrc; 259 } 260 261 @Override 262 public Object getManagedObjectForRoute(CamelContext context, Route route) { 263 ManagedRoute mr; 264 if (route.supportsSuspension()) { 265 mr = new ManagedSuspendableRoute(context, route); 266 } else { 267 mr = new ManagedRoute(context, route); 268 } 269 mr.init(context.getManagementStrategy()); 270 return mr; 271 } 272 273 @Override 274 public Object getManagedObjectForThreadPool(CamelContext context, ThreadPoolExecutor threadPool, 275 String id, String sourceId, String routeId, String threadPoolProfileId) { 276 ManagedThreadPool mtp = new ManagedThreadPool(context, threadPool, id, sourceId, routeId, threadPoolProfileId); 277 mtp.init(context.getManagementStrategy()); 278 return mtp; 279 } 280 281 @Override 282 public Object getManagedObjectForEventNotifier(CamelContext context, EventNotifier eventNotifier) { 283 ManagedEventNotifier men = new ManagedEventNotifier(context, eventNotifier); 284 men.init(context.getManagementStrategy()); 285 return men; 286 } 287 288 @Override 289 public Object getManagedObjectForConsumer(CamelContext context, Consumer consumer) { 290 ManagedConsumer mc; 291 if (consumer instanceof ScheduledPollConsumer) { 292 mc = new ManagedScheduledPollConsumer(context, (ScheduledPollConsumer) consumer); 293 } else { 294 mc = new ManagedConsumer(context, consumer); 295 } 296 mc.init(context.getManagementStrategy()); 297 return mc; 298 } 299 300 @Override 301 public Object getManagedObjectForProducer(CamelContext context, Producer producer) { 302 ManagedProducer mp = new ManagedProducer(context, producer); 303 mp.init(context.getManagementStrategy()); 304 return mp; 305 } 306 307 @Override 308 public Object getManagedObjectForService(CamelContext context, Service service) { 309 ManagedService mc = new ManagedService(context, service); 310 mc.init(context.getManagementStrategy()); 311 return mc; 312 } 313 314 @Override 315 public Object getManagedObjectForClusterService(CamelContext context, CamelClusterService service) { 316 ManagedClusterService mcs = new ManagedClusterService(context, service); 317 mcs.init(context.getManagementStrategy()); 318 return mcs; 319 } 320 321 @Override 322 @SuppressWarnings({"deprecation", "unchecked"}) 323 public Object getManagedObjectForProcessor(CamelContext context, Processor processor, 324 NamedNode node, Route route) { 325 ManagedProcessor answer = null; 326 327 ProcessorDefinition<?> definition = (ProcessorDefinition<?>) node; 328 329 if (definition instanceof RecipientListDefinition) { 330 // special for RecipientListDefinition, as the processor is wrapped in a pipeline as last 331 Pipeline pipeline = (Pipeline) processor; 332 Iterator<Processor> it = pipeline.next().iterator(); 333 while (it.hasNext()) { 334 processor = it.next(); 335 } 336 } 337 338 // unwrap delegates as we want the real target processor 339 Processor target = processor; 340 while (target != null) { 341 342 // skip error handlers 343 if (target instanceof ErrorHandler) { 344 return false; 345 } 346 347 if (target instanceof ConvertBodyProcessor) { 348 answer = new ManagedConvertBody(context, (ConvertBodyProcessor) target, definition); 349 } else if (target instanceof ChoiceProcessor) { 350 answer = new ManagedChoice(context, (ChoiceProcessor) target, definition); 351 } else if (target instanceof ClaimCheckProcessor) { 352 answer = new ManagedClaimCheck(context, (ClaimCheckProcessor) target, definition); 353 } else if (target instanceof Delayer) { 354 answer = new ManagedDelayer(context, (Delayer) target, definition); 355 } else if (target instanceof Throttler) { 356 answer = new ManagedThrottler(context, (Throttler) target, definition); 357 } else if (target instanceof DynamicRouter) { 358 answer = new ManagedDynamicRouter(context, (DynamicRouter) target, (DynamicRouterDefinition) definition); 359 } else if (target instanceof RoutingSlip) { 360 answer = new ManagedRoutingSlip(context, (RoutingSlip) target, (RoutingSlipDefinition) definition); 361 } else if (target instanceof FilterProcessor) { 362 answer = new ManagedFilter(context, (FilterProcessor) target, (ExpressionNode)definition); 363 } else if (target instanceof LogProcessor) { 364 answer = new ManagedLog(context, (LogProcessor) target, definition); 365 } else if (target instanceof LoopProcessor) { 366 answer = new ManagedLoop(context, (LoopProcessor) target, (LoopDefinition) definition); 367 } else if (target instanceof MarshalProcessor) { 368 answer = new ManagedMarshal(context, (MarshalProcessor) target, (MarshalDefinition) definition); 369 } else if (target instanceof UnmarshalProcessor) { 370 answer = new ManagedUnmarshal(context, (UnmarshalProcessor) target, (UnmarshalDefinition) definition); 371 } else if (target instanceof FailOverLoadBalancer) { 372 answer = new ManagedFailoverLoadBalancer(context, (FailOverLoadBalancer) target, (LoadBalanceDefinition) definition); 373 } else if (target instanceof RandomLoadBalancer) { 374 answer = new ManagedRandomLoadBalancer(context, (RandomLoadBalancer) target, (LoadBalanceDefinition) definition); 375 } else if (target instanceof RoundRobinLoadBalancer) { 376 answer = new ManagedRoundRobinLoadBalancer(context, (RoundRobinLoadBalancer) target, (LoadBalanceDefinition) definition); 377 } else if (target instanceof StickyLoadBalancer) { 378 answer = new ManagedStickyLoadBalancer(context, (StickyLoadBalancer) target, (LoadBalanceDefinition) definition); 379 } else if (target instanceof TopicLoadBalancer) { 380 answer = new ManagedTopicLoadBalancer(context, (TopicLoadBalancer) target, (LoadBalanceDefinition) definition); 381 } else if (target instanceof WeightedLoadBalancer) { 382 answer = new ManagedWeightedLoadBalancer(context, (WeightedLoadBalancer) target, (LoadBalanceDefinition) definition); 383 } else if (target instanceof RecipientList) { 384 answer = new ManagedRecipientList(context, (RecipientList) target, (RecipientListDefinition) definition); 385 } else if (target instanceof Splitter) { 386 answer = new ManagedSplitter(context, (Splitter) target, (SplitDefinition) definition); 387 } else if (target instanceof MulticastProcessor) { 388 answer = new ManagedMulticast(context, (MulticastProcessor) target, definition); 389 } else if (target instanceof SamplingThrottler) { 390 answer = new ManagedSamplingThrottler(context, (SamplingThrottler) target, definition); 391 } else if (target instanceof Resequencer) { 392 answer = new ManagedResequencer(context, (Resequencer) target, definition); 393 } else if (target instanceof RollbackProcessor) { 394 answer = new ManagedRollback(context, (RollbackProcessor) target, definition); 395 } else if (target instanceof StreamResequencer) { 396 answer = new ManagedResequencer(context, (StreamResequencer) target, definition); 397 } else if (target instanceof SetBodyProcessor) { 398 answer = new ManagedSetBody(context, (SetBodyProcessor) target, (SetBodyDefinition) definition); 399 } else if (target instanceof RemoveHeaderProcessor) { 400 answer = new ManagedRemoveHeader(context, (RemoveHeaderProcessor) target, definition); 401 } else if (target instanceof RemoveHeadersProcessor) { 402 answer = new ManagedRemoveHeaders(context, (RemoveHeadersProcessor) target, definition); 403 } else if (target instanceof SetHeaderProcessor) { 404 answer = new ManagedSetHeader(context, (SetHeaderProcessor) target, (SetHeaderDefinition) definition); 405 } else if (target instanceof RemovePropertyProcessor) { 406 answer = new ManagedRemoveProperty(context, (RemovePropertyProcessor) target, definition); 407 } else if (target instanceof RemovePropertiesProcessor) { 408 answer = new ManagedRemoveProperties(context, (RemovePropertiesProcessor) target, definition); 409 } else if (target instanceof SetPropertyProcessor) { 410 answer = new ManagedSetProperty(context, (SetPropertyProcessor) target, (SetPropertyDefinition) definition); 411 } else if (target instanceof ExchangePatternProcessor) { 412 answer = new ManagedSetExchangePattern(context, (ExchangePatternProcessor) target, definition); 413 } else if (target instanceof ScriptProcessor) { 414 answer = new ManagedScript(context, (ScriptProcessor) target, (ScriptDefinition) definition); 415 } else if (target instanceof StepProcessor) { 416 answer = new ManagedStep(context, (StepProcessor) target, definition); 417 } else if (target instanceof StopProcessor) { 418 answer = new ManagedStop(context, (StopProcessor) target, definition); 419 } else if (target instanceof ThreadsProcessor) { 420 answer = new ManagedThreads(context, (ThreadsProcessor) target, definition); 421 } else if (target instanceof ThrowExceptionProcessor) { 422 answer = new ManagedThrowException(context, (ThrowExceptionProcessor) target, definition); 423 } else if (target instanceof TransformProcessor) { 424 answer = new ManagedTransformer(context, (TransformProcessor) target, (TransformDefinition) definition); 425 } else if (target instanceof PredicateValidatingProcessor) { 426 answer = new ManagedValidate(context, (PredicateValidatingProcessor) target, (ValidateDefinition) definition); 427 } else if (target instanceof WireTapProcessor) { 428 answer = new ManagedWireTapProcessor(context, (WireTapProcessor) target, definition); 429 } else if (target instanceof SendDynamicProcessor) { 430 answer = new ManagedSendDynamicProcessor(context, (SendDynamicProcessor) target, definition); 431 } else if (target instanceof SendProcessor) { 432 SendProcessor sp = (SendProcessor) target; 433 // special for sending to throughput logger 434 if (sp.getDestination() instanceof LogEndpoint) { 435 LogEndpoint le = (LogEndpoint) sp.getDestination(); 436 if (le.getLogger() instanceof ThroughputLogger) { 437 ThroughputLogger tl = (ThroughputLogger) le.getLogger(); 438 answer = new ManagedThroughputLogger(context, tl, definition); 439 } 440 } 441 // regular send processor 442 if (answer == null) { 443 answer = new ManagedSendProcessor(context, (SendProcessor) target, definition); 444 } 445 } else if (target instanceof BeanProcessor) { 446 answer = new ManagedBeanProcessor(context, (BeanProcessor) target, definition); 447 } else if (target instanceof IdempotentConsumer) { 448 answer = new ManagedIdempotentConsumer(context, (IdempotentConsumer) target, (IdempotentConsumerDefinition) definition); 449 } else if (target instanceof AggregateProcessor) { 450 answer = new ManagedAggregateProcessor(context, (AggregateProcessor) target, (AggregateDefinition) definition); 451 } else if (target instanceof Enricher) { 452 answer = new ManagedEnricher(context, (Enricher) target, (EnrichDefinition) definition); 453 } else if (target instanceof PollEnricher) { 454 answer = new ManagedPollEnricher(context, (PollEnricher) target, (PollEnrichDefinition) definition); 455 } 456 457 // special for custom load balancer 458 if (definition instanceof LoadBalanceDefinition) { 459 LoadBalanceDefinition lb = (LoadBalanceDefinition) definition; 460 if (lb.getLoadBalancerType() instanceof CustomLoadBalancerDefinition) { 461 answer = new ManagedCustomLoadBalancer(context, (LoadBalancer) target, (LoadBalanceDefinition) definition); 462 } 463 } 464 465 if (answer != null) { 466 // break out as we found an answer 467 break; 468 } 469 470 // no answer yet, so unwrap any delegates and try again 471 if (target instanceof DelegateProcessor) { 472 target = ((DelegateProcessor) target).getProcessor(); 473 } else { 474 // no delegate so we dont have any target to try next 475 break; 476 } 477 } 478 479 if (answer == null && definition instanceof ProcessDefinition) { 480 answer = new ManagedProcess(context, target, (ProcessDefinition) definition); 481 } else if (answer == null) { 482 // fallback to a generic processor 483 answer = new ManagedProcessor(context, target, definition); 484 } 485 486 answer.setRoute(route); 487 answer.init(context.getManagementStrategy()); 488 return answer; 489 } 490 491}