Author: cziegeler
Date: Mon Jul 20 15:40:33 2009
New Revision: 795878

URL: http://svn.apache.org/viewvc?rev=795878&view=rev
Log:
SLING-1050 - Use new dynamic class loader.

Modified:
    sling/trunk/bundles/scripting/javascript/pom.xml
    
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java

Modified: sling/trunk/bundles/scripting/javascript/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/pom.xml?rev=795878&r1=795877&r2=795878&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/pom.xml (original)
+++ sling/trunk/bundles/scripting/javascript/pom.xml Mon Jul 20 15:40:33 2009
@@ -62,7 +62,6 @@
                             !org.mozilla.javascript.xml.impl.xmlbeans,
                             org.mozilla.javascript.*
                         </Private-Package>
-                        <DynamicImport-Package>*</DynamicImport-Package>
                         <ScriptEngine-Name>${pom.name}</ScriptEngine-Name>
                         
<ScriptEngine-Version>${pom.version}</ScriptEngine-Version>
                     </instructions>
@@ -113,6 +112,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.classloader</artifactId>
+            <version>0.9.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.json</artifactId>
             <version>2.0.2-incubator</version>
         </dependency>

Modified: 
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java?rev=795878&r1=795877&r2=795878&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java
 (original)
+++ 
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/internal/RhinoJavaScriptEngineFactory.java
 Mon Jul 20 15:40:33 2009
@@ -24,6 +24,7 @@
 
 import javax.script.ScriptEngine;
 
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
 import org.apache.sling.scripting.javascript.RhinoHostObjectProvider;
 import org.apache.sling.scripting.javascript.SlingWrapper;
@@ -52,7 +53,7 @@
 
 /**
  * The <code>RhinoJavaScriptEngineFactory</code> TODO
- * 
+ *
  * @scr.component metatype="no"
  * @scr.service interface="javax.script.ScriptEngineFactory"
  * @scr.reference name="HostObjectProvider"
@@ -79,11 +80,14 @@
     private String languageVersion;
 
     private SlingWrapFactory wrapFactory;
-    
+
     private Scriptable rootScope;
 
     private final Set<RhinoHostObjectProvider> hostObjectProvider = new 
HashSet<RhinoHostObjectProvider>();
 
+    /** @scr.reference */
+    private DynamicClassLoaderManager dynamicClassLoaderManager;
+
     public ScriptEngine getScriptEngine() {
         return new RhinoJavaScriptEngine(this, getRootScope());
     }
@@ -103,21 +107,21 @@
     SlingWrapFactory getWrapFactory() {
         return wrapFactory;
     }
-    
+
     @SuppressWarnings("unchecked")
     private Scriptable getRootScope() {
         if (rootScope == null) {
 
             final Context rhinoContext = Context.enter();
             try {
-                
+
                 Scriptable tmpScope = rhinoContext.initStandardObjects(
                     new ImporterTopLevel(), false);
-    
+
                 // default classes
                 addHostObjects(tmpScope,
                     (Class<? extends ScriptableObject>[]) HOSTOBJECT_CLASSES);
-    
+
                 // provided classes
                 for (RhinoHostObjectProvider provider : hostObjectProvider) {
                     addHostObjects(tmpScope, provider.getHostObjectClasses());
@@ -126,10 +130,10 @@
                     addImportedPackages(rhinoContext, tmpScope,
                         provider.getImportedPackages());
                 }
-                
+
                 // only assign the root scope when complete set up
                 rootScope = tmpScope;
-                
+
             } finally {
                 // ensure the context is exited after setting up the
                 // the new root scope
@@ -141,7 +145,7 @@
     }
 
     private void dropRootScope() {
-        
+
         // ensure the debugger is closed if the root scope will
         // be replaced to ensure no references to the old scope
         // and context remain
@@ -149,11 +153,11 @@
         if (contextFactory instanceof SlingContextFactory) {
             ((SlingContextFactory) contextFactory).exitDebugger();
         }
-        
+
         // drop the scope
         rootScope = null;
     }
-    
+
     // ---------- SCR integration
 
     protected void activate(ComponentContext context) {
@@ -164,7 +168,7 @@
 
         // setup the wrap factory
         wrapFactory = new SlingWrapFactory();
-        
+
         // initialize the Rhino Context Factory
         SlingContextFactory.setup(this);
 
@@ -179,20 +183,25 @@
             "application/javascript");
         setNames("javascript", ECMA_SCRIPT_EXTENSION, ESP_SCRIPT_EXTENSION);
 
-        ContextFactory contextFactory = ContextFactory.getGlobal();
+        final ContextFactory contextFactory = ContextFactory.getGlobal();
         if (contextFactory instanceof SlingContextFactory) {
             ((SlingContextFactory) contextFactory).setDebugging(debugging);
         }
+        // set the dynamic class loader as the application class loader
+        final DynamicClassLoaderManager dclm = this.dynamicClassLoaderManager;
+        if ( dclm != null ) {
+            
contextFactory.initApplicationClassLoader(dynamicClassLoaderManager.getDynamicClassLoader());
+        }
     }
 
     protected void deactivate(ComponentContext context) {
 
         // remove the root scope
         dropRootScope();
-        
+
         // remove our context factory
         SlingContextFactory.teardown();
-        
+
         // remove references
         wrapFactory = null;
         hostObjectProvider.clear();
@@ -226,24 +235,24 @@
                     ScriptableObject.defineClass(scope, clazz);
 
                     if (SlingWrapper.class.isAssignableFrom(clazz)) {
-                        
+
                         // SlingWrappers can map to several classes if needed
                         final SlingWrapper hostWrapper = (SlingWrapper) 
clazz.newInstance();;
                         for (Class<?> c : hostWrapper.getWrappedClasses()) {
                             getWrapFactory().registerWrapper(c,
                                 hostWrapper.getClassName());
                         }
-                        
+
                     } else {
-                        
+
                         // but other Scriptable host objects need to be
                         // registered as well
                         final Scriptable host = clazz.newInstance();
                         getWrapFactory().registerWrapper(
                             host.getClass(), host.getClassName());
-                        
+
                     }
-                    
+
                 } catch (Throwable t) {
                     log.warn("addHostObjects: Cannot prepare host object "
                         + clazz, t);


Reply via email to