You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2005/04/08 18:03:08 UTC
svn commit: r160557 - in cocoon/branches/BRANCH_2_1_X: ./
src/java/org/apache/cocoon/components/treeprocessor/
src/java/org/apache/cocoon/components/treeprocessor/sitemap/
src/java/org/apache/cocoon/environment/
Author: sylvain
Date: Fri Apr 8 09:03:06 2005
New Revision: 160557
URL: http://svn.apache.org/viewcvs?view=rev&rev=160557
Log:
fix environment context handling to allow the root sitemap to be at an arbitrary location
Modified:
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/AbstractEnvironment.java
cocoon/branches/BRANCH_2_1_X/status.xml
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java?view=diff&r1=160556&r2=160557
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java Fri Apr 8 09:03:06 2005
@@ -62,6 +62,8 @@
private Map sitemapComponentConfigurations;
private Configuration componentConfigurations;
+
+ private String uriContext;
/** Number of simultaneous uses of this processor (either by concurrent request or by internal requests) */
private int requestCount;
@@ -72,14 +74,15 @@
}
/** Set the processor data, result of the treebuilder job */
- public void setProcessorData(ComponentManager manager, ProcessingNode rootNode, List disposableNodes) {
- if (this.sitemapComponentManager != null) {
- throw new IllegalStateException("setProcessorData() can only be called once");
- }
+ public void setProcessorData(ComponentManager manager, ProcessingNode rootNode, List disposableNodes, String uriContext) {
+ if (this.sitemapComponentManager != null) {
+ throw new IllegalStateException("setProcessorData() can only be called once");
+ }
- this.sitemapComponentManager = manager;
- this.rootNode = rootNode;
- this.disposableNodes = disposableNodes;
+ this.sitemapComponentManager = manager;
+ this.rootNode = rootNode;
+ this.disposableNodes = disposableNodes;
+ this.uriContext = uriContext;
}
/** Set the sitemap component configurations (called as part of the tree building process) */
@@ -216,11 +219,13 @@
try {
// and now process
- CocoonComponentManager.enterEnvironment(environment, this.sitemapComponentManager, this);
+ CocoonComponentManager.enterEnvironment(environment, this.sitemapComponentManager, this);
+ String oldContext = environment.getContext();
+ environment.changeContext("", this.uriContext);
- Map objectModel = environment.getObjectModel();
+ Map objectModel = environment.getObjectModel();
- Object oldResolver = objectModel.get(ProcessingNode.OBJECT_SOURCE_RESOLVER);
+ Object oldResolver = objectModel.get(ProcessingNode.OBJECT_SOURCE_RESOLVER);
final Redirector oldRedirector = context.getRedirector();
// Build a redirector
@@ -236,6 +241,7 @@
return success;
} finally {
+ environment.changeContext("", oldContext);
CocoonComponentManager.leaveEnvironment(success);
// Restore old redirector and resolver
context.setRedirector(oldRedirector);
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java?view=diff&r1=160556&r2=160557
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Fri Apr 8 09:03:06 2005
@@ -308,26 +308,40 @@
this.setupLogger(newProcessor);
//FIXME (SW): why do we need to enterProcessor here?
CocoonComponentManager.enterEnvironment(env, this.manager, this);
+ String oldContext = env.getContext();
try {
if (builder instanceof Recomposable) {
((Recomposable)builder).recompose(this.manager);
}
builder.setProcessor(newProcessor);
- if (this.fileName == null) {
- this.fileName = builder.getFileName();
- }
if (this.source == null) {
+ if (this.fileName == null) {
+ // Case of the root sitemap if no explicit config was given
+ this.fileName = builder.getFileName();
+ }
+
this.source = new DelayedRefreshSourceWrapper(this.resolver.resolveURI(this.fileName),
lastModifiedDelay);
+
+ if (this.parent == null) {
+ // Ensure the root processor has a filename to change its context
+ this.fileName = this.source.getURI();
+ }
}
+
+ // Set the context to the sitemap location as components may lookup some resources
+ // during their initialization
+ env.changeContext("", this.source.getURI());
newLastModified = this.source.getLastModified();
ProcessingNode root = builder.build(this.source);
- newProcessor.setProcessorData(builder.getSitemapComponentManager(), root, builder.getDisposableNodes());
+ newProcessor.setProcessorData(builder.getSitemapComponentManager(), root, builder.getDisposableNodes(), this.source.getURI());
} finally {
+ // Restore the context (FIXME: need to separate this from URI prefix)
+ env.changeContext("", oldContext);
CocoonComponentManager.leaveEnvironment();
this.builderSelector.release(builder);
}
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java?view=diff&r1=160556&r2=160557
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MountNode.java Fri Apr 8 09:03:06 2005
@@ -103,7 +103,8 @@
boolean pipelineWasBuilt = false;
try {
- env.changeContext(resolvedPrefix, resolvedSource);
+ // We only change the prefix here. Context will be changed by the processor itself.
+ env.changeContext(resolvedPrefix, "");
if (context.isBuildingPipelineOnly()) {
// Propagate pipelines
Modified: cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/AbstractEnvironment.java
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/AbstractEnvironment.java?view=diff&r1=160556&r2=160557
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/AbstractEnvironment.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/java/org/apache/cocoon/environment/AbstractEnvironment.java Fri Apr 8 09:03:06 2005
@@ -243,7 +243,7 @@
/**
* Adds an prefix to the overall stripped off prefix from the request uri
*/
- public void changeContext(String prefix, String newContext)
+ public void changeContext(String newPrefix, String newContext)
throws IOException {
if (!this.initializedComponents) {
this.initComponents();
@@ -252,19 +252,19 @@
if (getLogger().isDebugEnabled()) {
getLogger().debug("Changing Cocoon context");
getLogger().debug(" from context(" + this.context + ") and prefix(" + this.prefix + ")");
- getLogger().debug(" to context(" + newContext + ") and prefix(" + prefix + ")");
+ getLogger().debug(" to context(" + newContext + ") and prefix(" + newPrefix + ")");
getLogger().debug(" at URI " + this.uris);
}
- int l = prefix.length();
+ int l = newPrefix.length();
if (l >= 1) {
- if (!this.uris.startsWith(prefix)) {
+ if (!this.uris.startsWith(newPrefix)) {
String message = "The current URI (" + this.uris +
- ") doesn't start with given prefix (" + prefix + ")";
+ ") doesn't start with given prefix (" + newPrefix + ")";
getLogger().error(message);
throw new RuntimeException(message);
}
- this.prefix.append(prefix);
+ this.prefix.append(newPrefix);
this.uris = this.uris.substring(l);
// check for a slash at the beginning to avoid problems with subsitemaps
@@ -274,7 +274,7 @@
}
}
- if (SourceUtil.getScheme(this.context).equals("zip")) {
+ if (this.context.startsWith("zip:")) {
// if the resource is zipped into a war file (e.g. Weblogic temp deployment)
// FIXME (VG): Is this still required? Better to unify both cases.
if (getLogger().isDebugEnabled()) {
@@ -288,7 +288,7 @@
} finally {
this.sourceResolver.release(source);
}
- } else {
+ } else if (newContext.length() > 0){
String sContext;
// if we got a absolute context or one with a protocol resolve it
if (newContext.charAt(0) == '/') {
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?view=diff&r1=160556&r2=160557
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Fri Apr 8 09:03:06 2005
@@ -196,6 +196,10 @@
<changes>
<release version="@version@" date="@date@">
+ <action dev="SW" type="fix">
+ Fix environment handling to allow the root sitemap to be at an abitrary location
+ and not only in the main webapp context directory.
+ </action>
<action dev="VG" type="fix">
Updated excalibur-pool to 2.0.0, excalibur-datasource to 1.2.0.
Fixes problem of database connections pools not coming up after