You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2004/11/17 19:09:45 UTC
svn commit: rev 76154 - cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor
Author: vgritsenko
Date: Wed Nov 17 10:09:44 2004
New Revision: 76154
Modified:
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
Log:
What's this.wrappingProcessor.parent.concreteProcessor.sitemapExecutor anyway?
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java Wed Nov 17 10:09:44 2004
@@ -15,15 +15,10 @@
*/
package org.apache.cocoon.components.treeprocessor;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.avalon.framework.CascadingRuntimeException;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
+
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.Processor;
import org.apache.cocoon.components.source.impl.SitemapSourceInfo;
@@ -35,7 +30,9 @@
import org.apache.cocoon.environment.internal.ForwardEnvironmentWrapper;
import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
import org.apache.cocoon.sitemap.SitemapExecutor;
-import org.apache.cocoon.sitemap.impl.DefaultExecutor;
+
+import java.io.IOException;
+import java.util.List;
/**
* The concrete implementation of {@link Processor}, containing the evaluation tree and associated
@@ -65,61 +62,20 @@
/** The sitemap executor */
private SitemapExecutor sitemapExecutor;
- /** Release the executor */
- private boolean releaseSitemapExecutor;
-
/**
* Builds a concrete processig, given the wrapping processor
*/
- public ConcreteTreeProcessor(TreeProcessor wrappingProcessor) {
+ public ConcreteTreeProcessor(TreeProcessor wrappingProcessor,
+ SitemapExecutor sitemapExecutor,
+ ProcessorComponentInfo componentInfo) {
// Store our wrapping processor
this.wrappingProcessor = wrappingProcessor;
// Initialize component info
- if (this.wrappingProcessor.parent == null) {
- // top-level processor
- this.componentInfo = new ProcessorComponentInfo(null);
- } else {
- // chain to the parent processor
- this.componentInfo = new ProcessorComponentInfo(
- this.wrappingProcessor.parent.concreteProcessor.getComponentInfo());
- }
-
- // get the sitemap executor - we use the same executor for each sitemap
- this.releaseSitemapExecutor = false;
- if (this.wrappingProcessor.parent == null) {
- final ServiceManager manager = this.wrappingProcessor.parentServiceManager;
-
- // FIXME(SW): do we really need to check hasService()? If a default class is defined
- // in cocoon.roles, the lookup is always successful.
- if (manager.hasService(SitemapExecutor.ROLE)) {
- try {
- this.sitemapExecutor = (SitemapExecutor) manager.lookup(SitemapExecutor.ROLE);
- this.releaseSitemapExecutor = true;
- } catch (ServiceException e) {
- // this should not happen as we called hasComponent first
- // but we ignore it
- getLogger().error("Unable to lookup sitemap executor.", e);
- }
- }
+ this.componentInfo = new ProcessorComponentInfo(componentInfo);
- if (this.sitemapExecutor == null) {
- try {
- // FIXME: VG: Why not new DefaultExecutor() which will use getClass().getClassLoader() anyway
- this.sitemapExecutor = (SitemapExecutor) getClass().getClassLoader()
- .loadClass(DefaultExecutor.class.getName())
- .newInstance();
- } catch (InstantiationException e) {
- throw new CascadingRuntimeException("Unable to create default sitemap executor.", e);
- } catch (IllegalAccessException e) {
- throw new CascadingRuntimeException("Unable to create default sitemap executor.", e);
- } catch (ClassNotFoundException e) {
- throw new CascadingRuntimeException("Unable to create default sitemap executor.", e);
- }
- }
- } else {
- this.sitemapExecutor = this.wrappingProcessor.parent.concreteProcessor.sitemapExecutor;
- }
+ // Get the sitemap executor - we use the same executor for each sitemap
+ this.sitemapExecutor = sitemapExecutor;
}
/** Set the processor data, result of the treebuilder job */
@@ -339,10 +295,7 @@
// Ensure it won't be used anymore
this.rootNode = null;
- if (this.releaseSitemapExecutor) {
- this.componentInfo.getServiceManager().release(this.sitemapExecutor);
- this.sitemapExecutor = null;
- }
+ this.sitemapExecutor = null;
}
private class TreeProcessorRedirector extends ForwardRedirector {
Modified: cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Wed Nov 17 10:09:44 2004
@@ -31,12 +31,16 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.thread.ThreadSafe;
+
import org.apache.cocoon.Processor;
import org.apache.cocoon.components.ContextHelper;
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.internal.EnvironmentHelper;
+import org.apache.cocoon.sitemap.SitemapExecutor;
+import org.apache.cocoon.sitemap.impl.DefaultExecutor;
+
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
import org.apache.regexp.RE;
@@ -85,8 +89,14 @@
/** The environment helper */
private EnvironmentHelper environmentHelper;
- /** The actual processor (package-private as needs to be accessed by ConcreteTreeProcessor) */
- ConcreteTreeProcessor concreteProcessor;
+ /** The actual sitemap executor */
+ private SitemapExecutor sitemapExecutor;
+
+ /** Indicates whether this is our component or not */
+ private boolean releaseSitemapExecutor;
+
+ /** The actual processor */
+ protected ConcreteTreeProcessor concreteProcessor;
/** The tree builder configuration */
private Configuration treeBuilderConfiguration;
@@ -125,6 +135,7 @@
ContainerUtil.enableLogging(this.environmentHelper, this.getLogger());
ContainerUtil.service(this.environmentHelper, this.parentServiceManager);
this.environmentHelper.changeContext(sitemapSource, prefix);
+ this.sitemapExecutor = parent.sitemapExecutor;
}
/**
@@ -163,7 +174,19 @@
(String) this.context.get(ContextHelper.CONTEXT_ROOT_URL));
}
ContainerUtil.enableLogging(this.environmentHelper, getLogger());
- ContainerUtil.service(this.environmentHelper, parentServiceManager);
+ ContainerUtil.service(this.environmentHelper, this.parentServiceManager);
+
+ // Create sitemap executor
+ if (this.parent == null) {
+ try {
+ this.sitemapExecutor = (SitemapExecutor) this.parentServiceManager.lookup(SitemapExecutor.ROLE);
+ this.releaseSitemapExecutor = true;
+ } catch (ServiceException e) {
+ this.sitemapExecutor = new DefaultExecutor();
+ }
+ } else {
+ this.sitemapExecutor = this.parent.sitemapExecutor;
+ }
}
/**
@@ -293,7 +316,6 @@
* @throws ConfigurationException if a suitable role could not be found
*/
private TreeBuilder getTreeBuilder(Configuration sitemapProgram) throws ConfigurationException {
-
String ns = sitemapProgram.getNamespace();
RE re = new RE("http://apache.org/cocoon/sitemap/(\\d\\.\\d)");
@@ -365,8 +387,7 @@
Configuration sitemapProgram = handler.getConfiguration();
newLastModified = this.source.getLastModified();
- newProcessor = new ConcreteTreeProcessor(this);
- setupLogger(newProcessor);
+ newProcessor = createConcreteTreeProcessor();
// Get the treebuilder that can handle this version of the sitemap.
TreeBuilder treeBuilder = getTreeBuilder(sitemapProgram);
@@ -399,6 +420,16 @@
}
}
+ private ConcreteTreeProcessor createConcreteTreeProcessor() {
+ ProcessorComponentInfo componentInfo = this.parent == null?
+ null : this.parent.concreteProcessor.getComponentInfo();
+ ConcreteTreeProcessor processor = new ConcreteTreeProcessor(this,
+ this.sitemapExecutor,
+ componentInfo);
+ setupLogger(processor);
+ return processor;
+ }
+
/* (non-Javadoc)
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
@@ -407,6 +438,11 @@
// are none when a TreeProcessor is disposed.
ContainerUtil.dispose(this.concreteProcessor);
this.concreteProcessor = null;
+
+ if (this.releaseSitemapExecutor) {
+ this.parentServiceManager.release(this.sitemapExecutor);
+ this.sitemapExecutor = null;
+ }
if (this.parentServiceManager != null) {
if (this.source != null) {