Package com.sun.msv.verifier.multithread

Source Code of com.sun.msv.verifier.multithread.Daemon

/*
* @(#)$Id: Daemon.java 1648 2005-03-31 22:42:07Z kohsuke $
*
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc. 
* Use is subject to license terms.
*
*/
package com.sun.msv.verifier.multithread;

import com.sun.msv.grammar.Grammar;
import com.sun.msv.reader.util.GrammarLoader;
import com.sun.msv.verifier.ValidityViolation;
import com.sun.msv.verifier.Verifier;
import com.sun.msv.verifier.util.ErrorHandlerImpl;
import com.sun.msv.verifier.regexp.REDocumentDeclaration;
import com.sun.msv.driver.textui.DebugController;
import org.xml.sax.XMLReader;

import javax.xml.parsers.SAXParserFactory;
import java.util.EmptyStackException;
import java.util.Stack;

/**
* multi-thread tester.
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
public class Daemon implements Runnable
{
    public static void main( String[] args ) throws Exception
    {
        new Daemon()._main(args);
    }
   
    Grammar grammar;
    /** file names that have to be validated. */
    private final Stack jobs = new Stack();
   
    private void _main( String[] args ) throws Exception
    {
        if( args.length!=4 )
        {
            System.out.println(
                "Usage: Daemon (relax|trex) <fileprefix> <suffix> <# of threads>\n"+
                "  <prefix>.trex or <prefix>.rlx is used as a schema\n"+
                "  <prefix>.v100<suffix> to <prefix>.v999<suffix> are used as instances");
            return;
        }
       
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
        factory.setValidating(false);
       
        String schemaName;

        if( args[0].equals("relax") )    schemaName = args[1]+".rlx";
        else                            schemaName = args[1]+".trex";

        grammar = GrammarLoader.loadSchema(
                schemaName,
                new DebugController(false,false),
                factory );
       
       
        for( int i=100; i<=999; i++ )
            jobs.push( args[1]+".v"+i+args[2] );
       
        final long startTime = System.currentTimeMillis();
       
        final int m = Integer.parseInt( args[3] );
        System.out.println("Use " + m + " threads");
        Thread[] ts = new Thread[m];
        for( int i=0; i<m; i++ )
        {
            ts[i] = new Thread(this,"#"+i);
            ts[i].start();
        }
       
        System.out.println("launched all threads");
       
        for( int i=0; i<m; i++ )
            ts[i].join();
       
        System.out.println("Time : " + (System.currentTimeMillis()-startTime) + " ms");
    }
   
    public void run()
    {
        final String name = Thread.currentThread().getName();
        try
        {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            factory.setNamespaceAware(true);
//            ExpressionPool localPool = new ExpressionPool(grammar.getPool());
//            ExpressionPool localPool = new ExpressionPool();
           
            while(true)
            {
                String fileName;
                try
                {
                    fileName = (String)jobs.pop();    // stack is synchronized
                }
                catch( EmptyStackException e )
                {
                    System.out.println( name + " completed" );
                    return;
                }
               
                XMLReader r = factory.newSAXParser().getXMLReader();
                Verifier v = new Verifier(
                    new REDocumentDeclaration(grammar),
//                    new REDocumentDeclaration(grammar.getTopLevel(),localPool),
                    new ErrorHandlerImpl() );
                r.setContentHandler(v);
                try
                {
                    r.parse(fileName);
                    if(!v.isValid()) throw new Error();
                    System.out.print('.');
                }
                catch( ValidityViolation vv )
                {
                    System.out.println( name + ':' + fileName + " invalid  " + vv.getMessage() );
                }
            }
        }
        catch( Exception e )
        {
            System.out.println( name + " aborted" );
            e.printStackTrace();
        }
    }
}
TOP

Related Classes of com.sun.msv.verifier.multithread.Daemon

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.