in java/src/org/apache/qetest/trax/TestThreads.java [684:820]
public void run()
{
int i = 0; // loop counter; used for error reporting
createErrWriter();
println("<?xml version=\"1.0\"?>");
println("<testrunner desc=\"" + runnerID + ":started\" fileName=\""
+ xslName + "\">");
TransformerFactory factory = null;
try
{
// Each runner creates it's own processor for use and it's own error log
factory = TransformerFactory.newInstance();
println("<arbitrary desc=\"" + runnerID + ":processing\">");
}
catch (Throwable ex)
{ // If we got here, just log it and bail, no sense continuing
println("<throwable desc=\"" + ex.toString() + "\"><![CDATA[");
ex.printStackTrace(errWriter);
println("\n</throwable>");
println("<message desc=\"" + runnerID + ":complete-ERROR:after:"
+ i + "\"/>");
println("</testrunner>");
if (errWriter != null)
errWriter.close();
return;
}
try
{
// Loop away...
for (i = 0; i < numProcesses; i++)
{
// Run a process using the pre-compiled stylesheet we were construced with
{
Transformer transformer1 = xslStylesheet.newTransformer();
FileOutputStream resultStream1 =
new FileOutputStream(outName + ".out");
Result result1 = new StreamResult(resultStream1);
if (setParam)
transformer1.setParameter(paramName, paramVal);
print("."); // Note presence of this in logs shows which process threw an exception
transformer1.transform(new StreamSource(xmlName), result1);
resultStream1.close();
// Temporary vars go out of scope for cleanup here
}
// Now process something with a newly-processed stylesheet
{
Templates templates2 =
factory.newTemplates(new StreamSource(xslName));
Transformer transformer2 = templates2.newTransformer();
FileOutputStream resultStream2 =
new FileOutputStream(outName + "_.out");
Result result2 = new StreamResult(resultStream2);
if (setParam)
transformer2.setParameter(paramName, paramVal);
print("*"); // Note presence of this in logs shows which process threw an exception
transformer2.transform(new StreamSource(xmlName), result2);
resultStream2.close();
}
// if asked, report memory statistics
if (reportMem)
{
Runtime r = Runtime.getRuntime();
r.gc();
long freeMemory = r.freeMemory();
long totalMemory = r.totalMemory();
println("<statistic desc=\"" + runnerID
+ ":memory:longval-free:doubleval-total\">");
println("<longval>" + freeMemory + "</longval>");
println("<doubleval>" + totalMemory + "</doubleval>");
println("</statistic>");
}
// if we're polite, let others play for a bit
if (polite)
java.lang.Thread.yield();
}
// IF we get here, we worked without exceptions (presumably successfully)
println("</arbitrary>");
println("<message desc=\"" + runnerID + ":complete-OK:after:"
+ numProcesses + "\"/>");
}
// Separate messages for each kind of exception
catch (TransformerException te)
{
println("\n<TransformerException desc=\"" + te.toString() + "\">");
logStackTrace(te, errWriter);
logContainedException(te, errWriter);
println("</TransformerException>");
println("</arbitrary>");
println("<message desc=\"" + runnerID + ":complete-ERROR:after:"
+ i + "\"/>");
}
catch (Throwable ex)
{
logThrowable(ex, errWriter);
println("</arbitrary>");
println("<message desc=\"" + runnerID + ":complete-ERROR:after:"
+ i + "\"/>");
}
finally
{
// Cleanup our references, etc.
println("</testrunner>");
if (errWriter != null)
errWriter.close();
runnerID = null;
xmlName = null;
xslName = null;
xslStylesheet = null;
outName = null;
}
} // end of run()...