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> * <action type="xsp-action" src="myAction.xsp"> - * <map:param name="result-attribute" value="xsp-action-result"/> + * <map:param name="output-attribute" value="xsp-action-result"/> * ... * </action> * </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]