cziegeler 02/05/24 01:52:33
Modified: src/java/org/apache/cocoon Main.java
src/java/org/apache/cocoon/components/pipeline/impl
CachingProcessingPipeline.java
src/java/org/apache/cocoon/generation FileGenerator.java
src/java/org/apache/cocoon/reading ResourceReader.java
Log:
Improved caching for file generator and reader
Revision Changes Path
1.19 +1 -2 xml-cocoon2/src/java/org/apache/cocoon/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/Main.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- Main.java 13 May 2002 00:13:21 -0000 1.18
+++ Main.java 24 May 2002 08:52:33 -0000 1.19
@@ -94,7 +94,7 @@
* Command line entry point.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Id: Main.java,v 1.18 2002/05/13 00:13:21 stefano Exp $
+ * @version CVS $Id: Main.java,v 1.19 2002/05/24 08:52:33 cziegeler Exp $
*/
public class Main {
@@ -220,7 +220,6 @@
* @exception Exception if an error occurs
*/
public static void main(String[] args) throws Exception {
-
String destDir = Constants.DEFAULT_DEST_DIR;
String contextDir = Constants.DEFAULT_CONTEXT_DIR;
String configFile = null;
1.9 +71 -4
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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- CachingProcessingPipeline.java 10 May 2002 08:33:29 -0000 1.8
+++ CachingProcessingPipeline.java 24 May 2002 08:52:33 -0000 1.9
@@ -89,7 +89,7 @@
*
* @since @next-version@
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: CachingProcessingPipeline.java,v 1.8 2002/05/10 08:33:29
cziegeler Exp $
+ * @version CVS $Id: CachingProcessingPipeline.java,v 1.9 2002/05/24 08:52:33
cziegeler Exp $
*/
public class CachingProcessingPipeline
extends AbstractProcessingPipeline
@@ -274,6 +274,8 @@
long key = 0;
boolean generatorIsCacheableProcessingComponent = false;
boolean serializerIsCacheableProcessingComponent = false;
+ boolean[] transformerIsCacheableProcessingComponent = new
boolean[this.transformers.size()];
+
if (this.generator instanceof CacheableProcessingComponent) {
key = ((CacheableProcessingComponent)this.generator).generateKey();
generatorIsCacheableProcessingComponent = true;
@@ -298,6 +300,7 @@
key = 0;
if (trans instanceof CacheableProcessingComponent) {
key = ((CacheableProcessingComponent)trans).generateKey();
+
transformerIsCacheableProcessingComponent[this.firstNotCacheableTransformerIndex] =
true;
} else if (trans instanceof Cacheable) {
key = ((Cacheable)trans).generateKey();
}
@@ -331,6 +334,69 @@
}
}
+ // lets make a working version first, below is the beginning
+ // of the new solution
+ if (this.pipelineCacheKey != null) {
+ CachedResponse response =
this.cache.get(this.pipelineCacheKey.toString());
+ // now test validity
+ if (response != null) {
+ boolean responseIsValid = true;
+ boolean responseIsUsable = true;
+ SourceValidity[] validities = response.getValidityObjects();
+ int i = 0;
+ while (i < validities.length) {
+ boolean isValid = validities[i].isValid();
+ if ( !isValid ) {
+ final SourceValidity validity;
+ if (i == 0) {
+ // test generator
+ if (generatorIsCacheableProcessingComponent) {
+ validity =
((CacheableProcessingComponent)this.generator).generateValidity();
+ } else {
+ validity = new
CacheValidityToSourceValidity(((Cacheable)this.generator).generateValidity());
+ }
+ } else if (i <= firstNotCacheableTransformerIndex + 1) {
+ // test transformer
+ final Transformer trans =
+ (Transformer)this.transformers.get(i-1);
+ if (transformerIsCacheableProcessingComponent[i-1]) {
+ validity =
((CacheableProcessingComponent)trans).generateValidity();
+ } else {
+ validity = new
CacheValidityToSourceValidity(((Cacheable)trans).generateValidity());
+ }
+ } else {
+ // test serializer
+ if (serializerIsCacheableProcessingComponent) {
+ validity =
((CacheableProcessingComponent)this.serializer).generateValidity();
+ } else {
+ validity = new
CacheValidityToSourceValidity(((Cacheable)this.serializer).generateValidity());
+ }
+ }
+ if (validity != null) {
+ isValid = validities[i].isValid( validity );
+ }
+ if ( !isValid ) {
+ responseIsValid = false;
+ // update validity
+ validities[i] = validity;
+ if (validity == null) responseIsUsable = false;
+ }
+ }
+ if ( isValid ) i++;
+ }
+ // FIXME
+ if ( responseIsValid ) {
+ // we are valid, ok that's it
+ } else {
+ // we are not valid!
+ this.cache.remove(this.pipelineCacheKey.toString());
+ if (!responseIsUsable) {
+ this.pipelineCacheKey = null;
+ }
+ }
+ }
+ }
+ /*
// now, if we have a key, let's see if there is a cached response
boolean finished = false;
while (this.pipelineCacheKey != null && !finished) {
@@ -356,7 +422,7 @@
// test transformer
final Transformer trans =
(Transformer)this.transformers.get(i-1);
- if (trans instanceof CacheableProcessingComponent) {
+ if (transformerIsCacheableProcessingComponent[i-1]) {
validity =
((CacheableProcessingComponent)trans).generateValidity();
} else {
validity = new
CacheValidityToSourceValidity(((Cacheable)trans).generateValidity());
@@ -385,6 +451,7 @@
} else {
// we are not valid!
if (validities[i] == null) {
+ // FIXME (CZ) : check this
// we can try a shorter key now...
// but we don't invalidate the current entry!
if (i > 0) {
@@ -403,11 +470,11 @@
} else {
// invalidate entry
this.cache.remove(this.pipelineCacheKey.toString());
- // let's get the rest of the validities now
+ // FIXME(CZ) let's get the rest of the validities now
}
}
}
- }
+ }*/
}
/** Connect the pipeline.
1.10 +2 -5
xml-cocoon2/src/java/org/apache/cocoon/generation/FileGenerator.java
Index: FileGenerator.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/generation/FileGenerator.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- FileGenerator.java 26 Apr 2002 08:41:52 -0000 1.9
+++ FileGenerator.java 24 May 2002 08:52:33 -0000 1.10
@@ -74,7 +74,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
* (Apache Software Foundation, Exoffice Technologies)
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: FileGenerator.java,v 1.9 2002/04/26 08:41:52 cziegeler Exp $
+ * @version CVS $Id: FileGenerator.java,v 1.10 2002/05/24 08:52:33 cziegeler Exp $
*/
public class FileGenerator extends ComposerGenerator
implements Cacheable {
@@ -113,10 +113,7 @@
* @return The generated key hashes the src
*/
public long generateKey() {
- if (this.inputSource.getValidity() != null) {
- return HashUtil.hash(this.inputSource.getSystemId());
- }
- return 0;
+ return HashUtil.hash(this.inputSource.getSystemId());
}
/**
1.9 +2 -5
xml-cocoon2/src/java/org/apache/cocoon/reading/ResourceReader.java
Index: ResourceReader.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/reading/ResourceReader.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ResourceReader.java 24 May 2002 08:38:13 -0000 1.8
+++ ResourceReader.java 24 May 2002 08:52:33 -0000 1.9
@@ -91,7 +91,7 @@
* </dl>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Id: ResourceReader.java,v 1.8 2002/05/24 08:38:13 froehlich Exp $
+ * @version CVS $Id: ResourceReader.java,v 1.9 2002/05/24 08:52:33 cziegeler Exp $
*/
public class ResourceReader
extends AbstractReader
@@ -132,10 +132,7 @@
* @return The generated key hashes the src
*/
public long generateKey() {
- if (this.inputSource.getValidity() != null) {
- return HashUtil.hash(this.inputSource.getSystemId());
- }
- return 0;
+ return HashUtil.hash(this.inputSource.getSystemId());
}
/**
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]