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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to