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.spi;
018
019import java.util.Collection;
020import java.util.concurrent.ThreadPoolExecutor;
021
022import org.apache.camel.CamelContext;
023import org.apache.camel.Component;
024import org.apache.camel.Endpoint;
025import org.apache.camel.ErrorHandlerFactory;
026import org.apache.camel.Processor;
027import org.apache.camel.Route;
028import org.apache.camel.Service;
029import org.apache.camel.VetoCamelContextStartException;
030
031/**
032 * Strategy for lifecycle notifications.
033 */
034public interface LifecycleStrategy {
035
036    /**
037     * Notification on starting a {@link CamelContext}.
038     *
039     * @param context the camel context
040     * @throws VetoCamelContextStartException can be thrown to veto starting {@link CamelContext}.
041     *                                        Any other runtime exceptions will be logged at <tt>WARN</tt> level by Camel will continue starting itself.
042     */
043    void onContextStart(CamelContext context) throws VetoCamelContextStartException;
044
045    /**
046     * Notification on stopping a {@link CamelContext}.
047     *
048     * @param context the camel context
049     */
050    void onContextStop(CamelContext context);
051
052    /**
053     * Notification on adding an {@link org.apache.camel.Component}.
054     *
055     * @param name      the unique name of this component
056     * @param component the added component
057     */
058    void onComponentAdd(String name, Component component);
059
060    /**
061     * Notification on removing an {@link org.apache.camel.Component}.
062     *
063     * @param name      the unique name of this component
064     * @param component the removed component
065     */
066    void onComponentRemove(String name, Component component);
067
068    /**
069     * Notification on adding an {@link Endpoint}.
070     *
071     * @param endpoint the added endpoint
072     */
073    void onEndpointAdd(Endpoint endpoint);
074
075    /**
076     * Notification on removing an {@link Endpoint}.
077     *
078     * @param endpoint the removed endpoint
079     */
080    void onEndpointRemove(Endpoint endpoint);
081
082    /**
083     * Notification on adding a {@link Service}.
084     *
085     * @param context the camel context
086     * @param service the added service
087     * @param route   the route the service belongs to if any possible to determine
088     */
089    void onServiceAdd(CamelContext context, Service service, Route route);
090
091    /**
092     * Notification on removing a {@link Service}.
093     *
094     * @param context the camel context
095     * @param service the removed service
096     * @param route   the route the service belongs to if any possible to determine
097     */
098    void onServiceRemove(CamelContext context, Service service, Route route);
099
100    /**
101     * Notification on adding {@link Route}(s).
102     *
103     * @param routes the added routes
104     */
105    void onRoutesAdd(Collection<Route> routes);
106
107    /**
108     * Notification on removing {@link Route}(s).
109     *
110     * @param routes the removed routes
111     */
112    void onRoutesRemove(Collection<Route> routes);
113
114    /**
115     * Notification on adding {@link RouteContext}(s).
116     *
117     * @param routeContext the added route context
118     */
119    void onRouteContextCreate(RouteContext routeContext);
120
121    /**
122     * Notification on adding error handler.
123     *
124     * @param routeContext        the added route context
125     * @param errorHandler        the error handler
126     * @param errorHandlerBuilder the error handler builder
127     */
128    void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
129
130    /**
131     * Notification on removing error handler.
132     *
133     * @param routeContext        the removed route context
134     * @param errorHandler        the error handler
135     * @param errorHandlerBuilder the error handler builder
136     */
137    void onErrorHandlerRemove(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
138
139    /**
140     * Notification on adding a thread pool.
141     *
142     * @param camelContext        the camel context
143     * @param threadPool          the thread pool
144     * @param id                  id of the thread pool (can be null in special cases)
145     * @param sourceId            id of the source creating the thread pool (can be null in special cases)
146     * @param routeId             id of the route for the source (is null if no source)
147     * @param threadPoolProfileId id of the thread pool profile, if used for creating this thread pool (can be null)
148     */
149    void onThreadPoolAdd(CamelContext camelContext, ThreadPoolExecutor threadPool, String id,
150                         String sourceId, String routeId, String threadPoolProfileId);
151
152    /**
153     * Notification on removing a thread pool.
154     *
155     * @param camelContext the camel context
156     * @param threadPool   the thread pool
157     */
158    void onThreadPoolRemove(CamelContext camelContext, ThreadPoolExecutor threadPool);
159
160}