From: <di...@us...> - 2013-04-13 16:31:48
|
Revision: 18374 http://sourceforge.net/p/exist/code/18374 Author: dizzzz Date: 2013-04-13 16:31:43 +0000 (Sat, 13 Apr 2013) Log Message: ----------- [ignore] refactoring validation code ; not perfect yet Modified Paths: -------------- trunk/eXist/src/org/exist/collections/Collection.java trunk/eXist/src/org/exist/collections/CollectionConfiguration.java trunk/eXist/src/org/exist/storage/BrokerPool.java trunk/eXist/src/org/exist/util/ExistSAXParserFactory.java trunk/eXist/src/org/exist/util/XMLReaderObjectFactory.java trunk/eXist/src/org/exist/util/XMLReaderPool.java Modified: trunk/eXist/src/org/exist/collections/Collection.java =================================================================== --- trunk/eXist/src/org/exist/collections/Collection.java 2013-04-11 22:03:14 UTC (rev 18373) +++ trunk/eXist/src/org/exist/collections/Collection.java 2013-04-13 16:31:43 UTC (rev 18374) @@ -55,6 +55,7 @@ import org.exist.util.MimeType; import org.exist.util.SyntaxException; import org.exist.util.XMLReaderObjectFactory; +import org.exist.util.XMLReaderObjectFactory.VALIDATION_SETTING; import org.exist.util.hashtable.ObjectHashSet; import org.exist.util.serializer.DOMStreamer; import org.exist.xmldb.XmldbURI; @@ -2066,12 +2067,14 @@ } // Get reader from readerpool. final XMLReader reader = broker.getBrokerPool().getParserPool().borrowXMLReader(); + // If Collection configuration exists (try to) get validation mode // and setup reader with this information. if (!validation) { - XMLReaderObjectFactory.setReaderValidationMode(XMLReaderObjectFactory.VALIDATION_DISABLED, reader); + XMLReaderObjectFactory.setReaderValidationMode(XMLReaderObjectFactory.VALIDATION_SETTING.DISABLED, reader); + } else if( colconfig!=null ) { - final int mode = colconfig.getValidationMode(); + final VALIDATION_SETTING mode = colconfig.getValidationMode(); XMLReaderObjectFactory.setReaderValidationMode(mode, reader); } // Return configured reader. @@ -2085,15 +2088,19 @@ if(userReader != null){ return; } + if(info.getIndexer().getDocSize() > POOL_PARSER_THRESHOLD) { return; } + // Get validation mode from static configuration final Configuration config = broker.getConfiguration(); final String optionValue = (String) config.getProperty(XMLReaderObjectFactory.PROPERTY_VALIDATION_MODE); - final int validationMode = XMLReaderObjectFactory.convertValidationMode(optionValue); + final VALIDATION_SETTING validationMode = XMLReaderObjectFactory.convertValidationMode(optionValue); + // Restore default validation mode XMLReaderObjectFactory.setReaderValidationMode(validationMode, reader); + // Return reader broker.getBrokerPool().getParserPool().returnXMLReader(reader); } Modified: trunk/eXist/src/org/exist/collections/CollectionConfiguration.java =================================================================== --- trunk/eXist/src/org/exist/collections/CollectionConfiguration.java 2013-04-11 22:03:14 UTC (rev 18373) +++ trunk/eXist/src/org/exist/collections/CollectionConfiguration.java 2013-04-13 16:31:43 UTC (rev 18374) @@ -94,7 +94,7 @@ private String defCollGroup = null; private String defResGroup = null; - private int validationMode=XMLReaderObjectFactory.VALIDATION_UNKNOWN; + private XMLReaderObjectFactory.VALIDATION_SETTING validationMode=XMLReaderObjectFactory.VALIDATION_SETTING.UNKNOWN; private BrokerPool pool; @@ -203,6 +203,7 @@ "document : " + e.getMessage(), e);} } } + } else if (GROUP_ELEMENT.equals(node.getLocalName())) { final Element elem = (Element) node; String groupOpt = elem.getAttribute(RESOURCE_ATTR); @@ -233,21 +234,24 @@ {LOG.warn("Ilegal value for group in configuration document : " + groupOpt);} } } + } else if (VALIDATION_ELEMENT.equals(node.getLocalName())) { final Element elem = (Element) node; final String mode = elem.getAttribute(VALIDATION_MODE_ATTR); if (mode==null) { LOG.debug("Unable to determine validation mode in "+srcCollectionURI); - validationMode=XMLReaderObjectFactory.VALIDATION_UNKNOWN; + validationMode=XMLReaderObjectFactory.VALIDATION_SETTING.UNKNOWN; } else { LOG.debug(srcCollectionURI + " : Validation mode="+mode); validationMode=XMLReaderObjectFactory.convertValidationMode(mode); } + } else { throwOrLog("Ignored node '" + node.getLocalName() + "' in configuration document", checkOnly); //TODO : throw an exception like above ? -pb } + } else if (node.getNodeType() == Node.ELEMENT_NODE) { throwOrLog("Ignored node '" + node.getLocalName() + "' in namespace '" + node.getNamespaceURI() + "' in configuration document", checkOnly); @@ -290,7 +294,7 @@ return (defResGroup != null) ? defResGroup : user.getPrimaryGroup(); } - public int getValidationMode() { + public XMLReaderObjectFactory.VALIDATION_SETTING getValidationMode() { return validationMode; } Modified: trunk/eXist/src/org/exist/storage/BrokerPool.java =================================================================== --- trunk/eXist/src/org/exist/storage/BrokerPool.java 2013-04-11 22:03:14 UTC (rev 18373) +++ trunk/eXist/src/org/exist/storage/BrokerPool.java 2013-04-13 16:31:43 UTC (rev 18374) @@ -822,6 +822,7 @@ //REFACTOR : construct then... configure xmlReaderPool = new XMLReaderPool(conf, new XMLReaderObjectFactory(this), 5, 0); + //REFACTOR : construct then... configure int bufferSize = conf.getInteger(PROPERTY_COLLECTION_CACHE_SIZE); if(bufferSize == -1) { Modified: trunk/eXist/src/org/exist/util/ExistSAXParserFactory.java =================================================================== --- trunk/eXist/src/org/exist/util/ExistSAXParserFactory.java 2013-04-11 22:03:14 UTC (rev 18373) +++ trunk/eXist/src/org/exist/util/ExistSAXParserFactory.java 2013-04-13 16:31:43 UTC (rev 18374) @@ -35,7 +35,7 @@ private final static Logger LOG = Logger.getLogger(ExistSAXParserFactory.class); - public final static String systemProperty="org.exist.SAXParserFactory"; + public final static String ORG_EXIST_SAXPARSERFACTORY="org.exist.SAXParserFactory"; /** * Get SAXParserFactory instance specified by factory class name. @@ -97,7 +97,8 @@ SAXParserFactory factory = null; - final String config = System.getProperty(systemProperty); + // Get SAXParser configuratin from system + final String config = System.getProperty(ORG_EXIST_SAXPARSERFACTORY); // Get SAXparser factory specified by system property if (config != null) { @@ -107,6 +108,7 @@ // If no factory could be retrieved, create system default property. if (factory == null) { factory = SAXParserFactory.newInstance(); + LOG.debug("Fall back to system default SAXParserFactory " + factory.getClass().getSimpleName()); } return factory; Modified: trunk/eXist/src/org/exist/util/XMLReaderObjectFactory.java =================================================================== --- trunk/eXist/src/org/exist/util/XMLReaderObjectFactory.java 2013-04-11 22:03:14 UTC (rev 18373) +++ trunk/eXist/src/org/exist/util/XMLReaderObjectFactory.java 2013-04-13 16:31:43 UTC (rev 18374) @@ -49,10 +49,9 @@ private final static Logger LOG = Logger.getLogger(XMLReaderObjectFactory.class); - public final static int VALIDATION_UNKNOWN = -1; - public final static int VALIDATION_ENABLED = 0; - public final static int VALIDATION_AUTO = 1; - public final static int VALIDATION_DISABLED = 2; + public static enum VALIDATION_SETTING { + UNKNOWN, ENABLED, AUTO, DISABLED + }; public final static String CONFIGURATION_ENTITY_RESOLVER_ELEMENT_NAME = "entity-resolver"; public final static String CONFIGURATION_CATALOG_ELEMENT_NAME = "catalog"; @@ -98,10 +97,11 @@ // Get validation settings final String option = (String) config.getProperty(PROPERTY_VALIDATION_MODE); - final int validation = convertValidationMode(option); + final VALIDATION_SETTING validation = convertValidationMode(option); final GrammarPool grammarPool = (GrammarPool) config.getProperty(XMLReaderObjectFactory.GRAMMER_POOL); + final eXistXMLCatalogResolver resolver = (eXistXMLCatalogResolver) config.getProperty(CATALOG_RESOLVER); @@ -115,13 +115,13 @@ /** * Create Xmlreader and setup validation */ - public static XMLReader createXmlReader(int validation, GrammarPool grammarPool, + public static XMLReader createXmlReader(VALIDATION_SETTING validation, GrammarPool grammarPool, eXistXMLCatalogResolver resolver) throws ParserConfigurationException, SAXException{ // Create a xmlreader final SAXParserFactory saxFactory = ExistSAXParserFactory.getSAXParserFactory(); - if (validation == VALIDATION_AUTO || validation == VALIDATION_ENABLED){ + if (validation == VALIDATION_SETTING.AUTO || validation == VALIDATION_SETTING.ENABLED){ saxFactory.setValidating(true); } else { saxFactory.setValidating(false); @@ -147,28 +147,28 @@ /** * Convert configuration text (yes,no,true,false,auto) into a magic number. */ - public static int convertValidationMode(String option) { - int validation = VALIDATION_AUTO; + public static VALIDATION_SETTING convertValidationMode(String option) { + VALIDATION_SETTING mode = VALIDATION_SETTING.AUTO; if (option != null) { if ("true".equals(option) || "yes".equals(option)) { - validation = VALIDATION_ENABLED; + mode = VALIDATION_SETTING.ENABLED; } else if ("auto".equals(option)) { - validation = VALIDATION_AUTO; + mode = VALIDATION_SETTING.AUTO; } else { - validation = VALIDATION_DISABLED; + mode = VALIDATION_SETTING.DISABLED; } } - return validation; + return mode; } /** * Setup validation mode of xml reader. */ - public static void setReaderValidationMode(int validation, XMLReader xmlReader) { + public static void setReaderValidationMode(VALIDATION_SETTING validation, XMLReader xmlReader) { - if (validation == VALIDATION_UNKNOWN) { + if (validation == VALIDATION_SETTING.UNKNOWN) { return; } @@ -176,16 +176,16 @@ setReaderFeature(xmlReader, Namespaces.SAX_NAMESPACES_PREFIXES, true); setReaderFeature(xmlReader, Namespaces.SAX_VALIDATION, - validation == VALIDATION_AUTO || validation == VALIDATION_ENABLED); + validation == VALIDATION_SETTING.AUTO || validation == VALIDATION_SETTING.ENABLED); setReaderFeature(xmlReader, Namespaces.SAX_VALIDATION_DYNAMIC, - validation == VALIDATION_AUTO); + validation == VALIDATION_SETTING.AUTO); setReaderFeature(xmlReader, APACHE_FEATURES_VALIDATION_SCHEMA, - (validation == VALIDATION_AUTO || validation == VALIDATION_ENABLED) ); + (validation == VALIDATION_SETTING.AUTO || validation == VALIDATION_SETTING.ENABLED) ); setReaderFeature(xmlReader, APACHE_PROPERTIES_LOAD_EXT_DTD, - (validation == VALIDATION_AUTO || validation == VALIDATION_ENABLED) ); + (validation == VALIDATION_SETTING.AUTO || validation == VALIDATION_SETTING.ENABLED) ); // Attempt to make validation function equal to insert mode //saxFactory.setFeature(Namespaces.SAX_NAMESPACES_PREFIXES, true); Modified: trunk/eXist/src/org/exist/util/XMLReaderPool.java =================================================================== --- trunk/eXist/src/org/exist/util/XMLReaderPool.java 2013-04-11 22:03:14 UTC (rev 18373) +++ trunk/eXist/src/org/exist/util/XMLReaderPool.java 2013-04-13 16:31:43 UTC (rev 18374) @@ -37,14 +37,13 @@ * * @author wolf */ -public class XMLReaderPool extends StackObjectPool { +public class XMLReaderPool extends StackObjectPool<XMLReader> { private final static Logger LOG = Logger.getLogger(XMLReaderPool.class); private final static DefaultHandler2 DUMMY_HANDLER = new DefaultHandler2(); - @SuppressWarnings("unused") - private Configuration config; + private final Configuration config; /** * @@ -53,19 +52,25 @@ * @param maxIdle * @param initIdleCapacity */ - public XMLReaderPool(Configuration config, PoolableObjectFactory factory, int maxIdle, int initIdleCapacity) { + public XMLReaderPool(Configuration config, PoolableObjectFactory<XMLReader> factory, int maxIdle, int initIdleCapacity) { super(factory, maxIdle, initIdleCapacity); this.config = config; } public synchronized XMLReader borrowXMLReader() { try { - return (XMLReader) borrowObject(); + return super.borrowObject(); } catch (final Exception e) { throw new IllegalStateException("error while returning XMLReader: " + e.getMessage(), e ); } } + @Override + public synchronized XMLReader borrowObject() throws Exception { + return borrowXMLReader(); + } + + public synchronized void returnXMLReader(XMLReader reader) { if (reader == null) { return; @@ -84,12 +89,18 @@ grammarPool.clearDTDs(); } - returnObject(reader); + super.returnObject(reader); + } catch (final Exception e) { throw new IllegalStateException("error while returning XMLReader: " + e.getMessage(), e); } } + @Override + public synchronized void returnObject(XMLReader obj) throws Exception { + returnXMLReader(obj); + } + private Object getReaderProperty(XMLReader xmlReader, String propertyName){ Object object = null; @@ -104,4 +115,7 @@ } return object; } + + + } |