You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/04/02 19:43:49 UTC
[camel] 01/04: CAMEL-15105: make the UnitOfWorkFactory a plugin of the context
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 59be6210306948568130dafbd96fa6950f90a4e6
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Sun Apr 2 09:44:31 2023 +0200
CAMEL-15105: make the UnitOfWorkFactory a plugin of the context
---
.../faulttolerance/FaultToleranceProcessor.java | 3 ++-
.../component/resilience4j/ResilienceProcessor.java | 3 ++-
.../java/org/apache/camel/ExtendedCamelContext.java | 10 ----------
.../apache/camel/impl/engine/AbstractCamelContext.java | 2 +-
.../camel/impl/engine/CamelInternalProcessor.java | 8 ++++----
.../camel/impl/engine/DefaultCamelContextExtension.java | 17 -----------------
.../camel/impl/ExtendedCamelContextConfigurer.java | 6 ------
.../camel/impl/lw/LightweightCamelContextExtension.java | 10 ----------
.../camel/core/xml/AbstractCamelContextFactoryBean.java | 2 +-
.../apache/camel/impl/CustomUnitOfWorkFactoryTest.java | 2 +-
.../camel/main/DefaultConfigurationConfigurer.java | 2 +-
.../java/org/apache/camel/support/DefaultConsumer.java | 3 +--
.../camel/support/EventDrivenPollingConsumer.java | 3 +--
.../java/org/apache/camel/support/PluginHelper.java | 15 +++++++++++++++
14 files changed, 29 insertions(+), 57 deletions(-)
diff --git a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
index 435f051b339..a02a85a408e 100644
--- a/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
+++ b/components/camel-microprofile/camel-microprofile-fault-tolerance/src/main/java/org/apache/camel/component/microprofile/faulttolerance/FaultToleranceProcessor.java
@@ -54,6 +54,7 @@ import org.apache.camel.spi.RouteIdAware;
import org.apache.camel.spi.UnitOfWork;
import org.apache.camel.support.AsyncProcessorSupport;
import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.UnitOfWorkHelper;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.util.ObjectHelper;
@@ -442,7 +443,7 @@ public class FaultToleranceProcessor extends AsyncProcessorSupport
uow = copy.getUnitOfWork();
} else {
// prepare uow on copy
- uow = copy.getContext().getCamelContextExtension().getUnitOfWorkFactory().createUnitOfWork(copy);
+ uow = PluginHelper.getUnitOfWorkFactory(copy.getContext()).createUnitOfWork(copy);
copy.getExchangeExtension().setUnitOfWork(uow);
// the copy must be starting from the route where its copied from
Route route = ExchangeHelper.getRoute(exchange);
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
index 5c8228155c0..4e8762ef047 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessor.java
@@ -57,6 +57,7 @@ import org.apache.camel.spi.RouteIdAware;
import org.apache.camel.spi.UnitOfWork;
import org.apache.camel.support.AsyncProcessorSupport;
import org.apache.camel.support.ExchangeHelper;
+import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.UnitOfWorkHelper;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.util.ObjectHelper;
@@ -523,7 +524,7 @@ public class ResilienceProcessor extends AsyncProcessorSupport
uow = copy.getUnitOfWork();
} else {
// prepare uow on copy
- uow = copy.getContext().getCamelContextExtension().getUnitOfWorkFactory().createUnitOfWork(copy);
+ uow = PluginHelper.getUnitOfWorkFactory(copy.getContext()).createUnitOfWork(copy);
copy.getExchangeExtension().setUnitOfWork(uow);
// the copy must be starting from the route where its copied from
Route route = ExchangeHelper.getRoute(exchange);
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index 2f4885dbd1f..862fe49de1d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -319,16 +319,6 @@ public interface ExtendedCamelContext {
*/
void setDeferServiceFactory(DeferServiceFactory deferServiceFactory);
- /**
- * Gets the {@link UnitOfWorkFactory} to use.
- */
- UnitOfWorkFactory getUnitOfWorkFactory();
-
- /**
- * Sets a custom {@link UnitOfWorkFactory} to use.
- */
- void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory);
-
/**
* Gets the {@link AnnotationBasedProcessorFactory} to use.
*/
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 478c0cb4a4d..3a2f9a05603 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -217,7 +217,6 @@ public abstract class AbstractCamelContext extends BaseService
volatile BeanProcessorFactory beanProcessorFactory;
volatile ResourceLoader resourceLoader;
volatile ModelToXMLDumper modelToXMLDumper;
- volatile UnitOfWorkFactory unitOfWorkFactory;
volatile BeanIntrospection beanIntrospection;
volatile boolean eventNotificationApplicable;
volatile StartupStepRecorder startupStepRecorder = new DefaultStartupStepRecorder();
@@ -381,6 +380,7 @@ public abstract class AbstractCamelContext extends BaseService
camelContextExtension.lazyAddContextPlugin(RestBindingJaxbDataFormatFactory.class,
this::createRestBindingJaxbDataFormatFactory);
camelContextExtension.lazyAddContextPlugin(BeanProxyFactory.class, this::createBeanProxyFactory);
+ camelContextExtension.lazyAddContextPlugin(UnitOfWorkFactory.class, this::createUnitOfWorkFactory);
if (build) {
try {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index 909045a74e7..476bbf9838e 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -60,6 +60,7 @@ import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.LoggerHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.OrderedComparator;
+import org.apache.camel.support.PluginHelper;
import org.apache.camel.support.SynchronizationAdapter;
import org.apache.camel.support.UnitOfWorkHelper;
import org.apache.camel.support.processor.DelegateAsyncProcessor;
@@ -740,14 +741,14 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
private final Route route;
private String routeId;
- private UnitOfWorkFactory uowFactory;
+ private final UnitOfWorkFactory uowFactory;
public UnitOfWorkProcessorAdvice(Route route, CamelContext camelContext) {
this.route = route;
if (route != null) {
this.routeId = route.getRouteId();
}
- this.uowFactory = camelContext.getCamelContextExtension().getUnitOfWorkFactory();
+ this.uowFactory = PluginHelper.getUnitOfWorkFactory(camelContext);
// optimize uow factory to initialize it early and once per advice
this.uowFactory.afterPropertiesConfigured(camelContext);
}
@@ -811,8 +812,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor implements In
if (uowFactory != null) {
return uowFactory.createUnitOfWork(exchange);
} else {
- return exchange.getContext().getCamelContextExtension().getUnitOfWorkFactory()
- .createUnitOfWork(exchange);
+ return PluginHelper.getUnitOfWorkFactory(exchange.getContext()).createUnitOfWork(exchange);
}
}
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index d0931843446..c137fbf492d 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -292,23 +292,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
this.errorHandlerFactory = errorHandlerFactory;
}
- @Override
- public UnitOfWorkFactory getUnitOfWorkFactory() {
- if (camelContext.unitOfWorkFactory == null) {
- synchronized (camelContext.lock) {
- if (camelContext.unitOfWorkFactory == null) {
- setUnitOfWorkFactory(camelContext.createUnitOfWorkFactory());
- }
- }
- }
- return camelContext.unitOfWorkFactory;
- }
-
- @Override
- public void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory) {
- camelContext.unitOfWorkFactory = camelContext.getInternalServiceManager().addService(unitOfWorkFactory);
- }
-
@Override
public boolean isEventNotificationApplicable() {
return camelContext.eventNotificationApplicable;
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 8d46b62df44..8169eabbb36 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -59,8 +59,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
case "ResourceLoader": target.setResourceLoader(property(camelContext, org.apache.camel.spi.ResourceLoader.class, value)); return true;
case "startupsteprecorder":
case "StartupStepRecorder": target.setStartupStepRecorder(property(camelContext, org.apache.camel.spi.StartupStepRecorder.class, value)); return true;
- case "unitofworkfactory":
- case "UnitOfWorkFactory": target.setUnitOfWorkFactory(property(camelContext, org.apache.camel.spi.UnitOfWorkFactory.class, value)); return true;
default: return false;
}
}
@@ -106,8 +104,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
case "ResourceLoader": return org.apache.camel.spi.ResourceLoader.class;
case "startupsteprecorder":
case "StartupStepRecorder": return org.apache.camel.spi.StartupStepRecorder.class;
- case "unitofworkfactory":
- case "UnitOfWorkFactory": return org.apache.camel.spi.UnitOfWorkFactory.class;
default: return null;
}
}
@@ -154,8 +150,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
case "ResourceLoader": return target.getResourceLoader();
case "startupsteprecorder":
case "StartupStepRecorder": return target.getStartupStepRecorder();
- case "unitofworkfactory":
- case "UnitOfWorkFactory": return target.getUnitOfWorkFactory();
default: return null;
}
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index b31188177b0..5a93f87baa5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -244,16 +244,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
throw new UnsupportedOperationException();
}
- @Override
- public UnitOfWorkFactory getUnitOfWorkFactory() {
- return camelContext.getCamelContextExtension().getUnitOfWorkFactory();
- }
-
- @Override
- public void setUnitOfWorkFactory(UnitOfWorkFactory unitOfWorkFactory) {
- throw new UnsupportedOperationException();
- }
-
@Override
public AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory() {
throw new UnsupportedOperationException();
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index ea03b928510..35ea6341b13 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -287,7 +287,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
UnitOfWorkFactory unitOfWorkFactory = getBeanForType(UnitOfWorkFactory.class);
if (unitOfWorkFactory != null) {
LOG.info("Using custom UnitOfWorkFactory: {}", unitOfWorkFactory);
- getContext().getCamelContextExtension().setUnitOfWorkFactory(unitOfWorkFactory);
+ getContext().getCamelContextExtension().addContextPlugin(UnitOfWorkFactory.class, unitOfWorkFactory);
}
RuntimeEndpointRegistry runtimeEndpointRegistry = getBeanForType(RuntimeEndpointRegistry.class);
if (runtimeEndpointRegistry != null) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java
index dc655deb3d3..30890c204a2 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CustomUnitOfWorkFactoryTest.java
@@ -32,7 +32,7 @@ public class CustomUnitOfWorkFactoryTest extends ContextTestSupport {
@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext context = super.createCamelContext();
- context.getCamelContextExtension().setUnitOfWorkFactory(new MyUnitOfWorkFactory());
+ context.getCamelContextExtension().addContextPlugin(UnitOfWorkFactory.class, new MyUnitOfWorkFactory());
return context;
}
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index d1cc0adc905..e88369a2252 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -399,7 +399,7 @@ public final class DefaultConfigurationConfigurer {
}
UnitOfWorkFactory uowf = getSingleBeanOfType(registry, UnitOfWorkFactory.class);
if (uowf != null) {
- ecc.getCamelContextExtension().setUnitOfWorkFactory(uowf);
+ ecc.getCamelContextExtension().addContextPlugin(UnitOfWorkFactory.class, uowf);
}
RuntimeEndpointRegistry rer = getSingleBeanOfType(registry, RuntimeEndpointRegistry.class);
if (rer != null) {
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
index b7264ddf83d..0f8a8e70f14 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultConsumer.java
@@ -111,8 +111,7 @@ public class DefaultConsumer extends ServiceSupport implements Consumer, RouteAw
// create uow (however for pooled exchanges then the uow is pre-created)
UnitOfWork uow = exchange.getUnitOfWork();
if (uow == null) {
- uow = endpoint.getCamelContext().getCamelContextExtension().getUnitOfWorkFactory()
- .createUnitOfWork(exchange);
+ uow = PluginHelper.getUnitOfWorkFactory(endpoint.getCamelContext()).createUnitOfWork(exchange);
exchange.getExchangeExtension().setUnitOfWork(uow);
}
return uow;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
index adb0aa1d065..ebce7dbba9c 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventDrivenPollingConsumer.java
@@ -209,8 +209,7 @@ public class EventDrivenPollingConsumer extends PollingConsumerSupport implement
Exchange copy = ExchangeHelper.createCorrelatedCopy(exchange, handover, true);
// we want the copy to have an uow
- UnitOfWork uow = getEndpoint().getCamelContext().getCamelContextExtension().getUnitOfWorkFactory()
- .createUnitOfWork(copy);
+ UnitOfWork uow = PluginHelper.getUnitOfWorkFactory(getEndpoint().getCamelContext()).createUnitOfWork(copy);
copy.getExchangeExtension().setUnitOfWork(uow);
return copy;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
index a50bff03a3f..7b606273ce5 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PluginHelper.java
@@ -46,6 +46,7 @@ import org.apache.camel.spi.ProcessorFactory;
import org.apache.camel.spi.RestBindingJaxbDataFormatFactory;
import org.apache.camel.spi.RouteFactory;
import org.apache.camel.spi.RoutesLoader;
+import org.apache.camel.spi.UnitOfWorkFactory;
import org.apache.camel.spi.UriFactoryResolver;
public final class PluginHelper {
@@ -501,4 +502,18 @@ public final class PluginHelper {
public static BeanProxyFactory getBeanProxyFactory(ExtendedCamelContext extendedCamelContext) {
return extendedCamelContext.getContextPlugin(BeanProxyFactory.class);
}
+
+ /**
+ * Gets the {@link UnitOfWorkFactory} to use.
+ */
+ public static UnitOfWorkFactory getUnitOfWorkFactory(CamelContext camelContext) {
+ return getUnitOfWorkFactory(camelContext.getCamelContextExtension());
+ }
+
+ /**
+ * Gets the {@link UnitOfWorkFactory} to use.
+ */
+ public static UnitOfWorkFactory getUnitOfWorkFactory(ExtendedCamelContext extendedCamelContext) {
+ return extendedCamelContext.getContextPlugin(UnitOfWorkFactory.class);
+ }
}