You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2004/01/09 09:36:37 UTC
cvs commit: cocoon-2.2/src/java/org/apache/cocoon ProcessorWrapper.java Cocoon.java Processor.java
cziegeler 2004/01/09 00:36:37
Modified: src/java/org/apache/cocoon/components/source/impl
SitemapSource.java
src/java/org/apache/cocoon/components/container
RequestLifecycleHelper.java
src/java/org/apache/cocoon/environment
EnvironmentContext.java EnvironmentHelper.java
src/java/org/apache/cocoon/components/cprocessor
InvokeContext.java TreeProcessor.java
src/java/org/apache/cocoon ProcessorWrapper.java Cocoon.java
Processor.java
Removed: src/java/org/apache/cocoon/components/container
CocoonComponentManager.java
Log:
Cleanup releasing of processor pipelines
Revision Changes Path
1.22 +2 -2 cocoon-2.2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
Index: SitemapSource.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- SitemapSource.java 8 Jan 2004 11:13:07 -0000 1.21
+++ SitemapSource.java 9 Jan 2004 08:36:37 -0000 1.22
@@ -410,7 +410,7 @@
*/
private void reset() {
if (this.processingPipeline != null) {
- this.processor.releasePipeline(this.processingPipeline);
+ this.processor.releasePipeline(null, this.processingPipeline);
this.processingPipeline = null;
}
if (this.processKey != null) {
1.2 +0 -93 cocoon-2.2/src/java/org/apache/cocoon/components/container/RequestLifecycleHelper.java
Index: RequestLifecycleHelper.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/container/RequestLifecycleHelper.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RequestLifecycleHelper.java 7 Jan 2004 15:57:30 -0000 1.1
+++ RequestLifecycleHelper.java 9 Jan 2004 08:36:37 -0000 1.2
@@ -50,17 +50,12 @@
*/
package org.apache.cocoon.components.container;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import org.apache.avalon.fortress.impl.handler.ComponentHandler;
import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.ServiceSelector;
-import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.GlobalRequestLifecycleComponent;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.EnvironmentContext;
@@ -89,48 +84,12 @@
return desc;
}
- /**
- * Add an automatically released component
- */
- static void addComponentForAutomaticRelease(final ServiceManager manager,
- final Object component)
- throws ProcessingException {
- EnvironmentDescription desc = getEnvironmentDescription();
- if (null != desc) {
- desc.addToAutoRelease(manager, component);
- }
- }
-
- /**
- * Add an automatically released component
- */
- static void addComponentForAutomaticRelease(final ServiceSelector selector,
- final Object component,
- final ServiceManager manager)
- throws ProcessingException {
- EnvironmentDescription desc = getEnvironmentDescription();
- if (null != desc) {
- desc.addToAutoRelease(manager, component);
- }
- }
-
- /**
- * Remove from automatically released components
- */
- public static void removeFromAutomaticRelease(final Object component)
- throws ProcessingException {
- EnvironmentDescription desc = getEnvironmentDescription();
- if (null != desc) {
- desc.removeFromAutoRelease(component);
- }
- }
}
final class EnvironmentDescription implements Disposable {
Environment environment;
Map objectModel;
Map requestLifecycleComponents;
- List autoreleaseComponents = new ArrayList(4);
/**
* Constructor
@@ -169,13 +128,6 @@
this.requestLifecycleComponents.clear();
}
- for (int i = 0; i < autoreleaseComponents.size(); i++) {
- final Object[] o = (Object[]) autoreleaseComponents.get(i);
- final Object component = o[0];
- final ComponentHandler handler = (ComponentHandler) o[1];
- handler.put(component);
- }
- this.autoreleaseComponents.clear();
this.environment = null;
this.objectModel = null;
}
@@ -248,49 +200,4 @@
return null;
}
- /**
- * Add an automatically released component
- */
- void addToAutoRelease(final ServiceSelector selector,
- final Object component,
- final ServiceManager manager) {
- this.autoreleaseComponents.add(new Object[] {component, selector, manager});
- }
-
- /**
- * Add an automatically released component
- */
- void addToAutoRelease(final ServiceManager manager,
- final Object component) {
- this.autoreleaseComponents.add(new Object[] { component, manager });
- }
-
- /**
- * Remove from automatically released components
- */
- void removeFromAutoRelease(final Object component)
- throws ProcessingException {
- int i = 0;
- boolean found = false;
- while (i < this.autoreleaseComponents.size() && !found) {
- final Object[] o = (Object[]) this.autoreleaseComponents.get(i);
- if (o[0] == component) {
- found = true;
- if (o[1] instanceof ServiceManager) {
- ((ServiceManager)o[1]).release( component );
- } else {
- ((ServiceSelector)o[1]).release( component );
- if (o[2] != null) {
- ((ServiceManager)o[2]).release( o[1] );
- }
- }
- this.autoreleaseComponents.remove(i);
- } else {
- i++;
- }
- }
- if (!found) {
- throw new ProcessingException("Unable to remove component from automatic release: component not found.");
- }
- }
}
1.4 +9 -1 cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentContext.java
Index: EnvironmentContext.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentContext.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- EnvironmentContext.java 5 Jan 2004 13:28:01 -0000 1.3
+++ EnvironmentContext.java 9 Jan 2004 08:36:37 -0000 1.4
@@ -123,6 +123,14 @@
return this.attributes.get(key);
}
+ /**
+ * Remove the object associated with the key
+ * @param key The unique key
+ */
+ public void removeAttribute(String key) {
+ this.attributes.remove(key);
+ }
+
/* (non-Javadoc)
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
1.18 +9 -1 cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentHelper.java
Index: EnvironmentHelper.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentHelper.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- EnvironmentHelper.java 5 Jan 2004 13:28:01 -0000 1.17
+++ EnvironmentHelper.java 9 Jan 2004 08:36:37 -0000 1.18
@@ -453,6 +453,14 @@
}
/**
+ * Return the environment context
+ */
+ public static EnvironmentContext getEnvironmentContext(Environment environment) {
+ final Map objectModel = environment.getObjectModel();
+ return (EnvironmentContext)objectModel.get(PROCESS_KEY);
+ }
+
+ /**
* This hook has to be called before a request is processed.
* The hook is called by the Cocoon component and by the
* cocoon protocol implementation.
1.4 +7 -8 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/InvokeContext.java
Index: InvokeContext.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/InvokeContext.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- InvokeContext.java 8 Jan 2004 11:13:07 -0000 1.3
+++ InvokeContext.java 9 Jan 2004 08:36:37 -0000 1.4
@@ -62,8 +62,9 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.components.pipeline.ProcessingPipeline;
-import org.apache.cocoon.components.container.CocoonComponentManager;
import org.apache.cocoon.components.cprocessor.variables.VariableResolver;
+import org.apache.cocoon.environment.EnvironmentContext;
+import org.apache.cocoon.environment.EnvironmentHelper;
/**
* The invocation context of <code>ProcessingNode</code>s.
@@ -166,16 +167,15 @@
// Keep current manager for proper release
this.pipelinesManager = this.currentManager;
- this.processingPipeline = (ProcessingPipeline)
- this.pipelinesManager.lookup(ProcessingPipeline.ROLE);
+ this.processingPipeline = (ProcessingPipeline)this.pipelinesManager.lookup(ProcessingPipeline.ROLE);
this.processingPipeline.reservice( this.pipelinesManager );
this.processingPipeline.setup(
VariableResolver.buildParameters(this.processingPipelineParameters,
this, this.processingPipelineObjectModel)
);
if (this.isBuildingPipelineOnly) {
- CocoonComponentManager.addComponentForAutomaticRelease(this.pipelinesManager,
- this.processingPipeline);
+ EnvironmentContext context = EnvironmentHelper.getCurrentEnvironmentContext();
+ context.addAttribute(TreeProcessor.PIPELINE_KEY, this.pipelinesManager);
}
}
return this.processingPipeline;
@@ -235,8 +235,7 @@
/**
* Dumps all sitemap parameters to log
*/
- protected void dumpParameters()
- {
+ protected void dumpParameters() {
if (!mapStack.isEmpty()) {
StringBuffer sb = new StringBuffer();
1.12 +10 -9 cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/TreeProcessor.java
Index: TreeProcessor.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/TreeProcessor.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- TreeProcessor.java 8 Jan 2004 11:13:07 -0000 1.11
+++ TreeProcessor.java 9 Jan 2004 08:36:37 -0000 1.12
@@ -77,15 +77,14 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.Constants;
-import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.Processor;
import org.apache.cocoon.components.ChainedConfiguration;
-import org.apache.cocoon.components.container.CocoonComponentManager;
import org.apache.cocoon.components.pipeline.ProcessingPipeline;
import org.apache.cocoon.components.sax.XMLTeePipe;
import org.apache.cocoon.components.source.SourceUtil;
import org.apache.cocoon.components.source.impl.DelayedRefreshSourceWrapper;
import org.apache.cocoon.environment.Environment;
+import org.apache.cocoon.environment.EnvironmentContext;
import org.apache.cocoon.environment.EnvironmentHelper;
import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
@@ -119,6 +118,9 @@
/** The sitemap namespace */
public static final String SITEMAP_NS = "http://apache.org/cocoon/sitemap/1.0";
+ /** The key for the pipeline component */
+ public static final String PIPELINE_KEY = ProcessingPipeline.class.getName();
+
/* The xsl transformation location for turning a
* sitemap into a Fortress container configuration
*/
@@ -543,13 +545,12 @@
/* (non-Javadoc)
* @see org.apache.cocoon.Processor#releasePipeline(org.apache.cocoon.components.pipeline.ProcessingPipeline)
*/
- public void releasePipeline(ProcessingPipeline pipeline) {
- // TODO
- try {
- CocoonComponentManager.removeFromAutomaticRelease(pipeline);
- } catch (ProcessingException pe) {
- // ignore this
- getLogger().error("Unabled to release processing component.", pe);
+ public void releasePipeline(Environment environment, ProcessingPipeline pipeline) {
+ EnvironmentContext context = EnvironmentHelper.getEnvironmentContext(environment);
+ ServiceManager manager = (ServiceManager)context.getAttribute(PIPELINE_KEY);
+ if ( manager != null ) {
+ manager.release(pipeline);
+ context.removeAttribute(PIPELINE_KEY);
}
}
1.9 +3 -3 cocoon-2.2/src/java/org/apache/cocoon/ProcessorWrapper.java
Index: ProcessorWrapper.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/ProcessorWrapper.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ProcessorWrapper.java 8 Jan 2004 11:13:07 -0000 1.8
+++ ProcessorWrapper.java 9 Jan 2004 08:36:37 -0000 1.9
@@ -100,8 +100,8 @@
/* (non-Javadoc)
* @see org.apache.cocoon.Processor#releasePipeline(org.apache.cocoon.components.pipeline.ProcessingPipeline)
*/
- public void releasePipeline(ProcessingPipeline pipeline) {
- this.processor.releasePipeline(pipeline);
+ public void releasePipeline(Environment environment, ProcessingPipeline pipeline) {
+ this.processor.releasePipeline(environment, pipeline);
}
/* (non-Javadoc)
1.34 +10 -8 cocoon-2.2/src/java/org/apache/cocoon/Cocoon.java
Index: Cocoon.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/Cocoon.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- Cocoon.java 8 Jan 2004 11:13:07 -0000 1.33
+++ Cocoon.java 9 Jan 2004 08:36:37 -0000 1.34
@@ -68,7 +68,6 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
-import org.apache.cocoon.components.container.CocoonComponentManager;
import org.apache.cocoon.components.language.generator.ProgramGenerator;
import org.apache.cocoon.components.pipeline.ProcessingPipeline;
import org.apache.cocoon.components.source.impl.DelayedRefreshSourceWrapper;
@@ -527,13 +526,16 @@
/* (non-Javadoc)
* @see org.apache.cocoon.Processor#releasePipeline(org.apache.cocoon.components.pipeline.ProcessingPipeline)
*/
- public void releasePipeline(ProcessingPipeline pipeline) {
- // TODO
+ public void releasePipeline(Environment environment, ProcessingPipeline pipeline) {
+ Processor processor = null;
try {
- CocoonComponentManager.removeFromAutomaticRelease(pipeline);
- } catch (ProcessingException pe) {
- // ignore this
- getLogger().error("Unabled to release processing component.", pe);
+ processor = (Processor) this.serviceManager.lookup( Processor.ROLE );
+ processor.releasePipeline(environment, pipeline);
+ } catch (ServiceException ignore) {
+ // In fact this can never happen, therefore we ignore it
+ this.getLogger().error("Unable to lookup processor.", ignore);
+ } finally {
+ this.serviceManager.release(processor);
}
}
1.13 +4 -3 cocoon-2.2/src/java/org/apache/cocoon/Processor.java
Index: Processor.java
===================================================================
RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/Processor.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Processor.java 8 Jan 2004 11:13:07 -0000 1.12
+++ Processor.java 9 Jan 2004 08:36:37 -0000 1.13
@@ -84,7 +84,7 @@
* Process the given <code>Environment</code> to assemble
* a <code>ProcessingPipeline</code>.
* Don't forget to release the pipeline using
- * {@link releasePipeline(ProcessingPipeline)}.
+ * {@link releasePipeline(Environment, ProcessingPipeline)}.
* @since 2.1
*/
ProcessingPipeline buildPipeline(Environment environment)
@@ -92,8 +92,9 @@
/**
* Release the pipeline delivered by {@link buildPipeline(Environment)}
+ * @since 2.2
*/
- void releasePipeline(ProcessingPipeline pipeline);
+ void releasePipeline(Environment environment, ProcessingPipeline pipeline);
/**
* Get the sitemap component configurations