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.concurrent.ThreadPoolExecutor; 020 021import org.apache.camel.CamelContext; 022import org.apache.camel.Component; 023import org.apache.camel.Consumer; 024import org.apache.camel.DelegateProcessor; 025import org.apache.camel.Endpoint; 026import org.apache.camel.NamedNode; 027import org.apache.camel.Processor; 028import org.apache.camel.Producer; 029import org.apache.camel.Route; 030import org.apache.camel.Service; 031import org.apache.camel.cluster.CamelClusterService; 032import org.apache.camel.component.bean.BeanProcessor; 033import org.apache.camel.component.log.LogEndpoint; 034import org.apache.camel.health.HealthCheckRegistry; 035import org.apache.camel.management.mbean.ManagedAggregateProcessor; 036import org.apache.camel.management.mbean.ManagedBeanProcessor; 037import org.apache.camel.management.mbean.ManagedBrowsableEndpoint; 038import org.apache.camel.management.mbean.ManagedCamelContext; 039import org.apache.camel.management.mbean.ManagedCamelHealth; 040import org.apache.camel.management.mbean.ManagedChoice; 041import org.apache.camel.management.mbean.ManagedClaimCheck; 042import org.apache.camel.management.mbean.ManagedClusterService; 043import org.apache.camel.management.mbean.ManagedComponent; 044import org.apache.camel.management.mbean.ManagedConsumer; 045import org.apache.camel.management.mbean.ManagedConvertBody; 046import org.apache.camel.management.mbean.ManagedConvertHeader; 047import org.apache.camel.management.mbean.ManagedConvertVariable; 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.ManagedDisabled; 052import org.apache.camel.management.mbean.ManagedDoCatch; 053import org.apache.camel.management.mbean.ManagedDoFinally; 054import org.apache.camel.management.mbean.ManagedDoTry; 055import org.apache.camel.management.mbean.ManagedDynamicRouter; 056import org.apache.camel.management.mbean.ManagedEndpoint; 057import org.apache.camel.management.mbean.ManagedEnricher; 058import org.apache.camel.management.mbean.ManagedEventNotifier; 059import org.apache.camel.management.mbean.ManagedFailoverLoadBalancer; 060import org.apache.camel.management.mbean.ManagedFilter; 061import org.apache.camel.management.mbean.ManagedIdempotentConsumer; 062import org.apache.camel.management.mbean.ManagedLog; 063import org.apache.camel.management.mbean.ManagedLoop; 064import org.apache.camel.management.mbean.ManagedMarshal; 065import org.apache.camel.management.mbean.ManagedMulticast; 066import org.apache.camel.management.mbean.ManagedPoll; 067import org.apache.camel.management.mbean.ManagedPollEnricher; 068import org.apache.camel.management.mbean.ManagedProcess; 069import org.apache.camel.management.mbean.ManagedProcessor; 070import org.apache.camel.management.mbean.ManagedProducer; 071import org.apache.camel.management.mbean.ManagedRandomLoadBalancer; 072import org.apache.camel.management.mbean.ManagedRecipientList; 073import org.apache.camel.management.mbean.ManagedRemoveHeader; 074import org.apache.camel.management.mbean.ManagedRemoveHeaders; 075import org.apache.camel.management.mbean.ManagedRemoveProperties; 076import org.apache.camel.management.mbean.ManagedRemoveProperty; 077import org.apache.camel.management.mbean.ManagedRemoveVariable; 078import org.apache.camel.management.mbean.ManagedResequencer; 079import org.apache.camel.management.mbean.ManagedRollback; 080import org.apache.camel.management.mbean.ManagedRoundRobinLoadBalancer; 081import org.apache.camel.management.mbean.ManagedRoute; 082import org.apache.camel.management.mbean.ManagedRouteController; 083import org.apache.camel.management.mbean.ManagedRoutingSlip; 084import org.apache.camel.management.mbean.ManagedSamplingThrottler; 085import org.apache.camel.management.mbean.ManagedScheduledPollConsumer; 086import org.apache.camel.management.mbean.ManagedScript; 087import org.apache.camel.management.mbean.ManagedSendDynamicProcessor; 088import org.apache.camel.management.mbean.ManagedSendProcessor; 089import org.apache.camel.management.mbean.ManagedService; 090import org.apache.camel.management.mbean.ManagedSetBody; 091import org.apache.camel.management.mbean.ManagedSetExchangePattern; 092import org.apache.camel.management.mbean.ManagedSetHeader; 093import org.apache.camel.management.mbean.ManagedSetHeaders; 094import org.apache.camel.management.mbean.ManagedSetProperty; 095import org.apache.camel.management.mbean.ManagedSetVariable; 096import org.apache.camel.management.mbean.ManagedSetVariables; 097import org.apache.camel.management.mbean.ManagedSplitter; 098import org.apache.camel.management.mbean.ManagedStep; 099import org.apache.camel.management.mbean.ManagedStickyLoadBalancer; 100import org.apache.camel.management.mbean.ManagedStop; 101import org.apache.camel.management.mbean.ManagedSupervisingRouteController; 102import org.apache.camel.management.mbean.ManagedSuspendableRoute; 103import org.apache.camel.management.mbean.ManagedThreadPool; 104import org.apache.camel.management.mbean.ManagedThreads; 105import org.apache.camel.management.mbean.ManagedThrottler; 106import org.apache.camel.management.mbean.ManagedThroughputLogger; 107import org.apache.camel.management.mbean.ManagedThrowException; 108import org.apache.camel.management.mbean.ManagedTopicLoadBalancer; 109import org.apache.camel.management.mbean.ManagedTransformer; 110import org.apache.camel.management.mbean.ManagedUnmarshal; 111import org.apache.camel.management.mbean.ManagedValidate; 112import org.apache.camel.management.mbean.ManagedWeightedLoadBalancer; 113import org.apache.camel.management.mbean.ManagedWireTapProcessor; 114import org.apache.camel.model.ExpressionNode; 115import org.apache.camel.model.LoadBalanceDefinition; 116import org.apache.camel.model.ProcessDefinition; 117import org.apache.camel.model.ProcessorDefinition; 118import org.apache.camel.model.RecipientListDefinition; 119import org.apache.camel.model.TransformDefinition; 120import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition; 121import org.apache.camel.processor.CatchProcessor; 122import org.apache.camel.processor.ChoiceProcessor; 123import org.apache.camel.processor.ClaimCheckProcessor; 124import org.apache.camel.processor.Delayer; 125import org.apache.camel.processor.DisabledProcessor; 126import org.apache.camel.processor.DynamicRouter; 127import org.apache.camel.processor.Enricher; 128import org.apache.camel.processor.ExchangePatternProcessor; 129import org.apache.camel.processor.FilterProcessor; 130import org.apache.camel.processor.FinallyProcessor; 131import org.apache.camel.processor.LogProcessor; 132import org.apache.camel.processor.LoopProcessor; 133import org.apache.camel.processor.MulticastProcessor; 134import org.apache.camel.processor.Pipeline; 135import org.apache.camel.processor.PollEnricher; 136import org.apache.camel.processor.PollProcessor; 137import org.apache.camel.processor.RecipientList; 138import org.apache.camel.processor.RemoveHeaderProcessor; 139import org.apache.camel.processor.RemoveHeadersProcessor; 140import org.apache.camel.processor.RemovePropertiesProcessor; 141import org.apache.camel.processor.RemovePropertyProcessor; 142import org.apache.camel.processor.RemoveVariableProcessor; 143import org.apache.camel.processor.Resequencer; 144import org.apache.camel.processor.RollbackProcessor; 145import org.apache.camel.processor.RoutingSlip; 146import org.apache.camel.processor.SamplingThrottler; 147import org.apache.camel.processor.ScriptProcessor; 148import org.apache.camel.processor.SendDynamicProcessor; 149import org.apache.camel.processor.SendProcessor; 150import org.apache.camel.processor.SetBodyProcessor; 151import org.apache.camel.processor.SetHeaderProcessor; 152import org.apache.camel.processor.SetHeadersProcessor; 153import org.apache.camel.processor.SetPropertyProcessor; 154import org.apache.camel.processor.SetVariableProcessor; 155import org.apache.camel.processor.SetVariablesProcessor; 156import org.apache.camel.processor.Splitter; 157import org.apache.camel.processor.StepProcessor; 158import org.apache.camel.processor.StopProcessor; 159import org.apache.camel.processor.StreamResequencer; 160import org.apache.camel.processor.ThreadsProcessor; 161import org.apache.camel.processor.Throttler; 162import org.apache.camel.processor.ThrowExceptionProcessor; 163import org.apache.camel.processor.TransformProcessor; 164import org.apache.camel.processor.TryProcessor; 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.processor.transformer.DataTypeProcessor; 176import org.apache.camel.spi.BrowsableEndpoint; 177import org.apache.camel.spi.DataFormat; 178import org.apache.camel.spi.ErrorHandler; 179import org.apache.camel.spi.EventNotifier; 180import org.apache.camel.spi.ManagementObjectStrategy; 181import org.apache.camel.spi.RouteController; 182import org.apache.camel.spi.SupervisingRouteController; 183import org.apache.camel.support.ScheduledPollConsumer; 184import org.apache.camel.support.processor.ConvertBodyProcessor; 185import org.apache.camel.support.processor.ConvertHeaderProcessor; 186import org.apache.camel.support.processor.ConvertVariableProcessor; 187import org.apache.camel.support.processor.MarshalProcessor; 188import org.apache.camel.support.processor.PredicateValidatingProcessor; 189import org.apache.camel.support.processor.ThroughputLogger; 190import org.apache.camel.support.processor.UnmarshalProcessor; 191 192/** 193 * Default {@link org.apache.camel.spi.ManagementObjectStrategy}. 194 */ 195public class DefaultManagementObjectStrategy implements ManagementObjectStrategy { 196 197 @Override 198 public Object getManagedObjectForCamelContext(CamelContext context) { 199 ManagedCamelContext mc = new ManagedCamelContext(context); 200 mc.init(context.getManagementStrategy()); 201 return mc; 202 } 203 204 @Override 205 public Object getManagedObjectForCamelHealth(CamelContext context, HealthCheckRegistry healthCheckRegistry) { 206 ManagedCamelHealth mch = new ManagedCamelHealth(context, healthCheckRegistry); 207 mch.init(context.getManagementStrategy()); 208 return mch; 209 } 210 211 @Override 212 public Object getManagedObjectForComponent(CamelContext context, Component component, String name) { 213 ManagedComponent mc = new ManagedComponent(name, component); 214 mc.init(context.getManagementStrategy()); 215 return mc; 216 } 217 218 @Override 219 public Object getManagedObjectForDataFormat(CamelContext context, DataFormat dataFormat) { 220 ManagedDataFormat md = new ManagedDataFormat(context, dataFormat); 221 md.init(context.getManagementStrategy()); 222 return md; 223 } 224 225 @Override 226 public Object getManagedObjectForEndpoint(CamelContext context, Endpoint endpoint) { 227 // we only want to manage singleton endpoints 228 if (!endpoint.isSingleton()) { 229 return null; 230 } 231 232 if (endpoint instanceof BrowsableEndpoint browsableEndpoint) { 233 ManagedBrowsableEndpoint me = new ManagedBrowsableEndpoint(browsableEndpoint); 234 me.init(context.getManagementStrategy()); 235 return me; 236 } else { 237 ManagedEndpoint me = new ManagedEndpoint(endpoint); 238 me.init(context.getManagementStrategy()); 239 return me; 240 } 241 } 242 243 @Override 244 public Object getManagedObjectForRouteController(CamelContext context, RouteController routeController) { 245 ManagedService mrc; 246 if (routeController instanceof SupervisingRouteController supervisingRouteController) { 247 mrc = new ManagedSupervisingRouteController(context, supervisingRouteController); 248 } else { 249 mrc = new ManagedRouteController(context, routeController); 250 } 251 mrc.init(context.getManagementStrategy()); 252 return mrc; 253 } 254 255 @Override 256 public Object getManagedObjectForRoute(CamelContext context, Route route) { 257 ManagedRoute mr; 258 if (route.supportsSuspension()) { 259 mr = new ManagedSuspendableRoute(context, route); 260 } else { 261 mr = new ManagedRoute(context, route); 262 } 263 mr.init(context.getManagementStrategy()); 264 return mr; 265 } 266 267 @Override 268 public Object getManagedObjectForThreadPool( 269 CamelContext context, ThreadPoolExecutor threadPool, 270 String id, String sourceId, String routeId, String threadPoolProfileId) { 271 ManagedThreadPool mtp = new ManagedThreadPool(context, threadPool, id, sourceId, routeId, threadPoolProfileId); 272 mtp.init(context.getManagementStrategy()); 273 return mtp; 274 } 275 276 @Override 277 public Object getManagedObjectForEventNotifier(CamelContext context, EventNotifier eventNotifier) { 278 ManagedEventNotifier men = new ManagedEventNotifier(context, eventNotifier); 279 men.init(context.getManagementStrategy()); 280 return men; 281 } 282 283 @Override 284 public Object getManagedObjectForConsumer(CamelContext context, Consumer consumer) { 285 ManagedConsumer mc; 286 if (consumer instanceof ScheduledPollConsumer scheduledPollConsumer) { 287 mc = new ManagedScheduledPollConsumer(context, scheduledPollConsumer); 288 } else { 289 mc = new ManagedConsumer(context, consumer); 290 } 291 mc.init(context.getManagementStrategy()); 292 return mc; 293 } 294 295 @Override 296 public Object getManagedObjectForProducer(CamelContext context, Producer producer) { 297 ManagedProducer mp = new ManagedProducer(context, producer); 298 mp.init(context.getManagementStrategy()); 299 return mp; 300 } 301 302 @Override 303 public Object getManagedObjectForService(CamelContext context, Service service) { 304 ManagedService mc = new ManagedService(context, service); 305 mc.init(context.getManagementStrategy()); 306 return mc; 307 } 308 309 @Override 310 public Object getManagedObjectForClusterService(CamelContext context, CamelClusterService service) { 311 ManagedClusterService mcs = new ManagedClusterService(context, service); 312 mcs.init(context.getManagementStrategy()); 313 return mcs; 314 } 315 316 @Override 317 public Object getManagedObjectForProcessor( 318 CamelContext context, Processor processor, 319 NamedNode node, Route route) { 320 ManagedProcessor answer = null; 321 322 ProcessorDefinition<?> definition = (ProcessorDefinition<?>) node; 323 324 if (definition instanceof RecipientListDefinition) { 325 // special for RecipientListDefinition, as the processor is wrapped in a pipeline as last 326 Pipeline pipeline = (Pipeline) processor; 327 for (Processor value : pipeline.next()) { 328 processor = value; 329 } 330 } 331 332 // unwrap delegates as we want the real target processor 333 Processor target = processor; 334 while (target != null) { 335 336 // skip error handlers 337 if (target instanceof ErrorHandler) { 338 return false; 339 } 340 341 if (target instanceof ConvertBodyProcessor) { 342 answer = new ManagedConvertBody(context, (ConvertBodyProcessor) target, definition); 343 } else if (target instanceof ConvertHeaderProcessor) { 344 answer = new ManagedConvertHeader(context, (ConvertHeaderProcessor) target, definition); 345 } else if (target instanceof ConvertVariableProcessor) { 346 answer = new ManagedConvertVariable(context, (ConvertVariableProcessor) target, definition); 347 } else if (target instanceof ChoiceProcessor) { 348 answer = new ManagedChoice(context, (ChoiceProcessor) target, definition); 349 } else if (target instanceof ClaimCheckProcessor) { 350 answer = new ManagedClaimCheck(context, (ClaimCheckProcessor) target, definition); 351 } else if (target instanceof Delayer) { 352 answer = new ManagedDelayer(context, (Delayer) target, definition); 353 } else if (target instanceof DisabledProcessor) { 354 answer = new ManagedDisabled(context, (DisabledProcessor) target, definition); 355 } else if (target instanceof TryProcessor tryProc) { 356 answer = new ManagedDoTry(context, tryProc, cast(definition)); 357 } else if (target instanceof CatchProcessor) { 358 answer = new ManagedDoCatch(context, (CatchProcessor) target, cast(definition)); 359 } else if (target instanceof FinallyProcessor) { 360 answer = new ManagedDoFinally(context, (FinallyProcessor) target, cast(definition)); 361 } else if (target instanceof Throttler) { 362 answer = new ManagedThrottler(context, (Throttler) target, definition); 363 } else if (target instanceof DynamicRouter) { 364 answer = new ManagedDynamicRouter(context, (DynamicRouter) target, cast(definition)); 365 } else if (target instanceof RoutingSlip) { 366 answer = new ManagedRoutingSlip(context, (RoutingSlip) target, cast(definition)); 367 } else if (target instanceof FilterProcessor) { 368 answer = new ManagedFilter(context, (FilterProcessor) target, (ExpressionNode) definition); 369 } else if (target instanceof LogProcessor) { 370 answer = new ManagedLog(context, (LogProcessor) target, definition); 371 } else if (target instanceof LoopProcessor) { 372 answer = new ManagedLoop(context, (LoopProcessor) target, cast(definition)); 373 } else if (target instanceof MarshalProcessor) { 374 answer = new ManagedMarshal(context, (MarshalProcessor) target, cast(definition)); 375 } else if (target instanceof UnmarshalProcessor) { 376 answer = new ManagedUnmarshal(context, (UnmarshalProcessor) target, cast(definition)); 377 } else if (target instanceof FailOverLoadBalancer) { 378 answer = new ManagedFailoverLoadBalancer( 379 context, (FailOverLoadBalancer) target, cast(definition)); 380 } else if (target instanceof RandomLoadBalancer) { 381 answer = new ManagedRandomLoadBalancer( 382 context, (RandomLoadBalancer) target, cast(definition)); 383 } else if (target instanceof RoundRobinLoadBalancer) { 384 answer = new ManagedRoundRobinLoadBalancer( 385 context, (RoundRobinLoadBalancer) target, cast(definition)); 386 } else if (target instanceof StickyLoadBalancer) { 387 answer = new ManagedStickyLoadBalancer( 388 context, (StickyLoadBalancer) target, cast(definition)); 389 } else if (target instanceof TopicLoadBalancer) { 390 answer = new ManagedTopicLoadBalancer(context, (TopicLoadBalancer) target, cast(definition)); 391 } else if (target instanceof WeightedLoadBalancer) { 392 answer = new ManagedWeightedLoadBalancer( 393 context, (WeightedLoadBalancer) target, cast(definition)); 394 } else if (target instanceof RecipientList) { 395 answer = new ManagedRecipientList(context, (RecipientList) target, cast(definition)); 396 } else if (target instanceof Splitter) { 397 answer = new ManagedSplitter(context, (Splitter) target, cast(definition)); 398 } else if (target instanceof MulticastProcessor) { 399 answer = new ManagedMulticast(context, (MulticastProcessor) target, definition); 400 } else if (target instanceof SamplingThrottler) { 401 answer = new ManagedSamplingThrottler(context, (SamplingThrottler) target, definition); 402 } else if (target instanceof Resequencer) { 403 answer = new ManagedResequencer(context, (Resequencer) target, definition); 404 } else if (target instanceof RollbackProcessor) { 405 answer = new ManagedRollback(context, (RollbackProcessor) target, definition); 406 } else if (target instanceof StreamResequencer) { 407 answer = new ManagedResequencer(context, (StreamResequencer) target, definition); 408 } else if (target instanceof SetBodyProcessor) { 409 answer = new ManagedSetBody(context, (SetBodyProcessor) target, cast(definition)); 410 } else if (target instanceof RemoveHeaderProcessor) { 411 answer = new ManagedRemoveHeader(context, (RemoveHeaderProcessor) target, definition); 412 } else if (target instanceof RemoveHeadersProcessor) { 413 answer = new ManagedRemoveHeaders(context, (RemoveHeadersProcessor) target, definition); 414 } else if (target instanceof SetHeaderProcessor) { 415 answer = new ManagedSetHeader(context, (SetHeaderProcessor) target, cast(definition)); 416 } else if (target instanceof SetHeadersProcessor) { 417 answer = new ManagedSetHeaders(context, (SetHeadersProcessor) target, cast(definition)); 418 } else if (target instanceof SetVariableProcessor) { 419 answer = new ManagedSetVariable(context, (SetVariableProcessor) target, cast(definition)); 420 } else if (target instanceof SetVariablesProcessor) { 421 answer = new ManagedSetVariables(context, (SetVariablesProcessor) target, cast(definition)); 422 } else if (target instanceof RemovePropertyProcessor) { 423 answer = new ManagedRemoveProperty(context, (RemovePropertyProcessor) target, definition); 424 } else if (target instanceof RemovePropertiesProcessor) { 425 answer = new ManagedRemoveProperties(context, (RemovePropertiesProcessor) target, definition); 426 } else if (target instanceof RemoveVariableProcessor) { 427 answer = new ManagedRemoveVariable(context, (RemoveVariableProcessor) target, definition); 428 } else if (target instanceof SetPropertyProcessor) { 429 answer = new ManagedSetProperty(context, (SetPropertyProcessor) target, cast(definition)); 430 } else if (target instanceof ExchangePatternProcessor) { 431 answer = new ManagedSetExchangePattern(context, (ExchangePatternProcessor) target, definition); 432 } else if (target instanceof ScriptProcessor) { 433 answer = new ManagedScript(context, (ScriptProcessor) target, cast(definition)); 434 } else if (target instanceof StepProcessor) { 435 answer = new ManagedStep(context, (StepProcessor) target, definition); 436 } else if (target instanceof StopProcessor) { 437 answer = new ManagedStop(context, (StopProcessor) target, definition); 438 } else if (target instanceof ThreadsProcessor) { 439 answer = new ManagedThreads(context, (ThreadsProcessor) target, definition); 440 } else if (target instanceof ThrowExceptionProcessor) { 441 answer = new ManagedThrowException(context, (ThrowExceptionProcessor) target, definition); 442 } else if (target instanceof TransformProcessor) { 443 answer = new ManagedTransformer(context, target, cast(definition)); 444 } else if (target instanceof DataTypeProcessor && definition instanceof TransformDefinition) { 445 answer = new ManagedTransformer(context, target, (TransformDefinition) definition); 446 } else if (target instanceof PredicateValidatingProcessor) { 447 answer = new ManagedValidate(context, (PredicateValidatingProcessor) target, cast(definition)); 448 } else if (target instanceof WireTapProcessor) { 449 answer = new ManagedWireTapProcessor(context, (WireTapProcessor) target, definition); 450 } else if (target instanceof SendDynamicProcessor) { 451 answer = new ManagedSendDynamicProcessor(context, (SendDynamicProcessor) target, definition); 452 } else if (target instanceof SendProcessor sp) { 453 // special for sending to throughput logger 454 if (sp.getDestination() instanceof LogEndpoint le && le.getLogger() instanceof ThroughputLogger tl) { 455 answer = new ManagedThroughputLogger(context, tl, definition); 456 } 457 // regular send processor 458 if (answer == null) { 459 answer = new ManagedSendProcessor(context, (SendProcessor) target, definition); 460 } 461 } else if (target instanceof BeanProcessor) { 462 answer = new ManagedBeanProcessor(context, (BeanProcessor) target, definition); 463 } else if (target instanceof IdempotentConsumer) { 464 answer = new ManagedIdempotentConsumer( 465 context, (IdempotentConsumer) target, cast(definition)); 466 } else if (target instanceof AggregateProcessor) { 467 answer = new ManagedAggregateProcessor(context, (AggregateProcessor) target, cast(definition)); 468 } else if (target instanceof Enricher) { 469 answer = new ManagedEnricher(context, (Enricher) target, cast(definition)); 470 } else if (target instanceof PollProcessor) { 471 answer = new ManagedPoll(context, (PollProcessor) target, cast(definition)); 472 } else if (target instanceof PollEnricher) { 473 answer = new ManagedPollEnricher(context, (PollEnricher) target, cast(definition)); 474 } 475 476 // special for custom load balancer 477 if (definition instanceof LoadBalanceDefinition lb) { 478 if (lb.getLoadBalancerType() instanceof CustomLoadBalancerDefinition) { 479 answer = new ManagedCustomLoadBalancer(context, (LoadBalancer) target, (LoadBalanceDefinition) definition); 480 } 481 } 482 483 if (answer != null) { 484 // break out as we found an answer 485 break; 486 } 487 488 // no answer yet, so unwrap any delegates and try again 489 if (target instanceof DelegateProcessor) { 490 target = ((DelegateProcessor) target).getProcessor(); 491 } else { 492 // no delegate so we dont have any target to try next 493 break; 494 } 495 } 496 497 if (answer == null && definition instanceof ProcessDefinition) { 498 answer = new ManagedProcess(context, target, (ProcessDefinition) definition); 499 } else if (answer == null) { 500 // fallback to a generic processor 501 answer = new ManagedProcessor(context, target, definition); 502 } 503 504 answer.setRoute(route); 505 answer.init(context.getManagementStrategy()); 506 return answer; 507 } 508 509 @SuppressWarnings("unchecked") 510 private <T extends ProcessorDefinition<?>> T cast(ProcessorDefinition<?> definition) { 511 return (T) definition; 512 } 513 514}