You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2009/07/16 09:18:18 UTC

svn commit: r794562 - in /sling/trunk/contrib/scripting/java: pom.xml src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java src/main/java/org/apache/sling/scripting/java/SlingIOProvider.java

Author: cziegeler
Date: Thu Jul 16 07:18:17 2009
New Revision: 794562

URL: http://svn.apache.org/viewvc?rev=794562&view=rev
Log:
SLING-1050 : Use dynamic class loader instead of dynamic import package.

Modified:
    sling/trunk/contrib/scripting/java/pom.xml
    sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
    sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/SlingIOProvider.java

Modified: sling/trunk/contrib/scripting/java/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/pom.xml?rev=794562&r1=794561&r2=794562&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/pom.xml (original)
+++ sling/trunk/contrib/scripting/java/pom.xml Thu Jul 16 07:18:17 2009
@@ -60,7 +60,6 @@
                             org.apache.sling.scripting.java.jdt,
                             org.eclipse.jdt.*
                         </Private-Package>
-                        <DynamicImport-Package>*</DynamicImport-Package>
 
                         <ScriptEngine-Name>${pom.name}</ScriptEngine-Name>
                         <ScriptEngine-Version>${pom.version}</ScriptEngine-Version>
@@ -106,8 +105,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.jcr.classloader</artifactId>
-            <version>2.0.2-incubator</version>
+            <artifactId>org.apache.sling.commons.classloader</artifactId>
+            <version>0.9.0-SNAPSHOT</version>
         </dependency>
 
      <!-- We use the same eclipse jdt as the jsp bundle -->

Modified: sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java?rev=794562&r1=794561&r2=794562&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java (original)
+++ sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java Thu Jul 16 07:18:17 2009
@@ -20,7 +20,6 @@
 
 import java.io.Reader;
 
-import javax.jcr.RepositoryException;
 import javax.script.Bindings;
 import javax.script.ScriptContext;
 import javax.script.ScriptEngine;
@@ -34,8 +33,7 @@
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScript;
 import org.apache.sling.api.scripting.SlingScriptHelper;
-import org.apache.sling.jcr.api.SlingRepository;
-import org.apache.sling.jcr.classloader.RepositoryClassLoaderProvider;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
 import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
 import org.osgi.service.component.ComponentContext;
@@ -60,18 +58,13 @@
  */
 public class JavaScriptEngineFactory extends AbstractScriptEngineFactory {
 
-    private static final String CLASSLOADER_NAME = "admin";
-
     /** default logger */
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    /** @scr.reference */
-    private SlingRepository repository;
-
     /**
      * @scr.reference
      */
-    private RepositoryClassLoaderProvider repoCLProvider;
+    private DynamicClassLoaderManager dynamicClassLoaderManager;
 
     /**
      * The class loader
@@ -127,7 +120,7 @@
      * @param componentContext
      */
     protected void activate(ComponentContext componentContext) {
-        this.ioProvider = new SlingIOProvider(repository);
+        this.ioProvider = new SlingIOProvider();
         this.servletCache = new ServletCache();
 
         this.javaServletContext = new JavaServletContext(ioProvider,
@@ -166,7 +159,7 @@
      */
     private void callServlet(Bindings bindings, SlingScriptHelper scriptHelper) {
 
-        ioProvider.setRequestResourceResolver(scriptHelper.getRequest().getResourceResolver());
+        ioProvider.setRequestResourceResolver(scriptHelper.getScript().getScriptResource().getResourceResolver());
         try {
             ServletWrapper servlet = getWrapperAdapter(scriptHelper);
             // create a SlingBindings object
@@ -206,7 +199,7 @@
      * Bind the class load provider.
      * @param repositoryClassLoaderProvider the new provider
      */
-    protected void bindRepositoryClassLoaderProvider(RepositoryClassLoaderProvider rclp) {
+    protected void bindDynamicClassLoaderManager(DynamicClassLoaderManager rclp) {
         if ( this.javaClassLoader != null ) {
             this.ungetClassLoader();
         }
@@ -217,8 +210,8 @@
      * Unbind the class loader provider.
      * @param repositoryClassLoaderProvider the old provider
      */
-    protected void unbindRepositoryClassLoaderProvider(RepositoryClassLoaderProvider rclp) {
-        if ( this.repoCLProvider == rclp ) {
+    protected void unbindDynamicClassLoaderManager(DynamicClassLoaderManager rclp) {
+        if ( this.dynamicClassLoaderManager == rclp ) {
             this.ungetClassLoader();
         }
     }
@@ -226,26 +219,17 @@
     /**
      * Get the class loader
      */
-    private void getClassLoader(RepositoryClassLoaderProvider rclp) {
-        try {
-            this.repoCLProvider = rclp;
-            this.javaClassLoader = rclp.getClassLoader(CLASSLOADER_NAME);
-        } catch (RepositoryException re) {
-            log.error("Cannot get Java class loader", re);
-        }
+    private void getClassLoader(DynamicClassLoaderManager rclp) {
+        this.dynamicClassLoaderManager = rclp;
+        this.javaClassLoader = rclp.getDynamicClassLoader();
     }
 
     /**
      * Unget the class loader
      */
     private void ungetClassLoader() {
-        if ( this.repoCLProvider != null ) {
-            if ( this.javaClassLoader != null ) {
-                this.repoCLProvider.ungetClassLoader(this.javaClassLoader);
-                this.javaClassLoader = null;
-            }
-            this.repoCLProvider = null;
-        }
+        this.dynamicClassLoaderManager = null;
+        this.javaClassLoader = null;
     }
     // ---------- Internal -----------------------------------------------------
 

Modified: sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/SlingIOProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/SlingIOProvider.java?rev=794562&r1=794561&r2=794562&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/SlingIOProvider.java (original)
+++ sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/SlingIOProvider.java Thu Jul 16 07:18:17 2009
@@ -38,7 +38,6 @@
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.jcr.api.SlingRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,17 +49,10 @@
     /** default log */
     private static final Logger log = LoggerFactory.getLogger(SlingIOProvider.class);
 
-    private final SlingRepository repository;
-
     private ThreadLocal<ResourceResolver> requestResourceResolver;
 
-    // private session for write access
-    private ThreadLocal<Session> privateSession;
-
-    SlingIOProvider(SlingRepository repository) {
-        this.repository = repository;
+    SlingIOProvider() {
         this.requestResourceResolver = new ThreadLocal<ResourceResolver>();
-        this.privateSession = new ThreadLocal<Session>();
     }
 
     void setRequestResourceResolver(ResourceResolver resolver) {
@@ -69,15 +61,6 @@
 
     void resetRequestResourceResolver() {
         requestResourceResolver.remove();
-
-        // at the same time logout this thread's session
-        Session session = privateSession.get();
-        if (session != null) {
-            if (session.isLive()) {
-                session.logout();
-            }
-            privateSession.remove();
-        }
     }
 
     // ---------- IOProvider interface -----------------------------------------
@@ -210,13 +193,7 @@
     // ---------- internal -----------------------------------------------------
 
     private Session getPrivateSession() throws RepositoryException {
-        Session session = privateSession.get();
-        if (session == null) {
-            session = repository.loginAdministrative(null);
-            privateSession.set(session);
-        }
-
-        return session;
+        return requestResourceResolver.get().adaptTo(Session.class);
     }
 
     private static void checkNode(Node node, String path) {