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);
+ }
}
/**