cziegeler 02/05/06 07:17:54
Modified: src/java/org/apache/cocoon/caching
CacheValidityToSourceValidity.java
src/java/org/apache/cocoon/components/pipeline
AbstractProcessingPipeline.java
src/java/org/apache/cocoon/components/pipeline/impl
CachingProcessingPipeline.java
Log:
Minor update of the new caching pipeline
Revision Changes Path
1.2 +2 -1
xml-cocoon2/src/java/org/apache/cocoon/caching/CacheValidityToSourceValidity.java
Index: CacheValidityToSourceValidity.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/caching/CacheValidityToSourceValidity.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CacheValidityToSourceValidity.java 6 May 2002 13:22:31 -0000 1.1
+++ CacheValidityToSourceValidity.java 6 May 2002 14:17:53 -0000 1.2
@@ -56,8 +56,9 @@
* A CacheValidity object wrapping the Avalon Excalibur
* <code>SourceValidity</code> object.
*
+ * @since @next-version@
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: CacheValidityToSourceValidity.java,v 1.1 2002/05/06 13:22:31
cziegeler Exp $
+ * @version CVS $Id: CacheValidityToSourceValidity.java,v 1.2 2002/05/06 14:17:53
cziegeler Exp $
*/
public final class CacheValidityToSourceValidity
implements SourceValidity {
1.7 +2 -2
xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java
Index: AbstractProcessingPipeline.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AbstractProcessingPipeline.java 3 May 2002 14:47:33 -0000 1.6
+++ AbstractProcessingPipeline.java 6 May 2002 14:17:54 -0000 1.7
@@ -79,8 +79,9 @@
/**
* This is the base for all implementations of a <code>ProcessingPipeline</code>.
*
+ * @since @next-version@
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: AbstractProcessingPipeline.java,v 1.6 2002/05/03 14:47:33
cziegeler Exp $
+ * @version CVS $Id: AbstractProcessingPipeline.java,v 1.7 2002/05/06 14:17:54
cziegeler Exp $
*/
public abstract class AbstractProcessingPipeline
extends AbstractLogEnabled
@@ -343,7 +344,6 @@
// No mimeType available
String message = "Unable to determine MIME type for " +
environment.getURIPrefix() + "/" + environment.getURI();
- getLogger().error(message);
throw new ProcessingException(message);
}
} catch (SAXException e) {
1.6 +80 -16
xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingProcessingPipeline.java
Index: CachingProcessingPipeline.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingProcessingPipeline.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- CachingProcessingPipeline.java 6 May 2002 13:22:31 -0000 1.5
+++ CachingProcessingPipeline.java 6 May 2002 14:17:54 -0000 1.6
@@ -61,6 +61,7 @@
import org.apache.cocoon.caching.Cacheable;
import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.caching.CachedResponse;
+import org.apache.cocoon.caching.CacheValidity;
import org.apache.cocoon.caching.CacheValidityToSourceValidity;
import org.apache.cocoon.caching.CachingOutputStream;
import org.apache.cocoon.components.pipeline.AbstractProcessingPipeline;
@@ -86,9 +87,9 @@
/**
* The CachingProcessingPipeline
*
- *
+ * @since @next-version@
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: CachingProcessingPipeline.java,v 1.5 2002/05/06 13:22:31
cziegeler Exp $
+ * @version CVS $Id: CachingProcessingPipeline.java,v 1.6 2002/05/06 14:17:54
cziegeler Exp $
*/
public class CachingProcessingPipeline
extends AbstractProcessingPipeline
@@ -284,13 +285,13 @@
.append(key);
// now testing transformers
- Transformer trans;
final int transformerSize = this.transformers.size();
- boolean testTrans = true;
+ boolean continueTest = true;
while (this.firstNotCacheableTransformerIndex < transformerSize
- && testTrans) {
- trans =
(Transformer)this.transformers.get(this.firstNotCacheableTransformerIndex);
+ && continueTest) {
+ final Transformer trans =
+
(Transformer)this.transformers.get(this.firstNotCacheableTransformerIndex);
key = 0;
if (trans instanceof CacheableProcessingComponent) {
key = ((CacheableProcessingComponent)trans).generateKey();
@@ -304,10 +305,10 @@
.append(key);
this.firstNotCacheableTransformerIndex++;
} else {
- testTrans = false;
+ continueTest = false;
}
}
- // all transformers are cacheable => pipeline is cacheable
+ // all transformers are cacheable => pipeline is cacheable, test
serializer
if (this.firstNotCacheableTransformerIndex == transformerSize
&& this.serializer == this.lastConsumer) {
@@ -325,6 +326,61 @@
}
}
}
+
+ // now, if we have a key, let's see if there is a cached response
+ if (this.pipelineCacheKey != null) {
+ CachedResponse response =
this.cache.get(this.pipelineCacheKey.toString());
+ // now test validity
+ if (response != null) {
+ boolean isValid = true;
+ SourceValidity[] validities = response.getValidityObjects();
+ int i = 0;
+ while (i < validities.length && isValid) {
+ isValid = validities[i].isValid();
+ if ( !isValid ) {
+ final SourceValidity validity;
+ if (i == 0) {
+ // test generator
+ if (this.generator instanceof Cacheable) {
+ validity = new
CacheValidityToSourceValidity(((Cacheable)this.generator).generateValidity());
+ } else {
+ validity =
((CacheableProcessingComponent)this.generator).generateValidity();
+ }
+ } else if (i >= firstNotCacheableTransformerIndex + 1) {
+ // test transformer
+ // FIXME
+ validity = null;
+ } else {
+ // test serializer
+ // FIXME
+ validity = null;
+ }
+ if (validity != null) {
+ isValid = validities[i].isValid( validity );
+ }
+ if ( !isValid ) {
+ // update validity
+ validities[i] = validity;
+ }
+ }
+ if ( isValid ) i++;
+ }
+ // FIXME
+ if ( isValid ) {
+ // we are valid, ok that's it
+ } else {
+ // we are not valid!
+ if (validities[i] == null) {
+ // we can try a shorter key now...
+ // but we don't invalidate the current entry!
+ } else {
+ // invalidate entry
+ this.cache.remove(this.pipelineCacheKey.toString());
+ // let's get the rest of the validities now
+ }
+ }
+ }
+ }
}
/** Connect the pipeline.
@@ -450,11 +506,14 @@
if (isCacheableProcessingComponent) {
readerValidity =
((CacheableProcessingComponent)this.reader).generateValidity();
} else {
- readerValidity = new CacheValidityToSourceValidity(
- ((Cacheable)this.reader).generateValidity()
- );
+ CacheValidity cv =
((Cacheable)this.reader).generateValidity();
+ if ( cv != null ) {
+ readerValidity = new CacheValidityToSourceValidity(
cv );
+ }
+ }
+ if (readerValidity != null) {
+ valid = cachedValidity.isValid(readerValidity);
}
- valid = cachedValidity.isValid(readerValidity);
}
if (valid) {
@@ -487,12 +546,17 @@
if (isCacheableProcessingComponent) {
readerValidity =
((CacheableProcessingComponent)this.reader).generateValidity();
} else {
- readerValidity = new CacheValidityToSourceValidity(
- ((Cacheable)this.reader).generateValidity()
- );
+ CacheValidity cv =
((Cacheable)this.reader).generateValidity();
+ if ( cv != null ) {
+ readerValidity = new CacheValidityToSourceValidity(
cv );
+ }
}
}
- outputStream = new CachingOutputStream(outputStream);
+ if (readerValidity != null) {
+ outputStream = new CachingOutputStream(outputStream);
+ } else {
+ pcKey = null;
+ }
}
super.processReader( environment, outputStream );
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]