This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new deedbe3dc952 CAMEL-23535: camel-api - batches 8-9: enhance Javadoc for 
registry, DI, and route lifecycle SPIs
deedbe3dc952 is described below

commit deedbe3dc952a03c9f5727231c0b68c3363c00fe
Author: Adriano Machado <[email protected]>
AuthorDate: Mon Jun 8 01:16:58 2026 -0400

    CAMEL-23535: camel-api - batches 8-9: enhance Javadoc for registry, DI, and 
route lifecycle SPIs
    
    Enhance class-level Javadoc for 19 interfaces across two subsystems in
    core/camel-api: registry and dependency injection SPIs (BeanRepository,
    BeanIntrospection, BeanProcessorFactory, BeanProxyFactory, 
ComponentResolver,
    ComponentNameResolver, Configurer, ConfigurerResolver, ConfigurerStrategy)
    and route lifecycle SPIs (RouteController, SupervisingRouteController,
    RoutePolicy, RoutePolicyFactory, ShutdownStrategy, ShutdownRoute,
    ShutdownRunningTask, StartupCondition, StartupStepRecorder,
    RouteStartupOrder). Javadoc-only changes with minor grammar fixes.
    
    Closes #23823
---
 .../main/java/org/apache/camel/ShutdownRoute.java  | 18 +++++------
 .../java/org/apache/camel/ShutdownRunningTask.java | 19 ++++++------
 .../org/apache/camel/spi/BeanIntrospection.java    | 18 ++++++++---
 .../org/apache/camel/spi/BeanProcessorFactory.java | 17 +++++++---
 .../org/apache/camel/spi/BeanProxyFactory.java     | 13 ++++++--
 .../java/org/apache/camel/spi/BeanRepository.java  | 15 +++++++--
 .../apache/camel/spi/ComponentNameResolver.java    |  8 ++++-
 .../org/apache/camel/spi/ComponentResolver.java    | 14 ++++++++-
 .../main/java/org/apache/camel/spi/Configurer.java | 18 +++++++++--
 .../org/apache/camel/spi/ConfigurerResolver.java   | 11 ++++++-
 .../org/apache/camel/spi/ConfigurerStrategy.java   | 11 ++++++-
 .../java/org/apache/camel/spi/RouteController.java | 17 +++++++++-
 .../java/org/apache/camel/spi/RoutePolicy.java     | 17 ++++++----
 .../org/apache/camel/spi/RoutePolicyFactory.java   | 15 +++++++--
 .../org/apache/camel/spi/RouteStartupOrder.java    | 14 +++++++--
 .../org/apache/camel/spi/ShutdownStrategy.java     | 36 ++++++++++++----------
 .../org/apache/camel/spi/StartupCondition.java     | 13 +++++---
 .../org/apache/camel/spi/StartupStepRecorder.java  | 16 ++++++++--
 .../camel/spi/SupervisingRouteController.java      | 19 +++++++++---
 19 files changed, 232 insertions(+), 77 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/ShutdownRoute.java 
b/core/camel-api/src/main/java/org/apache/camel/ShutdownRoute.java
index f91099fe3149..738cbcec8997 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ShutdownRoute.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ShutdownRoute.java
@@ -20,20 +20,20 @@ import jakarta.xml.bind.annotation.XmlEnum;
 import jakarta.xml.bind.annotation.XmlType;
 
 /**
- * Represents the options available when shutting down routes.
+ * Per-route policy controlling whether the route stops immediately or defers 
during
+ * <a href="https://camel.apache.org/manual/graceful-shutdown.html";>graceful 
shutdown</a>.
  * <p/>
- * Is used for example to defer shutting down a route until all inflight 
exchanges have been completed, after which the
- * route can be shutdown safely.
- * <p/>
- * This allows fine grained configuration in accomplishing graceful shutdown 
where you have for example some internal
- * route which other routes are dependent upon.
+ * Set on a route via the DSL {@code .shutdownRoute(ShutdownRoute.Defer)} 
call. Deferring is useful for shared internal
+ * routes (for example a {@code direct:} or {@code seda:} route used by many 
other routes) that must remain active until
+ * all dependent routes have stopped processing their in-flight exchanges. The
+ * {@link org.apache.camel.spi.ShutdownStrategy} honours the deferred routes 
by stopping them last.
  * <ul>
- * <li>Default - The <b>default</b> behavior where a route will attempt to 
shutdown now</li>
- * <li>Defer - Will defer shutting down the route and let it be active during 
graceful shutdown. The route will be
- * shutdown at a later stage during the graceful shutdown process.</li>
+ * <li>{@link #Default} - attempt to stop the route as soon as the shutdown 
sequence reaches it.</li>
+ * <li>{@link #Defer} - keep the route running and stop it only after all 
{@code Default} routes have stopped.</li>
  * </ul>
  *
  * @see ShutdownRunningTask
+ * @see org.apache.camel.spi.ShutdownStrategy
  */
 @XmlType
 @XmlEnum
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/ShutdownRunningTask.java 
b/core/camel-api/src/main/java/org/apache/camel/ShutdownRunningTask.java
index fd2e6f141ab6..9988262e53c7 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ShutdownRunningTask.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ShutdownRunningTask.java
@@ -20,21 +20,22 @@ import jakarta.xml.bind.annotation.XmlEnum;
 import jakarta.xml.bind.annotation.XmlType;
 
 /**
- * Represents the kind of options for what to do with the current task when 
shutting down.
+ * Per-consumer policy controlling how many pending tasks are processed before 
the consumer stops during
+ * <a href="https://camel.apache.org/manual/graceful-shutdown.html";>graceful 
shutdown</a>.
  * <p/>
- * By default the current task is allowed to complete. However some consumers 
such as {@link BatchConsumer} have pending
- * tasks which you can configure the consumer to complete as well.
+ * Set on a route via the DSL {@code 
.shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks)} call. Most consumers
+ * handle a single task at a time, so the distinction only matters for {@link 
BatchConsumer} implementations (such as
+ * file or JPA consumers) that can have multiple pending messages in a batch 
when shutdown is triggered.
  * <ul>
- * <li>CompleteCurrentTaskOnly - Is the <b>default</b> behavior where a route 
consumer will be shutdown as fast as
- * possible. Allowing it to complete its current task, but not to pickup 
pending tasks (if any).</li>
- * <li>CompleteAllTasks - Allows a route consumer to continue to complete all 
pending tasks (if any).</li>
- *
+ * <li>{@link #CompleteCurrentTaskOnly} - the <b>default</b>: finish the 
current in-flight task and then stop; any
+ * remaining pending tasks are left unprocessed.</li>
+ * <li>{@link #CompleteAllTasks} - drain the entire current batch before 
stopping; only applicable to
+ * {@link BatchConsumer} consumers.</li>
  * </ul>
- * <b>Notice:</b> Most consumers only have a single task, but {@link 
org.apache.camel.BatchConsumer} can have many tasks
- * and thus this option mostly applies to this kind of consumer.
  *
  * @see ShutdownRoute
  * @see BatchConsumer
+ * @see org.apache.camel.spi.ShutdownStrategy
  */
 @XmlType
 @XmlEnum
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java
index 6d547895c74f..213864d6b73f 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BeanIntrospection.java
@@ -28,11 +28,21 @@ import org.apache.camel.TypeConverter;
 import org.jspecify.annotations.Nullable;
 
 /**
- * Used for introspecting beans properties via Java reflection; such as 
extracting current property values, or updating
- * one or more properties etc.
- *
- * End users should favour using {@link 
org.apache.camel.support.PropertyBindingSupport} instead.
+ * Low-level SPI for reading and writing bean properties via Java reflection, 
used internally by Camel's property
+ * binding infrastructure.
+ * <p/>
+ * This interface operates directly on getter/setter pairs discovered at 
runtime and is consulted by Camel when
+ * configuring components, endpoints, and EIP options from properties files, 
YAML, or the
+ * <a href="https://camel.apache.org/manual/camel-jbang.html";>Camel JBang</a> 
CLI. Introspection results are cached
+ * internally to minimise repeated reflection calls during 
configuration-intensive startup sequences. Call
+ * {@link #clearCache()} to invalidate the cache when class definitions change 
at runtime (for example in OSGi
+ * hot-deployment scenarios).
+ * <p/>
+ * End users should prefer the higher-level {@link 
org.apache.camel.support.PropertyBindingSupport} utility, which
+ * handles placeholder resolution, type conversion, and nested property paths 
on top of this interface.
  *
+ * @see   org.apache.camel.support.PropertyBindingSupport
+ * @see   PropertyConfigurer
  * @since 3.0
  */
 public interface BeanIntrospection extends StaticService, 
AfterPropertiesConfigured {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/BeanProcessorFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/BeanProcessorFactory.java
index 6fdb4036f135..d50f999a1b47 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/BeanProcessorFactory.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/BeanProcessorFactory.java
@@ -24,11 +24,20 @@ import org.apache.camel.Processor;
 import org.jspecify.annotations.Nullable;
 
 /**
- * Factory for creating a {@link Processor} that can invoke a method on a bean 
and supporting using Camel bean parameter
- * bindings.
+ * Factory for creating a {@link Processor} that invokes a method on a bean 
with full support for
+ * <a href="https://camel.apache.org/manual/bean-integration.html";>Camel bean 
parameter bindings</a>.
  * <p/>
- * This requires to have camel-bean on the classpath.
+ * When a route contains a {@code .bean()} DSL call, Camel delegates processor 
creation to this factory. The factory
+ * implementation lives in {@code camel-bean} (loaded via the META-INF service 
file convention) and supports resolving
+ * the target bean from multiple sources: a direct instance, a registry 
reference by name, a class name, or a
+ * {@link Class} literal. The {@code method} parameter may be omitted to let 
Camel auto-select the best matching method
+ * using the bean-binding algorithm.
+ * <p/>
+ * The {@code scope} parameter controls bean lifecycle: {@link 
org.apache.camel.BeanScope#Singleton} reuses one shared
+ * instance, while {@link org.apache.camel.BeanScope#Prototype} creates a new 
instance per exchange.
  *
+ * @see   BeanProxyFactory
+ * @see   BeanRepository
  * @since 3.0
  */
 public interface BeanProcessorFactory {
@@ -57,7 +66,7 @@ public interface BeanProcessorFactory {
      * @param  bean         the bean instance
      * @param  beanType     or the bean class name
      * @param  beanClass    or the bean class
-     * @param  ref          or bean reference to lookup the bean from the 
registry
+     * @param  ref          or bean reference to look up the bean from the 
registry
      * @param  method       optional name of method to invoke
      * @param  scope        the scope of the bean
      * @return              the created processor
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/BeanProxyFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/BeanProxyFactory.java
index 0485b2a2108a..8f4f2ac8cf5c 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/BeanProxyFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BeanProxyFactory.java
@@ -19,10 +19,19 @@ package org.apache.camel.spi;
 import org.apache.camel.Endpoint;
 
 /**
- * A factory for creating a {@link java.lang.reflect.Proxy} for a bean.
+ * Factory for creating a {@link java.lang.reflect.Proxy} facade that routes 
method invocations to a Camel
+ * {@link org.apache.camel.Endpoint} as messages.
  * <p/>
- * This requires to have camel-bean on the classpath.
+ * The generated proxy implements one or more caller-supplied interfaces. Each 
method call on the proxy is translated
+ * into a Camel {@link org.apache.camel.Exchange} and sent to the configured 
endpoint, making it straightforward to
+ * invoke Camel routes from plain Java code without depending on Camel APIs at 
the call site. This capability is part of
+ * the <a href="https://camel.apache.org/manual/bean-integration.html";>bean 
integration</a> feature and requires
+ * {@code camel-bean} on the classpath; the implementation is loaded via the 
META-INF service key {@link #FACTORY}.
+ * <p/>
+ * When {@code binding} is {@code true}, multi-parameter methods are mapped 
using the standard Camel bean-parameter
+ * binding algorithm (matching by type, annotation, or position).
  *
+ * @see   BeanProcessorFactory
  * @since 3.0
  */
 public interface BeanProxyFactory {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/BeanRepository.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/BeanRepository.java
index bff4586e6353..d7d750ffe495 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/BeanRepository.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/BeanRepository.java
@@ -23,9 +23,20 @@ import org.apache.camel.NoSuchBeanTypeException;
 import org.jspecify.annotations.Nullable;
 
 /**
- * Represents a bean repository used to lookup components by name and type. 
This allows Camel to plugin to third-party
- * bean repositories such as Spring, JNDI, OSGi.
+ * Pluggable contract for looking up beans by name or type, forming the 
foundation of Camel's
+ * <a href="https://camel.apache.org/manual/registry.html";>Registry</a>.
+ * <p/>
+ * At runtime, the active {@link org.apache.camel.CamelContext} exposes a 
composite
+ * {@link org.apache.camel.spi.Registry} that delegates to one or more {@code 
BeanRepository} instances, allowing Camel
+ * to integrate with external containers such as Spring {@code 
ApplicationContext}, CDI, JNDI, or OSGi service
+ * registries without changes to core code. The composited view is used 
transparently whenever a route references a bean
+ * by name (for example in the {@code .bean()} DSL call) or when Camel 
auto-wires component options from the registry.
+ * <p/>
+ * Lookup is available in three forms: by name only ({@link #lookupByName}), 
by name and expected type
+ * ({@link #lookupByNameAndType}), and by type alone ({@link #findByType} / 
{@link #findByTypeWithName}). Prefer the
+ * typed variants to avoid ambiguity when the same name is bound more than 
once.
  *
+ * @see   org.apache.camel.spi.Registry
  * @since 3.0
  */
 public interface BeanRepository {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ComponentNameResolver.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ComponentNameResolver.java
index 0f0663e6a56b..7b6fcdae4d8e 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/ComponentNameResolver.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/ComponentNameResolver.java
@@ -21,8 +21,14 @@ import java.util.Set;
 import org.apache.camel.CamelContext;
 
 /**
- * Discovers which components are available on the classpath.
+ * Discovers the names of all {@link org.apache.camel.Component} 
implementations available on the classpath at runtime.
+ * <p/>
+ * The default implementation reads {@code 
META-INF/services/org/apache/camel/component/} resource entries to enumerate
+ * registered component names without instantiating them. This list is used by 
Camel tooling features such as
+ * auto-completion in the <a 
href="https://camel.apache.org/manual/camel-jbang.html";>Camel JBang</a> CLI and 
the catalog
+ * to answer questions like "which components are installed?" without 
triggering lazy component loading.
  *
+ * @see   ComponentResolver
  * @since 3.2
  */
 public interface ComponentNameResolver {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ComponentResolver.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ComponentResolver.java
index 3847bf8a02e2..f48a9f0b99f0 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ComponentResolver.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ComponentResolver.java
@@ -21,7 +21,19 @@ import org.apache.camel.Component;
 import org.jspecify.annotations.Nullable;
 
 /**
- * Represents a resolver of components from a URI to be able to autoload them 
using some discovery mechanism.
+ * Pluggable strategy for autoloading a {@link org.apache.camel.Component} 
instance from a URI scheme the first time
+ * that scheme is encountered by a {@link org.apache.camel.CamelContext}.
+ * <p/>
+ * When a route references an endpoint URI whose scheme is not yet registered 
in the context, Camel queries the active
+ * {@code ComponentResolver} with the scheme name. The default implementation 
reads the service class name from
+ * {@code META-INF/services/org/apache/camel/component/<name>} on the 
classpath, instantiates it, and adds it to the
+ * context. Alternative resolvers (for example Spring, OSGi, or custom 
container integrations) may satisfy the lookup
+ * from their own registries instead.
+ * <p/>
+ * Component discovery is lazy: only components that are actually referenced 
in routes are loaded.
+ *
+ * @see ComponentNameResolver
+ * @see org.apache.camel.Component
  */
 public interface ComponentResolver {
 
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Configurer.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/Configurer.java
index 536648996467..28e46562a10f 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Configurer.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Configurer.java
@@ -23,9 +23,23 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * An annotation used to mark classes to indicate code capable of configuring 
its options via a getter/setters that can
- * be called via Camels {@link org.apache.camel.spi.PropertyConfigurer}.
+ * Marks a class as a candidate for build-time code generation of a {@link 
PropertyConfigurer} implementation by the
+ * {@code camel-package-maven-plugin}.
+ * <p/>
+ * At build time, the Camel Maven plugin scans for types annotated with {@code 
@Configurer} and generates a companion
+ * {@code *Configurer} class that sets properties directly via setters, 
avoiding reflection at runtime. The generated
+ * class implements {@link PropertyConfigurer} and is registered in
+ * {@code META-INF/services/org/apache/camel/configurer/} so that {@link 
ConfigurerResolver} can locate it by name. This
+ * pattern is used pervasively for {@link org.apache.camel.Component}, {@link 
org.apache.camel.Endpoint}, and EIP model
+ * classes to keep configuration-path performance constant regardless of the 
number of properties.
+ * <p/>
+ * Set {@link #bootstrap()} to {@code true} for types that are configured only 
during startup; the generated configurer
+ * is then eligible for memory reclamation via {@link 
ConfigurerStrategy#clearBootstrapConfigurers()} after the context
+ * has started.
  *
+ * @see   PropertyConfigurer
+ * @see   ConfigurerResolver
+ * @see   ConfigurerStrategy
  * @since 3.3
  */
 @Retention(RetentionPolicy.RUNTIME)
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerResolver.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerResolver.java
index d429858e6ea2..bcbbde2b04cc 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerResolver.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerResolver.java
@@ -20,8 +20,17 @@ import org.apache.camel.CamelContext;
 import org.jspecify.annotations.Nullable;
 
 /**
- * A pluggable strategy for resolving different configurers in a loosely 
coupled manner
+ * Pluggable strategy for resolving a {@link PropertyConfigurer} by the name 
of the target type (for example
+ * {@code timer-component} or {@code timer-endpoint}).
+ * <p/>
+ * The default implementation looks up the class name from a service resource 
under the path
+ * {@link #RESOURCE_PATH}{@code <name>} on the classpath and instantiates it. 
These resources are generated at build
+ * time by the {@code camel-package-maven-plugin} for every class annotated 
with {@link Configurer}. Camel consults the
+ * resolver when configuring a component or endpoint from properties, using 
the returned {@link PropertyConfigurer} to
+ * set options without reflection.
  *
+ * @see   PropertyConfigurer
+ * @see   Configurer
  * @since 3.1
  */
 public interface ConfigurerResolver {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerStrategy.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerStrategy.java
index 17da829b3709..24ed6a825258 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ConfigurerStrategy.java
@@ -21,8 +21,17 @@ import java.util.List;
 import java.util.Objects;
 
 /**
- * Strategy for configurers.
+ * Utility class for managing the lifecycle of bootstrap-phase {@link 
PropertyConfigurer} instances generated for
+ * {@link Configurer @Configurer(bootstrap = true)} types.
+ * <p/>
+ * During {@link org.apache.camel.CamelContext} startup, generated configurers 
for bootstrap-only types (such as main
+ * configuration classes that are only configured once) are held in memory. 
After the context has finished starting,
+ * calling {@link #clearBootstrapConfigurers()} releases those maps to reduce 
the steady-state memory footprint. Modules
+ * register their own cleaner via {@link 
#addBootstrapConfigurerClearer(Runnable)} during initialization so that the
+ * strategy does not need to know their internal data structures.
  *
+ * @see   Configurer
+ * @see   PropertyConfigurer
  * @since 3.7
  */
 public abstract class ConfigurerStrategy {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java
index 6344dfe85ef6..d0ebb733241a 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java
@@ -26,7 +26,22 @@ import org.apache.camel.ServiceStatus;
 import org.apache.camel.StaticService;
 
 /**
- * Controller for managing the lifecycle of all the {@link Route}'s.
+ * Central SPI for managing the start, stop, suspend, resume, and reload 
lifecycle of all {@link Route}s in a
+ * {@link org.apache.camel.CamelContext}, as described in the
+ * <a href="https://camel.apache.org/manual/route-controller.html";>Route 
Controller</a> documentation.
+ * <p/>
+ * The default implementation starts and stops routes synchronously in the 
order determined by each route's
+ * {@code startupOrder} attribute and delegates graceful stopping to the 
{@link ShutdownStrategy}. A more capable
+ * variant, {@link SupervisingRouteController}, can be enabled via {@link 
#supervising()} to add asynchronous startup
+ * and exponential-backoff retry for routes that fail to start.
+ * <p/>
+ * End users interact with routes via {@link 
org.apache.camel.CamelContext#getRouteController()} rather than this
+ * interface directly. Implementors providing a custom controller should also 
implement
+ * {@link org.apache.camel.CamelContextAware} and register it before the 
context starts.
+ *
+ * @see SupervisingRouteController
+ * @see ShutdownStrategy
+ * @see RouteStartupOrder
  */
 public interface RouteController extends CamelContextAware, StaticService {
 
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java
index d0318df80612..8615e8962b9d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicy.java
@@ -20,13 +20,18 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Route;
 
 /**
- * Policy for a {@link Route} which allows controlling the route at runtime.
+ * Per-route lifecycle hook that receives callbacks at each state change and 
at the beginning and end of every
+ * {@link Exchange}, enabling dynamic control of route behaviour at runtime.
  * <p/>
- * For example using the {@link 
org.apache.camel.throttling.ThrottlingInflightRoutePolicy} to throttle the 
{@link Route}
- * at runtime where it suspends and resume the {@link 
org.apache.camel.Route#getConsumer()}.
+ * A {@code RoutePolicy} can suspend or resume a route's consumer in response 
to external conditions, implement
+ * throttling by counting inflight exchanges (as {@link 
org.apache.camel.throttling.ThrottlingInflightRoutePolicy}
+ * does), enforce time-window scheduling, or perform custom instrumentation. 
Policies are attached to a route via the
+ * DSL {@code .routePolicy()} call or globally via a {@link 
RoutePolicyFactory} registered on the context.
  * <p/>
- * See also {@link Route} class javadoc about controlling the lifecycle of a 
{@link Route}.
+ * See the <a href="https://camel.apache.org/manual/route-policy.html";>Route 
Policy</a> documentation for usage patterns
+ * and built-in implementations.
  *
+ * @see RoutePolicyFactory
  * @see Route
  */
 public interface RoutePolicy {
@@ -85,9 +90,9 @@ public interface RoutePolicy {
      * Callback invoked when an {@link Exchange} is done being routed, where 
it started from the given {@link Route}
      * <p/>
      * Notice this callback is invoked when the <b>Exchange</b> is done and 
the {@link Route} is the route where the
-     * {@link Exchange} was started. Most often its also the route where the 
exchange is done. However its possible to
+     * {@link Exchange} was started. Most often its also the route where the 
exchange is done. However, it's possible to
      * route an {@link Exchange} to other routes using endpoints such as 
<b>direct</b> or <b>seda</b>. Bottom line is
-     * that the {@link Route} parameter may not be the endpoint route and thus 
why we state its the starting route.
+     * that the {@link Route} parameter may not be the endpoint route and thus 
why we state it's the starting route.
      *
      * @param route    the route where the exchange started from
      * @param exchange the created exchange
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicyFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicyFactory.java
index 5b30d317c9d8..f248e53ec738 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicyFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutePolicyFactory.java
@@ -21,9 +21,18 @@ import org.apache.camel.NamedNode;
 import org.jspecify.annotations.Nullable;
 
 /**
- * A factory to create {@link org.apache.camel.spi.RoutePolicy} and assign to 
routes automatically. Factories are
- * registered via {@link 
org.apache.camel.CamelContext#addRoutePolicyFactory(RoutePolicyFactory)} and 
are called for
- * every route during startup.
+ * Factory that creates a {@link RoutePolicy} instance for each route 
automatically at startup, without requiring the
+ * policy to be declared per-route in the DSL.
+ * <p/>
+ * Factories are registered globally via {@link 
org.apache.camel.CamelContext#addRoutePolicyFactory(RoutePolicyFactory)}
+ * and are called once per route during {@link org.apache.camel.CamelContext} 
startup. Returning {@code null} from
+ * {@link #createRoutePolicy(org.apache.camel.CamelContext, String, 
org.apache.camel.NamedNode)} opts that specific
+ * route out of the policy. This is useful for cross-cutting concerns such as 
universal throttling, auditing, or metrics
+ * collection that should apply to all routes.
+ * <p/>
+ * See the <a href="https://camel.apache.org/manual/route-policy.html";>Route 
Policy</a> documentation for examples.
+ *
+ * @see RoutePolicy
  */
 public interface RoutePolicyFactory {
 
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/RouteStartupOrder.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/RouteStartupOrder.java
index 4c235321966b..3ede711dc6df 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteStartupOrder.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteStartupOrder.java
@@ -23,8 +23,18 @@ import org.apache.camel.Route;
 import org.apache.camel.Service;
 
 /**
- * Information about a route to be started where we want to control the order 
in which they are started by
- * {@link org.apache.camel.CamelContext}.
+ * Captures the resolved startup order and associated services for a {@link 
Route}, used by
+ * {@link org.apache.camel.CamelContext} and {@link ShutdownStrategy} to 
control start and shutdown sequencing.
+ * <p/>
+ * At startup, the context builds an ordered list of {@code RouteStartupOrder} 
instances from each route's configured
+ * {@code startupOrder} attribute and passes it to the {@link 
ShutdownStrategy} at shutdown time (in reverse order, by
+ * default). This allows routes with dependencies to be stopped before the 
routes they depend on.
+ * <p/>
+ * See <a 
href="https://camel.apache.org/manual/configuring-route-startup-ordering-and-autostartup.html";>
 Configuring
+ * Route Startup Ordering and Auto Startup</a> for details.
+ *
+ * @see ShutdownStrategy
+ * @see RouteController
  */
 public interface RouteStartupOrder {
 
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ShutdownStrategy.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ShutdownStrategy.java
index 50dbbf3d0244..e1a369e45967 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ShutdownStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ShutdownStrategy.java
@@ -24,23 +24,25 @@ import org.apache.camel.LoggingLevel;
 import org.apache.camel.StaticService;
 
 /**
- * Pluggable shutdown strategy executed during shutdown of Camel and the 
active routes.
+ * Pluggable strategy that performs the actual <a 
href="https://camel.apache.org/manual/graceful-shutdown.html";>graceful
+ * shutdown</a> sequence when a {@link CamelContext} is stopping.
  * <p/>
- * Shutting down routes in a reliable and graceful manner is not a trivial 
task. Therefore, Camel provides a pluggable
- * strategy allowing 3rd party to use their own strategy if needed.
+ * Graceful shutdown is non-trivial: Camel must stop all route consumers (so 
no new messages enter) while keeping routes
+ * alive long enough to drain in-flight exchanges, including messages sitting 
in in-memory queues (SEDA, etc.). The
+ * default implementation shuts down routes in reverse startup order (see 
{@link RouteStartupOrder}), waits for
+ * in-flight exchanges to complete up to the configured {@link #setTimeout 
timeout}, then forces shutdown if the timeout
+ * expires.
  * <p/>
- * The shutdown strategy is <b>not</b> intended for Camel end users to use for 
stopping routes. Instead, use
- * {@link RouteController} via {@link CamelContext}.
- * <p/>
- * The key problem is to stop the input consumers for the routes such that no 
new messages is coming into Camel. But at
- * the same time still keep the routes running so the existing in flight 
exchanges can still be run to completion. On
- * top of that there are some in memory components (such as SEDA) which may 
have pending messages on its in memory queue
- * which we want to run to completion as well, otherwise they will get lost.
- * <p/>
- * Camel provides a default strategy which supports all that that can be used 
as inspiration for your own strategy.
+ * This SPI is intended for framework and container integrators. End users who 
need to stop individual routes should use
+ * {@link RouteController} via {@link CamelContext#getRouteController()} 
instead. Per-route and per-consumer shutdown
+ * behaviour can be tuned via {@link org.apache.camel.ShutdownRoute} and 
{@link org.apache.camel.ShutdownRunningTask}
+ * without replacing the strategy.
  *
- * @see org.apache.camel.spi.ShutdownAware
  * @see RouteController
+ * @see RouteStartupOrder
+ * @see org.apache.camel.ShutdownRoute
+ * @see org.apache.camel.ShutdownRunningTask
+ * @see org.apache.camel.spi.ShutdownAware
  */
 public interface ShutdownStrategy extends StaticService {
 
@@ -152,7 +154,7 @@ public interface ShutdownStrategy extends StaticService {
      * is happening. And during forced shutdown we want to avoid logging 
errors/warnings et al. in the logs as a side
      * effect of the forced timeout.
      * <p/>
-     * By default this is <tt>false</tt>
+     * By default, this is <tt>false</tt>
      * <p/>
      * Notice the suppression is a <i>best effort</i> as there may still be 
some logs coming from 3rd party libraries
      * and whatnot, which Camel cannot control.
@@ -166,7 +168,7 @@ public interface ShutdownStrategy extends StaticService {
      * is happening. And during forced shutdown we want to avoid logging 
errors/warnings et al. in the logs as a side
      * effect of the forced timeout.
      * <p/>
-     * By default this is <tt>false</tt>
+     * By default, this is <tt>false</tt>
      * <p/>
      * Notice the suppression is a <i>best effort</i> as there may still be 
some logs coming from 3rd party libraries
      * and whatnot, which Camel cannot control.
@@ -199,7 +201,7 @@ public interface ShutdownStrategy extends StaticService {
     void setShutdownRoutesInReverseOrder(boolean shutdownRoutesInReverseOrder);
 
     /**
-     * Whether to shutdown routes in reverse order than they were started.
+     * Whether to shut down routes in reverse order than they were started.
      * <p/>
      * This option is by default set to <tt>true</tt>.
      *
@@ -223,7 +225,7 @@ public interface ShutdownStrategy extends StaticService {
     boolean isLogInflightExchangesOnTimeout();
 
     /**
-     * Whether the shutdown strategy is forcing to shutdown
+     * Whether the shutdown strategy is forcing to shut down
      */
     boolean isForceShutdown();
 
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/StartupCondition.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/StartupCondition.java
index fb8bddeb34c2..5014a15fce70 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/StartupCondition.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/StartupCondition.java
@@ -20,10 +20,15 @@ import org.apache.camel.CamelContext;
 import org.jspecify.annotations.Nullable;
 
 /**
- * Pluggable condition that must be accepted before Camel can continue 
starting up.
- *
- * This can be used to let Camel wait for a specific file to be present, an 
environment-variable, or some other custom
- * conditions.
+ * Pluggable gate evaluated repeatedly before {@link 
org.apache.camel.CamelContext} finishes starting, allowing startup
+ * to be paused until an external prerequisite is satisfied.
+ * <p/>
+ * Camel polls each registered {@code StartupCondition} during the startup 
sequence. If {@link #canContinue} returns
+ * {@code false}, startup waits and retries. If the condition is never 
satisfied within the configured timeout the
+ * context aborts startup. Multiple conditions can be registered; all must be 
satisfied for startup to proceed.
+ * <p/>
+ * Typical use cases include waiting for a readiness probe to pass, a required 
file or directory to appear, an
+ * environment variable to be set, or a remote service to become reachable.
  *
  * @since 4.9
  */
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/StartupStepRecorder.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/StartupStepRecorder.java
index 8ec61537474e..f64b2a7bd4a1 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/StartupStepRecorder.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/StartupStepRecorder.java
@@ -23,9 +23,19 @@ import org.apache.camel.StaticService;
 import org.jspecify.annotations.Nullable;
 
 /**
- * To record {@link StartupStep} during startup to allow to capture diagnostic 
information to help troubleshoot Camel
- * applications via various tooling such as Java Flight Recorder.
+ * Records named {@link StartupStep} spans during {@link 
org.apache.camel.CamelContext} startup to capture timing and
+ * diagnostic information for troubleshooting and performance analysis.
+ * <p/>
+ * Each step is opened with {@link #beginStep} and closed with {@link 
#endStep}, forming a tree of nested spans that
+ * mirrors the initialization call graph. The default implementation is a 
no-op; the {@code camel-jfr} module provides
+ * an implementation that writes events to the Java Flight Recorder (JFR) 
event stream, enabling correlation with JVM
+ * profiling data in tools such as JDK Mission Control.
+ * <p/>
+ * The recorder is started automatically when the context starts and stopped 
(or kept running, depending on
+ * {@link #setStartupRecorderDuration}) once startup completes. Use {@link 
#steps()} to iterate over captured steps
+ * after startup for programmatic analysis.
  *
+ * @see   StartupStep
  * @since 3.8
  */
 public interface StartupStepRecorder extends StaticService {
@@ -65,7 +75,7 @@ public interface StartupStepRecorder extends StaticService {
     String getRecordingDir();
 
     /**
-     * Directory to store the recording. By default the current directory will 
be used.
+     * Directory to store the recording. By default, the current directory 
will be used.
      */
     void setRecordingDir(String recordingDir);
 
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
 
b/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
index ba74db5b69c1..f6cd410c4c62 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
@@ -24,10 +24,19 @@ import org.apache.camel.util.backoff.BackOffTimer;
 import org.jspecify.annotations.Nullable;
 
 /**
- * A supervising capable {@link RouteController} that delays the startup of 
the routes after the camel context startup
- * and takes control of starting the routes in a safe manner. This controller 
is able to retry starting failing routes,
- * and have various options to configure settings for backoff between 
restarting routes.
+ * Extension of {@link RouteController} that adds resilient, backoff-based 
startup supervision for routes, as described
+ * in the <a 
href="https://camel.apache.org/manual/route-controller.html";>Route 
Controller</a> documentation.
+ * <p/>
+ * Unlike the default controller, this variant starts routes asynchronously 
after the
+ * {@link org.apache.camel.CamelContext} has finished starting. Routes that 
fail to start are retried using an
+ * exponential backoff schedule (configurable via {@link #setBackOffDelay}, 
{@link #setBackOffMaxAttempts}, and related
+ * setters). Routes can be selectively supervised via include/exclude patterns 
matched against route id or endpoint URI.
+ * <p/>
+ * Failed routes can optionally be exposed as unhealthy via Camel's health 
check infrastructure: set
+ * {@link #setUnhealthyOnExhausted} or {@link #setUnhealthyOnRestarting} to 
control whether a route that is pending
+ * restart or has exhausted all attempts causes the application to report a 
DOWN health status.
  *
+ * @see   RouteController
  * @since 3.3
  */
 public interface SupervisingRouteController extends RouteController {
@@ -40,7 +49,7 @@ public interface SupervisingRouteController extends 
RouteController {
      *
      * The pattern is matching on route id, and endpoint uri for the route. 
Multiple patterns can be separated by comma.
      *
-     * For example to include all kafka routes, you can say <tt>kafka:*</tt>. 
And to include routes with specific route
+     * For example to include all Kafka routes, you can say <tt>kafka:*</tt>. 
And to include routes with specific route
      * ids <tt>myRoute,myOtherRoute</tt>. The pattern supports wildcards and 
uses the matcher from
      * org.apache.camel.support.PatternHelper#matchPattern.
      */
@@ -72,7 +81,7 @@ public interface SupervisingRouteController extends 
RouteController {
     long getInitialDelay();
 
     /**
-     * Initial delay in milli seconds before the route controller starts, 
after CamelContext has been started.
+     * Initial delay in milliseconds before the route controller starts, after 
CamelContext has been started.
      */
     void setInitialDelay(long initialDelay);
 


Reply via email to