Search in sources :

Example 6 with UnitOfWork

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

the class ExchangeHelper method createCorrelatedCopy.

/**
     * Creates a new instance and copies from the current message exchange so that it can be
     * forwarded to another destination as a new instance. Unlike regular copy this operation
     * will not share the same {@link org.apache.camel.spi.UnitOfWork} so its should be used
     * for async messaging, where the original and copied exchange are independent.
     *
     * @param exchange original copy of the exchange
     * @param handover whether the on completion callbacks should be handed over to the new copy.
     * @param useSameMessageId whether to use same message id on the copy message.
     * @param filter whether to handover the on completion
     */
public static Exchange createCorrelatedCopy(Exchange exchange, boolean handover, boolean useSameMessageId, Predicate<Synchronization> filter) {
    String id = exchange.getExchangeId();
    // make sure to do a safe copy as the correlated copy can be routed independently of the source.
    Exchange copy = exchange.copy(true);
    // do not reuse message id on copy
    if (!useSameMessageId) {
        if (copy.hasOut()) {
            copy.getOut().setMessageId(null);
        }
        copy.getIn().setMessageId(null);
    }
    // do not share the unit of work
    copy.setUnitOfWork(null);
    // do not reuse the message id
    // hand over on completion to the copy if we got any
    UnitOfWork uow = exchange.getUnitOfWork();
    if (handover && uow != null) {
        uow.handoverSynchronization(copy, filter);
    }
    // set a correlation id so we can track back the original exchange
    copy.setProperty(Exchange.CORRELATION_ID, id);
    return copy;
}
Also used : Exchange(org.apache.camel.Exchange) DefaultExchange(org.apache.camel.impl.DefaultExchange) UnitOfWork(org.apache.camel.spi.UnitOfWork)

Example 7 with UnitOfWork

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

the class DefaultManagementLifecycleStrategy method getManagedObjectForService.

@SuppressWarnings("unchecked")
private Object getManagedObjectForService(CamelContext context, Service service, Route route) {
    // skip channel, UoW and dont double wrap instrumentation
    if (service instanceof Channel || service instanceof UnitOfWork || service instanceof InstrumentationProcessor) {
        return null;
    }
    // skip non managed services
    if (service instanceof NonManagedService) {
        return null;
    }
    Object answer = null;
    if (service instanceof ManagementAware) {
        return ((ManagementAware<Service>) service).getManagedObject(service);
    } else if (service instanceof Tracer) {
        // special for tracer
        Tracer tracer = (Tracer) service;
        ManagedTracer mt = managedTracers.get(tracer);
        if (mt == null) {
            mt = new ManagedTracer(context, tracer);
            mt.init(getManagementStrategy());
            managedTracers.put(tracer, mt);
        }
        return mt;
    } else if (service instanceof BacklogTracer) {
        // special for backlog tracer
        BacklogTracer backlogTracer = (BacklogTracer) service;
        ManagedBacklogTracer mt = managedBacklogTracers.get(backlogTracer);
        if (mt == null) {
            mt = new ManagedBacklogTracer(context, backlogTracer);
            mt.init(getManagementStrategy());
            managedBacklogTracers.put(backlogTracer, mt);
        }
        return mt;
    } else if (service instanceof BacklogDebugger) {
        // special for backlog debugger
        BacklogDebugger backlogDebugger = (BacklogDebugger) service;
        ManagedBacklogDebugger md = managedBacklogDebuggers.get(backlogDebugger);
        if (md == null) {
            md = new ManagedBacklogDebugger(context, backlogDebugger);
            md.init(getManagementStrategy());
            managedBacklogDebuggers.put(backlogDebugger, md);
        }
        return md;
    } else if (service instanceof DataFormat) {
        answer = getManagementObjectStrategy().getManagedObjectForDataFormat(context, (DataFormat) service);
    } else if (service instanceof Producer) {
        answer = getManagementObjectStrategy().getManagedObjectForProducer(context, (Producer) service);
    } else if (service instanceof Consumer) {
        answer = getManagementObjectStrategy().getManagedObjectForConsumer(context, (Consumer) service);
    } else if (service instanceof Processor) {
        // special for processors as we need to do some extra work
        return getManagedObjectForProcessor(context, (Processor) service, route);
    } else if (service instanceof ThrottlingInflightRoutePolicy) {
        answer = new ManagedThrottlingInflightRoutePolicy(context, (ThrottlingInflightRoutePolicy) service);
    } else if (service instanceof ThrottlingExceptionRoutePolicy) {
        answer = new ManagedThrottlingExceptionRoutePolicy(context, (ThrottlingExceptionRoutePolicy) service);
    } else if (service instanceof ConsumerCache) {
        answer = new ManagedConsumerCache(context, (ConsumerCache) service);
    } else if (service instanceof ProducerCache) {
        answer = new ManagedProducerCache(context, (ProducerCache) service);
    } else if (service instanceof DefaultEndpointRegistry) {
        answer = new ManagedEndpointRegistry(context, (DefaultEndpointRegistry) service);
    } else if (service instanceof TypeConverterRegistry) {
        answer = new ManagedTypeConverterRegistry(context, (TypeConverterRegistry) service);
    } else if (service instanceof RestRegistry) {
        answer = new ManagedRestRegistry(context, (RestRegistry) service);
    } else if (service instanceof InflightRepository) {
        answer = new ManagedInflightRepository(context, (InflightRepository) service);
    } else if (service instanceof AsyncProcessorAwaitManager) {
        answer = new ManagedAsyncProcessorAwaitManager(context, (AsyncProcessorAwaitManager) service);
    } else if (service instanceof RuntimeEndpointRegistry) {
        answer = new ManagedRuntimeEndpointRegistry(context, (RuntimeEndpointRegistry) service);
    } else if (service instanceof StreamCachingStrategy) {
        answer = new ManagedStreamCachingStrategy(context, (StreamCachingStrategy) service);
    } else if (service instanceof EventNotifier) {
        answer = getManagementObjectStrategy().getManagedObjectForEventNotifier(context, (EventNotifier) service);
    } else if (service instanceof TransformerRegistry) {
        answer = new ManagedTransformerRegistry(context, (TransformerRegistry) service);
    } else if (service instanceof ValidatorRegistry) {
        answer = new ManagedValidatorRegistry(context, (ValidatorRegistry) service);
    } else if (service instanceof RuntimeCamelCatalog) {
        answer = new ManagedRuntimeCamelCatalog(context, (RuntimeCamelCatalog) service);
    } else if (service != null) {
        // fallback as generic service
        answer = getManagementObjectStrategy().getManagedObjectForService(context, service);
    }
    if (answer != null && answer instanceof ManagedService) {
        ManagedService ms = (ManagedService) answer;
        ms.setRoute(route);
        ms.init(getManagementStrategy());
    }
    return answer;
}
Also used : ManagedAsyncProcessorAwaitManager(org.apache.camel.management.mbean.ManagedAsyncProcessorAwaitManager) UnitOfWork(org.apache.camel.spi.UnitOfWork) CamelInternalProcessor(org.apache.camel.processor.CamelInternalProcessor) Processor(org.apache.camel.Processor) InflightRepository(org.apache.camel.spi.InflightRepository) ManagedInflightRepository(org.apache.camel.management.mbean.ManagedInflightRepository) ManagedTracer(org.apache.camel.management.mbean.ManagedTracer) ManagedRestRegistry(org.apache.camel.management.mbean.ManagedRestRegistry) ManagedThrottlingInflightRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingInflightRoutePolicy) RestRegistry(org.apache.camel.spi.RestRegistry) ManagedRestRegistry(org.apache.camel.management.mbean.ManagedRestRegistry) ManagedValidatorRegistry(org.apache.camel.management.mbean.ManagedValidatorRegistry) DefaultValidatorRegistry(org.apache.camel.impl.DefaultValidatorRegistry) ValidatorRegistry(org.apache.camel.spi.ValidatorRegistry) ManagedRuntimeCamelCatalog(org.apache.camel.management.mbean.ManagedRuntimeCamelCatalog) DefaultEndpointRegistry(org.apache.camel.impl.DefaultEndpointRegistry) ManagedConsumerCache(org.apache.camel.management.mbean.ManagedConsumerCache) ManagedProducerCache(org.apache.camel.management.mbean.ManagedProducerCache) ProducerCache(org.apache.camel.impl.ProducerCache) ManagedStreamCachingStrategy(org.apache.camel.management.mbean.ManagedStreamCachingStrategy) ThrottlingInflightRoutePolicy(org.apache.camel.impl.ThrottlingInflightRoutePolicy) ManagedThrottlingInflightRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingInflightRoutePolicy) ManagedEndpointRegistry(org.apache.camel.management.mbean.ManagedEndpointRegistry) Consumer(org.apache.camel.Consumer) ManagedTypeConverterRegistry(org.apache.camel.management.mbean.ManagedTypeConverterRegistry) TypeConverterRegistry(org.apache.camel.spi.TypeConverterRegistry) EventNotifier(org.apache.camel.spi.EventNotifier) DataFormat(org.apache.camel.spi.DataFormat) ManagedThrottlingExceptionRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingExceptionRoutePolicy) DefaultTransformerRegistry(org.apache.camel.impl.DefaultTransformerRegistry) ManagedTransformerRegistry(org.apache.camel.management.mbean.ManagedTransformerRegistry) TransformerRegistry(org.apache.camel.spi.TransformerRegistry) ManagedService(org.apache.camel.management.mbean.ManagedService) NonManagedService(org.apache.camel.NonManagedService) ManagedBacklogTracer(org.apache.camel.management.mbean.ManagedBacklogTracer) BacklogTracer(org.apache.camel.processor.interceptor.BacklogTracer) ManagedBacklogDebugger(org.apache.camel.management.mbean.ManagedBacklogDebugger) ManagedBacklogTracer(org.apache.camel.management.mbean.ManagedBacklogTracer) Tracer(org.apache.camel.processor.interceptor.Tracer) BacklogTracer(org.apache.camel.processor.interceptor.BacklogTracer) ManagedTracer(org.apache.camel.management.mbean.ManagedTracer) Channel(org.apache.camel.Channel) ManagedAsyncProcessorAwaitManager(org.apache.camel.management.mbean.ManagedAsyncProcessorAwaitManager) AsyncProcessorAwaitManager(org.apache.camel.spi.AsyncProcessorAwaitManager) ManagedRuntimeCamelCatalog(org.apache.camel.management.mbean.ManagedRuntimeCamelCatalog) RuntimeCamelCatalog(org.apache.camel.catalog.RuntimeCamelCatalog) ManagedTypeConverterRegistry(org.apache.camel.management.mbean.ManagedTypeConverterRegistry) Producer(org.apache.camel.Producer) ManagedValidatorRegistry(org.apache.camel.management.mbean.ManagedValidatorRegistry) ManagedRuntimeEndpointRegistry(org.apache.camel.management.mbean.ManagedRuntimeEndpointRegistry) RuntimeEndpointRegistry(org.apache.camel.spi.RuntimeEndpointRegistry) ManagedInflightRepository(org.apache.camel.management.mbean.ManagedInflightRepository) ConsumerCache(org.apache.camel.impl.ConsumerCache) ManagedConsumerCache(org.apache.camel.management.mbean.ManagedConsumerCache) ManagedTransformerRegistry(org.apache.camel.management.mbean.ManagedTransformerRegistry) ManagedProducerCache(org.apache.camel.management.mbean.ManagedProducerCache) ManagementAware(org.apache.camel.spi.ManagementAware) StreamCachingStrategy(org.apache.camel.spi.StreamCachingStrategy) ManagedStreamCachingStrategy(org.apache.camel.management.mbean.ManagedStreamCachingStrategy) NonManagedService(org.apache.camel.NonManagedService) ManagedBacklogDebugger(org.apache.camel.management.mbean.ManagedBacklogDebugger) BacklogDebugger(org.apache.camel.processor.interceptor.BacklogDebugger) ManagedBacklogTracer(org.apache.camel.management.mbean.ManagedBacklogTracer) ManagedRuntimeEndpointRegistry(org.apache.camel.management.mbean.ManagedRuntimeEndpointRegistry) ThrottlingExceptionRoutePolicy(org.apache.camel.impl.ThrottlingExceptionRoutePolicy) ManagedThrottlingExceptionRoutePolicy(org.apache.camel.management.mbean.ManagedThrottlingExceptionRoutePolicy)

Example 8 with UnitOfWork

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

the class ExchangeHelper method getOriginalInMessage.

/**
     * Gets the original IN {@link Message} this Unit of Work was started with.
     * <p/>
     * The original message is only returned if the option {@link org.apache.camel.RuntimeConfiguration#isAllowUseOriginalMessage()}
     * is enabled. If its disabled, then <tt>null</tt> is returned.
     *
     * @return the original IN {@link Message}, or <tt>null</tt> if using original message is disabled.
     */
public static Message getOriginalInMessage(Exchange exchange) {
    Message answer = null;
    // try parent first
    UnitOfWork uow = exchange.getProperty(Exchange.PARENT_UNIT_OF_WORK, UnitOfWork.class);
    if (uow != null) {
        answer = uow.getOriginalInMessage();
    }
    // fallback to the current exchange
    if (answer == null) {
        uow = exchange.getUnitOfWork();
        if (uow != null) {
            answer = uow.getOriginalInMessage();
        }
    }
    return answer;
}
Also used : UnitOfWork(org.apache.camel.spi.UnitOfWork) Message(org.apache.camel.Message)

Example 9 with UnitOfWork

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

the class CachedOutputStreamTest method setUp.

protected void setUp() throws Exception {
    super.setUp();
    deleteDirectory("target/cachedir");
    createDirectory("target/cachedir");
    exchange = new DefaultExchange(context);
    UnitOfWork uow = new DefaultUnitOfWork(exchange);
    exchange.setUnitOfWork(uow);
}
Also used : DefaultExchange(org.apache.camel.impl.DefaultExchange) DefaultUnitOfWork(org.apache.camel.impl.DefaultUnitOfWork) UnitOfWork(org.apache.camel.spi.UnitOfWork) DefaultUnitOfWork(org.apache.camel.impl.DefaultUnitOfWork)

Example 10 with UnitOfWork

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

the class BridgeExceptionHandlerToErrorHandler method handleException.

@Override
public void handleException(String message, Exchange exchange, Throwable exception) {
    if (exchange == null) {
        exchange = consumer.getEndpoint().createExchange();
    }
    // set the caused exception
    exchange.setException(exception);
    // and the message
    exchange.getIn().setBody(message);
    // and mark as redelivery exhausted as we cannot do redeliveries
    exchange.setProperty(Exchange.REDELIVERY_EXHAUSTED, Boolean.TRUE);
    // wrap in UoW
    UnitOfWork uow = null;
    try {
        uow = consumer.createUoW(exchange);
        bridge.process(exchange);
    } catch (Exception e) {
        fallback.handleException("Error handling exception " + exception.getMessage(), exchange, e);
    } finally {
        UnitOfWorkHelper.doneUow(uow, exchange);
    }
}
Also used : UnitOfWork(org.apache.camel.spi.UnitOfWork)

Aggregations

UnitOfWork (org.apache.camel.spi.UnitOfWork)16 RejectedExecutionException (java.util.concurrent.RejectedExecutionException)4 AsyncCallback (org.apache.camel.AsyncCallback)3 AsyncProcessor (org.apache.camel.AsyncProcessor)3 Processor (org.apache.camel.Processor)3 Exchange (org.apache.camel.Exchange)2 Message (org.apache.camel.Message)2 DefaultExchange (org.apache.camel.impl.DefaultExchange)2 ArrayList (java.util.ArrayList)1 Channel (org.apache.camel.Channel)1 Consumer (org.apache.camel.Consumer)1 NonManagedService (org.apache.camel.NonManagedService)1 Producer (org.apache.camel.Producer)1 RuntimeCamelCatalog (org.apache.camel.catalog.RuntimeCamelCatalog)1 ConsumerCache (org.apache.camel.impl.ConsumerCache)1 DefaultEndpointRegistry (org.apache.camel.impl.DefaultEndpointRegistry)1 DefaultTransformerRegistry (org.apache.camel.impl.DefaultTransformerRegistry)1 DefaultUnitOfWork (org.apache.camel.impl.DefaultUnitOfWork)1 DefaultValidatorRegistry (org.apache.camel.impl.DefaultValidatorRegistry)1 ProducerCache (org.apache.camel.impl.ProducerCache)1