You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2008/08/28 08:43:10 UTC

svn commit: r689731 - in /incubator/sling/trunk/scripting/ruby: pom.xml src/main/java/org/apache/sling/scripting/ruby/ErbScriptEngine.java

Author: bdelacretaz
Date: Wed Aug 27 23:43:09 2008
New Revision: 689731

URL: http://svn.apache.org/viewvc?rev=689731&view=rev
Log:
SLING-632 - downgrade jruby to 1.0 due to missing dependencies for 1.1.1

Modified:
    incubator/sling/trunk/scripting/ruby/pom.xml
    incubator/sling/trunk/scripting/ruby/src/main/java/org/apache/sling/scripting/ruby/ErbScriptEngine.java

Modified: incubator/sling/trunk/scripting/ruby/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/ruby/pom.xml?rev=689731&r1=689730&r2=689731&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/ruby/pom.xml (original)
+++ incubator/sling/trunk/scripting/ruby/pom.xml Wed Aug 27 23:43:09 2008
@@ -62,10 +62,9 @@
                         <Import-Package>
                             javax.swing.*;
                             org.apache.bsf.*;
-                            sun.misc; resolution:=optional,
-                            *
+                            sun.misc; resolution:=optional
                         </Import-Package>
-                        
+                        <DynamicImport-Package>*</DynamicImport-Package>
                         <ScriptEngine-Name>${pom.name}</ScriptEngine-Name>
                         <ScriptEngine-Version>${pom.version}</ScriptEngine-Version>
                     </instructions>
@@ -102,7 +101,7 @@
         <dependency>
             <groupId>org.jruby</groupId>
             <artifactId>jruby-complete</artifactId>
-            <version>1.1.1</version>
+            <version>1.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>

Modified: incubator/sling/trunk/scripting/ruby/src/main/java/org/apache/sling/scripting/ruby/ErbScriptEngine.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/ruby/src/main/java/org/apache/sling/scripting/ruby/ErbScriptEngine.java?rev=689731&r1=689730&r2=689731&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/ruby/src/main/java/org/apache/sling/scripting/ruby/ErbScriptEngine.java (original)
+++ incubator/sling/trunk/scripting/ruby/src/main/java/org/apache/sling/scripting/ruby/ErbScriptEngine.java Wed Aug 27 23:43:09 2008
@@ -33,7 +33,7 @@
 import org.jruby.runtime.builtin.IRubyObject;
 
 /**
- * A ScriptEngine that uses ruby erb templates to render a Resource.
+ * JRuby ScriptEngine
  */
 public class ErbScriptEngine extends AbstractSlingScriptEngine {
 
@@ -46,12 +46,18 @@
     public ErbScriptEngine(ErbScriptEngineFactory factory) {
         super(factory);
 
-        runtime = Ruby.newInstance();
-        runtime.evalScriptlet("require 'java';require 'erb';self.send :include, ERB::Util;class ERB;def get_binding;binding;end;attr_reader :props;def set_props(p);@props = p;"
-            + "for name,v in @props;instance_eval \"def #{name}; @props['#{name}'];end\";end;end;end;");
-
-        erbModule = runtime.getClassFromPath("ERB");
-        bindingSym = RubySymbol.newSymbol(runtime, "get_binding");
+        final ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+        try {
+        	Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+            runtime = Ruby.getDefaultInstance();
+            runtime.evalScript("require 'java';require 'erb';self.send :include, ERB::Util;class ERB;def get_binding;binding;end;attr_reader :props;def set_props(p);@props = p;"
+                + "for name,v in @props;instance_eval \"def #{name}; @props['#{name}'];end\";end;end;end;");
+
+            erbModule = runtime.getClassFromPath("ERB");
+            bindingSym = RubySymbol.newSymbol(runtime, "get_binding");
+        } finally {
+        	Thread.currentThread().setContextClassLoader(oldClassLoader);
+        }
     }
 
     public Object eval(Reader script, ScriptContext scriptContext)
@@ -66,10 +72,12 @@
         // ensure GET request
         if (!"GET".equals(helper.getRequest().getMethod())) {
             throw new ScriptException(
-                "FreeMarker templates only support GET requests");
+                "JRuby scripting only supports GET requests");
         }
 
+        final ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         try {
+        	Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
             StringBuffer scriptString = new StringBuffer();
             BufferedReader bufferedScript = new BufferedReader(script);
             String nextLine = bufferedScript.readLine();
@@ -97,8 +105,11 @@
                 (String) JavaEmbedUtils.invokeMethod(runtime, erb, "result",
                     new Object[] { binding }, String.class));
         } catch (Throwable t) {
-            throw new ScriptException("Failure running Ruby script:"
-                + t.getMessage());
+        	final ScriptException ex = new ScriptException("Failure running Ruby script:" + t);
+        	ex.initCause(t);
+        	throw ex;
+        } finally {
+        	Thread.currentThread().setContextClassLoader(oldClassLoader);
         }
         return null;
     }