public void run()

in java/src/org/apache/qetest/trax/TestMultiTypeThreads.java [728:886]


    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();
                    if (transformType == DOMSource.FEATURE)
                    {
                        doDOMTransform(transformer1, xmlName, outName + "d.out", "d");
                    }
                    else if (transformType == SAXSource.FEATURE)
                    {
                        doSAXTransform(xslName, xmlName, outName + "x.out", "x");
                    }
                    else if (transformType == StreamSource.FEATURE)
                    {
                        // Call String ctor so we don't have to setSystemId
                        Result result1 = new StreamResult(outName + "t.out");

                        if (setParam)
                            transformer1.setParameter(paramName, paramVal);

                        print("t");  // Note presence of this in logs shows which process threw an exception
                        transformer1.transform(new StreamSource(xmlName), result1);
                    }
                    else 
                    {
                        throw new RuntimeException("unsupported transformType: " + transformType);
                    }

                    // 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();
                    if (transformType == DOMSource.FEATURE)
                    {
                        doDOMTransform(transformer2, xmlName, outName + "_D.out", "D");
                    }
                    else if (transformType == SAXSource.FEATURE)
                    {
                        doSAXTransform(xslName, xmlName, outName + "_X.out", "X");
                    }
                    else // if (transformType == StreamSource.FEATURE)
                    {
                        Result result2 = new StreamResult(outName + "_T.out");

                        if (setParam)
                            transformer2.setParameter(paramName, paramVal);

                        print("T");  // Note presence of this in logs shows which process threw an exception
                        transformer2.transform(new StreamSource(xmlName), result2);
                    }
                }

                // 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()...