cziegeler 2003/01/13 06:44:34 Modified: src/java/org/apache/cocoon/components/pipeline/impl AbstractCachingProcessingPipeline.java Removed: src/java/org/apache/cocoon/components/pipeline/impl SourceDeferredValidity.java Log: Next step for caching Revision Changes Path 1.18 +33 -2 xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java Index: AbstractCachingProcessingPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- AbstractCachingProcessingPipeline.java 13 Jan 2003 14:38:16 -0000 1.17 +++ AbstractCachingProcessingPipeline.java 13 Jan 2003 14:44:34 -0000 1.18 @@ -64,6 +64,7 @@ import org.apache.cocoon.transformation.Transformer; import org.apache.excalibur.source.SourceValidity; import org.apache.excalibur.source.impl.validity.DeferredAggregatedValidity; +import org.apache.excalibur.source.impl.validity.DeferredValidity; import java.io.ByteArrayOutputStream; import java.io.OutputStream; @@ -133,6 +134,9 @@ /** Default setting for smart caching */ protected boolean configuredDoSmartCaching; + /** Deferred source validities (for performance) */ + protected DeferredPipelineValidity[] deferredValidities = new DeferredPipelineValidity[8]; + /** * Abstract methods defined in subclasses */ @@ -155,6 +159,10 @@ public void parameterize(Parameters params) { super.parameterize(params); this.configuredDoSmartCaching = params.getParameterAsBoolean("smart-caching", true); + // initialize array of deferred pipeline validities + for(int i=0; i<this.deferredValidities.length;i++) { + this.deferredValidities[i] = new DeferredPipelineValidity(this, i); + } } /** @@ -774,8 +782,13 @@ if (!this.completeResponseIsCached && this.firstNotCacheableTransformerIndex == super.transformers.size()) { DeferredAggregatedValidity validity = new DeferredAggregatedValidity(); + final int maxObjectCache = this.deferredValidities.length; for(int i=0; i < this.toCacheKey.size(); i++) { - validity.add(new SourceDeferredValidity(this, i)); + if (i < maxObjectCache) { + validity.add(this.deferredValidities[i]); + } else { + validity.add(new DeferredPipelineValidity(this, i)); + } } return validity; } @@ -848,5 +861,23 @@ } this.cache = null; this.manager = null; + } +} + +final class DeferredPipelineValidity implements DeferredValidity { + + private final AbstractCachingProcessingPipeline pipeline; + private final int index; + + public DeferredPipelineValidity(AbstractCachingProcessingPipeline pipeline, int index) { + this.pipeline = pipeline; + this.index = index; + } + + /** + * @see org.apache.excalibur.source.impl.validity.DeferredValidity#getValidity() + */ + public SourceValidity getValidity() { + return pipeline.getValidityForInternalPipeline(this.index); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]