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 2015/09/26 10:35:04 UTC

[6/6] camel git commit: CAMEL-9112: camel-script should not fail if script engine problem in OSGi. camel-script feature should not load groovy/jruby by default, use the camel-script-groovy / camel-script-jruby if you want to use them. Fixed the itest.

CAMEL-9112: camel-script should not fail if script engine problem in OSGi. camel-script feature should not load groovy/jruby by default, use the camel-script-groovy / camel-script-jruby if you want to use them. Fixed the itest.


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

Branch: refs/heads/master
Commit: 8e8f7aa4c4468f50715c97b02c209cc61995aa38
Parents: 415b41b
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Sep 26 10:36:31 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Sep 26 10:36:31 2015 +0200

----------------------------------------------------------------------
 .../builder/script/ScriptLanguageResolver.java  |  2 +-
 .../org/apache/camel/script/osgi/Activator.java | 46 +++++++++++---------
 .../features/src/main/resources/features.xml    |  6 +--
 .../camel/itest/karaf/AbstractFeatureTest.java  | 16 ++++++-
 .../camel/itest/karaf/CamelScriptTest.java      |  4 +-
 5 files changed, 45 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java b/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java
index a258243..a6c04c7 100644
--- a/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java
+++ b/components/camel-script/src/main/java/org/apache/camel/builder/script/ScriptLanguageResolver.java
@@ -26,7 +26,7 @@ import org.apache.camel.spi.LanguageResolver;
 public class ScriptLanguageResolver implements LanguageResolver {
 
     public Language resolveLanguage(String name, CamelContext context) {
-        // only return if we can suppor the language
+        // only return if we can support the language
         if (ScriptBuilder.supportScriptLanguage(name)) {
             return new ScriptLanguage(name);
         } else {

http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java
----------------------------------------------------------------------
diff --git a/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java b/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java
index 33365b2..0e6bd66 100644
--- a/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java
+++ b/components/camel-script/src/main/java/org/apache/camel/script/osgi/Activator.java
@@ -21,13 +21,13 @@ import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineFactory;
 
@@ -210,13 +210,14 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv
             return getScriptNames(getFactory());
         }
 
+        @SuppressWarnings("unchecked")
         private List<String> getScriptNames(ScriptEngineFactory factory) {
-            List<String> names = null;
+            List<String> names;
             if (factory != null) {
                 names = factory.getNames();
             } else {
                 // return an empty script name list
-                names = new ArrayList<String>(0);
+                names = Collections.EMPTY_LIST;
             }
             return names;
         }
@@ -224,7 +225,7 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv
         private ScriptEngineFactory getFactory() {
             try {
                 BufferedReader in = IOHelper.buffered(new InputStreamReader(configFile.openStream()));
-                String className = null;
+                String className;
                 while ((className = in.readLine()) != null) {
                     if ("".equals(className.trim()) || className.trim().startsWith("#")) {
                         continue;
@@ -238,8 +239,9 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv
                 }
                 in.close();
                 Class<?> cls = bundle.loadClass(className);
+                // OSGi classloading trouble (with jruby)
                 if (!ScriptEngineFactory.class.isAssignableFrom(cls)) {
-                    throw new IllegalStateException("Invalid ScriptEngineFactory: " + cls.getName());
+                    return null;
                 }
                 return (ScriptEngineFactory) cls.newInstance();
             } catch (Exception e) {
@@ -251,28 +253,32 @@ public class Activator implements BundleActivator, BundleTrackerCustomizer, Serv
         public ScriptEngine resolveScriptEngine(String name) {
             try {
                 ScriptEngineFactory factory = getFactory();
-                List<String> names = getScriptNames(factory);
-                for (String test : names) {
-                    if (test.equals(name)) {
-                        ClassLoader old = Thread.currentThread().getContextClassLoader();
-                        ScriptEngine engine;
-                        try {
-                            // JRuby seems to require the correct TCCL to call getScriptEngine
-                            Thread.currentThread().setContextClassLoader(factory.getClass().getClassLoader());
-                            engine = factory.getScriptEngine();
-                        } finally {
-                            Thread.currentThread().setContextClassLoader(old);
+                if (factory != null) {
+                    List<String> names = getScriptNames(factory);
+                    for (String test : names) {
+                        if (test.equals(name)) {
+                            ClassLoader old = Thread.currentThread().getContextClassLoader();
+                            ScriptEngine engine;
+                            try {
+                                // JRuby seems to require the correct TCCL to call getScriptEngine
+                                Thread.currentThread().setContextClassLoader(factory.getClass().getClassLoader());
+                                engine = factory.getScriptEngine();
+                            } finally {
+                                Thread.currentThread().setContextClassLoader(old);
+                            }
+                            LOG.trace("Resolved ScriptEngineFactory: {} for expected name: {}", engine, name);
+                            return engine;
                         }
-                        LOG.trace("Resolved ScriptEngineFactory: {} for expected name: {}", engine, name);
-                        return engine;
                     }
+                    LOG.debug("ScriptEngineFactory: {} does not match expected name: {}", factory.getEngineName(), name);
+                    return null;
                 }
-                LOG.debug("ScriptEngineFactory: {} does not match expected name: {}", factory.getEngineName(), name);
-                return null;
             } catch (Exception e) {
                 LOG.warn("Cannot create ScriptEngineFactory: " + e.getClass().getName(), e);
                 return null;
             }
+
+            return null;
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/platforms/karaf/features/src/main/resources/features.xml
----------------------------------------------------------------------
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 16aa8d1..36e8ca8 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -1308,20 +1308,18 @@
   <feature name='camel-script-javascript' version='${project.version}' resolver='(obr)' start-level='50'>
     <bundle>mvn:com.google.code.scriptengines/scriptengines-javascript/${scriptengines-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix-specs-version}</bundle>
-    <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/${rhino-bundle-version}</bundle>
+    <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/${rhino-bundle-version}</bundle>
   </feature>
   <feature name='camel-script-groovy' version='${project.version}' resolver='(obr)' start-level='50'>
     <bundle>mvn:com.google.code.scriptengines/scriptengines-groovy/${scriptengines-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix-specs-version}</bundle>
-    <bundle>mvn:org.codehaus.groovy/groovy-all/${groovy-version}</bundle>
+    <bundle dependency='true'>mvn:org.codehaus.groovy/groovy-all/${groovy-version}</bundle>
   </feature>
   <feature name='camel-script' version='${project.version}' resolver='(obr)' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle dependency='true'>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.scripting-api-1.0/${servicemix-specs-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.antlr/${antlr-bundle-version}</bundle>
     <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/${rhino-bundle-version}</bundle>
-    <bundle>mvn:org.codehaus.groovy/groovy-all/${groovy-version}</bundle>
-    <bundle dependency='true'>mvn:org.jruby/jruby-complete/${jruby-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-script/${project.version}</bundle>
   </feature>
   <feature name='camel-servlet' version='${project.version}' resolver='(obr)' start-level='50'>

http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java
index 2e7272d..524198b 100644
--- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/AbstractFeatureTest.java
@@ -20,6 +20,8 @@ import java.io.File;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Properties;
 
 import javax.inject.Inject;
@@ -206,11 +208,21 @@ public abstract class AbstractFeatureTest {
         return mavenOption;
     }
 
-    public static Option[] configure(String feature) {
+    public static Option[] configure(String mainFeature, String... extraFeatures) {
         switchPlatformEncodingToUTF8();
         String karafVersion = getKarafVersion();
         LOG.info("*** The karaf version is " + karafVersion + " ***");
 
+        List<String> list = new ArrayList<String>();
+        list.add("cxf-jaxb");
+        list.add("camel-core");
+        list.add("camel-spring");
+        list.add("camel-" + mainFeature);
+        for (String extra : extraFeatures) {
+            list.add("camel-" + extra);
+        }
+        String[] features = list.toArray(new String[list.size()]);
+
         Option[] options = new Option[] {
             // for remote debugging
             //org.ops4j.pax.exam.CoreOptions.vmOption("-Xdebug"),
@@ -239,7 +251,7 @@ public abstract class AbstractFeatureTest {
 
 
             // install the cxf jaxb spec as the karaf doesn't provide it by default
-            KarafDistributionOption.features(getCamelKarafFeatureUrl(), "cxf-jaxb", "camel-core", "camel-spring", "camel-" + feature)
+            KarafDistributionOption.features(getCamelKarafFeatureUrl(), features)
         };
 
         return options;

http://git-wip-us.apache.org/repos/asf/camel/blob/8e8f7aa4/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java
index 6348567..3e43264 100644
--- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelScriptTest.java
@@ -29,12 +29,12 @@ public class CamelScriptTest extends AbstractFeatureTest {
 
     @Test
     public void test() throws Exception {
-        testLanguage(COMPONENT);
+        testLanguage("Groovy");
     }
 
     @Configuration
     public static Option[] configure() {
-        return configure(COMPONENT);
+        return configure(COMPONENT, "script-groovy");
     }
 
 }
\ No newline at end of file