sylvain     01/08/13 04:50:48

  Modified:    src/org/apache/cocoon/acting ServerPagesAction.java
  Log:
  Use internal ComponentHandler for pooling
  
  Revision  Changes    Path
  1.2       +64 -26    xml-cocoon2/src/org/apache/cocoon/acting/ServerPagesAction.java
  
  Index: ServerPagesAction.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/acting/ServerPagesAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ServerPagesAction.java    2001/08/09 10:51:32     1.1
  +++ ServerPagesAction.java    2001/08/13 11:50:48     1.2
  @@ -10,7 +10,12 @@
   import java.util.HashMap;
   import java.util.Map;
   
  +import org.apache.avalon.framework.activity.Disposable;
  +import org.apache.avalon.framework.activity.Initializable;
  +import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.parameters.Parameters;
  +import org.apache.avalon.excalibur.component.ComponentHandler;
   
   import org.apache.cocoon.Constants;
   import org.apache.cocoon.components.sax.XMLByteStreamCompiler;
  @@ -33,69 +38,99 @@
    *
    * As for generators, the XSP file name is set using the "src" attribute.<br/>
    *
  - * This action accepts a single parameter, "result-attribute", which names
  + * This action accepts a single parameter, "output-attribute", which names
    * the request attribute where the XSP-generated document will be stored
    * (as an <code>XMLFragment</code>). If this parameter is omitted, the
    * XSP result is discarded (often the case when inner fragments are captured
    * with the "capture" logicsheet").<br/>
    *
  - * When "result-attribute" is set, the action status defaults to "success",
  + * When "output-attribute" is set, the action status defaults to "success",
    * meaning child sitemap statements are executed. This allows to use an
    * existing XSP without modification with this action.<br/>
    *
  - * When "result-attribute" isn't set, the action status defaults to "failure".
  + * When "output-attribute" isn't set, the action status defaults to "failure".
    * The XSP must then use the "action" logicsheet to set its status.<br/>
    *
    * Example :
    * <pre>
    *   &lt;action type="xsp-action" src="myAction.xsp"&gt;
  - *     &lt;map:param name="result-attribute" value="xsp-action-result"/&gt;
  + *     &lt;map:param name="output-attribute" value="xsp-action-result"/&gt;
    *     ...
    *   &lt;/action&gt;
    * </pre>
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Sylvain Wallez</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2001/08/09 10:51:32 $
  + * @version CVS $Revision: 1.2 $ $Date: 2001/08/13 11:50:48 $
    */
  -public class ServerPagesAction extends ComposerAction {
  +public class ServerPagesAction extends ConfigurableComposerAction implements 
Disposable {
       
       public static final String REDIRECTOR_OBJECT = "xsp-action:redirector";
       public static final String ACTION_RESULT_OBJECT = "xsp-action:result";
       public static final String ACTION_SUCCESS_OBJECT = "xsp-action:success";
       
  +    ComponentHandler generatorHandler;
  +    
  +    public void configure(Configuration conf)
  +      throws ConfigurationException {
  +        try {
  +            this.generatorHandler = ComponentHandler.getComponentHandler(
  +                ServerPagesGenerator.class,
  +                conf,
  +                this.manager,
  +                null, // Context
  +                null  // RoleManager
  +            );
  +        
  +            this.generatorHandler.setLogger(getLogger());
  +            this.generatorHandler.initialize();
  +            
  +        } catch(Exception e) {
  +            throw new ConfigurationException("Cannot set up component handler", e);
  +        }
  +    }
  +    
  +    public void dispose() {
  +        if (this.generatorHandler != null) {
  +            this.generatorHandler.dispose();
  +            this.generatorHandler = null;
  +        }
  +    }
  +    
       public Map act(Redirector redirector, SourceResolver resolver, Map objectModel,
           String source, Parameters parameters)
         throws Exception {
           
           getLogger().debug("serverpage source: " + source);
           
  -        String outputKey = parameters.getParameter("result-attribute", null);
  +        String outputKey = parameters.getParameter("output-attribute", null);
           Map resultMap = new HashMap();
           Object success = null;
   
  -        // Create a new ServerPagesGenerator
  -        // FIXME : generator should be pooled for better performances
  -        ServerPagesGenerator generator = new ServerPagesGenerator();
  -        generator.setLogger(getLogger());
  -        generator.compose(this.manager);        
  -        generator.setup(resolver, objectModel, source, parameters);
  +        // Get a ServerPagesGenerator
  +        ServerPagesGenerator generator = 
(ServerPagesGenerator)this.generatorHandler.get();
           
  -        // Setup generator output
  +        // Generator ouptut, if output-attribute was given
           XMLByteStreamCompiler compiler = null;
  -        if (outputKey == null) {
  -            // discard output to a "black hole"
  -            generator.setConsumer(new AbstractXMLConsumer() { } ); // Make the 
abstract class instanciable
  -        } else {
  -            // store output in a byte stream
  -            compiler = new XMLByteStreamCompiler();
  -            generator.setConsumer(compiler);
  -        }
           
  -        // Augment the object model for the "action" logicsheet
  -        objectModel.put(REDIRECTOR_OBJECT, redirector);
  -        objectModel.put(ACTION_RESULT_OBJECT, resultMap);
  -        
           try {
  +            generator.setLogger(getLogger());
  +            generator.compose(this.manager);        
  +            generator.setup(resolver, objectModel, source, parameters);
  +            
  +            // Setup generator output
  +            if (outputKey == null) {
  +                // discard output to a "black hole"
  +                generator.setConsumer(new AbstractXMLConsumer() { } ); // Make the 
abstract class instanciable
  +            } else {
  +                // store output in a byte stream
  +                compiler = new XMLByteStreamCompiler();
  +                generator.setConsumer(compiler);
  +            }
  +            
  +            // Augment the object model for the "action" logicsheet
  +            objectModel.put(REDIRECTOR_OBJECT, redirector);
  +            objectModel.put(ACTION_RESULT_OBJECT, resultMap);
  +        
               // Let the XSP do it's stuff
               generator.generate();
               success = objectModel.get(ACTION_SUCCESS_OBJECT);
  @@ -105,6 +140,9 @@
               throw e;
               
           } finally {
  +            // Release generator
  +            generatorHandler.put(generator);
  +            
               // Clean up object model
               objectModel.remove(REDIRECTOR_OBJECT);
               objectModel.remove(ACTION_RESULT_OBJECT);
  
  
  

----------------------------------------------------------------------
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