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]