cziegeler 02/04/22 08:43:36
Modified: src/java/org/apache/cocoon/components/treeprocessor
DefaultTreeBuilder.java
src/java/org/apache/cocoon/components/treeprocessor/sitemap
ActTypeNode.java ActionSetNode.java MatchNode.java
MatchNodeBuilder.java PipelineNode.java
PreparableMatchNode.java SelectNode.java
SelectNodeBuilder.java SwitchSelectNode.java
Log:
Added releasing of selectors
Revision Changes Path
1.6 +28 -27
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java
Index: DefaultTreeBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultTreeBuilder.java 21 Apr 2002 17:39:16 -0000 1.5
+++ DefaultTreeBuilder.java 22 Apr 2002 15:43:36 -0000 1.6
@@ -93,7 +93,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: DefaultTreeBuilder.java,v 1.5 2002/04/21 17:39:16 vgritsenko
Exp $
+ * @version CVS $Id: DefaultTreeBuilder.java,v 1.6 2002/04/22 15:43:36 cziegeler
Exp $
*/
public class DefaultTreeBuilder extends AbstractLoggable implements TreeBuilder,
@@ -525,37 +525,38 @@
String type = statement.getAttribute("type", null);
- ComponentSelector selector;
+ ComponentSelector selector = null;
try {
- selector = (ComponentSelector)this.manager.lookup(role);
- } catch(ComponentException ce) {
- String msg = "Cannot get component selector for '" +
statement.getName() + "' at " +
- statement.getLocation();
- getLogger().error(msg, ce);
- throw new ConfigurationException(msg, ce);
- }
+ try {
+ selector = (ComponentSelector)this.manager.lookup(role);
+ } catch(ComponentException ce) {
+ String msg = "Cannot get component selector for '" +
statement.getName() + "' at " +
+ statement.getLocation();
+ getLogger().error(msg, ce);
+ throw new ConfigurationException(msg, ce);
+ }
- if (type == null && selector instanceof ExtendedComponentSelector) {
- type = ((ExtendedComponentSelector)selector).getDefaultHint();
- }
+ if (type == null && selector instanceof ExtendedComponentSelector) {
+ type = ((ExtendedComponentSelector)selector).getDefaultHint();
+ }
- if (type == null) {
- String msg = "No default type exists for '" + statement.getName() + "'
at " +
- statement.getLocation();
- getLogger().error(msg);
- throw new ConfigurationException(msg);
- }
+ if (type == null) {
+ String msg = "No default type exists for '" + statement.getName() +
"' at " +
+ statement.getLocation();
+ getLogger().error(msg);
+ throw new ConfigurationException(msg);
+ }
- if (!selector.hasComponent(type)) {
- String msg = "Type '" + type + "' is not defined for '" +
statement.getName() + "' at " +
- statement.getLocation();
- getLogger().error(msg);
- throw new ConfigurationException(msg);
+ if (!selector.hasComponent(type)) {
+ String msg = "Type '" + type + "' is not defined for '" +
statement.getName() + "' at " +
+ statement.getLocation();
+ getLogger().error(msg);
+ throw new ConfigurationException(msg);
+ }
+ } finally {
+ this.manager.release(selector);
}
-
- this.manager.release(selector);
-
return type;
}
@@ -565,7 +566,7 @@
this.linkedBuilders.clear();
this.canGetNode = false;
this.registeredNodes.clear();
-
+
// Don't clear disposableNodes as they're used by the Processor
this.disposableNodes = new ArrayList();
1.3 +5 -2
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActTypeNode.java
Index: ActTypeNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActTypeNode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ActTypeNode.java 27 Mar 2002 15:13:40 -0000 1.2
+++ ActTypeNode.java 22 Apr 2002 15:43:36 -0000 1.3
@@ -75,7 +75,7 @@
* Handles <map:act type="..."> (action-sets calls are handled by {@link
ActSetNode}).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActTypeNode.java,v 1.2 2002/03/27 15:13:40 sylvain Exp $
+ * @version CVS $Id: ActTypeNode.java,v 1.3 2002/04/22 15:43:36 cziegeler Exp $
*/
public class ActTypeNode extends SimpleSelectorProcessingNode
@@ -90,6 +90,8 @@
/** Pre-selected action, if it's ThreadSafe */
protected Action threadSafeAction;
+ protected ComponentManager manager;
+
public ActTypeNode(String name, String source) throws PatternException {
super(name);
this.source = MapStackResolver.getResolver(source);
@@ -100,7 +102,7 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Action.ROLE + "Selector"));
// Get the action, if it's thread safe
@@ -160,5 +162,6 @@
if (this.threadSafeAction != null) {
this.selector.release(this.threadSafeAction);
}
+ this.manager.release(this.selector);
}
}
1.3 +9 -5
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActionSetNode.java
Index: ActionSetNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ActionSetNode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ActionSetNode.java 27 Mar 2002 15:10:35 -0000 1.2
+++ ActionSetNode.java 22 Apr 2002 15:43:36 -0000 1.3
@@ -74,7 +74,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: ActionSetNode.java,v 1.2 2002/03/27 15:10:35 sylvain Exp $
+ * @version CVS $Id: ActionSetNode.java,v 1.3 2002/04/22 15:43:36 cziegeler Exp $
*/
public class ActionSetNode extends SimpleSelectorProcessingNode
@@ -88,13 +88,16 @@
/** The actions that are ThreadSafe, to avoid lookups */
private Action[] threadSafeActions;
-
+
/** The src for each action */
private MapStackResolver[] sources;
-
+
/** The parameters for each action */
private Map[] parameters;
+ /** The component manager */
+ protected ComponentManager manager;
+
public ActionSetNode(
String name, String[] types, String[] actionNames,
MapStackResolver[] sources, Map[] parameters) {
@@ -106,7 +109,7 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Action.ROLE + "Selector"));
// Get all actions that are thread safe
@@ -151,7 +154,7 @@
String actionName = actionNames[i];
String source = sources[i].resolve(mapStack);
if (actionName == null || actionName.equals(cocoonAction)) {
-
+
Parameters actionParams =
MapStackResolver.buildParameters(parameters[i], mapStack);
if (actionParams == Parameters.EMPTY_PARAMETERS) {
actionParams = params;
@@ -195,6 +198,7 @@
for (int i = 0; i < this.threadSafeActions.length; i++) {
this.selector.release(this.threadSafeActions[i]);
}
+ this.manager.release(this.selector);
}
/**
1.2 +15 -4
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNode.java
Index: MatchNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MatchNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ MatchNode.java 22 Apr 2002 15:43:36 -0000 1.2
@@ -57,6 +57,7 @@
import org.apache.cocoon.components.treeprocessor.SimpleSelectorProcessingNode;
import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.matching.Matcher;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentSelector;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.parameters.Parameters;
@@ -71,10 +72,11 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: MatchNode.java,v 1.1 2002/03/05 08:26:23 sylvain Exp $
+ * @version CVS $Id: MatchNode.java,v 1.2 2002/04/22 15:43:36 cziegeler Exp $
*/
-public class MatchNode extends SimpleSelectorProcessingNode implements
ParameterizableProcessingNode, Composable {
+public class MatchNode extends SimpleSelectorProcessingNode
+implements ParameterizableProcessingNode, Composable, Disposable {
/** The 'pattern' attribute */
private MapStackResolver pattern;
@@ -84,6 +86,8 @@
private Map parameters;
+ private ComponentManager manager;
+
public MatchNode(String name, String pattern) throws PatternException {
super(name);
this.pattern = MapStackResolver.getResolver(pattern);
@@ -94,8 +98,8 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
- super.setSelector((ComponentSelector)manager.lookup(Matcher.ROLE +
"Selector"));
+ this.manager = manager;
+ this.setSelector((ComponentSelector)manager.lookup(Matcher.ROLE +
"Selector"));
// Get matcher if it's ThreadSafe
this.threadSafeMatcher = (Matcher)this.getThreadSafeComponent();
@@ -140,5 +144,12 @@
// Matcher failed
return false;
}
+ }
+
+ /**
+ * Disposable Interface
+ */
+ public void dispose() {
+ this.manager.release(this.selector);
}
}
1.4 +10 -5
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNodeBuilder.java
Index: MatchNodeBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/MatchNodeBuilder.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MatchNodeBuilder.java 17 Apr 2002 21:50:46 -0000 1.3
+++ MatchNodeBuilder.java 22 Apr 2002 15:43:36 -0000 1.4
@@ -69,7 +69,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: MatchNodeBuilder.java,v 1.3 2002/04/17 21:50:46 sylvain Exp $
+ * @version CVS $Id: MatchNodeBuilder.java,v 1.4 2002/04/22 15:43:36 cziegeler Exp $
*/
public class MatchNodeBuilder extends AbstractParentProcessingNodeBuilder
@@ -96,10 +96,15 @@
// Get the type and class for this matcher
ComponentsSelector selector =
(ComponentsSelector)this.manager.lookup(SELECTOR_ROLE);
- // Find matcher class
- Matcher matcher = (Matcher)selector.select(type);
- Class clazz = matcher.getClass();
- selector.release(matcher);
+ Class clazz = null;
+ try {
+ // Find matcher class
+ Matcher matcher = (Matcher)selector.select(type);
+ clazz = matcher.getClass();
+ selector.release(matcher);
+ } finally {
+ this.manager.release(selector);
+ }
// PreparableMatcher are only prepared if pattern doesn't need request-time
resolution.
boolean preparable =
1.2 +7 -3
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java
Index: PipelineNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PipelineNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PipelineNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ PipelineNode.java 22 Apr 2002 15:43:36 -0000 1.2
@@ -76,7 +76,7 @@
*
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: PipelineNode.java,v 1.1 2002/03/05 08:26:23 sylvain Exp $
+ * @version CVS $Id: PipelineNode.java,v 1.2 2002/04/22 15:43:36 cziegeler Exp $
*/
public class PipelineNode extends AbstractParentProcessingNode implements
Composable {
@@ -198,8 +198,12 @@
// Create a Notifying
NotifyingBuilder notifyingBuilder=
(NotifyingBuilder)this.manager.lookup(NotifyingBuilder.ROLE);
- Notifying currentNotifying = notifyingBuilder.build(this, ex);
- this.manager.release(notifyingBuilder);
+ Notifying currentNotifying = null;
+ try {
+ currentNotifying = notifyingBuilder.build(this, ex);
+ } finally {
+ this.manager.release(notifyingBuilder);
+ }
// Add it to the object model
env.getObjectModel().put(Constants.NOTIFYING_OBJECT, currentNotifying );
1.2 +12 -2
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PreparableMatchNode.java
Index: PreparableMatchNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/PreparableMatchNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- PreparableMatchNode.java 5 Mar 2002 08:26:23 -0000 1.1
+++ PreparableMatchNode.java 22 Apr 2002 15:43:36 -0000 1.2
@@ -58,6 +58,7 @@
import org.apache.cocoon.components.treeprocessor.MapStackResolver;
import org.apache.cocoon.matching.Matcher;
import org.apache.cocoon.matching.PreparableMatcher;
+import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentSelector;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
@@ -72,7 +73,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: PreparableMatchNode.java,v 1.1 2002/03/05 08:26:23 sylvain Exp
$
+ * @version CVS $Id: PreparableMatchNode.java,v 1.2 2002/04/22 15:43:36 cziegeler
Exp $
*/
public class PreparableMatchNode extends SimpleSelectorProcessingNode implements
ParameterizableProcessingNode, Composable {
@@ -87,6 +88,8 @@
/** The matcher, if it's ThreadSafe */
private PreparableMatcher threadSafeMatcher;
+ protected ComponentManager manager;
+
public PreparableMatchNode(String name, String pattern) throws PatternException
{
super(name);
this.pattern = pattern;
@@ -98,7 +101,7 @@
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Matcher.ROLE + "Selector"));
// Prepare the pattern, and keep matcher if ThreadSafe
@@ -159,5 +162,12 @@
// Matcher failed
return false;
}
+ }
+
+ /**
+ * Disposable Interface
+ */
+ public void dispose() {
+ this.manager.release(this.selector);
}
}
1.3 +5 -2
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNode.java
Index: SelectNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNode.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SelectNode.java 27 Mar 2002 22:20:12 -0000 1.2
+++ SelectNode.java 22 Apr 2002 15:43:36 -0000 1.3
@@ -77,7 +77,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: SelectNode.java,v 1.2 2002/03/27 22:20:12 sylvain Exp $
+ * @version CVS $Id: SelectNode.java,v 1.3 2002/04/22 15:43:36 cziegeler Exp $
*/
public class SelectNode extends SimpleSelectorProcessingNode
@@ -95,6 +95,8 @@
private ProcessingNode[] otherwhiseNodes;
+ private ComponentManager manager;
+
public SelectNode(String name) throws PatternException {
super(name);
}
@@ -110,7 +112,7 @@
}
public void compose(ComponentManager manager) throws ComponentException {
-
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Selector.ROLE + "Selector"));
// Get the selector, if it's ThreadSafe
@@ -171,5 +173,6 @@
if (this.threadSafeSelector != null) {
this.selector.release(this.threadSafeSelector);
}
+ this.manager.release(this.selector);
}
}
1.3 +14 -6
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNodeBuilder.java
Index: SelectNodeBuilder.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SelectNodeBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SelectNodeBuilder.java 17 Apr 2002 21:50:46 -0000 1.2
+++ SelectNodeBuilder.java 22 Apr 2002 15:43:36 -0000 1.3
@@ -70,7 +70,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: SelectNodeBuilder.java,v 1.2 2002/04/17 21:50:46 sylvain Exp $
+ * @version CVS $Id: SelectNodeBuilder.java,v 1.3 2002/04/22 15:43:36 cziegeler Exp
$
*/
public class SelectNodeBuilder extends AbstractParentProcessingNodeBuilder
implements ThreadSafe, Recomposable {
@@ -131,17 +131,25 @@
throw new ConfigurationException(msg);
}
}
-
+
ProcessingNode[][] whenChildrenNodes =
(ProcessingNode[][])whenChildren.toArray(new ProcessingNode[0][0]);
MapStackResolver[] whenResolvers =
(MapStackResolver[])whenTests.toArray(new MapStackResolver[whenTests.size()]);
// Get the type and class for this selector
ComponentsSelector compSelector =
(ComponentsSelector)this.manager.lookup(SELECTOR_ROLE);
- // Find selector class
- Selector selector = (Selector)compSelector.select(type);
- Class clazz = selector.getClass();
- compSelector.release(selector);
+ Class clazz = null;
+ try {
+ // Find selector class
+ Selector selector = (Selector)compSelector.select(type);
+ try {
+ clazz = selector.getClass();
+ } finally {
+ compSelector.release(selector);
+ }
+ } finally {
+ this.manager.release(compSelector);
+ }
if (SwitchSelector.class.isAssignableFrom(clazz)) {
SwitchSelectNode node = new SwitchSelectNode(type);
1.2 +9 -4
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SwitchSelectNode.java
Index: SwitchSelectNode.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/SwitchSelectNode.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SwitchSelectNode.java 17 Apr 2002 21:50:46 -0000 1.1
+++ SwitchSelectNode.java 22 Apr 2002 15:43:36 -0000 1.2
@@ -78,7 +78,7 @@
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: SwitchSelectNode.java,v 1.1 2002/04/17 21:50:46 sylvain Exp $
+ * @version CVS $Id: SwitchSelectNode.java,v 1.2 2002/04/22 15:43:36 cziegeler Exp $
*/
public class SwitchSelectNode extends SimpleSelectorProcessingNode
@@ -96,6 +96,8 @@
private ProcessingNode[] otherwhiseNodes;
+ private ComponentManager manager;
+
public SwitchSelectNode(String name) throws PatternException {
super(name);
}
@@ -111,6 +113,7 @@
}
public void compose(ComponentManager manager) throws ComponentException {
+ this.manager = manager;
setSelector((ComponentSelector)manager.lookup(Selector.ROLE + "Selector"));
@@ -130,7 +133,7 @@
if (this.threadSafeSelector != null) {
Object ctx = this.threadSafeSelector.getSelectorContext(objectModel,
resolvedParams);
-
+
for (int i = 0; i < this.whenTests.length; i++) {
if (this.threadSafeSelector.select(whenTests[i].resolve(mapStack),
ctx)) {
return invokeNodes(this.whenNodes[i], env, context);
@@ -145,9 +148,9 @@
} else {
SwitchSelector selector =
(SwitchSelector)this.selector.select(this.componentName);
-
+
Object ctx = selector.getSelectorContext(objectModel, resolvedParams);
-
+
try {
for (int i = 0; i < this.whenTests.length; i++) {
@@ -171,5 +174,7 @@
if (this.threadSafeSelector != null) {
this.selector.release(this.threadSafeSelector);
}
+ this.manager.release(this.selector);
+ this.selector = null;
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]