sebb 2003/10/10 09:46:32
Modified: src/functions/org/apache/jmeter/functions
StringFromFile.java
Log:
Improving error handling and logging
Revision Changes Path
1.10 +60 -22
jakarta-jmeter/src/functions/org/apache/jmeter/functions/StringFromFile.java
Index: StringFromFile.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/functions/org/apache/jmeter/functions/StringFromFile.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- StringFromFile.java 9 Oct 2003 18:13:21 -0000 1.9
+++ StringFromFile.java 10 Oct 2003 16:46:32 -0000 1.10
@@ -57,6 +57,7 @@
import java.io.BufferedReader;
import java.io.FileReader;
+import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedList;
@@ -90,58 +91,90 @@
* - the file name is resolved at file (re-)open time
* - the output variable name is resolved every time the function is invoked
*
- * @author default
+ * @author sebb AT apache DOT org
*
- * @version $Id$
+ * @version $Revision$ Updated on: $Date$
*/
public class StringFromFile extends AbstractFunction implements Serializable
{
private static Logger log = LoggingManager.getLoggerForClass();
private static final List desc = new LinkedList();
- private static final String KEY = "_StringFromFile";
+ private static final String KEY = "_StringFromFile";//$NON-NLS-1$
// Function name (only 1 _)
-
+
+ private static final String ERR_IND = "**ERR**";//$NON-NLS-1$
+
static {
- desc.add(JMeterUtils.getResString("string_from_file_file_name"));
- desc.add(JMeterUtils.getResString("function_name_param"));
+
desc.add(JMeterUtils.getResString("string_from_file_file_name"));//$NON-NLS-1$
+ desc.add(JMeterUtils.getResString("function_name_param"));//$NON-NLS-1$
}
- private String myValue = "<please supply a file>"; // Default value
- private String myName = "StringFromFile_"; // Name to store value in
+ private String myValue = ERR_IND;
+ private String myName = "StringFromFile_";//$NON-NLS-1$ - Name to store the
value in
private Object[] values;
private BufferedReader myBread; // Buffered reader
+ private FileReader fis; // keep this round to close it
private boolean firstTime = false; // should we try to open the file?
private boolean reopenFile = true; // Set from parameter list one day ...
private String fileName; // needed for error messages
public StringFromFile()
{
+ if (log.isDebugEnabled())
+ {
+ log.debug("++++++++ Construct "+this);
+ }
}
+ protected void finalize() throws Throwable{
+ if (log.isDebugEnabled())
+ {
+ log.debug("-------- Finalize "+this);
+ }
+ }
+
public Object clone()
{
StringFromFile newReader = new StringFromFile();
if (log.isDebugEnabled())
{ // Skip expensive paramter creation ..
- log.debug(this +"::StringFromFile.clone()", new Throwable("debug"));
+ log.debug(this +"::StringFromFile.clone()", new
Throwable("debug"));//$NON-NLS-1$
}
return newReader;
}
+
+/*
+ * Warning: the file will generally be left open at the end of a test run.
+ * This is because functions don't have any way to find out when a test has
+ * ended ...
+ */
+ private void closeFile(){
+ String tn = Thread.currentThread().getName();
+ log.info(tn + " closing file " + fileName);//$NON-NLS-1$
+ try {
+ myBread.close();
+ fis.close();
+ } catch (IOException e) {
+ log.error("closeFile() error: " + e.toString());//$NON-NLS-1$
+ }
+ }
private void openFile()
{
+ String tn = Thread.currentThread().getName();
fileName = ((CompoundVariable) values[0]).execute();
+ log.info(tn + " opening file " + fileName);//$NON-NLS-1$
try
{
- FileReader fis = new FileReader(fileName);
+ fis = new FileReader(fileName);
myBread = new BufferedReader(fis);
- log.info("Opened " + fileName);
}
catch (Exception e)
{
- log.error("openFile() error: " + e.toString());
+ log.error("openFile() error: " + e.toString());//$NON-NLS-1$
+ myBread=null;
}
}
@@ -161,7 +194,7 @@
myName = ((CompoundVariable) values[1]).execute();
}
- myValue = "**ERR**";
+ myValue = ERR_IND;
/*
* To avoid re-opening the file repeatedly after an error,
@@ -181,22 +214,27 @@
String line = myBread.readLine();
if (line == null && reopenFile)
{ // EOF, re-open file
- log.info("Reached EOF on " + fileName);
- myBread.close();
+ log.info("Reached EOF on " + fileName);//$NON-NLS-1$
+ closeFile();
openFile();
- line = myBread.readLine();
+ if (myBread != null) {
+ line = myBread.readLine();
+ } else {
+ line = ERR_IND;
+ }
}
myValue = line;
}
catch (Exception e)
{
- log.error("Error reading file " + e.toString());
+ String tn = Thread.currentThread().getName();
+ log.error(tn + " error reading file " + e.toString());//$NON-NLS-1$
}
}
vars.put(myName, myValue);
- log.debug(this +"::StringFromFile.execute() name:" + myName + " value:" +
myValue);
+ log.debug(this +"::StringFromFile.execute() name:" + myName + " value:" +
myValue);//$NON-NLS-1$
return myValue;
@@ -213,22 +251,22 @@
throws InvalidVariableException
{
- log.debug(this +"::StringFromFile.setParameters()");
+ log.debug(this +"::StringFromFile.setParameters()");//$NON-NLS-1$
values = parameters.toArray();
if ((values.length > 2) || (values.length < 1))
{
- throw new InvalidVariableException("Wrong number of parameters");
+ throw new InvalidVariableException("Wrong number of
parameters");//$NON-NLS-1$
}
StringBuffer sb = new StringBuffer(40);
- sb.append("setParameters(");
+ sb.append("setParameters(");//$NON-NLS-1$
for (int i = 0; i< values.length;i++){
if (i > 0) sb.append(",");
sb.append(((CompoundVariable) values[i]).getRawParameters());
}
- sb.append(")");
+ sb.append(")");//$NON-NLS-1$
log.info(sb.toString());
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]