You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by he...@apache.org on 2014/02/18 16:55:33 UTC

git commit: [CAMEL-7218] Extracted OSGi-detection logic into utility class.

Repository: camel
Updated Branches:
  refs/heads/master ca480add1 -> fc8a5ceba


[CAMEL-7218] Extracted OSGi-detection logic into utility class.


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

Branch: refs/heads/master
Commit: fc8a5ceba8f82675ef8290bdc489eba73a836e40
Parents: ca480ad
Author: Henryk Konsek <he...@gmail.com>
Authored: Tue Feb 18 16:54:26 2014 +0100
Committer: Henryk Konsek <he...@gmail.com>
Committed: Tue Feb 18 16:55:11 2014 +0100

----------------------------------------------------------------------
 .../org/apache/camel/util/PlatformHelper.java   | 54 ++++++++++++++++++++
 .../spring/handler/CamelNamespaceHandler.java   | 24 ++++-----
 2 files changed, 63 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/fc8a5ceb/camel-core/src/main/java/org/apache/camel/util/PlatformHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/util/PlatformHelper.java b/camel-core/src/main/java/org/apache/camel/util/PlatformHelper.java
new file mode 100644
index 0000000..3fd0338
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/util/PlatformHelper.java
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.util;
+
+import java.lang.reflect.Method;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility dedicated for resolving runtime information related to the platform on which Camel is currently running.
+ */
+public final class PlatformHelper {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PlatformHelper.class);
+
+    private PlatformHelper() {
+    }
+
+    /**
+     * Determine whether Camel is running in the OSGi environment. Current implementation tries to load Camel activator
+     * bundle (using reflection API and class loading) to determine if the code is executed in the OSGi environment.
+     *
+     * @return true if caller is running in the OSGi environment, false otherwise
+     */
+    public static boolean isInOsgiEnvironment() {
+        try {
+            // Try to load the BundleActivator first
+            Class.forName("org.osgi.framework.BundleActivator");
+            Class<?> activatorClass = Class.forName("org.apache.camel.osgi.Activator");
+            Method getBundleMethod = activatorClass.getDeclaredMethod("getBundle");
+            Object bundle = getBundleMethod.invoke(null);
+            return bundle != null;
+        } catch (Throwable t) {
+            LOG.trace("Cannot find class so assuming not running in OSGi container: " + t.getMessage());
+            return false;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/fc8a5ceb/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java b/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
index 957c792..9a035c8 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/handler/CamelNamespaceHandler.java
@@ -51,6 +51,7 @@ import org.apache.camel.spring.CamelThreadPoolFactoryBean;
 import org.apache.camel.spring.remoting.CamelProxyFactoryBean;
 import org.apache.camel.spring.remoting.CamelServiceExporter;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.PlatformHelper;
 import org.apache.camel.util.spring.KeyStoreParametersFactoryBean;
 import org.apache.camel.util.spring.SSLContextParametersFactoryBean;
 import org.apache.camel.util.spring.SecureRandomParametersFactoryBean;
@@ -124,27 +125,20 @@ public class CamelNamespaceHandler extends NamespaceHandlerSupport {
         parserMap.put("errorHandler", errorHandlerParser);
 
         // camel context
-        boolean osgi = false;
         Class<?> cl = CamelContextFactoryBean.class;
         // These code will try to detected if we are in the OSGi environment.
         // If so, camel will use the OSGi version of CamelContextFactoryBean to create the CamelContext.
-        try {
-            // Try to load the BundleActivator first
-            Class.forName("org.osgi.framework.BundleActivator");
-            Class<?> c = Class.forName("org.apache.camel.osgi.Activator");
-            Method mth = c.getDeclaredMethod("getBundle");
-            Object bundle = mth.invoke(null);
-            if (bundle != null) {
+        if (PlatformHelper.isInOsgiEnvironment()) {
+            try {
                 cl = Class.forName("org.apache.camel.osgi.CamelContextFactoryBean");
-                osgi = true;
+                LOG.info("OSGi environment detected.");
+            } catch (ClassNotFoundException e) {
+                LOG.trace("Cannot find CamelContextFactoryBean class so assuming not running in OSGi container: " + e.getMessage());
             }
-        } catch (Throwable t) {
-            // not running with camel-core-osgi so we fallback to the regular factory bean
-            LOG.trace("Cannot find class so assuming not running in OSGi container: " + t.getMessage());
+        } else {
+            LOG.info("Non-OSGi environment detected.");
         }
-        if (osgi) {
-            LOG.info("OSGi environment detected.");
-        } 
+
         LOG.debug("Using {} as CamelContextBeanDefinitionParser", cl.getCanonicalName());
         registerParser("camelContext", new CamelContextBeanDefinitionParser(cl));
     }