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]

Reply via email to