dims 01/09/04 05:13:37
Modified: src/org/apache/cocoon Cocoon.java
src/org/apache/cocoon/servlet CocoonServlet.java
webapp/WEB-INF web.xml
Added: src/org/apache/cocoon/components ParentComponentManager.java
Log:
Contribution from "Leo Sutic" <[EMAIL PROTECTED]> for adding "root
component managers"
Revision Changes Path
1.24 +22 -2 xml-cocoon2/src/org/apache/cocoon/Cocoon.java
Index: Cocoon.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Cocoon.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- Cocoon.java 2001/08/30 19:15:43 1.23
+++ Cocoon.java 2001/09/04 12:13:37 1.24
@@ -14,6 +14,8 @@
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.component.Component;
+import org.apache.avalon.framework.component.ComponentManager;
+import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.SAXConfigurationHandler;
@@ -54,7 +56,8 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a> (Apache
Software Foundation, Exoffice Technologies)
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.23 $ $Date: 2001/08/30 19:15:43 $
+ * @author <a href="mailto:[EMAIL PROTECTED]">Leo Sutic</a>
+ * @version CVS $Revision: 1.24 $ $Date: 2001/09/04 12:13:37 $
*/
public class Cocoon
extends AbstractLoggable
@@ -65,6 +68,7 @@
Modifiable,
Processor,
Contextualizable,
+ Composable,
LogKitManageable{
/** The application context */
private Context context;
@@ -99,6 +103,9 @@
/** The component manager. */
public ExcaliburComponentManager componentManager;
+ /** The parent component manager. */
+ public ComponentManager parentComponentManager;
+
/** flag for disposed or not */
private boolean disposed = false;
@@ -108,6 +115,16 @@
setSystemProperties();
}
+ /**
+ * Get the parent component manager. For purposes of
+ * avoiding extra method calls, the manager parameter may be null.
+ *
+ * @param manager the parent component manager. May be <code>null</code>
+ */
+ public void compose(ComponentManager manager) {
+ this.parentComponentManager = manager;
+ }
+
public void contextualize(Context context) throws ContextException {
if (this.context == null) {
this.context = context;
@@ -128,7 +145,10 @@
}
public void initialize() throws Exception {
- this.componentManager = new
ExcaliburComponentManager((ClassLoader)this.context.get(Constants.CONTEXT_CLASS_LOADER));
+ if(parentComponentManager != null)
+ this.componentManager = new
ExcaliburComponentManager(parentComponentManager,(ClassLoader)this.context.get(Constants.CONTEXT_CLASS_LOADER));
+ else
+ this.componentManager = new
ExcaliburComponentManager((ClassLoader)this.context.get(Constants.CONTEXT_CLASS_LOADER));
this.componentManager.setLogger(getLogger());
this.componentManager.contextualize(this.context);
1.1
xml-cocoon2/src/org/apache/cocoon/components/ParentComponentManager.java
Index: ParentComponentManager.java
===================================================================
package org.apache.cocoon.components;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.log.Logger;
/**
* A sample parent component manager.
*
* @author <a href="[EMAIL PROTECTED]">Leo Sutic</a>
*/
public class ParentComponentManager implements ComponentManager, Loggable,
Initializable {
private Logger log;
private String initParam;
public ParentComponentManager (String initParam) {
this.initParam = initParam;
}
public boolean hasComponent (String role) {
return false;
}
public void initialize() {
log.debug("Initializing parent component manager with \"" + initParam +
"\"");
}
public Component lookup(String role) throws ComponentException {
log.debug("Parent component manager looking up: " + role);
throw new ComponentException("Could not find component for role " + role);
}
public void release(Component component) {
// Do nothing.
}
public void setLogger(Logger logger) {
this.log = logger;
}
}
1.36 +52 -1 xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- CocoonServlet.java 2001/08/30 19:15:43 1.35
+++ CocoonServlet.java 2001/09/04 12:13:37 1.36
@@ -9,9 +9,12 @@
import org.apache.avalon.excalibur.logger.DefaultLogKitManager;
import org.apache.avalon.excalibur.logger.LogKitManager;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.DefaultContext;
+import org.apache.avalon.framework.logger.Loggable;
import org.apache.cocoon.Cocoon;
import org.apache.cocoon.ConnectionResetException;
import org.apache.cocoon.Constants;
@@ -48,6 +51,7 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.lang.reflect.Constructor;
import java.net.URL;
import java.util.Arrays;
import java.util.Date;
@@ -62,7 +66,8 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> Aisa
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.35 $ $Date: 2001/08/30 19:15:43 $
+ * @author <a href="mailto:[EMAIL PROTECTED]">Leo Sutic</a>
+ * @version CVS $Revision: 1.36 $ $Date: 2001/09/04 12:13:37 $
*/
public class CocoonServlet extends HttpServlet {
@@ -102,6 +107,8 @@
protected ServletContext servletContext;
protected RepositoryClassLoader classLoader;
+ private String parentComponentManagerClass;
+
protected String forceLoadParameter;
private boolean addClassDirs;
@@ -189,6 +196,11 @@
log.debug("show-time was not set - defaulting to false");
}
+ parentComponentManagerClass =
conf.getInitParameter("parent-component-manager");
+ if(parentComponentManagerClass == null) {
+ log.debug("parent-component-manager was not set - defaulting to null.");
+ }
+
this.createCocoon();
}
@@ -642,6 +654,44 @@
}
/**
+ * Instatiates the parent component manager, as specified in the
+ * parent-component-manager init parameter.
+ *
+ * If none is specified, the method returns <code>null</code>.
+ *
+ * @return the parent component manager, or <code>null</code>.
+ */
+ private synchronized ComponentManager getParentComponentManager() {
+ ComponentManager parentComponentManager = null;
+ if (parentComponentManagerClass != null) {
+ try {
+ String initParam = null;
+ int dividerPos = parentComponentManagerClass.indexOf('/');
+ if (dividerPos != -1) {
+ initParam = parentComponentManagerClass.substring (dividerPos +
1);
+ parentComponentManagerClass =
parentComponentManagerClass.substring (0, dividerPos);
+ }
+
+ Class pcm = ClassUtils.loadClass(parentComponentManagerClass);
+ Constructor pcmc = pcm.getConstructor(new Class[]{String.class});
+ parentComponentManager = (ComponentManager) pcmc.newInstance(new
Object[]{initParam});
+
+ if (parentComponentManager instanceof Loggable) {
+ ((Loggable) parentComponentManager).setLogger(log);
+ }
+ if (parentComponentManager instanceof Initializable) {
+ ((Initializable) parentComponentManager).initialize();
+ }
+ } catch (Exception e) {
+ log.error("Could not initialize parent component manager.", e);
+ }
+ }
+ return parentComponentManager;
+ }
+
+
+
+ /**
* Creates the Cocoon object and handles exception handling.
*/
private synchronized void createCocoon()
@@ -670,6 +720,7 @@
c.setLogger(log);
}
c.contextualize(this.appContext);
+ c.compose(getParentComponentManager ());
c.setLogKitManager(this.logKitManager);
c.initialize();
this.creationTime = new Date().getTime();
1.12 +14 -0 xml-cocoon2/webapp/WEB-INF/web.xml
Index: web.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/webapp/WEB-INF/web.xml,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- web.xml 2001/08/30 19:15:44 1.11
+++ web.xml 2001/09/04 12:13:37 1.12
@@ -169,6 +169,20 @@
-->
<!--
+ This parameter allows you to select the parent component manager.
+ The class will be instantiated via the constructor that takes a single
+ String as a parameter. That String will be equal to the text after the
+ '/'.
+
+ Cocoon honors the Loggable and Initializable interfaces for this class,
+ if it implements them.
+ -->
+ <init-param>
+ <param-name>parent-component-manager</param-name>
+
<param-value>org.apache.cocoon.components.ParentComponentManager/InitParameter</param-value>
+ </init-param>
+
+ <!--
This parameter allows you to startup Cocoon2 immediately after startup
of your servlet engine.
-->
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]