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]