Author: pier
Date: Wed Nov  3 16:44:17 2004
New Revision: 56540

Modified:
   
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
   
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java
   
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletWrapper.java
Log:
Do not use servlet context attributes for the kernel, but a more siple (and 
more secure) static factory method

Modified: 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
 (original)
+++ 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/KernelLoader.java
 Wed Nov  3 16:44:17 2004
@@ -16,7 +16,6 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 /**
@@ -88,15 +87,6 @@
         return(kernel); 
     }
     
-    /**
-     * <p>Add a [EMAIL PROTECTED] URL} to the class path handled by this 
[EMAIL PROTECTED] KernelLoader}
-     * instance.</p>
-     */
-    public Iterator getURLs(StartupKernel kernel) {
-        if (this.kernel != kernel) throw new SecurityException("Invalid 
instance");
-        return(this.urls.iterator());
-    }
-
     /**
      * <p>Add a [EMAIL PROTECTED] URL} to the class path handled by this 
[EMAIL PROTECTED] KernelLoader}
      * instance.</p>

Modified: 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java
        (original)
+++ 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletLoader.java
        Wed Nov  3 16:44:17 2004
@@ -21,6 +21,7 @@
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
+import javax.servlet.ServletException;
 
 import org.apache.cocoon.kernel.Kernel;
 import org.apache.cocoon.kernel.configuration.Configuration;
@@ -63,20 +64,32 @@
  */
 public class ServletLoader implements ServletContextListener {
     
-    /**
-     * <p>The [EMAIL PROTECTED] ServletContext} attribute name of the [EMAIL 
PROTECTED] Kernel} instance
-     * associated with this web application.</p>
-     */
-    public static final String ATTRIBUTE = "org.apache.cocoon.kernel.Kernel";
-
+    /** <p>The unique instance of this [EMAIL PROTECTED] ServletLoader}.</p> */
+    private static ServletLoader instance = null;
     /** <p>The current [EMAIL PROTECTED] Deployer} instance.</p> */
-    StartupKernel kernel = null;
+    private StartupKernel kernel = null;
 
     /**
      * <p>Create a new [EMAIL PROTECTED] ServletLoader} instance.</p>
      */
     public ServletLoader() {
         super();
+        if (ServletLoader.instance != null) {
+            throw new IllegalStateException("Duplicate initialization");
+        } else {
+            ServletLoader.instance = this;
+        }
+    }
+
+    /**
+     * <p>Create a new [EMAIL PROTECTED] ServletLoader} instance.</p>
+     */
+    protected static Object lookup(String name)
+    throws ServletException {
+        if (ServletLoader.instance.kernel == null) {
+            throw new ServletException("Kernel not initialized");
+        }
+        return ServletLoader.instance.kernel.lookup(name);
     }
 
     /**
@@ -149,10 +162,6 @@
             logger.error("Unable to intialize kernel", t);
             throw new RuntimeException("Unable to initialize kernel", t);
         }
-
-        /* Make the kernel available through the servlet context */
-        Wrapper wrapper = new Wrapper(this.kernel);
-        context.setAttribute(ServletLoader.ATTRIBUTE, wrapper);
     }
 
     /**
@@ -161,7 +170,6 @@
     public void contextDestroyed(ServletContextEvent event) {
         if (this.kernel == null) return;
         ServletContext context = event.getServletContext();
-        context.removeAttribute(ServletLoader.ATTRIBUTE);
         try {
             this.kernel.destroy();
         } catch (Throwable t) {

Modified: 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletWrapper.java
==============================================================================
--- 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletWrapper.java
       (original)
+++ 
cocoon/whiteboard/kernel/sources/startup/org/apache/cocoon/kernel/startup/ServletWrapper.java
       Wed Nov  3 16:44:17 2004
@@ -13,6 +13,7 @@
 package org.apache.cocoon.kernel.startup;
 
 import java.io.IOException;
+import java.util.Enumeration;
 
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
@@ -49,13 +50,20 @@
     public void init(ServletConfig config)
     throws ServletException {
         ServletContext context = config.getServletContext();
-        Kernel kernel = (Kernel) context.getAttribute(ServletLoader.ATTRIBUTE);
-        if (kernel == null) throw new ServletException("Unable to retrieve 
Kernel");
-        
-        String name = context.getInitParameter("block-instance");
+
+        String name = config.getInitParameter("block-instance");
         if (name == null) throw new ServletException("No block instance 
configured");
 
-        this.instance = (Servlet) kernel.lookup(name);
+        String err = "Unable to access servlet instance for block \"" + name + 
"\"";
+        try {
+            this.instance = (Servlet) ServletLoader.lookup(name);
+            if (this.instance == null) throw new ServletException(err);
+            this.instance.init(config);
+        } catch (ServletException e) {
+            throw e;
+        } catch (Throwable t) {
+            throw new ServletException(err, t);
+        }
     }
 
     /**

Reply via email to