Search in sources :

Example 6 with ExecutorServiceManager

use of org.apache.camel.spi.ExecutorServiceManager in project camel by apache.

the class ProcessorDefinitionHelper method lookupScheduledExecutorServiceRef.

/**
     * Will lookup in {@link org.apache.camel.spi.Registry} for a {@link ScheduledExecutorService} registered with the given
     * <tt>executorServiceRef</tt> name.
     * <p/>
     * This method will lookup for configured thread pool in the following order
     * <ul>
     * <li>from the {@link org.apache.camel.spi.Registry} if found</li>
     * <li>from the known list of {@link org.apache.camel.spi.ThreadPoolProfile ThreadPoolProfile(s)}.</li>
     * <li>if none found, then <tt>null</tt> is returned.</li>
     * </ul>
     *
     * @param routeContext       the route context
     * @param name               name which is appended to the thread name, when the {@link java.util.concurrent.ExecutorService}
     *                           is created based on a {@link org.apache.camel.spi.ThreadPoolProfile}.
     * @param source             the source to use the thread pool
     * @param executorServiceRef reference name of the thread pool
     * @return the executor service, or <tt>null</tt> if none was found.
     */
public static ScheduledExecutorService lookupScheduledExecutorServiceRef(RouteContext routeContext, String name, Object source, String executorServiceRef) {
    ExecutorServiceManager manager = routeContext.getCamelContext().getExecutorServiceManager();
    ObjectHelper.notNull(manager, "ExecutorServiceManager", routeContext.getCamelContext());
    ObjectHelper.notNull(executorServiceRef, "executorServiceRef");
    // lookup in registry first and use existing thread pool if exists
    ScheduledExecutorService answer = routeContext.getCamelContext().getRegistry().lookupByNameAndType(executorServiceRef, ScheduledExecutorService.class);
    if (answer == null) {
        // then create a thread pool assuming the ref is a thread pool profile id
        answer = manager.newScheduledThreadPool(source, name, executorServiceRef);
    }
    return answer;
}
Also used : ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorServiceManager(org.apache.camel.spi.ExecutorServiceManager)

Example 7 with ExecutorServiceManager

use of org.apache.camel.spi.ExecutorServiceManager in project camel by apache.

the class ProcessorDefinitionHelper method getConfiguredScheduledExecutorService.

/**
     * Will lookup and get the configured {@link java.util.concurrent.ScheduledExecutorService} from the given definition.
     * <p/>
     * This method will lookup for configured thread pool in the following order
     * <ul>
     * <li>from the definition if any explicit configured executor service.</li>
     * <li>from the {@link org.apache.camel.spi.Registry} if found</li>
     * <li>from the known list of {@link org.apache.camel.spi.ThreadPoolProfile ThreadPoolProfile(s)}.</li>
     * <li>if none found, then <tt>null</tt> is returned.</li>
     * </ul>
     * The various {@link ExecutorServiceAwareDefinition} should use this helper method to ensure they support
     * configured executor services in the same coherent way.
     *
     * @param routeContext the rout context
     * @param name         name which is appended to the thread name, when the {@link java.util.concurrent.ExecutorService}
     *                     is created based on a {@link org.apache.camel.spi.ThreadPoolProfile}.
     * @param definition   the node definition which may leverage executor service.
     * @param useDefault   whether to fallback and use a default thread pool, if no explicit configured
     * @return the configured executor service, or <tt>null</tt> if none was configured.
     * @throws IllegalArgumentException is thrown if the found instance is not a ScheduledExecutorService type,
     *                                  or lookup of executor service in {@link org.apache.camel.spi.Registry} was not found
     */
public static ScheduledExecutorService getConfiguredScheduledExecutorService(RouteContext routeContext, String name, ExecutorServiceAwareDefinition<?> definition, boolean useDefault) throws IllegalArgumentException {
    ExecutorServiceManager manager = routeContext.getCamelContext().getExecutorServiceManager();
    ObjectHelper.notNull(manager, "ExecutorServiceManager", routeContext.getCamelContext());
    // prefer to use explicit configured executor on the definition
    if (definition.getExecutorService() != null) {
        ExecutorService executorService = definition.getExecutorService();
        if (executorService instanceof ScheduledExecutorService) {
            return (ScheduledExecutorService) executorService;
        }
        throw new IllegalArgumentException("ExecutorServiceRef " + definition.getExecutorServiceRef() + " is not an ScheduledExecutorService instance");
    } else if (definition.getExecutorServiceRef() != null) {
        ScheduledExecutorService answer = lookupScheduledExecutorServiceRef(routeContext, name, definition, definition.getExecutorServiceRef());
        if (answer == null) {
            throw new IllegalArgumentException("ExecutorServiceRef " + definition.getExecutorServiceRef() + " not found in registry or as a thread pool profile.");
        }
        return answer;
    } else if (useDefault) {
        return manager.newDefaultScheduledThreadPool(definition, name);
    }
    return null;
}
Also used : ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorServiceManager(org.apache.camel.spi.ExecutorServiceManager) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorService(java.util.concurrent.ExecutorService)

Example 8 with ExecutorServiceManager

use of org.apache.camel.spi.ExecutorServiceManager in project camel by apache.

the class ProcessorDefinitionHelper method getConfiguredExecutorService.

/**
     * Will lookup and get the configured {@link java.util.concurrent.ExecutorService} from the given definition.
     * <p/>
     * This method will lookup for configured thread pool in the following order
     * <ul>
     * <li>from the definition if any explicit configured executor service.</li>
     * <li>from the {@link org.apache.camel.spi.Registry} if found</li>
     * <li>from the known list of {@link org.apache.camel.spi.ThreadPoolProfile ThreadPoolProfile(s)}.</li>
     * <li>if none found, then <tt>null</tt> is returned.</li>
     * </ul>
     * The various {@link ExecutorServiceAwareDefinition} should use this helper method to ensure they support
     * configured executor services in the same coherent way.
     *
     * @param routeContext the route context
     * @param name         name which is appended to the thread name, when the {@link java.util.concurrent.ExecutorService}
     *                     is created based on a {@link org.apache.camel.spi.ThreadPoolProfile}.
     * @param definition   the node definition which may leverage executor service.
     * @param useDefault   whether to fallback and use a default thread pool, if no explicit configured
     * @return the configured executor service, or <tt>null</tt> if none was configured.
     * @throws IllegalArgumentException is thrown if lookup of executor service in {@link org.apache.camel.spi.Registry} was not found
     */
public static ExecutorService getConfiguredExecutorService(RouteContext routeContext, String name, ExecutorServiceAwareDefinition<?> definition, boolean useDefault) throws IllegalArgumentException {
    ExecutorServiceManager manager = routeContext.getCamelContext().getExecutorServiceManager();
    ObjectHelper.notNull(manager, "ExecutorServiceManager", routeContext.getCamelContext());
    // prefer to use explicit configured executor on the definition
    if (definition.getExecutorService() != null) {
        return definition.getExecutorService();
    } else if (definition.getExecutorServiceRef() != null) {
        // lookup in registry first and use existing thread pool if exists
        ExecutorService answer = lookupExecutorServiceRef(routeContext, name, definition, definition.getExecutorServiceRef());
        if (answer == null) {
            throw new IllegalArgumentException("ExecutorServiceRef " + definition.getExecutorServiceRef() + " not found in registry or as a thread pool profile.");
        }
        return answer;
    } else if (useDefault) {
        return manager.newDefaultThreadPool(definition, name);
    }
    return null;
}
Also used : ExecutorServiceManager(org.apache.camel.spi.ExecutorServiceManager) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorService(java.util.concurrent.ExecutorService)

Example 9 with ExecutorServiceManager

use of org.apache.camel.spi.ExecutorServiceManager in project camel by apache.

the class ProcessorDefinitionHelper method willCreateNewThreadPool.

/**
     * Determines whether a new thread pool will be created or not.
     * <p/>
     * This is used to know if a new thread pool will be created, and therefore is not shared by others, and therefore
     * exclusive to the definition.
     *
     * @param routeContext the route context
     * @param definition   the node definition which may leverage executor service.
     * @param useDefault   whether to fallback and use a default thread pool, if no explicit configured
     * @return <tt>true</tt> if a new thread pool will be created, <tt>false</tt> if not
     * @see #getConfiguredExecutorService(org.apache.camel.spi.RouteContext, String, ExecutorServiceAwareDefinition, boolean)
     */
public static boolean willCreateNewThreadPool(RouteContext routeContext, ExecutorServiceAwareDefinition<?> definition, boolean useDefault) {
    ExecutorServiceManager manager = routeContext.getCamelContext().getExecutorServiceManager();
    ObjectHelper.notNull(manager, "ExecutorServiceManager", routeContext.getCamelContext());
    if (definition.getExecutorService() != null) {
        // no there is a custom thread pool configured
        return false;
    } else if (definition.getExecutorServiceRef() != null) {
        ExecutorService answer = routeContext.getCamelContext().getRegistry().lookupByNameAndType(definition.getExecutorServiceRef(), ExecutorService.class);
        // if no existing thread pool, then we will have to create a new thread pool
        return answer == null;
    } else if (useDefault) {
        return true;
    }
    return false;
}
Also used : ExecutorServiceManager(org.apache.camel.spi.ExecutorServiceManager) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ExecutorService(java.util.concurrent.ExecutorService)

Example 10 with ExecutorServiceManager

use of org.apache.camel.spi.ExecutorServiceManager in project camel by apache.

the class FacebookProducer method getExecutorService.

protected static synchronized ExecutorService getExecutorService(CamelContext context) {
    // re-create it (its a shared static instance)
    if (executorService == null || executorService.isTerminated() || executorService.isShutdown()) {
        final ExecutorServiceManager manager = context.getExecutorServiceManager();
        // try to lookup a pool first based on profile
        ThreadPoolProfile poolProfile = manager.getThreadPoolProfile(FacebookConstants.FACEBOOK_THREAD_PROFILE_NAME);
        if (poolProfile == null) {
            poolProfile = manager.getDefaultThreadPoolProfile();
        }
        // create a new pool using the custom or default profile
        executorService = manager.newScheduledThreadPool(FacebookProducer.class, FacebookConstants.FACEBOOK_THREAD_PROFILE_NAME, poolProfile);
    }
    return executorService;
}
Also used : ThreadPoolProfile(org.apache.camel.spi.ThreadPoolProfile) ExecutorServiceManager(org.apache.camel.spi.ExecutorServiceManager)

Aggregations

ExecutorServiceManager (org.apache.camel.spi.ExecutorServiceManager)10 ExecutorService (java.util.concurrent.ExecutorService)6 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)6 ThreadPoolProfile (org.apache.camel.spi.ThreadPoolProfile)4 ArrayList (java.util.ArrayList)1 Processor (org.apache.camel.Processor)1 ThreadPoolRejectedPolicy (org.apache.camel.ThreadPoolRejectedPolicy)1 ThreadPoolProfileBuilder (org.apache.camel.builder.ThreadPoolProfileBuilder)1 Pipeline (org.apache.camel.processor.Pipeline)1 ThreadsProcessor (org.apache.camel.processor.ThreadsProcessor)1 ClassResolver (org.apache.camel.spi.ClassResolver)1 Debugger (org.apache.camel.spi.Debugger)1 FactoryFinderResolver (org.apache.camel.spi.FactoryFinderResolver)1 MessageHistoryFactory (org.apache.camel.spi.MessageHistoryFactory)1 ModelJAXBContextFactory (org.apache.camel.spi.ModelJAXBContextFactory)1 NodeIdFactory (org.apache.camel.spi.NodeIdFactory)1 PackageScanClassResolver (org.apache.camel.spi.PackageScanClassResolver)1 ProcessorFactory (org.apache.camel.spi.ProcessorFactory)1 StreamCachingStrategy (org.apache.camel.spi.StreamCachingStrategy)1 ThreadPoolFactory (org.apache.camel.spi.ThreadPoolFactory)1