Repository: camel
Updated Branches:
  refs/heads/camel-2.12.x f341506ea -> 6f3b86cf8
  refs/heads/camel-2.13.x 48567a23d -> 2c1f12dc0
  refs/heads/master 2f8bc8045 -> e1f9e26e6


CAMEL-7745: EndpointInject using ref should be enlisted in JMX when using OSGi 
such as blueprint.


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

Branch: refs/heads/master
Commit: e1f9e26e6aaf9f92e93f5851bf7189f01e819aa0
Parents: 2e43bd6
Author: Claus Ibsen <davscl...@apache.org>
Authored: Tue Aug 26 09:51:40 2014 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Aug 26 09:56:45 2014 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/CamelContext.java     | 23 ++++++++++++++++++++
 .../apache/camel/impl/DefaultCamelContext.java  | 14 ++++++++++++
 .../DefaultManagementLifecycleStrategy.java     |  5 +++++
 .../xml/AbstractCamelContextFactoryBean.java    |  6 +++++
 4 files changed, 48 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e1f9e26e/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 ae31c51..23ba36d 100644
--- a/camel-core/src/main/java/org/apache/camel/CamelContext.java
+++ b/camel-core/src/main/java/org/apache/camel/CamelContext.java
@@ -397,6 +397,14 @@ public interface CamelContext extends SuspendableService, 
RuntimeConfiguration {
     //-----------------------------------------------------------------------
 
     /**
+     * Method to signal to {@link CamelContext} that the process to initialize 
setup routes is in progress.
+     *
+     * @param done <tt>false</tt> to start the process, call again with 
<tt>true</tt> to signal its done.
+     * @see #isSetupRoutes()
+     */
+    void setupRoutes(boolean done);
+
+    /**
      * Returns a list of the current route definitions
      *
      * @return list of the current route definitions
@@ -707,6 +715,21 @@ public interface CamelContext extends SuspendableService, 
RuntimeConfiguration {
      */
     boolean isStartingRoutes();
 
+    /**
+     * Indicates whether current thread is setting up route(s) as part of 
starting Camel from spring/blueprint.
+     * <p/>
+     * This can be useful to know by {@link LifecycleStrategy} or the likes, 
in case
+     * they need to react differently.
+     * <p/>
+     * As the startup procedure of {@link CamelContext} is slightly different 
when using plain Java versus
+     * Spring or Blueprint, then we need to know when Spring/Blueprint is 
setting up the routes, which
+     * can happen after the {@link CamelContext} itself is in started state, 
due the asynchronous event nature
+     * of especially Blueprint.
+     *
+     * @return <tt>true</tt> if current thread is setting up route(s), or 
<tt>false</tt> if not.
+     */
+    boolean isSetupRoutes();
+
     // Properties
     //-----------------------------------------------------------------------
 

http://git-wip-us.apache.org/repos/asf/camel/blob/e1f9e26e/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 abf0c9a..666ee4a 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
@@ -186,6 +186,7 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
     private volatile boolean firstStartDone;
     private volatile boolean doNotStartRoutesOnFirstStart;
     private final ThreadLocal<Boolean> isStartingRoutes = new 
ThreadLocal<Boolean>();
+    private final ThreadLocal<Boolean> isSetupRoutes = new 
ThreadLocal<Boolean>();
     private Boolean autoStartup = Boolean.TRUE;
     private Boolean trace = Boolean.FALSE;
     private Boolean messageHistory = Boolean.TRUE;
@@ -803,6 +804,11 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
         return answer != null && answer;
     }
 
+    public boolean isSetupRoutes() {
+        Boolean answer = isSetupRoutes.get();
+        return answer != null && answer;
+    }
+
     public void stopRoute(RouteDefinition route) throws Exception {
         stopRoute(route.idOrCreate(nodeIdFactory));
     }
@@ -1423,6 +1429,14 @@ public class DefaultCamelContext extends ServiceSupport 
implements ModelCamelCon
         this.lifecycleStrategies.add(lifecycleStrategy);
     }
 
+    public void setupRoutes(boolean done) {
+        if (done) {
+            isSetupRoutes.remove();
+        } else {
+            isSetupRoutes.set(true);
+        }
+    }
+
     public synchronized List<RouteDefinition> getRouteDefinitions() {
         return routeDefinitions;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/e1f9e26e/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
 
b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
index 7eb1452..3e44b60 100644
--- 
a/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
+++ 
b/camel-core/src/main/java/org/apache/camel/management/DefaultManagementLifecycleStrategy.java
@@ -862,6 +862,11 @@ public class DefaultManagementLifecycleStrategy extends 
ServiceSupport implement
             return true;
         }
 
+        // always register if we are setting up routes
+        if (getCamelContext().isSetupRoutes()) {
+            return true;
+        }
+
         // register if always is enabled
         if (agent.getRegisterAlways()) {
             return true;

http://git-wip-us.apache.org/repos/asf/camel/blob/e1f9e26e/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 1b0fdd1..4dec4fd 100644
--- 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -310,6 +310,9 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
         if (routesSetupDone.compareAndSet(false, true)) {
             LOG.debug("Setting up routes");
 
+            // mark that we are setting up routes
+            getContext().setupRoutes(false);
+
             // must init route refs before we prepare the routes below
             initRouteRefs();
 
@@ -331,6 +334,9 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
 
             // and add the rests
             getContext().addRestDefinitions(getRests());
+
+            // and we are now finished setting up the routes
+            getContext().setupRoutes(true);
         }
     }
 

Reply via email to