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]