Author: dspicar
Date: Wed Jan 18 17:21:56 2012
New Revision: 1232960

URL: http://svn.apache.org/viewvc?rev=1232960&view=rev
Log:
CLEREZZA-617: updated POM versions, changed interface to provide clasloader and 
preserve backwards compatibility

Modified:
    
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/pom.xml
    
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesService.java
    
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java
    incubator/clerezza/issues/CLEREZZA-617/scala-scripting/pom.xml
    incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/pom.xml
    
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
    
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala

Modified: 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/pom.xml?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/pom.xml
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/pom.xml
 Wed Jan 18 17:21:56 2012
@@ -30,7 +30,7 @@
        <groupId>org.apache.clerezza</groupId>
        <artifactId>platform.typerendering.scalaserverpages</artifactId>
        <packaging>bundle</packaging>
-       <version>0.3-incubating-SNAPSHOT</version>
+       <version>0.4-incubating-SNAPSHOT</version>
        <name>Clerezza - Platform ScalaServerPages Renderlet</name>
        <description>Renderlet implementation wrapping 
org.apache.clerezza.scala</description>
        <dependencies>

Modified: 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesService.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesService.java?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesService.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/ScalaServerPagesService.java
 Wed Jan 18 17:21:56 2012
@@ -57,7 +57,7 @@ public class ScalaServerPagesService {
        }
 
        /**
-        * Creates a Renderle-Service registered using the BundleContext of this
+        * Creates a Renderlet-Service registered using the BundleContext of 
this
         * service
         *
         * @param location
@@ -66,7 +66,7 @@ public class ScalaServerPagesService {
         * @param mediaType
         * @return
         */
-       public ServiceRegistration registerScalaServerPage(URL location,  
UriRef rdfType,
+       public ServiceRegistration registerScalaServerPage(URL location, UriRef 
rdfType,
                        String modePattern, MediaType mediaType) {
                return registerScalaServerPage(location, rdfType, modePattern, 
mediaType, bundleContext);
        }
@@ -85,11 +85,23 @@ public class ScalaServerPagesService {
         */
        public ServiceRegistration registerScalaServerPage(URL location,  
UriRef rdfType,
                        String modePattern, MediaType mediaType, BundleContext 
callerBundleContext) {
+               return registerScalaServerPage(location, rdfType, modePattern, 
mediaType, 
+                               callerBundleContext, null);
+       }
+       
+       /**
+        * Creates a renderlet service registered using the given bundle 
context. Using
+        * This method ensures that the passed BundleContext is used to 
determine the priority
+        * of the renderlets.
+        * 
+        * The passed class loader will be used to load the compiled SSP. 
+        */
+       public ServiceRegistration registerScalaServerPage(URL location,  
UriRef rdfType,
+                       String modePattern, MediaType mediaType, BundleContext 
callerBundleContext,
+                       ClassLoader classLoader) {
                TypeRenderlet sspTypeRenderlet = new SspTypeRenderlet(location, 
rdfType,
-                               modePattern, mediaType, scalaCompilerService, 
callerBundleContext);
+                               modePattern, mediaType, scalaCompilerService, 
classLoader);
                return 
callerBundleContext.registerService(TypeRenderlet.class.getName(),
                                sspTypeRenderlet, null);
        }
-
-
 }

Modified: 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-617/platform.typerendering.scalaserverpages/src/main/java/org/apache/clerezza/platform/typerendering/scalaserverpages/SspTypeRenderlet.java
 Wed Jan 18 17:21:56 2012
@@ -35,7 +35,6 @@ import java.security.PrivilegedActionExc
 import java.security.PrivilegedExceptionAction;
 import java.util.Arrays;
 import java.util.Map;
-import org.osgi.framework.BundleContext;
 
 /**
  * A TypeRenderlet delegating the actual renderlet to a compiled 
ScalaServerPage. On every request the
@@ -60,27 +59,25 @@ public class SspTypeRenderlet implements
        private char[] lastCompiledChars;
        private TypeRenderlet lastCompiledSsp = null;
        private CompilerService scalaCompilerService;
-       private BundleContext registartorContext = null;
+       private final ClassLoader registratorClassLoader;
 
-       SspTypeRenderlet(URL sspLocation, UriRef rdfType, String modePattern, 
MediaType mediaType,
-                                        CompilerService scalaCompilerService, 
BundleContext registratorContext) {
+       SspTypeRenderlet(URL sspLocation, UriRef rdfType, String modePattern, 
+                       MediaType mediaType, CompilerService 
scalaCompilerService, 
+                       ClassLoader registratorClassLoader) {
                this.sspLocation = sspLocation;
                this.rdfType = rdfType;
                this.modePattern = modePattern;
                this.mediaType = mediaType;
                this.scalaCompilerService = scalaCompilerService;
-               this.registartorContext = registratorContext;
+               this.registratorClassLoader = registratorClassLoader;
        }
        
-       SspTypeRenderlet(URL sspLocation, UriRef rdfType, String modePattern, 
MediaType mediaType,
-                                        CompilerService scalaCompilerService) {
-               this.sspLocation = sspLocation;
-               this.rdfType = rdfType;
-               this.modePattern = modePattern;
-               this.mediaType = mediaType;
-               this.scalaCompilerService = scalaCompilerService;
+       SspTypeRenderlet(URL sspLocation, UriRef rdfType, String modePattern, 
+                       MediaType mediaType, CompilerService 
scalaCompilerService) {
+               this(sspLocation, rdfType, modePattern, mediaType, 
scalaCompilerService, 
+                               null);
        }
-
+       
        @Override
        public UriRef getRdfType() {
                return rdfType;
@@ -100,7 +97,7 @@ public class SspTypeRenderlet implements
        public void render(GraphNode node, GraphNode context,
                                           Map<String, Object> 
sharedRenderingValues, CallbackRenderer callbackRenderer,
                                           RequestProperties requestProperties, 
OutputStream os) throws IOException {
-               TypeRenderlet compiledSsp = 
getCompiledSsp(this.registartorContext);
+               TypeRenderlet compiledSsp = getCompiledSsp();
                compiledSsp.render(node, context, sharedRenderingValues, 
callbackRenderer, requestProperties, os);
        }
 
@@ -116,49 +113,11 @@ public class SspTypeRenderlet implements
                        renderletClass = AccessController.doPrivileged(new 
PrivilegedExceptionAction<Class>() {
                                @Override
                                public Class run() {
-                                       return 
scalaCompilerService.compile(scripts)[0];
-                               }
-                       });
-
-               } catch (PrivilegedActionException e) {
-                       Throwable cause = e.getCause();
-                       if (cause instanceof RuntimeException) {
-                               throw (RuntimeException) cause;
-                       }
-                       /*if (cause instanceof CompileErrorsException) {
-                               throw (CompileErrorsException) cause;
-                       }*/
-                       throw new RuntimeException(e);
-               }
-               TypeRenderlet compiledSsp;
-               try {
-                       compiledSsp = (TypeRenderlet) 
renderletClass.newInstance();
-               } catch (InstantiationException ex) {
-                       throw new RuntimeException(ex);
-               } catch (IllegalAccessException ex) {
-                       throw new RuntimeException(ex);
-               }
-               lastCompiledSsp = compiledSsp;
-               lastCompiledChars = scriptChars;
-               return compiledSsp;
-       }
-       
-       private synchronized TypeRenderlet getCompiledSsp(final BundleContext 
registratorContext)  {
-               if(registratorContext == null) {
-                       return getCompiledSsp();
-               }
-               char[] scriptChars = getScriptChars(sspLocation);
-               if (Arrays.equals(scriptChars, lastCompiledChars)) {
-                       return lastCompiledSsp;
-               }
-               final char[][] scripts = new char[][]{scriptChars};
-               Class renderletClass;
-               try {
-                       //doing as priviledged so that no CompilePermission is 
needed
-                       renderletClass = AccessController.doPrivileged(new 
PrivilegedExceptionAction<Class>() {
-                               @Override
-                               public Class run() {
-                                       return 
scalaCompilerService.compile(scripts, registratorContext)[0];
+                                       if (registratorClassLoader == null) {
+                                               return 
scalaCompilerService.compile(scripts)[0];
+                                       } else {
+                                               return 
scalaCompilerService.compile(scripts, registratorClassLoader)[0];
+                                       }
                                }
                        });
 

Modified: incubator/clerezza/issues/CLEREZZA-617/scala-scripting/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/scala-scripting/pom.xml?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-617/scala-scripting/pom.xml (original)
+++ incubator/clerezza/issues/CLEREZZA-617/scala-scripting/pom.xml Wed Jan 18 
17:21:56 2012
@@ -24,7 +24,7 @@
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.apache.clerezza.scala</groupId>
        <artifactId>scala</artifactId>
-       <version>0.1-incubating-SNAPSHOT</version>
+       <version>0.2-incubating-SNAPSHOT</version>
        <packaging>pom</packaging>
        <name>Scala OSGi Services</name>
        <description>Provides bundles and services to allow compiling and 
executing scala code

Modified: 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/pom.xml?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/pom.xml 
(original)
+++ 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/pom.xml 
Wed Jan 18 17:21:56 2012
@@ -25,7 +25,7 @@
        <parent>
                <groupId>org.apache.clerezza.scala</groupId>
                <artifactId>scala</artifactId>
-               <version>0.1-incubating-SNAPSHOT</version>
+               <version>0.2-incubating-SNAPSHOT</version>
        </parent>
        <artifactId>script-engine</artifactId>
        <packaging>bundle</packaging>

Modified: 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/CompilerService.scala
 Wed Jan 18 17:21:56 2012
@@ -95,23 +95,34 @@ class CompilerService() extends BundleLi
                TrackingCompiler(bundleContext, out, Some(outputSirectory))
        }
 
+       /**
+        * Compiles an array of class sources returning an array of compiled 
classes.
+        * Uses the optionally supplied class loader to load compiled classes.
+        * If no class loader is supplied, the class loader of this bundle is 
used.
+        */
        def compile(sources: Array[Array[Char]]): Array[Class[_]] = {
-               compile(sources.toList).toArray
+         compile(sources, null)
        }
-
+       
        /**
         * Compiles an array of class sources returning an array of compiled 
classes.
-        * Uses the ClassLoader of the supplied BundleContext's bundle.'
+        * Uses the optionally supplied class loader to load compiled classes.
+        * If no class loader is supplied, the class loader of this bundle is 
used.
         */
-       def compile(sources: Array[Array[Char]], registratorContext: 
BundleContext): Array[Class[_]] = {
-               compile(sources.toList, registratorContext).toArray
+       def compile(sources: Array[Array[Char]], classLoader: ClassLoader): 
Array[Class[_]] = {
+               var classLoaderOption: Option[ClassLoader] = None
+               if(classLoader != null) {
+                 classLoaderOption = Some(classLoader);
+               }
+               compile(sources.toList, classLoaderOption).toArray
        }
        
        /**
         * Compiles a list of class sources returning a list of compiled 
classes.
-        * Uses the ClassLoader of the supplied BundleContext's bundle.'
+        * Uses the optionally supplied class loader to load compiled classes.
+        * If no class loader is supplied, the class loader of this bundle is 
used.
         */
-       def compile(sources: List[Array[Char]], registratorContext: 
BundleContext = null): List[Class[_]] = {
+       def compile(sources: List[Array[Char]], classLoaderOption: 
Option[ClassLoader] = None): List[Class[_]] = {
                AccessController.checkPermission(new CompilePermission)
                sharedCompiler.synchronized {
                        try {
@@ -121,11 +132,7 @@ class CompilerService() extends BundleLi
                                                        val baos = new 
ByteArrayOutputStream
                                                        
currentSharedCompilerOutputStream = baos
                                                        try {
-                                                               var context: 
Option[BundleContext] = None;
-                                                               
if(registratorContext != null) {
-                                                                 context = 
Some(registratorContext)
-                                                               }
-                                                               
sharedCompiler.compile(sources, context)
+                                                               
sharedCompiler.compile(sources, classLoaderOption)
                                                        } catch {
                                                                case c: 
CompileErrorsException => throw new CompileErrorsException(
                                                                                
new String(baos.toByteArray, "utf-8"))

Modified: 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala?rev=1232960&r1=1232959&r2=1232960&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-617/scala-scripting/script-engine/src/main/scala/org/apache/clerezza/scala/scripting/TrackingCompiler.scala
 Wed Jan 18 17:21:56 2012
@@ -66,13 +66,14 @@ class TrackingCompiler private (bundleCo
 
        /**
         * Compiles a list of class sources returning a list of compiled 
classes.
-        * Uses the ClassLoader of the supplied BundleContext's bundle, if 
supplied.
+        * Uses the optionally supplied class loader to load compiled classes.
+        * If no class loader is supplied, the class loader of this class is 
used.
         */
        @throws(classOf[CompileErrorsException])
-       def compile(sources: List[Array[Char]], registratorContext: 
Option[BundleContext] = None): List[Class[_]] = {
+       def compile(sources: List[Array[Char]], classLoaderOption: 
Option[ClassLoader] = None): List[Class[_]] = {
                val classFiles = compileToDir(sources)
-               val classLoader = registratorContext match {
-                 case Some(x) => 
classLoaderBuilder(getBundleClassLoader(x.getBundle))
+               val classLoader = classLoaderOption match {
+                 case Some(x) => classLoaderBuilder(x)
                  case None => classLoaderBuilder(this.getClass.getClassLoader)
                }
                //println("ClassLoader: " + classLoader + " Parent: " + 
classLoader.getParent)
@@ -91,27 +92,27 @@ class TrackingCompiler private (bundleCo
         *
         * Hack to get the classloader from a bundle reference, is felix 
dependend
         */
-    def getBundleClassLoader(bundle: Bundle): ClassLoader = {
-         val modulesField: Field = 
bundle.getClass.getClassLoader.loadClass("org.apache.felix.framework.BundleImpl").getDeclaredField("m_modules")
-         modulesField.setAccessible(true);
-         val classLoaderField: Field = 
bundle.getClass.getClassLoader.loadClass("org.apache.felix.framework.ModuleImpl").getDeclaredField("m_classLoader")
-         classLoaderField.setAccessible(true);
-         var module: Object = None
-         try {
-               val modules: Array[Object] = 
modulesField.get(bundle).asInstanceOf[Array[Object]]
-               module = modules(modules.length - 1)
-         } catch {
-               case e: ClassCastException => {
-                 val modules: java.util.List[Object] = 
modulesField.get(bundle).asInstanceOf[java.util.List[Object]]
-                 module = modules.get(modules.size - 1)
-               }
-         }
-         
-         bundle.loadClass("java.lang.Object")
-         val classLoader: ClassLoader = 
classLoaderField.get(module).asInstanceOf[ClassLoader]
-       
-         classLoader
-       }
+//    def getBundleClassLoader(bundle: Bundle): ClassLoader = {
+//       val modulesField: Field = 
bundle.getClass.getClassLoader.loadClass("org.apache.felix.framework.BundleImpl").getDeclaredField("m_modules")
+//       modulesField.setAccessible(true);
+//       val classLoaderField: Field = 
bundle.getClass.getClassLoader.loadClass("org.apache.felix.framework.ModuleImpl").getDeclaredField("m_classLoader")
+//       classLoaderField.setAccessible(true);
+//       var module: Object = None
+//       try {
+//             val modules: Array[Object] = 
modulesField.get(bundle).asInstanceOf[Array[Object]]
+//             module = modules(modules.length - 1)
+//       } catch {
+//             case e: ClassCastException => {
+//               val modules: java.util.List[Object] = 
modulesField.get(bundle).asInstanceOf[java.util.List[Object]]
+//               module = modules.get(modules.size - 1)
+//             }
+//       }
+//       
+//       bundle.loadClass("java.lang.Object")
+//       val classLoader: ClassLoader = 
classLoaderField.get(module).asInstanceOf[ClassLoader]
+//     
+//       classLoader
+//     }
        
 }
 


Reply via email to