https://issues.apache.org/jira/browse/EXTSCRIPT-177

git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk@1400851 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
index 0cf5d77..d1a6f04 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
@@ -25,7 +25,6 @@
 import org.apache.myfaces.extensions.scripting.core.api.eventhandling.WeavingEventListener;
 import org.apache.myfaces.extensions.scripting.core.api.eventhandling.events.RefreshBeginEvent;
 import org.apache.myfaces.extensions.scripting.core.api.eventhandling.events.TaintedEvent;
-import org.apache.myfaces.extensions.scripting.core.engine.ThrowAwayClassloader;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
index 1f5018f..3a85f7f 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
@@ -19,11 +19,9 @@
 
 package org.apache.myfaces.extensions.scripting.cdi.startup;
 
-import javax.servlet.ServletContextEvent;
-
-import org.apache.myfaces.extensions.scripting.cdi.core.ReloadingListener;
 import org.apache.myfaces.extensions.scripting.core.api.Plugin;
-import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
+
+import javax.servlet.ServletContextEvent;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
diff --git a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
index 814e2f5..52f3b76 100644
--- a/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
+++ b/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
@@ -20,15 +20,12 @@
 package org.apache.myfaces.extensions.scripting.cdi.startup;
 
 import org.apache.myfaces.extensions.scripting.cdi.core.CDIThrowAwayClassloader;
-import org.apache.myfaces.extensions.scripting.core.engine.ThrowAwayClassloader;
-import org.apache.myfaces.extensions.scripting.jsf.startup.StartupServletContextPluginChainLoader;
 
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.AfterBeanDiscovery;
 import javax.enterprise.inject.spi.AfterDeploymentValidation;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
-import java.io.IOException;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
index 05f2b7e..341c32e 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/Configuration.java
@@ -28,21 +28,18 @@
 import java.io.FilenameFilter;
 import java.lang.ref.WeakReference;
 import java.net.MalformedURLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_JRUBY;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_GROOVY;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_JAVA;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.GROOVY_FILE_ENDING;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.JRUBY_FILE_ENDING;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_INITIAL_COMPILE;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_RESOURCE_PATH;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_SCRIPTING_ADDITIONAL_CLASSPATH;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_SCRIPTING_PACKAGE_WHITELIST;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.JAVA_FILE_ENDING;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.*;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
@@ -155,7 +152,7 @@
                 return JAVA_FILE_ENDING;
             case ENGINE_TYPE_JSF_GROOVY:
                 return GROOVY_FILE_ENDING;
-            case ENGINETYPE_JSF_JRUBY:
+            case ENGINE_TYPE_JSF_JRUBY:
                 return JRUBY_FILE_ENDING;
             default:
                 throw new UnsupportedOperationException("Engine type unknown");
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java
index 9af70c2..0c469f5 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/api/ScriptingConst.java
@@ -62,7 +62,7 @@
     public static final int ENGINE_TYPE_JSF_GROOVY = 0;
     public static final int ENGINE_TYPE_JSF_JAVA = 1;
     public static final int ENGINE_TYPE_JSF_SCALA = 2;
-    public static final int ENGINETYPE_JSF_JRUBY = 3;
+    public static final int ENGINE_TYPE_JSF_JRUBY = 3;
     public static final int ARTIFACT_TYPE_UNKNOWN = -1;
     public static final int ARTIFACT_TYPE_MANAGEDBEAN = 1;
     public static final int ARTIFACT_TYPE_MANAGEDPROPERTY = 2;
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java
index 06a0fcf..fe90dad 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/BaseScanner.java
@@ -45,7 +45,7 @@
 {
     List<String> _scanPaths = new LinkedList<String>();
     DependencyScanner _depencyScanner = new StandardDependencyScanner();
-    Logger _log = Logger.getLogger(JavaDependencyScanner.class.getName());
+    Logger _log = Logger.getLogger(BaseScanner.class.getName());
 
     public abstract int getEngineType();
 
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java
index da2f3af..272d801 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/EngineJRuby.java
@@ -26,7 +26,6 @@
 import org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 import org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
-import org.apache.myfaces.extensions.scripting.core.engine.compiler.GroovyCompiler;
 import org.apache.myfaces.extensions.scripting.core.engine.compiler.JRubyCompiler;
 import org.apache.myfaces.extensions.scripting.core.reloading.SimpleReloadingStrategy;
 import org.jruby.RubyObject;
@@ -38,8 +37,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_JRUBY;
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_GROOVY;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_JRUBY;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.INIT_PARAM_CUSTOM_JRUBY_LOADER_PATHS;
 import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.JRUBY_SOURCE_ROOT;
 
@@ -61,7 +59,7 @@
     @Override
     public int getEngineType()
     {
-        return ENGINE_TYPE_JSF_GROOVY;
+        return ENGINE_TYPE_JSF_JRUBY;
     }
 
     public String getEngineTypeAsStr()
@@ -115,7 +113,7 @@
         Configuration configuration = context.getConfiguration();
         JRubyCompiler compiler = new JRubyCompiler();
         File targetDir = configuration.getCompileTarget();
-        Collection<String> sourceDirs = configuration.getSourceDirs(ENGINETYPE_JSF_JRUBY);
+        Collection<String> sourceDirs = configuration.getSourceDirs(ENGINE_TYPE_JSF_JRUBY);
         CompilationResult res = null;
         for (String sourceRoot : sourceDirs)
         {
@@ -126,10 +124,10 @@
 
     public void scanDependencies()
     {
-        log.info("[EXT-SCRIPTING] starting dependency scan");
-        //GroovyDependencyScanner scanner = new GroovyDependencyScanner();
-        //scanner.scanPaths();
-        log.info("[EXT-SCRIPTING] ending dependency scan");
+        log.info("[EXT-SCRIPTING] starting jruby dependency scan");
+        JRubyDependencyScanner scanner = new JRubyDependencyScanner();
+        scanner.scanPaths();
+        log.info("[EXT-SCRIPTING] ending jruby dependency scan");
     }
 
 }
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java
index ee83650..e2da97e 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/FactoryEngines.java
@@ -49,6 +49,7 @@
         ScriptingEngine javaEngine = new EngineJava();
         ScriptingEngine groovyEngine = null;
         ScriptingEngine scalaEngine = null;
+        ScriptingEngine jrubyEngine = null;
         try
         {
             ClassUtils.getContextClassLoader().loadClass("groovy.lang.GroovyObject");
@@ -67,6 +68,15 @@
         catch (Exception ex)
         {
         }
+        try
+        {
+            ClassUtils.getContextClassLoader().loadClass("org.jruby.RubyObject");
+            jrubyEngine = (ScriptingEngine) ReflectUtil.instantiate("org.apache.myfaces.extensions.scripting.core" +
+                    ".engine.EngineJRuby");
+        }
+        catch (Exception ex)
+        {
+        }
 
         if (_engines.isEmpty())
         {
@@ -77,18 +87,20 @@
                 _engines.put(groovyEngine.getEngineType(), groovyEngine);
             if (scalaEngine != null)
                 _engines.put(scalaEngine.getEngineType(), scalaEngine);
+            if (jrubyEngine != null) {
+                _engines.put(jrubyEngine.getEngineType(), jrubyEngine);
+            }
 
             _engines.put(javaEngine.getEngineType(), javaEngine);
         }
     }
 
-
-
     public Collection<ScriptingEngine> getEngines()
     {
         List<ScriptingEngine> engineList = new ArrayList<ScriptingEngine>();
-        for(Map.Entry<Integer, ScriptingEngine> entry: _engines.entrySet()) {
-           engineList.add(entry.getValue());
+        for (Map.Entry<Integer, ScriptingEngine> entry : _engines.entrySet())
+        {
+            engineList.add(entry.getValue());
         }
 
         return engineList;
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/JRubyDependencyScanner.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/JRubyDependencyScanner.java
new file mode 100644
index 0000000..1463a89
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/JRubyDependencyScanner.java
@@ -0,0 +1,46 @@
+/*
+ * 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.myfaces.extensions.scripting.core.engine;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
+import org.apache.myfaces.extensions.scripting.core.engine.api.ClassScanner;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class JRubyDependencyScanner extends BaseScanner implements ClassScanner
+{
+    public JRubyDependencyScanner() {
+    }
+
+    public int getEngineType() {
+        return ScriptingConst.ENGINE_TYPE_JSF_JRUBY;
+    }
+    public String getFileEnding() {
+        return ScriptingConst.JRUBY_FILE_ENDING;
+    }
+}
\ No newline at end of file
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ContainerFileManager.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ContainerFileManager.java
index 6369b97..4513c95 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ContainerFileManager.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ContainerFileManager.java
@@ -18,15 +18,10 @@
  */
 package org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
-import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
-import org.apache.myfaces.extensions.scripting.core.common.util.ClassLoaderUtils;
-
-import javax.tools.FileObject;
 import javax.tools.ForwardingJavaFileManager;
 import javax.tools.JavaFileObject;
 import javax.tools.StandardJavaFileManager;
 import java.io.File;
-import java.io.IOException;
 
 /**
  * File manager, enforced by the Java Compiler API
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java
index 1065b09..2a56589 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompiler.java
@@ -23,16 +23,17 @@
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import org.apache.myfaces.extensions.scripting.core.common.util.ClassLoaderUtils;
 import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
-import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationException;
+import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationMessage;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
-import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINETYPE_JSF_JRUBY;
+import static org.apache.myfaces.extensions.scripting.core.api.ScriptingConst.ENGINE_TYPE_JSF_JRUBY;
 import static org.apache.myfaces.extensions.scripting.core.engine.api.CompilerConst.JRUBY_WILDARD;
 
 /**
@@ -52,14 +53,15 @@
     public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader)
     {
         targetPath.mkdirs();
-        String sources = getSourceFiles();
+        List<String> sources = getSourceFiles();
         return compile(sourcePath, targetPath, sources);
     }
 
-    public CompilationResult compile(File sourcePath, File targetPath, String sources)
+    public CompilationResult compile(File sourcePath, File targetPath, List<String> sources)
     {
         targetPath.mkdirs();
-        if(targetPath.isDirectory() && targetPath.exists()){
+        if (targetPath.isDirectory() && targetPath.exists())
+        {
             System.out.println("targetpath is there");
         }
         String classPath = ClassLoaderUtils.buildClasspath(ClassLoaderUtils.getDefaultClassLoader());
@@ -67,23 +69,34 @@
         StringBuilder commandString = new StringBuilder();
         commandString.append("require 'jruby/jrubyc'\n");
         commandString.append("options = Array.new \n");
-        commandString.append("options << '-d" + sourcePath.getAbsolutePath() + "'\n");
+        commandString.append("options << '-d" + sourcePath.getAbsolutePath().replaceAll("\\s", "\\\\ ") + "'\n");
         commandString.append("options<< '--javac' \n");
-        commandString.append("options<< '-t" + targetPath.getAbsolutePath() + "'\n");
-        commandString.append("options<< '-c" + classPath + " '\n");
-        commandString.append("options<< '" + sources + " '\n");
+        commandString.append("options<< '-t" + targetPath.getAbsolutePath().replaceAll("\\s", "\\\\ ") + "'\n");
+        commandString.append("options<< '-c" + classPath.replaceAll("\\s", "\\\\ ") + "'\n");
+        for (String singleSource : sources)
+        {
+            commandString.append("options<< '" + singleSource.replaceAll("\\s", "\\\\ ") + "'\n");
+        }
+
+        //commandString.append("options<< '" + sources + "'\n");
         commandString.append("$status = JRuby::Compiler::compile_argv(options) \n");
         ScriptEngineManager manager = new ScriptEngineManager();
         ScriptEngine engine = manager.getEngineByName(ENGINE_JRUBY);
         try
         {
             engine.eval(commandString.toString());
-            String status = (String) engine.get("status");
-            if(status.equals("0")) {
-                return null;
+            Long status = (Long) engine.get("status");
+            if (status.equals(0L))
+            {
+                CompilationResult result = new CompilationResult("");
+                return result;
             }
-            //TODO parse the result and return a meaningful compilationresult
-            return null;
+            else
+            {
+                CompilationResult result = new CompilationResult("");
+                result.registerError(new CompilationMessage(status, "Errors occurred in a JRuby file please consult your log for further details"));
+                return result;
+            }
         }
         catch (ScriptException e)
         {
@@ -93,19 +106,20 @@
         return null;
     }
 
-    private String getSourceFiles()
+    private List<String> getSourceFiles()
     {
         WeavingContext context = WeavingContext.getInstance();
         Configuration configuration = context.getConfiguration();
         List<File> sourceFiles = FileUtils.fetchSourceFiles(configuration.getWhitelistedSourceDirs
-                (ENGINETYPE_JSF_JRUBY), JRUBY_WILDARD);
+                (ENGINE_TYPE_JSF_JRUBY), JRUBY_WILDARD);
         StringBuilder sources = new StringBuilder(sourceFiles.size() * 30);
+        List<String> sourcesStr = new ArrayList<String>(sourceFiles.size());
         for (File sourceFile : sourceFiles)
         {
-            sources.append(sourceFile.getAbsolutePath());
-            sources.append(" ");
+            sourcesStr.add(sourceFile.getAbsolutePath());
+            //sources.append(" ");
         }
-        return sources.toString();
+        return sourcesStr;
     }
 
     public static void main(String... argv)
diff --git a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java
index 2ca5c1e..bfc44c2 100644
--- a/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java
+++ b/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java
@@ -28,7 +28,6 @@
 
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
-import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;
 import javax.tools.StandardJavaFileManager;
 import javax.tools.ToolProvider;
diff --git a/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultReporter.scala b/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultReporter.scala
index 48c9858..6a7baa6 100644
--- a/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultReporter.scala
+++ b/extscript-core-root/extscript-core/src/main/scala/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultReporter.scala
@@ -23,7 +23,6 @@
 
 import scala.tools.nsc.util._
 import tools.nsc.reporters.AbstractReporter
-import java.io.{ BufferedReader, IOException, PrintWriter }
 import org.apache.myfaces.extensions.scripting.core.engine.api.{CompilationMessage, CompilationResult}
 
 /**
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/InitialFullScanTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/InitialFullScanTest.java
index e878019..3b318a6 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/InitialFullScanTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/InitialFullScanTest.java
@@ -19,21 +19,18 @@
 
 package org.apache.myfaces.extensions.scripting.core.context;
 
-import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
 import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
+import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
 import org.apache.myfaces.extensions.scripting.core.engine.FactoryEngines;
 import org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
+import org.junit.Before;
+import org.junit.Test;
 
-import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 import java.util.Enumeration;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -60,6 +57,7 @@
                 ScriptingEngine javaEngine = factory.getEngine(ScriptingConst.ENGINE_TYPE_JSF_JAVA);
                 ScriptingEngine groovyEngine = factory.getEngine(ScriptingConst.ENGINE_TYPE_JSF_GROOVY);
                 ScriptingEngine scalaEngine = factory.getEngine(ScriptingConst.ENGINE_TYPE_JSF_SCALA);
+                ScriptingEngine jrubyEngine = factory.getEngine(ScriptingConst.ENGINE_TYPE_JSF_JRUBY);
 
                 ClassLoader loader = this.getClass().getClassLoader();
                 String canonicalPackageName = this.getClass().getPackage().getName().replaceAll("\\.", FileUtils.getFileSeparatorForRegex());                Enumeration<URL> enumeration = loader.getResources(canonicalPackageName);
@@ -85,6 +83,8 @@
                 javaEngine.getSourcePaths().clear();;
                 groovyEngine.getSourcePaths().clear();
                 scalaEngine.getSourcePaths().clear();
+                jrubyEngine.getSourcePaths().clear();
+
             }
             catch (IOException e)
             {
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/TaintHistoryTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/TaintHistoryTest.java
index 5223791..a5ff7ac 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/TaintHistoryTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/context/TaintHistoryTest.java
@@ -22,14 +22,13 @@
 import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import org.apache.myfaces.extensions.scripting.core.monitor.ClassResource;
+import org.apache.myfaces.extensions.scripting.core.support.ContextUtils;
 import org.apache.myfaces.extensions.scripting.jsf.components.TaintHistory;
 import org.apache.myfaces.extensions.scripting.jsf.components.TaintHistoryRenderer;
-import org.apache.myfaces.extensions.scripting.core.support.ContextUtils;
 import org.apache.myfaces.renderkit.html.HtmlFormRenderer;
 import org.apache.myfaces.test.base.AbstractJsfTestCase;
 import org.apache.myfaces.test.mock.MockRenderKitFactory;
 import org.apache.myfaces.test.mock.MockResponseWriter;
-import org.junit.Ignore;
 
 import javax.faces.component.html.HtmlForm;
 import javax.servlet.ServletContext;
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/EngineFactoryTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/EngineFactoryTest.java
index e2e6b0e..daa3882 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/EngineFactoryTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/EngineFactoryTest.java
@@ -19,11 +19,10 @@
 
 package org.apache.myfaces.extensions.scripting.core.engine;
 
+import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import org.junit.Before;
 import org.junit.Test;
-import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 /**
  * @author Werner Punz (latest modification by $Author$)
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationExceptionTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationExceptionTest.java
index cff74d8..7afa144 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationExceptionTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationExceptionTest.java
@@ -19,8 +19,8 @@
 
 package org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
-import org.junit.Test;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationException;
+import org.junit.Test;
 
 import static org.junit.Assert.assertTrue;
 
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultTest.java
index 6c85e41..19adb7c 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/CompilationResultTest.java
@@ -20,9 +20,9 @@
 package org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationMessage;
+import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 import org.junit.Before;
 import org.junit.Test;
-import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 
 import static junit.framework.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompilerTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompilerTest.java
index 58eda6b..7d61a4b 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompilerTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompilerTest.java
@@ -20,12 +20,12 @@
 package org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
 import org.apache.commons.io.FilenameUtils;
-import org.junit.Test;
 import org.apache.myfaces.extensions.scripting.core.api.Configuration;
 import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import org.apache.myfaces.extensions.scripting.core.engine.FactoryEngines;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
+import org.junit.Test;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompilerTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompilerTest.java
index a9b48db..6786938 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompilerTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JRubyCompilerTest.java
@@ -19,10 +19,23 @@
 
 package org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
+import org.apache.commons.io.FilenameUtils;
+import org.apache.myfaces.extensions.scripting.core.api.Configuration;
+import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
+import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
+import org.apache.myfaces.extensions.scripting.core.engine.FactoryEngines;
+import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 import org.junit.Test;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
@@ -33,9 +46,11 @@
 {
     private static final String ROOT_DIR =
             "/Users/werpu2/development/workspace/extscript_trunk/extscript-core-root/extscript-core";
-    private static final String PROBE1 = "src/test/resources/compiler/TestProbe1.rb";
-    private static final String PROBE2 = "src/test/resources/compiler/TestProbe2.rb";
-    private static final String RESOURCES = "src/test/resources/";
+    private static final String PROBE1 = "../../src/test/resources/compiler/TestProbe1JRuby.rb";
+    private static final String PROBE2 = "../../src/test/resources/compiler/TestProbe2JRuby.rb";
+    private static final String RESOURCES = "../../src/test/resources/";
+
+    JRubyCompiler compiler = new JRubyCompiler();
 
     File probe1;
     File probe2;
@@ -47,13 +62,76 @@
     private static final String CLASSFILE1_IS_COMPILED1 = "Classfile1 is compiled into the target";
     private static final String CLASSFILE2_IS_COMPILED = "Classfile2 is compiled into the target";
 
-    @Test
-    public void basicCompilerTest()
+    public JRubyCompilerTest()
     {
-        File tempDir = FileUtils.getTempDir();
-        tempDir.mkdirs();
-        JRubyCompiler compiler = new JRubyCompiler();
-        compiler.compile(new File(ROOT_DIR), tempDir, File.separator + PROBE1);
+        try
+        {
+            FactoryEngines.getInstance().init();
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
+        //we use a location relative to our current root one to reach the sources
+        //because the test also has to be performed outside of maven
+        //and the ide cannot cope with resource paths for now
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+        String currentPath = null;
+
+        try
+        {
+            currentPath = URLDecoder.decode(loader.getResource("./").getPath(),
+                    Charset.defaultCharset().toString());
+        }
+        catch (UnsupportedEncodingException e)
+        {
+            fail(e.getMessage());
+        }
+        String sourcePath1 = currentPath + PROBE1;
+        String sourcePath2 = currentPath + PROBE2;
+        String rootPath = currentPath + RESOURCES;
+
+        sourcePath1 = FilenameUtils.normalize(sourcePath1);
+        sourcePath2 = FilenameUtils.normalize(sourcePath2);
+        rootPath = FilenameUtils.normalize(rootPath);
+
+        probe1 = new File(sourcePath1);
+        probe2 = new File(sourcePath2);
+        root = new File(rootPath);
+
+        WeavingContext.getInstance().setConfiguration(new Configuration());
+        WeavingContext.getInstance().getConfiguration().addSourceDir(ScriptingConst.ENGINE_TYPE_JSF_JRUBY, root.getAbsolutePath());
+
     }
 
+    @Test
+    public void testFullCompile()
+    {
+        File targetDir = null;
+
+        File target = WeavingContext.getInstance().getConfiguration().getCompileTarget();
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        target.mkdirs();
+        target.deleteOnExit();
+
+        CompilationResult result = compiler.compile(root, target, loader);
+
+        assertTrue(RESULT_HAS_NO_ERRORS, !result.hasErrors());
+
+        assertTrue(TARGET_DIR_EXISTS, target != null);
+        File classFile1 = new File(target.getAbsolutePath() + "/compiler/TestProbe1JRuby.class");
+        File classFile2 = new File(target.getAbsolutePath() + "/compiler/TestProbe2JRuby.class");
+
+        assertTrue(CLASSFILE1_IS_COMPILED1, classFile1.exists());
+        assertTrue(CLASSFILE2_IS_COMPILED, classFile2.exists());
+        classFile1.delete();
+        classFile2.delete();
+        WeavingContext.getInstance().getConfiguration().getCompileTarget().delete();
+        WeavingContext.getInstance().getConfiguration().getCompileTarget().mkdirs();
+
+
+    }
+
+
 }
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JavaCompilerTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JavaCompilerTest.java
index 1f967a8..cadcee2 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JavaCompilerTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/JavaCompilerTest.java
@@ -20,14 +20,13 @@
 package org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
 import org.apache.commons.io.FilenameUtils;
-import org.junit.Ignore;
-import org.junit.Test;
 import org.apache.myfaces.extensions.scripting.core.api.Configuration;
 import org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
 import org.apache.myfaces.extensions.scripting.core.engine.FactoryEngines;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
+import org.junit.Test;
 
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompilerTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompilerTest.java
index a71dea0..5e4731e 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompilerTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/engine/compiler/ScalaCompilerTest.java
@@ -26,8 +26,6 @@
 import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
 import org.apache.myfaces.extensions.scripting.core.engine.FactoryEngines;
 import org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
-import org.apache.myfaces.extensions.scripting.core.engine.compiler.ScalaCompiler;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/FileUtilsTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/FileUtilsTest.java
index 43bd943..44ca5df 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/FileUtilsTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/FileUtilsTest.java
@@ -19,10 +19,10 @@
 
 package org.apache.myfaces.extensions.scripting.core.utilstest;
 
-import org.junit.Before;
-import org.junit.Test;
 import org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
 import org.apache.myfaces.extensions.scripting.core.support.PathUtils;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.io.File;
 import java.util.List;
diff --git a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/ReflectUtilTest.java b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/ReflectUtilTest.java
index e1bcb40..336a734 100644
--- a/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/ReflectUtilTest.java
+++ b/extscript-core-root/extscript-core/src/test/java/org/apache/myfaces/extensions/scripting/core/utilstest/ReflectUtilTest.java
@@ -19,13 +19,13 @@
 
 package org.apache.myfaces.extensions.scripting.core.utilstest;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
 import org.apache.myfaces.extensions.scripting.core.common.util.Cast;
 import org.apache.myfaces.extensions.scripting.core.common.util.Null;
 import org.apache.myfaces.extensions.scripting.core.common.util.ReflectUtil;
 import org.apache.myfaces.extensions.scripting.core.probes.Probe;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 import java.lang.reflect.Method;
 import java.util.Collection;
diff --git a/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe1.rb b/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe1JRuby.rb
similarity index 69%
rename from extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe1.rb
rename to extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe1JRuby.rb
index d5e9696..04ec2b9 100644
--- a/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe1.rb
+++ b/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe1JRuby.rb
@@ -1,7 +1,10 @@
+java_package 'compiler'
+java_import 'javax.faces.bean.ManagedBean'
 # a small ruby testing class to test for a valid compilation
 # from the compiler
 # @author Werner Punz
-class TestProbe1
+add_class_annotation '@ManagedBean'
+class TestProbe1JRuby
   java_signature 'void helloWorld()'
   def helloWorld
       puts "Hello from Ruby"
diff --git a/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe2.rb b/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe2.rb
deleted file mode 100644
index 928ac85..0000000
--- a/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe2.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-java_package 'compiler'
-class TestProbe2
-
-end
\ No newline at end of file
diff --git a/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe2JRuby.rb b/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe2JRuby.rb
new file mode 100644
index 0000000..5a25c52
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/test/resources/compiler/TestProbe2JRuby.rb
@@ -0,0 +1,4 @@
+java_package 'compiler'
+class TestProbe2JRuby
+
+end
\ No newline at end of file
diff --git a/extscript-core-root/extscript-core/src/test/resources/compiler/myPackage/WhiteListedProbeRuby.rb b/extscript-core-root/extscript-core/src/test/resources/compiler/myPackage/WhiteListedProbeRuby.rb
new file mode 100644
index 0000000..6cb57f9
--- /dev/null
+++ b/extscript-core-root/extscript-core/src/test/resources/compiler/myPackage/WhiteListedProbeRuby.rb
@@ -0,0 +1,4 @@
+java_package 'compiler.myPackage'
+class WhisteListedProbeJRuby
+
+end
\ No newline at end of file
diff --git a/extscript-examples/myfaces20-example/pom.xml b/extscript-examples/myfaces20-example/pom.xml
index 48cf4ee..052fdb6 100644
--- a/extscript-examples/myfaces20-example/pom.xml
+++ b/extscript-examples/myfaces20-example/pom.xml
@@ -62,8 +62,9 @@
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
-                    <source>1.6</source>
-                    <target>1.6</target>
+                    <!-- source 1.7 due to jruby constraints -->
+                    <source>1.7</source>
+                    <target>1.7</target>
                 </configuration>
             </plugin>
 
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml
index 7d438df..42ae074 100644
--- a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml
+++ b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml
@@ -30,6 +30,12 @@
         <managed-bean-scope>request</managed-bean-scope>
     </managed-bean>
 
+    <managed-bean>
+        <managed-bean-name>helloJRubyBean</managed-bean-name>
+        <managed-bean-class>org.apache.myfaces.jrubyloader.bean.HelloJRubyBean</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+    </managed-bean>
+
 
     <managed-bean>
         <managed-bean-name>testbean</managed-bean-name>
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/ruby/org/apache/myfaces/jrubyloader/bean/HelloJRubyBean.rb b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/ruby/org/apache/myfaces/jrubyloader/bean/HelloJRubyBean.rb
new file mode 100644
index 0000000..2dddee6
--- /dev/null
+++ b/extscript-examples/myfaces20-example/src/main/webapp/WEB-INF/ruby/org/apache/myfaces/jrubyloader/bean/HelloJRubyBean.rb
@@ -0,0 +1,8 @@
+java_package 'org.apache.myfaces.jrubyloader.bean'
+
+class HelloJRubyBean
+  java_signature 'String getHelloWorld()'
+   def getHelloWorld
+       "Hello from Ruby"
+   end
+end
\ No newline at end of file
diff --git a/extscript-examples/myfaces20-example/src/main/webapp/complexBean.xhtml b/extscript-examples/myfaces20-example/src/main/webapp/complexBean.xhtml
index 551460b..3172444 100644
--- a/extscript-examples/myfaces20-example/src/main/webapp/complexBean.xhtml
+++ b/extscript-examples/myfaces20-example/src/main/webapp/complexBean.xhtml
@@ -33,6 +33,7 @@
         <h:inputText id="myText" value="#{myBean.test}" binding="#{myBean.bindingMyTest}"/>
         <h:outputText value="#{receiver.myBean.hello}"/>
         <h:outputText value="#{receiver.myBean.secondaryBean.hello}"/>
+        <h:outputText value="#{helloJRubyBean.helloWorld}" />
     </h:form>
 </h:body>
 </html>
diff --git a/pom.xml b/pom.xml
index ee52b5c..82b42c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -213,7 +213,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>2.3.2</version>
+                <version>2.5.1</version>
                 <configuration>
                     <source>1.6</source>
                     <target>1.6</target>