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 */ 017 package org.apache.camel; 018 019 import java.io.InputStream; 020 import java.util.Collection; 021 import java.util.List; 022 import java.util.Map; 023 import java.util.concurrent.TimeUnit; 024 025 import org.apache.camel.builder.ErrorHandlerBuilder; 026 import org.apache.camel.model.DataFormatDefinition; 027 import org.apache.camel.model.RouteDefinition; 028 import org.apache.camel.model.RoutesDefinition; 029 import org.apache.camel.spi.CamelContextNameStrategy; 030 import org.apache.camel.spi.ClassResolver; 031 import org.apache.camel.spi.DataFormat; 032 import org.apache.camel.spi.DataFormatResolver; 033 import org.apache.camel.spi.Debugger; 034 import org.apache.camel.spi.EndpointStrategy; 035 import org.apache.camel.spi.ExecutorServiceStrategy; 036 import org.apache.camel.spi.FactoryFinder; 037 import org.apache.camel.spi.FactoryFinderResolver; 038 import org.apache.camel.spi.InflightRepository; 039 import org.apache.camel.spi.Injector; 040 import org.apache.camel.spi.InterceptStrategy; 041 import org.apache.camel.spi.Language; 042 import org.apache.camel.spi.LifecycleStrategy; 043 import org.apache.camel.spi.ManagementStrategy; 044 import org.apache.camel.spi.NodeIdFactory; 045 import org.apache.camel.spi.PackageScanClassResolver; 046 import org.apache.camel.spi.ProcessorFactory; 047 import org.apache.camel.spi.Registry; 048 import org.apache.camel.spi.ServicePool; 049 import org.apache.camel.spi.ShutdownStrategy; 050 import org.apache.camel.spi.TypeConverterRegistry; 051 import org.apache.camel.spi.UuidGenerator; 052 053 /** 054 * Interface used to represent the context used to configure routes and the 055 * policies to use during message exchanges between endpoints. 056 * <p/> 057 * The context offers the following methods to control the lifecycle: 058 * <ul> 059 * <li>{@link #start()} - to start</li> 060 * <li>{@link #stop()} - to shutdown (will stop all routes/components/endpoints etc and clear internal state/cache)</li> 061 * <li>{@link #suspend()} - to pause routing messages</li> 062 * <li>{@link #resume()} - to resume after a suspend</li> 063 * </ul> 064 * <p/> 065 * <b>Notice:</b> that {@link #stop()} and {@link #suspend()} will graceful stop/suspend routs ensuring any in progress 066 * messages is given time to complete. See more details at {@link org.apache.camel.spi.ShutdownStrategy}. 067 * <p/> 068 * If you are doing a hot restart then its adviced to use the suspend/resume methods which ensures a faster 069 * restart but also allows any internal state to be kept as is. 070 * The stop/start approach will do a <i>cold</i> restart of Camel, where all internal state is reset. 071 * <p/> 072 * End users is adviced to use suspend/resume. Using stop is for shutting down Camel and its not guaranteed that 073 * when its being started again using the start method that everything works out of the box. 074 * 075 * @version 076 */ 077 public interface CamelContext extends SuspendableService, RuntimeConfiguration { 078 079 /** 080 * Gets the name (id) of the this context. 081 * 082 * @return the name 083 */ 084 String getName(); 085 086 /** 087 * Gets the current name strategy 088 * 089 * @return name strategy 090 */ 091 CamelContextNameStrategy getNameStrategy(); 092 093 /** 094 * Sets a custom name strategy 095 * 096 * @param nameStrategy name strategy 097 */ 098 void setNameStrategy(CamelContextNameStrategy nameStrategy); 099 100 /** 101 * Gets the name this {@link CamelContext} was registered in JMX. 102 * <p/> 103 * The reason that a {@link CamelContext} can have a different name in JMX is the fact to remedy for name clash 104 * in JMX when having multiple {@link CamelContext}s in the same JVM. Camel will automatic reassign and use 105 * a free name to avoid failing to start. 106 * 107 * @return the management name 108 */ 109 String getManagementName(); 110 111 /** 112 * Sets the name this {@link CamelContext} was registered in JMX. 113 * 114 * @param name the actual name used when registering this {@link CamelContext} in JMX 115 */ 116 void setManagementName(String name); 117 118 /** 119 * Gets the version of the this context. 120 * 121 * @return the version 122 */ 123 String getVersion(); 124 125 /** 126 * Get the status of this context 127 * 128 * @return the status 129 */ 130 ServiceStatus getStatus(); 131 132 /** 133 * Gets the uptime in a human readable format 134 * 135 * @return the uptime in days/hours/minutes 136 */ 137 String getUptime(); 138 139 // Service Methods 140 //----------------------------------------------------------------------- 141 142 /** 143 * Adds a service to this context, which allows this context to control the lifecycle, ensuring 144 * the service is stopped when the context stops. 145 * <p/> 146 * The service will also have {@link CamelContext} injected if its {@link CamelContextAware}. 147 * The service will also be enlisted in JMX for management (if JMX is enabled). 148 * The service will be started, if its not already started. 149 * 150 * @param object the service 151 * @throws Exception can be thrown when starting the service 152 */ 153 void addService(Object object) throws Exception; 154 155 /** 156 * Has the given service already been added to this context? 157 * 158 * @param object the service 159 * @return <tt>true</tt> if already added, <tt>false</tt> if not. 160 */ 161 boolean hasService(Object object); 162 163 /** 164 * Adds the given listener to be invoked when {@link CamelContext} have just been started. 165 * <p/> 166 * This allows listeners to do any custom work after the routes and other services have been started and are running. 167 * <p/><b>Important:</b> The listener will always be invoked, also if the {@link CamelContext} has already been 168 * started, see the {@link org.apache.camel.StartupListener#onCamelContextStarted(CamelContext, boolean)} method. 169 * 170 * @param listener the listener 171 * @throws Exception can be thrown if {@link CamelContext} is already started and the listener is invoked 172 * and cause an exception to be thrown 173 */ 174 void addStartupListener(StartupListener listener) throws Exception; 175 176 // Component Management Methods 177 //----------------------------------------------------------------------- 178 179 /** 180 * Adds a component to the context. 181 * 182 * @param componentName the name the component is registered as 183 * @param component the component 184 */ 185 void addComponent(String componentName, Component component); 186 187 /** 188 * Is the given component already registered? 189 * 190 * @param componentName the name of the component 191 * @return the registered Component or <tt>null</tt> if not registered 192 */ 193 Component hasComponent(String componentName); 194 195 /** 196 * Gets a component from the context by name. 197 * 198 * @param componentName the name of the component 199 * @return the component 200 */ 201 Component getComponent(String componentName); 202 203 /** 204 * Gets a component from the context by name and specifying the expected type of component. 205 * 206 * @param name the name to lookup 207 * @param componentType the expected type 208 * @return the component 209 */ 210 <T extends Component> T getComponent(String name, Class<T> componentType); 211 212 /** 213 * Gets a readonly list of names of the components currently registered 214 * 215 * @return a readonly list with the names of the the components 216 */ 217 List<String> getComponentNames(); 218 219 /** 220 * Removes a previously added component. 221 * 222 * @param componentName the component name to remove 223 * @return the previously added component or null if it had not been previously added. 224 */ 225 Component removeComponent(String componentName); 226 227 // Endpoint Management Methods 228 //----------------------------------------------------------------------- 229 230 /** 231 * Resolves the given name to an {@link Endpoint} of the specified type. 232 * If the name has a singleton endpoint registered, then the singleton is returned. 233 * Otherwise, a new {@link Endpoint} is created and registered. 234 * 235 * @param uri the URI of the endpoint 236 * @return the endpoint 237 */ 238 Endpoint getEndpoint(String uri); 239 240 /** 241 * Resolves the given name to an {@link Endpoint} of the specified type. 242 * If the name has a singleton endpoint registered, then the singleton is returned. 243 * Otherwise, a new {@link Endpoint} is created and registered. 244 * 245 * @param name the name of the endpoint 246 * @param endpointType the expected type 247 * @return the endpoint 248 */ 249 <T extends Endpoint> T getEndpoint(String name, Class<T> endpointType); 250 251 /** 252 * Returns the collection of all registered endpoints. 253 * 254 * @return all endpoints 255 */ 256 Collection<Endpoint> getEndpoints(); 257 258 /** 259 * Returns a new Map containing all of the active endpoints with the key of the map being their 260 * unique key. 261 * 262 * @return map of active endpoints 263 */ 264 Map<String, Endpoint> getEndpointMap(); 265 266 /** 267 * Is the given endpoint already registered? 268 * 269 * @param uri the URI of the endpoint 270 * @return the registered endpoint or <tt>null</tt> if not registered 271 */ 272 Endpoint hasEndpoint(String uri); 273 274 /** 275 * Adds the endpoint to the context using the given URI. 276 * 277 * @param uri the URI to be used to resolve this endpoint 278 * @param endpoint the endpoint to be added to the context 279 * @return the old endpoint that was previously registered or <tt>null</tt> if none was registered 280 * @throws Exception if the new endpoint could not be started or the old endpoint could not be stopped 281 */ 282 Endpoint addEndpoint(String uri, Endpoint endpoint) throws Exception; 283 284 /** 285 * Removes all endpoints with the given URI. 286 * 287 * @param pattern an uri or pattern to match 288 * @return a collection of endpoints removed or null if there are no endpoints for this URI 289 * @throws Exception if at least one endpoint could not be stopped 290 * @see org.apache.camel.util.EndpointHelper#matchEndpoint(String, String) for pattern 291 */ 292 Collection<Endpoint> removeEndpoints(String pattern) throws Exception; 293 294 /** 295 * Registers a {@link org.apache.camel.spi.EndpointStrategy callback} to allow you to do custom 296 * logic when an {@link Endpoint} is about to be registered to the {@link CamelContext} endpoint registry. 297 * <p/> 298 * When a callback is added it will be executed on the already registered endpoints allowing you to catch-up 299 * 300 * @param strategy callback to be invoked 301 */ 302 void addRegisterEndpointCallback(EndpointStrategy strategy); 303 304 // Route Management Methods 305 //----------------------------------------------------------------------- 306 307 /** 308 * Returns a list of the current route definitions 309 * 310 * @return list of the current route definitions 311 */ 312 List<RouteDefinition> getRouteDefinitions(); 313 314 /** 315 * Gets the route definition with the given id 316 * 317 * @param id id of the route 318 * @return the route definition or <tt>null</tt> if not found 319 */ 320 RouteDefinition getRouteDefinition(String id); 321 322 /** 323 * Returns the current routes in this context 324 * 325 * @return the current routes 326 */ 327 List<Route> getRoutes(); 328 329 /** 330 * Gets the route with the given id 331 * 332 * @param id id of the route 333 * @return the route or <tt>null</tt> if not found 334 */ 335 Route getRoute(String id); 336 337 /** 338 * Adds a collection of routes to this context using the given builder 339 * to build them 340 * 341 * @param builder the builder which will create the routes and add them to this context 342 * @throws Exception if the routes could not be created for whatever reason 343 */ 344 void addRoutes(RoutesBuilder builder) throws Exception; 345 346 /** 347 * Loads a collection of route definitions from the given {@link java.io.InputStream}. 348 * 349 * @param is input stream with the route(s) definition to add 350 * @throws Exception if the route definitions could not be loaded for whatever reason 351 * @return the route definitions 352 */ 353 RoutesDefinition loadRoutesDefinition(InputStream is) throws Exception; 354 355 /** 356 * Adds a collection of route definitions to the context 357 * 358 * @param routeDefinitions the route(s) definition to add 359 * @throws Exception if the route definitions could not be created for whatever reason 360 */ 361 void addRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception; 362 363 /** 364 * Add a route definition to the context 365 * 366 * @param routeDefinition the route definition to add 367 * @throws Exception if the route definition could not be created for whatever reason 368 */ 369 void addRouteDefinition(RouteDefinition routeDefinition) throws Exception; 370 371 /** 372 * Removes a collection of route definitions from the context - stopping any previously running 373 * routes if any of them are actively running 374 * 375 * @param routeDefinitions route(s) definitions to remove 376 * @throws Exception if the route definitions could not be removed for whatever reason 377 */ 378 void removeRouteDefinitions(Collection<RouteDefinition> routeDefinitions) throws Exception; 379 380 /** 381 * Removes a route definition from the context - stopping any previously running 382 * routes if any of them are actively running 383 * 384 * @param routeDefinition route definition to remove 385 * @throws Exception if the route definition could not be removed for whatever reason 386 */ 387 void removeRouteDefinition(RouteDefinition routeDefinition) throws Exception; 388 389 /** 390 * Starts the given route if it has been previously stopped 391 * 392 * @param route the route to start 393 * @throws Exception is thrown if the route could not be started for whatever reason 394 */ 395 void startRoute(RouteDefinition route) throws Exception; 396 397 /** 398 * Starts the given route if it has been previously stopped 399 * 400 * @param routeId the route id 401 * @throws Exception is thrown if the route could not be started for whatever reason 402 */ 403 void startRoute(String routeId) throws Exception; 404 405 /** 406 * Stops the given route. 407 * 408 * @param route the route to stop 409 * @throws Exception is thrown if the route could not be stopped for whatever reason 410 */ 411 void stopRoute(RouteDefinition route) throws Exception; 412 413 /** 414 * Stops the given route using {@link org.apache.camel.spi.ShutdownStrategy}. 415 * 416 * @param routeId the route id 417 * @throws Exception is thrown if the route could not be stopped for whatever reason 418 * @see #suspendRoute(String) 419 */ 420 void stopRoute(String routeId) throws Exception; 421 422 /** 423 * Stops the given route using {@link org.apache.camel.spi.ShutdownStrategy} with a specified timeout. 424 * 425 * @param routeId the route id 426 * @param timeout timeout 427 * @param timeUnit the unit to use 428 * @throws Exception is thrown if the route could not be stopped for whatever reason 429 * @see #suspendRoute(String, long, java.util.concurrent.TimeUnit) 430 */ 431 void stopRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception; 432 433 /** 434 * Stops the given route using {@link org.apache.camel.spi.ShutdownStrategy} with a specified timeout 435 * and optional abortAfterTimeout mode. 436 * 437 * @param routeId the route id 438 * @param timeout timeout 439 * @param timeUnit the unit to use 440 * @param abortAfterTimeout should abort shutdown after timeout 441 * @return <tt>true</tt> if the route is stopped before the timeout 442 * @throws Exception is thrown if the route could not be stopped for whatever reason 443 * @see #suspendRoute(String, long, java.util.concurrent.TimeUnit) 444 */ 445 boolean stopRoute(String routeId, long timeout, TimeUnit timeUnit, boolean abortAfterTimeout) throws Exception; 446 447 /** 448 * Shutdown and <b>removes</b> the given route using {@link org.apache.camel.spi.ShutdownStrategy}. 449 * 450 * @param routeId the route id 451 * @throws Exception is thrown if the route could not be shutdown for whatever reason 452 * @deprecated use {@link #stopRoute(String)} and {@link #removeRoute(String)} 453 */ 454 @Deprecated 455 void shutdownRoute(String routeId) throws Exception; 456 457 /** 458 * Shutdown and <b>removes</b> the given route using {@link org.apache.camel.spi.ShutdownStrategy} with a specified timeout. 459 * 460 * @param routeId the route id 461 * @param timeout timeout 462 * @param timeUnit the unit to use 463 * @throws Exception is thrown if the route could not be shutdown for whatever reason 464 * @deprecated use {@link #stopRoute(String, long, java.util.concurrent.TimeUnit)} and {@link #removeRoute(String)} 465 */ 466 @Deprecated 467 void shutdownRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception; 468 469 /** 470 * Removes the given route (the route <b>must</b> be stopped before it can be removed). 471 * <p/> 472 * <br/>A route which is removed will be unregistered from JMX, have its services stopped/shutdown and the route 473 * definition etc. will also be removed. All the resources related to the route will be stopped and cleared. 474 * <p/> 475 * <br/>End users can use this method to remove unwanted routes or temporary routes which no longer is in demand. 476 * 477 * @param routeId the route id 478 * @return <tt>true</tt> if the route was removed, <tt>false</tt> if the route could not be removed because its not stopped 479 * @throws Exception is thrown if the route could not be shutdown for whatever reason 480 */ 481 boolean removeRoute(String routeId) throws Exception; 482 483 /** 484 * Resumes the given route if it has been previously suspended 485 * <p/> 486 * If the route does <b>not</b> support suspension the route will be started instead 487 * 488 * @param routeId the route id 489 * @throws Exception is thrown if the route could not be resumed for whatever reason 490 */ 491 void resumeRoute(String routeId) throws Exception; 492 493 /** 494 * Suspends the given route using {@link org.apache.camel.spi.ShutdownStrategy}. 495 * <p/> 496 * Suspending a route is more gently than stopping, as the route consumers will be suspended (if they support) 497 * otherwise the consumers will be stopped. 498 * <p/> 499 * By suspending the route services will be kept running (if possible) and therefore its faster to resume the route. 500 * <p/> 501 * If the route does <b>not</b> support suspension the route will be stopped instead 502 * 503 * @param routeId the route id 504 * @throws Exception is thrown if the route could not be suspended for whatever reason 505 */ 506 void suspendRoute(String routeId) throws Exception; 507 508 /** 509 * Suspends the given route using {@link org.apache.camel.spi.ShutdownStrategy} with a specified timeout. 510 * <p/> 511 * Suspending a route is more gently than stopping, as the route consumers will be suspended (if they support) 512 * otherwise the consumers will be stopped. 513 * <p/> 514 * By suspending the route services will be kept running (if possible) and therefore its faster to resume the route. 515 * <p/> 516 * If the route does <b>not</b> support suspension the route will be stopped instead 517 * 518 * @param routeId the route id 519 * @param timeout timeout 520 * @param timeUnit the unit to use 521 * @throws Exception is thrown if the route could not be suspended for whatever reason 522 */ 523 void suspendRoute(String routeId, long timeout, TimeUnit timeUnit) throws Exception; 524 525 /** 526 * Returns the current status of the given route 527 * 528 * @param routeId the route id 529 * @return the status for the route 530 */ 531 ServiceStatus getRouteStatus(String routeId); 532 533 /** 534 * Indicates whether current thread is starting route(s). 535 * <p/> 536 * This can be useful to know by {@link LifecycleStrategy} or the likes, in case 537 * they need to react differently. 538 * 539 * @return <tt>true</tt> if current thread is starting route(s), or <tt>false</tt> if not. 540 */ 541 boolean isStartingRoutes(); 542 543 // Properties 544 //----------------------------------------------------------------------- 545 546 /** 547 * Returns the type converter used to coerce types from one type to another 548 * 549 * @return the converter 550 */ 551 TypeConverter getTypeConverter(); 552 553 /** 554 * Returns the type converter registry where type converters can be added or looked up 555 * 556 * @return the type converter registry 557 */ 558 TypeConverterRegistry getTypeConverterRegistry(); 559 560 /** 561 * Returns the registry used to lookup components by name and type such as the Spring ApplicationContext, 562 * JNDI or the OSGi Service Registry 563 * 564 * @return the registry 565 */ 566 Registry getRegistry(); 567 568 /** 569 * Returns the injector used to instantiate objects by type 570 * 571 * @return the injector 572 */ 573 Injector getInjector(); 574 575 /** 576 * Returns the lifecycle strategies used to handle lifecycle notifications 577 * 578 * @return the lifecycle strategies 579 */ 580 List<LifecycleStrategy> getLifecycleStrategies(); 581 582 /** 583 * Adds the given lifecycle strategy to be used. 584 * 585 * @param lifecycleStrategy the strategy 586 */ 587 void addLifecycleStrategy(LifecycleStrategy lifecycleStrategy); 588 589 /** 590 * Resolves a language for creating expressions 591 * 592 * @param language name of the language 593 * @return the resolved language 594 */ 595 Language resolveLanguage(String language); 596 597 /** 598 * Parses the given text and resolve any property placeholders - using {{key}}. 599 * 600 * @param text the text such as an endpoint uri or the likes 601 * @return the text with resolved property placeholders 602 * @throws Exception is thrown if property placeholders was used and there was an error resolving them 603 */ 604 String resolvePropertyPlaceholders(String text) throws Exception; 605 606 /** 607 * Gets a readonly list with the names of the languages currently registered. 608 * 609 * @return a readonly list with the names of the the languages 610 */ 611 List<String> getLanguageNames(); 612 613 /** 614 * Creates a new {@link ProducerTemplate} which is <b>started</b> and therefore ready to use right away. 615 * <p/> 616 * See this FAQ before use: <a href="http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html"> 617 * Why does Camel use too many threads with ProducerTemplate?</a> 618 * <p/> 619 * Will use cache size defined in Camel property with key {@link Exchange#MAXIMUM_CACHE_POOL_SIZE}. 620 * If no key was defined then it will fallback to a default size of 1000. 621 * You can also use the {@link org.apache.camel.ProducerTemplate#setMaximumCacheSize(int)} method to use a custom value 622 * before starting the template. 623 * 624 * @return the template 625 * @throws RuntimeCamelException is thrown if error starting the template 626 */ 627 ProducerTemplate createProducerTemplate(); 628 629 /** 630 * Creates a new {@link ProducerTemplate} which is <b>started</b> and therefore ready to use right away. 631 * <p/> 632 * You <b>must</b> start the template before its being used. 633 * <p/> 634 * See this FAQ before use: <a href="http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html"> 635 * Why does Camel use too many threads with ProducerTemplate?</a> 636 * 637 * @param maximumCacheSize the maximum cache size 638 * @return the template 639 * @throws RuntimeCamelException is thrown if error starting the template 640 */ 641 ProducerTemplate createProducerTemplate(int maximumCacheSize); 642 643 /** 644 * Creates a new {@link ConsumerTemplate} which is <b>started</b> and therefore ready to use right away. 645 * <p/> 646 * See this FAQ before use: <a href="http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html"> 647 * Why does Camel use too many threads with ProducerTemplate?</a> as it also applies for ConsumerTemplate. 648 * <p/> 649 * Will use cache size defined in Camel property with key {@link Exchange#MAXIMUM_CACHE_POOL_SIZE}. 650 * If no key was defined then it will fallback to a default size of 1000. 651 * You can also use the {@link org.apache.camel.ConsumerTemplate#setMaximumCacheSize(int)} method to use a custom value 652 * before starting the template. 653 * 654 * @return the template 655 * @throws RuntimeCamelException is thrown if error starting the template 656 */ 657 ConsumerTemplate createConsumerTemplate(); 658 659 /** 660 * Creates a new {@link ConsumerTemplate} which is <b>started</b> and therefore ready to use right away. 661 * <p/> 662 * See this FAQ before use: <a href="http://camel.apache.org/why-does-camel-use-too-many-threads-with-producertemplate.html"> 663 * Why does Camel use too many threads with ProducerTemplate?</a> as it also applies for ConsumerTemplate. 664 * 665 * @param maximumCacheSize the maximum cache size 666 * @return the template 667 * @throws RuntimeCamelException is thrown if error starting the template 668 */ 669 ConsumerTemplate createConsumerTemplate(int maximumCacheSize); 670 671 /** 672 * Adds the given interceptor strategy 673 * 674 * @param interceptStrategy the strategy 675 */ 676 void addInterceptStrategy(InterceptStrategy interceptStrategy); 677 678 /** 679 * Gets the interceptor strategies 680 * 681 * @return the list of current interceptor strategies 682 */ 683 List<InterceptStrategy> getInterceptStrategies(); 684 685 /** 686 * Gets the default error handler builder which is inherited by the routes 687 * 688 * @return the builder 689 */ 690 ErrorHandlerBuilder getErrorHandlerBuilder(); 691 692 /** 693 * Sets the default error handler builder which is inherited by the routes 694 * 695 * @param errorHandlerBuilder the builder 696 */ 697 void setErrorHandlerBuilder(ErrorHandlerBuilder errorHandlerBuilder); 698 699 /** 700 * Sets the data formats that can be referenced in the routes. 701 * 702 * @param dataFormats the data formats 703 */ 704 void setDataFormats(Map<String, DataFormatDefinition> dataFormats); 705 706 /** 707 * Gets the data formats that can be referenced in the routes. 708 * 709 * @return the data formats available 710 */ 711 Map<String, DataFormatDefinition> getDataFormats(); 712 713 /** 714 * Resolve a data format given its name 715 * 716 * @param name the data format name or a reference to it in the {@link Registry} 717 * @return the resolved data format, or <tt>null</tt> if not found 718 */ 719 DataFormat resolveDataFormat(String name); 720 721 /** 722 * Resolve a data format definition given its name 723 * 724 * @param name the data format definition name or a reference to it in the {@link Registry} 725 * @return the resolved data format definition, or <tt>null</tt> if not found 726 */ 727 DataFormatDefinition resolveDataFormatDefinition(String name); 728 729 /** 730 * Gets the current data format resolver 731 * 732 * @return the resolver 733 */ 734 DataFormatResolver getDataFormatResolver(); 735 736 /** 737 * Sets a custom data format resolver 738 * 739 * @param dataFormatResolver the resolver 740 */ 741 void setDataFormatResolver(DataFormatResolver dataFormatResolver); 742 743 /** 744 * Sets the properties that can be referenced in the camel context 745 * 746 * @param properties properties 747 */ 748 void setProperties(Map<String, String> properties); 749 750 /** 751 * Gets the properties that can be referenced in the camel context 752 * 753 * @return the properties 754 */ 755 Map<String, String> getProperties(); 756 757 /** 758 * Gets the default FactoryFinder which will be used for the loading the factory class from META-INF 759 * 760 * @return the default factory finder 761 */ 762 FactoryFinder getDefaultFactoryFinder(); 763 764 /** 765 * Sets the factory finder resolver to use. 766 * 767 * @param resolver the factory finder resolver 768 */ 769 void setFactoryFinderResolver(FactoryFinderResolver resolver); 770 771 /** 772 * Gets the FactoryFinder which will be used for the loading the factory class from META-INF in the given path 773 * 774 * @param path the META-INF path 775 * @return the factory finder 776 * @throws NoFactoryAvailableException is thrown if a factory could not be found 777 */ 778 FactoryFinder getFactoryFinder(String path) throws NoFactoryAvailableException; 779 780 /** 781 * Returns the class resolver to be used for loading/lookup of classes. 782 * 783 * @return the resolver 784 */ 785 ClassResolver getClassResolver(); 786 787 /** 788 * Returns the package scanning class resolver 789 * 790 * @return the resolver 791 */ 792 PackageScanClassResolver getPackageScanClassResolver(); 793 794 /** 795 * Sets the class resolver to be use 796 * 797 * @param resolver the resolver 798 */ 799 void setClassResolver(ClassResolver resolver); 800 801 /** 802 * Sets the package scanning class resolver to use 803 * 804 * @param resolver the resolver 805 */ 806 void setPackageScanClassResolver(PackageScanClassResolver resolver); 807 808 /** 809 * Sets a pluggable service pool to use for {@link Producer} pooling. 810 * 811 * @param servicePool the pool 812 */ 813 void setProducerServicePool(ServicePool<Endpoint, Producer> servicePool); 814 815 /** 816 * Gets the service pool for {@link Producer} pooling. 817 * 818 * @return the service pool 819 */ 820 ServicePool<Endpoint, Producer> getProducerServicePool(); 821 822 /** 823 * Uses a custom node id factory when generating auto assigned ids to the nodes in the route definitions 824 * 825 * @param factory custom factory to use 826 */ 827 void setNodeIdFactory(NodeIdFactory factory); 828 829 /** 830 * Gets the node id factory 831 * 832 * @return the node id factory 833 */ 834 NodeIdFactory getNodeIdFactory(); 835 836 /** 837 * Gets the management strategy 838 * 839 * @return the management strategy 840 */ 841 ManagementStrategy getManagementStrategy(); 842 843 /** 844 * Sets the management strategy to use 845 * 846 * @param strategy the management strategy 847 */ 848 void setManagementStrategy(ManagementStrategy strategy); 849 850 /** 851 * Gets the default tracer 852 * 853 * @return the default tracer 854 */ 855 InterceptStrategy getDefaultTracer(); 856 857 /** 858 * Sets a custom tracer to be used as the default tracer. 859 * <p/> 860 * <b>Note:</b> This must be set before any routes are created, 861 * changing the defaultTracer for existing routes is not supported. 862 * 863 * @param tracer the custom tracer to use as default tracer 864 */ 865 void setDefaultTracer(InterceptStrategy tracer); 866 867 /** 868 * Disables using JMX as {@link org.apache.camel.spi.ManagementStrategy}. 869 */ 870 void disableJMX(); 871 872 /** 873 * Gets the inflight repository 874 * 875 * @return the repository 876 */ 877 InflightRepository getInflightRepository(); 878 879 /** 880 * Sets a custom inflight repository to use 881 * 882 * @param repository the repository 883 */ 884 void setInflightRepository(InflightRepository repository); 885 886 /** 887 * Gets the the application context class loader which may be helpful for running camel in other containers 888 * 889 * @return the application context class loader 890 */ 891 ClassLoader getApplicationContextClassLoader(); 892 893 /** 894 * Sets the application context class loader 895 * 896 * @param classLoader the class loader 897 */ 898 void setApplicationContextClassLoader(ClassLoader classLoader); 899 900 /** 901 * Gets the current shutdown strategy 902 * 903 * @return the strategy 904 */ 905 ShutdownStrategy getShutdownStrategy(); 906 907 /** 908 * Sets a custom shutdown strategy 909 * 910 * @param shutdownStrategy the custom strategy 911 */ 912 void setShutdownStrategy(ShutdownStrategy shutdownStrategy); 913 914 /** 915 * Gets the current {@link org.apache.camel.spi.ExecutorServiceStrategy} 916 * 917 * @return the strategy 918 */ 919 ExecutorServiceStrategy getExecutorServiceStrategy(); 920 921 /** 922 * Sets a custom {@link org.apache.camel.spi.ExecutorServiceStrategy} 923 * 924 * @param executorServiceStrategy the custom strategy 925 */ 926 void setExecutorServiceStrategy(ExecutorServiceStrategy executorServiceStrategy); 927 928 /** 929 * Gets the current {@link org.apache.camel.spi.ProcessorFactory} 930 * 931 * @return the factory, can be <tt>null</tt> if no custom factory has been set 932 */ 933 ProcessorFactory getProcessorFactory(); 934 935 /** 936 * Sets a custom {@link org.apache.camel.spi.ProcessorFactory} 937 * 938 * @param processorFactory the custom factory 939 */ 940 void setProcessorFactory(ProcessorFactory processorFactory); 941 942 /** 943 * Gets the current {@link Debugger} 944 * 945 * @return the debugger 946 */ 947 Debugger getDebugger(); 948 949 /** 950 * Sets a custom {@link Debugger} 951 * 952 * @param debugger the debugger 953 */ 954 void setDebugger(Debugger debugger); 955 956 /** 957 * Gets the current {@link UuidGenerator} 958 * 959 * @return the uuidGenerator 960 */ 961 UuidGenerator getUuidGenerator(); 962 963 /** 964 * Sets a custom {@link UuidGenerator} (should only be set once) 965 * 966 * @param uuidGenerator the UUID Generator 967 */ 968 void setUuidGenerator(UuidGenerator uuidGenerator); 969 970 /** 971 * Whether or not type converters should be loaded lazy 972 * 973 * @return <tt>true</tt> to load lazy, <tt>false</tt> to load on startup 974 */ 975 Boolean isLazyLoadTypeConverters(); 976 977 /** 978 * Sets whether type converters should be loaded lazy 979 * 980 * @param lazyLoadTypeConverters <tt>true</tt> to load lazy, <tt>false</tt> to load on startup 981 */ 982 void setLazyLoadTypeConverters(Boolean lazyLoadTypeConverters); 983 984 /** 985 * Whether or not <a href="http://www.slf4j.org/api/org/slf4j/MDC.html">MDC</a> logging is being enabled. 986 * 987 * @return <tt>true</tt> if MDC logging is enabled 988 */ 989 Boolean isUseMDCLogging(); 990 991 /** 992 * Set whether <a href="http://www.slf4j.org/api/org/slf4j/MDC.html">MDC</a> is enabled. 993 * 994 * @param useMDCLogging <tt>true</tt> to enable MDC logging, <tt>false</tt> to disable 995 */ 996 void setUseMDCLogging(Boolean useMDCLogging); 997 998 }