You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by el...@apache.org on 2003/01/08 22:21:26 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/dom CoreDOMImplementationImpl.java DOMNormalizer.java

elena       2003/01/08 13:21:26

  Modified:    java/src/org/apache/xerces/dom
                        CoreDOMImplementationImpl.java DOMNormalizer.java
  Log:
  Implement validators pool for normalizeDocument
  
  Revision  Changes    Path
  1.21      +40 -49    xml-xerces/java/src/org/apache/xerces/dom/CoreDOMImplementationImpl.java
  
  Index: CoreDOMImplementationImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/CoreDOMImplementationImpl.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- CoreDOMImplementationImpl.java	11 Dec 2002 16:14:30 -0000	1.20
  +++ CoreDOMImplementationImpl.java	8 Jan 2003 21:21:26 -0000	1.21
  @@ -91,8 +91,13 @@
   	//
   	// Data
   	//
  -	RevalidationHandler fDOMRevalidator = null;
  -	boolean free = true;
  +    
  +    // validators pool
  +    private static final int SIZE = 2;
  +    private RevalidationHandler validators[] = new RevalidationHandler[SIZE];
  +    private int freeValidatorIndex = -1;
  +    private int currentSize = SIZE;
  +
   	// static
   	/** Dom implementation singleton. */
   	static CoreDOMImplementationImpl singleton =
  @@ -322,53 +327,39 @@
   	//
   	// Protected methods
   	//
  -	/** NON-DOM */
  +	/** NON-DOM: retrieve validator. */
   	synchronized RevalidationHandler getValidator(String schemaType) {
  -		// REVISIT: implement a pool of validators to avoid long
  -		//          waiting for several threads
  -		//          implement retrieving grammar based on schemaType
  -		if (fDOMRevalidator == null) {
  -			try {
  -				// use context class loader.  If it returns
  -				// null, class.forName gets used.
  -				fDOMRevalidator =
  -					(RevalidationHandler) (ObjectFactory
  -						.newInstance(
  -							"org.apache.xerces.impl.xs.XMLSchemaValidator",
  -							ObjectFactory.findClassLoader(),
  -							true));
  -			}
  -			catch (Exception e) {}
  -		}
  -		while (!isFree()) {
  -			try {
  -				wait();
  -			}
  -			catch (InterruptedException e) {
  -				try {
  -					return (RevalidationHandler)
  -						(ObjectFactory
  -							.newInstance(
  -								"org.apache.xerces.impl.xs.XMLSchemaValidator",
  -								ObjectFactory.findClassLoader(),
  -								true));
  -				}
  -				catch (Exception exception) {
  -					return null;
  -				}
  -			}
  -		}
  -		free = false;
  -		return fDOMRevalidator;
  -	}
  -	/** NON-DOM */
  -	synchronized void releaseValidator(String schemaType) {
  -		// REVISIT: implement releasing grammar base on the schema type
  -		notifyAll();
  -		free = true;
  +		// REVISIT: implement retrieving DTD validator 
  +        if (freeValidatorIndex < 0) {
  +            // create new validator - we should not attempt
  +            // to restrict the number of validation handlers being 
  +            // requested
  +            return (RevalidationHandler) (ObjectFactory
  +                        .newInstance(
  +                            "org.apache.xerces.impl.xs.XMLSchemaValidator",
  +                            ObjectFactory.findClassLoader(),
  +                            true));
  +
  +        }
  +        // return first available validator            
  +        RevalidationHandler val = validators[freeValidatorIndex];
  +        validators[freeValidatorIndex--] = null;
  +        return val;
   	}
  -	/** NON-DOM */
  -	final synchronized boolean isFree() {
  -		return free;
  +    
  +	/** NON-DOM: release validator */
  +	synchronized void releaseValidator(String schemaType, 
  +                                         RevalidationHandler validator) {
  +       // REVISIT: implement support for DTD validators as well
  +       ++freeValidatorIndex;
  +       if (validators.length == freeValidatorIndex ){
  +            // resize size of the validators
  +            currentSize+=SIZE;
  +            RevalidationHandler newarray[] =  new RevalidationHandler[currentSize];
  +            System.arraycopy(validators, 0, newarray, 0, validators.length);
  +            validators = newarray;
  +       }
  +       validators[freeValidatorIndex]=validator;
   	}
  +    
   } // class DOMImplementationImpl
  
  
  
  1.24      +2 -2      xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java
  
  Index: DOMNormalizer.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- DOMNormalizer.java	7 Jan 2003 20:59:52 -0000	1.23
  +++ DOMNormalizer.java	8 Jan 2003 21:21:26 -0000	1.24
  @@ -250,7 +250,7 @@
   				fValidationHandler.endDocument(null);
   				// REVISIT: only validation against XML Schema occurs
   				CoreDOMImplementationImpl.singleton.releaseValidator(
  -					XMLGrammarDescription.XML_SCHEMA);
  +					XMLGrammarDescription.XML_SCHEMA, fValidationHandler);
   				fValidationHandler = null;
   			}
   		}
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org