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 2014/08/14 08:55:33 UTC

[2/3] git commit: CAMEL-7695: CamelContext - Allow to check if a service by its type has been added

CAMEL-7695: CamelContext - Allow to check if a service by its type has been added


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/fa7e2254
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/fa7e2254
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/fa7e2254

Branch: refs/heads/master
Commit: fa7e2254f065f3e3e7bf28d73ca218c914676487
Parents: 76c39dc
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Aug 14 08:52:51 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Aug 14 08:55:22 2014 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/camel/CamelContext.java   |  8 ++++++++
 .../org/apache/camel/impl/DefaultCamelContext.java     | 13 ++++++++++++-
 .../org/apache/camel/impl/DefaultCamelContextTest.java | 13 +++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/fa7e2254/camel-core/src/main/java/org/apache/camel/CamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/CamelContext.java b/camel-core/src/main/java/org/apache/camel/CamelContext.java
index 5b175a3..8a3c31b 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -230,6 +230,14 @@ public interface CamelContext extends SuspendableService, RuntimeConfiguration {
     boolean hasService(Object object);
 
     /**
+     * Has the given service type already been added to this context?
+     *
+     * @param type the class type
+     * @return the service instance or <tt>null</tt> if not already added.
+     */
+    public <T> T hasService(Class<T> type);
+
+    /**
      * Adds the given listener to be invoked when {@link CamelContext} have just been started.
      * <p/>
      * This allows listeners to do any custom work after the routes and other services have been started and are running.

http://git-wip-us.apache.org/repos/asf/camel/blob/fa7e2254/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index dab1eaa..72defeb 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -66,6 +66,7 @@ import org.apache.camel.ShutdownRunningTask;
 import org.apache.camel.StartupListener;
 import org.apache.camel.StatefulService;
 import org.apache.camel.SuspendableService;
+import org.apache.camel.TypeConversionException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.VetoCamelContextStartException;
 import org.apache.camel.builder.ErrorHandlerBuilder;
@@ -161,7 +162,7 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
     private final List<EndpointStrategy> endpointStrategies = new ArrayList<EndpointStrategy>();
     private final Map<String, Component> components = new HashMap<String, Component>();
     private final Set<Route> routes = new LinkedHashSet<Route>();
-    private final List<Service> servicesToClose = new ArrayList<Service>();
+    private final List<Service> servicesToClose = new CopyOnWriteArrayList<Service>();
     private final Set<StartupListener> startupListeners = new LinkedHashSet<StartupListener>();
     private TypeConverter typeConverter;
     private TypeConverterRegistry typeConverterRegistry;
@@ -1031,6 +1032,16 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon
         return false;
     }
 
+    @Override
+    public <T> T hasService(Class<T> type) {
+        for (Service service : servicesToClose) {
+            if (type.isInstance(service)) {
+                return type.cast(service);
+            }
+        }
+        return null;
+    }
+
     public void addStartupListener(StartupListener listener) throws Exception {
         // either add to listener so we can invoke then later when CamelContext has been started
         // or invoke the callback right now

http://git-wip-us.apache.org/repos/asf/camel/blob/fa7e2254/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
index b7f51ae..3403ae4 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextTest.java
@@ -335,6 +335,19 @@ public class DefaultCamelContextTest extends TestSupport {
         assertEquals("Stopped", my.getStatus().name());
     }
 
+    public void testAddServiceType() throws Exception {
+        MyService my = new MyService();
+
+        DefaultCamelContext ctx = new DefaultCamelContext();
+        assertNull(ctx.hasService(MyService.class));
+
+        ctx.addService(my);
+        assertSame(my, ctx.hasService(MyService.class));
+
+        ctx.stop();
+        assertNull(ctx.hasService(MyService.class));
+    }
+
     private static class MyService extends ServiceSupport implements CamelContextAware {
 
         private CamelContext camelContext;