You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ce...@apache.org on 2004/04/09 19:36:43 UTC
cvs commit: logging-log4j/examples/src/joran/calculator ComputationAction1.java ComputationAction2.java
ceki 2004/04/09 10:36:43
Modified: examples/src/joran/calculator ComputationAction1.java
ComputationAction2.java
Log:
Improved docs
Revision Changes Path
1.3 +1 -1 logging-log4j/examples/src/joran/calculator/ComputationAction1.java
Index: ComputationAction1.java
===================================================================
RCS file: /home/cvs/logging-log4j/examples/src/joran/calculator/ComputationAction1.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ComputationAction1.java 9 Apr 2004 16:03:19 -0000 1.2
+++ ComputationAction1.java 9 Apr 2004 17:36:43 -0000 1.3
@@ -24,7 +24,7 @@
/**
- * The ComputationAction will print the result of the compuration made by
+ * ComputationAction1 will print the result of the compuration made by
* children elements but only if the compuration itself is named, that is if the
* name attribute of the associated computation element is not null. In other
* words, anonymous computations will not print their result.
1.2 +39 -5 logging-log4j/examples/src/joran/calculator/ComputationAction2.java
Index: ComputationAction2.java
===================================================================
RCS file: /home/cvs/logging-log4j/examples/src/joran/calculator/ComputationAction2.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ComputationAction2.java 9 Apr 2004 14:02:37 -0000 1.1
+++ ComputationAction2.java 9 Apr 2004 17:36:43 -0000 1.2
@@ -26,24 +26,58 @@
/**
- * The ComputationAction will print the result of the compuration made by
- * children elements but only if the compuration itself is named.
+ * ComputationAction2 will print the result of the compuration made by
+ * children elements but only if the compuration itself is named, that is if the
+ * name attribute of the associated computation element is not null. In other
+ * words, anonymous computations will not print their result.
+ *
+ * ComputationAction2 differs from ComputationAction1 in its handling of
+ * instance variables. ComputationAction1 has a simple <Code>nameStr</code>
+ * instance variable. This variable is set when the begin() method is called
+ * and then later used within the end() method.
+ *
+ * This simple approach works properly if the begin() and end()
+ * method of a given action are expected to be called in sequence. However,
+ * there are situations where the begin() method of the same action instance is
+ * invoked multiple times before the matching end() method is invoked.
+ *
+ * When this happens, the second call to begin() overwrites values set by
+ * the first invocation to begin(). The solution is to save parameter values
+ * into a separate stack. The well-formedness of XML will guarantee that a value
+ * saved by one begin() will be consumed only by the matching end() method.
+ *
+ * Note that in the vast majority of cases there is no need to resort to a
+ * separate stack for each variable. The situation of successibe begin()
+ * invocations can only occur if:
+ *
+ * 1) the associated pattern contains a wildcard, i.e. the * character
+ *
+ * and
+ *
+ * 2) the associated element tag can contain itself as a child
+ *
+ * For example, "*/computation" pattern means that computations can contain
+ * other computation elements as children.
*
* @author Ceki Gülcü
*/
public class ComputationAction2 extends Action {
public static String NAME_ATR = "name";
- Stack paremeterStack = new Stack();
+ Stack nameStrStack = new Stack();
public void begin(ExecutionContext ec, String name, Attributes attributes) {
String nameStr = attributes.getValue(NAME_ATR);
- paremeterStack.push(nameStr);
+ // save nameStr value in a special stack. Note that the value is saved
+ // even if it is empty or null.
+ nameStrStack.push(nameStr);
}
public void end(ExecutionContext ec, String name) {
- String nameStr = (String) paremeterStack.pop();
+ // pop nameStr value from the special stack
+ String nameStr = (String) nameStrStack.pop();
+
if (Option.isEmpty(nameStr)) {
// nothing to do
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org