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