You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/04/25 10:33:06 UTC

[camel] 01/17: CAMEL-13449: camel3 - Move bean component out of camel-core

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

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

commit 766ad5558922cb2bd0f6a96dbd00263d5d9afdf8
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Apr 24 10:53:18 2019 +0200

    CAMEL-13449: camel3 - Move bean component out of camel-core
---
 .../src/main/java/org/apache/camel/CamelContext.java |  6 ++++++
 .../org/apache/camel/spi}/DeferServiceFactory.java   | 20 ++++----------------
 .../java/org/apache/camel/builder/ProxyBuilder.java  |  2 ++
 .../org/apache/camel/component/bean/MethodInfo.java  |  5 ++---
 .../org/apache/camel/component/bean/ProxyHelper.java |  3 +--
 .../org/apache/camel/impl/AbstractCamelContext.java  |  8 ++++++++
 .../apache/camel/impl/CamelPostProcessorHelper.java  |  4 ++--
 ...eFactory.java => DefaultDeferServiceFactory.java} | 10 ++++------
 8 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 0099cac..abc2029 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -31,6 +31,7 @@ import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.DeferServiceFactory;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.ExecutorServiceManager;
@@ -1473,4 +1474,9 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
      */
     void setHeadersMapFactory(HeadersMapFactory factory);
 
+    /**
+     * Gets the {@link DeferServiceFactory} to use.
+     */
+    DeferServiceFactory getDeferServiceFactory();
+
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/processor/DeferServiceFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java
similarity index 71%
copy from core/camel-core/src/main/java/org/apache/camel/processor/DeferServiceFactory.java
copy to core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java
index 3eb2291..1cfca60 100644
--- a/core/camel-core/src/main/java/org/apache/camel/processor/DeferServiceFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java
@@ -14,21 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor;
+package org.apache.camel.spi;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Producer;
-import org.apache.camel.impl.DeferProducer;
 
 /**
  * Factory to create services such as {@link Producer}s
  * and defer starting the created service, until {@link org.apache.camel.CamelContext} has been started.
  */
-public final class DeferServiceFactory {
-    
-    private DeferServiceFactory() {
-        // It's a helper class
-    }
+public interface DeferServiceFactory {
 
     /**
      * Creates the {@link Producer} which is deferred started until {@link org.apache.camel.CamelContext} is being started.
@@ -36,17 +31,10 @@ public final class DeferServiceFactory {
      * When the producer is started, it re-lookup the endpoint to capture any changes such as the endpoint has been intercepted.
      * This allows the producer to react and send messages to the updated endpoint.
      *
-     * @param endpoint  the endpoint
+     * @param endpoint the endpoint
      * @return the producer which will be deferred started until {@link org.apache.camel.CamelContext} has been started
      * @throws Exception can be thrown if there is an error starting the producer
-     * @see org.apache.camel.impl.DeferProducer
      */
-    public static Producer createProducer(Endpoint endpoint) throws Exception {
-        Producer producer = new DeferProducer(endpoint);
-        producer = new UnitOfWorkProducer(producer);
-        producer = new EventNotifierProducer(producer);
-        endpoint.getCamelContext().deferStartService(producer, true);
-        return producer;
-    }
+    Producer createProducer(Endpoint endpoint) throws Exception;
 
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java
index 13e874a..ef98fa6 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/ProxyBuilder.java
@@ -26,6 +26,8 @@ import org.apache.camel.util.ObjectHelper;
  */
 public final class ProxyBuilder {
 
+    // TODO: Move this to camel-bean
+
     private final CamelContext camelContext;
     private Endpoint endpoint;
     private boolean binding = true;
diff --git a/core/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java b/core/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
index b05371a..6b9b0b0 100644
--- a/core/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
+++ b/core/camel-core/src/main/java/org/apache/camel/component/bean/MethodInfo.java
@@ -46,6 +46,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.StreamCache;
+// TODO: Factory SPI to create these processors which are loaded via FactoryFinder
 import org.apache.camel.processor.DynamicRouter;
 import org.apache.camel.processor.RecipientList;
 import org.apache.camel.processor.RoutingSlip;
@@ -221,9 +222,7 @@ public class MethodInfo {
             for (Annotation a : ma) {
                 annotations.put(a.annotationType(), a);
             }
-        } catch (SecurityException e) {
-            // do nothing here
-        } catch (NoSuchMethodException e) {
+        } catch (SecurityException | NoSuchMethodException e) {
             // do nothing here
         }
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java b/core/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
index 3d7dd33..51b8848 100644
--- a/core/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/component/bean/ProxyHelper.java
@@ -20,7 +20,6 @@ import java.lang.reflect.Proxy;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Producer;
-import org.apache.camel.processor.DeferServiceFactory;
 
 /**
  * A helper class for creating proxies which delegate to Camel
@@ -52,7 +51,7 @@ public final class ProxyHelper {
      * Creates a Proxy which sends the exchange to the endpoint.
      */
     public static <T> T createProxy(Endpoint endpoint, boolean binding, ClassLoader cl, Class<T>[] interfaceClasses, MethodInfoCache methodCache) throws Exception {
-        Producer producer = DeferServiceFactory.createProducer(endpoint);
+        Producer producer = endpoint.getCamelContext().getDeferServiceFactory().createProducer(endpoint);
         return createProxyObject(endpoint, binding, producer, cl, interfaceClasses, methodCache);
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java
index 50cd84d..c8813b7 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java
@@ -98,6 +98,7 @@ import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
+import org.apache.camel.processor.DefaultDeferServiceFactory;
 import org.apache.camel.processor.MulticastProcessor;
 import org.apache.camel.processor.interceptor.Debug;
 import org.apache.camel.processor.interceptor.HandleFault;
@@ -113,6 +114,7 @@ import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.DeferServiceFactory;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.EndpointStrategy;
 import org.apache.camel.spi.EventNotifier;
@@ -272,6 +274,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Mod
     private volatile ReloadStrategy reloadStrategy;
     private volatile RouteController routeController;
     private volatile ScheduledExecutorService errorHandlerExecutorService;
+    private final DeferServiceFactory deferServiceFactory = new DefaultDeferServiceFactory();
 
     private TransformerRegistry<TransformerKey> transformerRegistry;
     private ValidatorRegistry<ValidatorKey> validatorRegistry;
@@ -3922,6 +3925,11 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Mod
         this.headersMapFactory = doAddService(headersMapFactory);
     }
 
+    @Override
+    public DeferServiceFactory getDeferServiceFactory() {
+        return deferServiceFactory;
+    }
+
     protected Map<String, RouteService> getRouteServices() {
         return routeServices;
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java b/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java
index f225cb6..37d609c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java
@@ -40,7 +40,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
 import org.apache.camel.builder.DefaultFluentProducerTemplate;
 import org.apache.camel.component.bean.ProxyHelper;
-import org.apache.camel.processor.DeferServiceFactory;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.support.service.ServiceHelper;
@@ -250,6 +249,7 @@ public class CamelPostProcessorHelper implements CamelContextAware {
                 } else if (type.isInterface()) {
                     // lets create a proxy
                     try {
+                        // TODO: Requires camel-bean so we need some kind of spi, and to lookup via camel-context/service etc
                         return ProxyHelper.createProxy(endpoint, binding, type);
                     } catch (Exception e) {
                         throw createProxyInstantiationRuntimeException(type, endpoint, e);
@@ -395,7 +395,7 @@ public class CamelPostProcessorHelper implements CamelContextAware {
      */
     protected Producer createInjectionProducer(Endpoint endpoint, Object bean, String beanName) {
         try {
-            return DeferServiceFactory.createProducer(endpoint);
+            return endpoint.getCamelContext().getDeferServiceFactory().createProducer(endpoint);
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeCamelException(e);
         }
diff --git a/core/camel-core/src/main/java/org/apache/camel/processor/DeferServiceFactory.java b/core/camel-core/src/main/java/org/apache/camel/processor/DefaultDeferServiceFactory.java
similarity index 90%
rename from core/camel-core/src/main/java/org/apache/camel/processor/DeferServiceFactory.java
rename to core/camel-core/src/main/java/org/apache/camel/processor/DefaultDeferServiceFactory.java
index 3eb2291..7145d63 100644
--- a/core/camel-core/src/main/java/org/apache/camel/processor/DeferServiceFactory.java
+++ b/core/camel-core/src/main/java/org/apache/camel/processor/DefaultDeferServiceFactory.java
@@ -19,17 +19,14 @@ package org.apache.camel.processor;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Producer;
 import org.apache.camel.impl.DeferProducer;
+import org.apache.camel.spi.DeferServiceFactory;
 
 /**
  * Factory to create services such as {@link Producer}s
  * and defer starting the created service, until {@link org.apache.camel.CamelContext} has been started.
  */
-public final class DeferServiceFactory {
+public final class DefaultDeferServiceFactory implements DeferServiceFactory {
     
-    private DeferServiceFactory() {
-        // It's a helper class
-    }
-
     /**
      * Creates the {@link Producer} which is deferred started until {@link org.apache.camel.CamelContext} is being started.
      * <p/>
@@ -41,7 +38,8 @@ public final class DeferServiceFactory {
      * @throws Exception can be thrown if there is an error starting the producer
      * @see org.apache.camel.impl.DeferProducer
      */
-    public static Producer createProducer(Endpoint endpoint) throws Exception {
+    @Override
+    public Producer createProducer(Endpoint endpoint) throws Exception {
         Producer producer = new DeferProducer(endpoint);
         producer = new UnitOfWorkProducer(producer);
         producer = new EventNotifierProducer(producer);