Author: reto
Date: Fri Oct  8 19:14:43 2010
New Revision: 1005972

URL: http://svn.apache.org/viewvc?rev=1005972&view=rev
Log:
CLEREZZA-320: re-using class objects of compiled scripts (neededing extra 
boot-delegation), updated to scala 2.8.0

Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/   (props changed)
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/
   (props changed)
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/org.apache.clerezza.platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
    incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml
    incubator/clerezza/trunk/scala-scripting/pom.xml
    
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala

Propchange: incubator/clerezza/trunk/org.apache.clerezza.parent/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Oct  8 19:14:43 2010
@@ -1 +1,2 @@
 target
+.pom.xml.swp

Propchange: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.content.fsadaptor/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Oct  8 19:14:43 2010
@@ -0,0 +1 @@
+target

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/org.apache.clerezza.platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/org.apache.clerezza.platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java?rev=1005972&r1=1005971&r2=1005972&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/org.apache.clerezza.platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.launcher.storageless.parent/org.apache.clerezza.platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
 Fri Oct  8 19:14:43 2010
@@ -262,8 +262,9 @@ public class Main implements BundleActiv
                        if (extraPackages == null) {
                                extraPackages = "";
                        }
+                       //sun.reflect added because of 
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6265952 and loading of scala 
scripts
                        
configProps.put("org.osgi.framework.system.packages.extra",
-                                       "sun.misc;"
+                                       "sun.misc;sun.reflect"
                                        + extraPackages);
                }
 

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml?rev=1005972&r1=1005971&r2=1005972&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml Fri Oct  8 
19:14:43 2010
@@ -9,7 +9,7 @@
        <version>0.2-incubating-SNAPSHOT</version>
        <description>The direct or indirect parent of all Clerezza 
Artifacts</description>
        <properties>
-               <scala.version>2.8.0.RC5</scala.version>
+               <scala.version>2.8.0</scala.version>
        </properties>
        <licenses>
                <license>

Modified: incubator/clerezza/trunk/scala-scripting/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/pom.xml?rev=1005972&r1=1005971&r2=1005972&view=diff
==============================================================================
--- incubator/clerezza/trunk/scala-scripting/pom.xml (original)
+++ incubator/clerezza/trunk/scala-scripting/pom.xml Fri Oct  8 19:14:43 2010
@@ -21,12 +21,12 @@
                                <groupId>org.scala-lang</groupId>
                                <artifactId>scala-library</artifactId>
 <!-- test failures with RC>2, see 
http://groups.google.com/group/scalatest-users/browse_thread/thread/1c68b6ebba676bc8
 -->
-                               <version>2.8.0.RC5</version>
+                               <version>2.8.0</version>
                        </dependency>
                        <dependency>
                                <groupId>org.scala-lang</groupId>
                                <artifactId>scala-compiler</artifactId>
-                               <version>2.8.0.RC5</version>
+                               <version>2.8.0</version>
                        </dependency>
                        <dependency>
                                <groupId>org.apache.clerezza.scala</groupId>

Modified: 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala?rev=1005972&r1=1005971&r2=1005972&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala
 (original)
+++ 
incubator/clerezza/trunk/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/ScriptEngineFactory.scala
 Fri Oct  8 19:14:43 2010
@@ -77,7 +77,7 @@ class ScriptEngineFactory() extends  Jav
 
        //methods from ScriptEngineFactory
        override def getEngineName() = "Scala Scripting Engine for OSGi"
-       override def getEngineVersion() = "0.2/scala 2.8.0.RC2"
+       override def getEngineVersion() = "0.2/scala 2.8.0"
        override def getExtensions() = 
java.util.Collections.singletonList("scala")
        override def getMimeTypes() = 
java.util.Collections.singletonList("application/x-scala")
        override def getNames() = java.util.Collections.singletonList("scala")
@@ -206,6 +206,11 @@ class ScriptEngineFactory() extends  Jav
 
                val virtualDirectory = new VirtualDirectory("(memory)", None)
                var msgWriter = new StringWriter
+
+               val classLoader = new AbstractFileClassLoader(virtualDirectory, 
this.getClass.getClassLoader())
+
+               //var classLoader = createClassLoader
+
                lazy val compiler = {
                        AccessController.doPrivileged(new 
PrivilegedAction[BundleContextScalaCompiler]() {
                                override def run() =  {
@@ -227,11 +232,12 @@ class ScriptEngineFactory() extends  Jav
                        try {
                                AccessController.doPrivileged(new 
PrivilegedAction[CompiledScript]() {
                                override def run() =  {
+
                                                //inefficient but thread safe
                                                compiler.synchronized {
                                                        val objectName = 
"CompiledScript"+classCounter
                                                        classCounter += 1
-                                                       val classCode = "object 
" + objectName + """ {
+                                                       val classCode = "class 
" + objectName + """ {
                                                                |       def 
run($: Map[String, Object]) = {
                                                                
|""".stripMargin + script +"""
                                                                |       }
@@ -244,8 +250,14 @@ class ScriptEngineFactory() extends  Jav
                                                                msgWriter = new 
StringWriter
                                                                throw new 
ScriptException(msg, "script", -1);
                                                        }
+                                                       //val classBytes = 
virtualDirectory.fileNamed(objectName+".class").toCharArray
+                                                       val clazz = 
classLoader.loadClass(objectName)
+                                                       val scriptObject = 
clazz.newInstance()
+
                                                        new CompiledScript() {
+
                                                                override def 
eval(context: ScriptContext) = {
+       
                                                                        var map 
= Map[String, Object]()
                                                                        import 
_root_.scala.collection.JavaConversions._
                                                                        for (   
scope <- context.getScopes;
@@ -253,12 +265,13 @@ class ScriptEngineFactory() extends  Jav
                                                                                
        entry <- context.getBindings(scope.intValue)) {
                                                                                
map = map + (entry._1 -> entry._2)
                                                                        }
-                                                                       val 
classLoader = new AbstractFileClassLoader(virtualDirectory, 
this.getClass.getClassLoader())
-                                                                       val 
runMethod = classLoader.findClass(objectName).getMethod("run", 
classOf[Map[String, Object]])
+                                                                       val 
runMethod = clazz.getMethod("run", classOf[Map[String, Object]])
                                                                        try {
-                                                                               
runMethod.invoke(null, map)
+                                                                               
runMethod.invoke(scriptObject, map)
                                                                        } catch 
{
-                                                                               
case e: InvocationTargetException => throw e.getCause
+                                                                               
case e: InvocationTargetException => {
+                                                                               
        throw e.getCause
+                                                                               
}
                                                                        }
                                                                }
                                                                override def 
getEngine = MyScriptEngine.this


Reply via email to